[CodeCompletion] Lazily populate 'BasicSourceFileInfo'

This commit is contained in:
Rintaro Ishizaki
2021-02-12 14:06:48 -08:00
parent 34223bcb16
commit bb45b2a822
6 changed files with 83 additions and 41 deletions

View File

@@ -1539,10 +1539,7 @@ void ModuleDecl::collectBasicSourceFileInfo(
llvm::function_ref<void(const BasicSourceFileInfo &)> callback) const {
for (const FileUnit *fileUnit : getFiles()) {
if (const auto *SF = dyn_cast<SourceFile>(fileUnit)) {
BasicSourceFileInfo info;
if (info.populate(SF))
continue;
callback(info);
callback(BasicSourceFileInfo(SF));
} else if (auto *serialized = dyn_cast<LoadedFile>(fileUnit)) {
serialized->collectBasicSourceFileInfo(callback);
}
@@ -1553,7 +1550,7 @@ Fingerprint ModuleDecl::getFingerprint() const {
StableHasher hasher = StableHasher::defaultHasher();
SmallVector<Fingerprint, 16> FPs;
collectBasicSourceFileInfo([&](const BasicSourceFileInfo &bsfi) {
FPs.emplace_back(bsfi.InterfaceHash);
FPs.emplace_back(bsfi.getInterfaceHashIncludingTypeMembers());
});
// Sort the fingerprints lexicographically so we have a stable hash despite