18 : Inserter(Inserter) {}
23 StringRef FileNameRef,
bool IsAngled,
24 CharSourceRange FileNameRange,
26 StringRef , StringRef ,
27 const Module * )
override {
28 Inserter->AddInclude(FileNameRef, IsAngled, HashLocation,
29 FileNameRange.getEnd());
39 : SourceMgr(SourceMgr), LangOpts(LangOpts), Style(Style) {}
44 return llvm::make_unique<IncludeInserterCallback>(
this);
47 llvm::Optional<FixItHint>
52 if (!InsertedHeaders[FileID].insert(Header).second)
55 if (IncludeSorterByFile.find(FileID) == IncludeSorterByFile.end()) {
58 IncludeSorterByFile.insert(std::make_pair(
60 llvm::make_unique<IncludeSorter>(
61 &SourceMgr, &LangOpts, FileID,
62 SourceMgr.getFilename(SourceMgr.getLocForStartOfFile(FileID)),
65 return IncludeSorterByFile[FileID]->CreateIncludeInsertion(Header, IsAngled);
68 void IncludeInserter::AddInclude(StringRef file_name,
bool IsAngled,
69 SourceLocation HashLocation,
70 SourceLocation end_location) {
71 FileID FileID = SourceMgr.getFileID(HashLocation);
72 if (IncludeSorterByFile.find(FileID) == IncludeSorterByFile.end()) {
73 IncludeSorterByFile.insert(std::make_pair(
74 FileID, llvm::make_unique<IncludeSorter>(
75 &SourceMgr, &LangOpts, FileID,
76 SourceMgr.getFilename(HashLocation), Style)));
78 IncludeSorterByFile[FileID]->AddInclude(file_name, IsAngled, HashLocation,
void InclusionDirective(SourceLocation HashLocation, const Token &, StringRef FileNameRef, bool IsAngled, CharSourceRange FileNameRange, const FileEntry *, StringRef, StringRef, const Module *) override
IncludeInserter(const SourceManager &SourceMgr, const LangOptions &LangOpts, IncludeSorter::IncludeStyle Style)
llvm::Optional< FixItHint > CreateIncludeInsertion(FileID FileID, llvm::StringRef Header, bool IsAngled)
IncludeInserterCallback(IncludeInserter *Inserter)
bool IsAngled
true if this was an include with angle brackets
std::unique_ptr< PPCallbacks > CreatePPCallbacks()