//===--------------- MockingFineGraonedDependencyGraphs.cpp ---------------===// // // This source file is part of the Swift.org open source project // // Copyright (c) 2014 - 2020 Apple Inc. and the Swift project authors // Licensed under Apache License v2.0 with Runtime Library Exception // // See https://swift.org/LICENSE.txt for license information // See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors // //===----------------------------------------------------------------------===// #include "MockingFineGrainedDependencyGraphs.h" #include "swift/AST/AbstractSourceFileDepGraphFactory.h" #include "swift/AST/DiagnosticEngine.h" #include "swift/Basic/ReferenceDependencyKeys.h" #include "swift/Basic/SourceManager.h" #include #include using namespace swift; using namespace fine_grained_dependencies; using namespace mocking_fine_grained_dependency_graphs; void mocking_fine_grained_dependency_graphs::simulateLoad( ModuleDepGraph &g, const driver::Job *cmd, const DependencyDescriptions &dependencyDescriptions, StringRef interfaceHashIfNonEmpty, const bool includePrivateDeps, const bool hadCompilationError) { const auto changes = getChangesForSimulatedLoad( g, cmd, dependencyDescriptions, interfaceHashIfNonEmpty, includePrivateDeps, hadCompilationError); assert(changes && "simulated load should always succeed"); } ModuleDepGraph::Changes mocking_fine_grained_dependency_graphs::getChangesForSimulatedLoad( ModuleDepGraph &g, const driver::Job *cmd, const DependencyDescriptions &dependencyDescriptions, StringRef interfaceHashIfNonEmpty, const bool includePrivateDeps, const bool hadCompilationError) { StringRef swiftDeps = cmd->getOutput().getAdditionalOutputForType(file_types::TY_SwiftDeps); assert(!swiftDeps.empty()); StringRef interfaceHash = interfaceHashIfNonEmpty.empty() ? swiftDeps : interfaceHashIfNonEmpty; SourceManager sm; DiagnosticEngine diags(sm); auto sfdg = UnitTestSourceFileDepGraphFactory( includePrivateDeps, hadCompilationError, swiftDeps, interfaceHash, g.emitFineGrainedDependencyDotFileAfterEveryImport, dependencyDescriptions, diags) .construct(); return g.loadFromSourceFileDepGraph(cmd, sfdg, diags); } std::vector mocking_fine_grained_dependency_graphs::simulateReload( ModuleDepGraph &g, const driver::Job *cmd, const DependencyDescriptions &dependencyDescriptions, StringRef interfaceHashIfNonEmpty, const bool includePrivateDeps, const bool hadCompilationError) { const auto changedNodes = getChangesForSimulatedLoad( g, cmd, dependencyDescriptions, interfaceHashIfNonEmpty, includePrivateDeps, hadCompilationError); if (!changedNodes) return g.getAllJobs(); return g.findJobsToRecompileWhenNodesChange(changedNodes.getValue()); } LLVM_ATTRIBUTE_UNUSED std::vector mocking_fine_grained_dependency_graphs::printJobsForDebugging( const std::vector &jobs) { llvm::errs() << "\nprintForDebugging: "; for (auto *j : jobs) { const auto swiftDeps = j->getOutput().getAdditionalOutputForType(file_types::TY_SwiftDeps); assert(!swiftDeps.empty()); llvm::errs() << "job" << swiftDeps << " "; } llvm::errs() << "\n"; return jobs; }