22
22
#include " swift/Basic/FileTypes.h"
23
23
#include " swift/Basic/JSONSerialization.h"
24
24
#include " swift/Basic/SourceManager.h"
25
+ #include " swift/Frontend/Frontend.h"
25
26
#include " swift/Frontend/FrontendOptions.h"
26
27
#include " swift/Frontend/ModuleInterfaceSupport.h"
27
28
#include " swift/IDE/SourceEntityWalker.h"
@@ -853,7 +854,8 @@ class ObjcMethodReferenceCollector: public SourceEntityWalker {
853
854
}
854
855
};
855
856
856
- static void createFineModuleTraceFile (const InputFile &input, ModuleDecl *MD) {
857
+ static void createFineModuleTraceFile (CompilerInstance &instance,
858
+ const InputFile &input) {
857
859
StringRef tracePath = input.getFineModuleTracePath ();
858
860
if (tracePath.empty ()) {
859
861
// we basically rely on the passing down of module trace file path
@@ -862,27 +864,8 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
862
864
// specifically.
863
865
return ;
864
866
}
867
+ ModuleDecl *MD = instance.getMainModule ();
865
868
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
- }
886
869
// Write output via atomic append.
887
870
llvm::vfs::OutputConfig config;
888
871
config.setAppend ().setAtomicWrite ();
@@ -893,10 +876,11 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
893
876
return ;
894
877
}
895
878
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
+ });
900
884
901
885
// print this json line.
902
886
std::string stringBuffer;
@@ -915,14 +899,15 @@ static void createFineModuleTraceFile(const InputFile &input, ModuleDecl *MD) {
915
899
}
916
900
}
917
901
918
- bool swift::emitFineModuleTraceIfNeeded (ModuleDecl *mainModule ,
902
+ bool swift::emitFineModuleTraceIfNeeded (CompilerInstance &Instance ,
919
903
const FrontendOptions &opts) {
904
+ ModuleDecl *mainModule = Instance.getMainModule ();
920
905
ASTContext &ctxt = mainModule->getASTContext ();
921
906
assert (!ctxt.hadError () &&
922
907
" We should've already exited earlier if there was an error." );
923
908
924
909
opts.InputsAndOutputs .forEachInput ([&](const InputFile &input) {
925
- createFineModuleTraceFile (input, mainModule );
910
+ createFineModuleTraceFile (Instance, input );
926
911
return true ;
927
912
});
928
913
return false ;
0 commit comments