2222#include " swift/Basic/FileTypes.h"
2323#include " swift/Basic/JSONSerialization.h"
2424#include " swift/Basic/SourceManager.h"
25+ #include " swift/Frontend/Frontend.h"
2526#include " swift/Frontend/FrontendOptions.h"
2627#include " swift/Frontend/ModuleInterfaceSupport.h"
2728#include " swift/IDE/SourceEntityWalker.h"
@@ -853,7 +854,8 @@ class ObjcMethodReferenceCollector: public SourceEntityWalker {
853854 }
854855};
855856
856- static void createFineModuleTraceFile (const InputFile &input, ModuleDecl *MD) {
857+ static void createFineModuleTraceFile (CompilerInstance &instance,
858+ const InputFile &input) {
857859 StringRef tracePath = input.getFineModuleTracePath ();
858860 if (tracePath.empty ()) {
859861 // we basically rely on the passing down of module trace file path
@@ -862,27 +864,8 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
862864 // specifically.
863865 return ;
864866 }
867+ ModuleDecl *MD = instance.getMainModule ();
865868 auto &ctx = MD->getASTContext ();
866- std::vector<SourceFile*> filesToWalk;
867- for (auto *FU : MD->getFiles ()) {
868- if (auto *SF = dyn_cast<SourceFile>(FU)) {
869- switch (SF->Kind ) {
870- case swift::SourceFileKind::Library:
871- case swift::SourceFileKind::Main:
872- case swift::SourceFileKind::MacroExpansion:
873- case swift::SourceFileKind::DefaultArgument:
874- filesToWalk.push_back (SF);
875- LLVM_FALLTHROUGH;
876- case swift::SourceFileKind::SIL:
877- case swift::SourceFileKind::Interface:
878- continue ;
879- }
880- }
881- }
882- // No source files to walk, abort.
883- if (filesToWalk.empty ()) {
884- return ;
885- }
886869 // Write output via atomic append.
887870 llvm::vfs::OutputConfig config;
888871 config.setAppend ().setAtomicWrite ();
@@ -893,10 +876,11 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
893876 return ;
894877 }
895878 ObjcMethodReferenceCollector collector (MD);
896- for (auto *SF: filesToWalk) {
897- collector.setFileBeforeVisiting (SF);
898- collector.walk (*SF);
899- }
879+ instance.forEachFileToTypeCheck ([&](SourceFile& SF) {
880+ collector.setFileBeforeVisiting (&SF);
881+ collector.walk (SF);
882+ return false ;
883+ });
900884
901885 // print this json line.
902886 std::string stringBuffer;
@@ -915,14 +899,15 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
915899 }
916900}
917901
918- bool swift::emitFineModuleTraceIfNeeded (ModuleDecl *mainModule ,
902+ bool swift::emitFineModuleTraceIfNeeded (CompilerInstance &Instance ,
919903 const FrontendOptions &opts) {
904+ ModuleDecl *mainModule = Instance.getMainModule ();
920905 ASTContext &ctxt = mainModule->getASTContext ();
921906 assert (!ctxt.hadError () &&
922907 " We should've already exited earlier if there was an error." );
923908
924909 opts.InputsAndOutputs .forEachInput ([&](const InputFile &input) {
925- createFineModuleTraceFile (input, mainModule );
910+ createFineModuleTraceFile (Instance, input );
926911 return true ;
927912 });
928913 return false ;
0 commit comments