mirror of
https://github.com/apple/swift.git
synced 2025-12-14 20:36:38 +01:00
AST: Refactor HasImplementationOnlyImportsRequest to handle querying for imports with any ImportFlag.
This commit is contained in:
@@ -2389,19 +2389,66 @@ void SourceFile::setImportUsedPreconcurrency(
|
||||
PreconcurrencyImportsUsed.insert(import);
|
||||
}
|
||||
|
||||
bool HasImplementationOnlyImportsRequest::evaluate(Evaluator &evaluator,
|
||||
SourceFile *SF) const {
|
||||
return llvm::any_of(SF->getImports(),
|
||||
[](AttributedImport<ImportedModule> desc) {
|
||||
return desc.options.contains(ImportFlags::ImplementationOnly);
|
||||
});
|
||||
bool HasImportsMatchingFlagRequest::evaluate(Evaluator &evaluator,
|
||||
SourceFile *SF,
|
||||
ImportFlags flag) const {
|
||||
for (auto desc : SF->getImports()) {
|
||||
if (desc.options.contains(flag))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
Optional<bool> HasImportsMatchingFlagRequest::getCachedResult() const {
|
||||
SourceFile *sourceFile = std::get<0>(getStorage());
|
||||
ImportFlags flag = std::get<1>(getStorage());
|
||||
if (sourceFile->validCachedImportOptions.contains(flag))
|
||||
return sourceFile->cachedImportOptions.contains(flag);
|
||||
|
||||
return None;
|
||||
}
|
||||
|
||||
void HasImportsMatchingFlagRequest::cacheResult(bool value) const {
|
||||
SourceFile *sourceFile = std::get<0>(getStorage());
|
||||
ImportFlags flag = std::get<1>(getStorage());
|
||||
|
||||
sourceFile->validCachedImportOptions |= flag;
|
||||
if (value)
|
||||
sourceFile->cachedImportOptions |= flag;
|
||||
}
|
||||
|
||||
void swift::simple_display(llvm::raw_ostream &out, ImportOptions options) {
|
||||
using Flag = std::pair<ImportFlags, StringRef>;
|
||||
Flag possibleFlags[] = {
|
||||
#define FLAG(Name) {ImportFlags::Name, #Name},
|
||||
FLAG(Exported)
|
||||
FLAG(Testable)
|
||||
FLAG(PrivateImport)
|
||||
FLAG(ImplementationOnly)
|
||||
FLAG(SPIAccessControl)
|
||||
FLAG(Preconcurrency)
|
||||
FLAG(WeakLinked)
|
||||
FLAG(Reserved)
|
||||
#undef FLAG
|
||||
};
|
||||
|
||||
auto flagsToPrint = llvm::make_filter_range(
|
||||
possibleFlags, [&](Flag flag) { return options & flag.first; });
|
||||
|
||||
out << "{ ";
|
||||
interleave(
|
||||
flagsToPrint, [&](Flag flag) { out << flag.second; },
|
||||
[&] { out << ", "; });
|
||||
out << " }";
|
||||
}
|
||||
|
||||
bool SourceFile::hasImplementationOnlyImports() const {
|
||||
auto &ctx = getASTContext();
|
||||
auto *mutableThis = const_cast<SourceFile *>(this);
|
||||
return evaluateOrDefault(
|
||||
ctx.evaluator, HasImplementationOnlyImportsRequest{mutableThis}, false);
|
||||
return evaluateOrDefault(ctx.evaluator,
|
||||
HasImportsMatchingFlagRequest{
|
||||
mutableThis, ImportFlags::ImplementationOnly},
|
||||
false);
|
||||
}
|
||||
|
||||
bool SourceFile::hasTestableOrPrivateImport(
|
||||
|
||||
Reference in New Issue
Block a user