Skip to content

Commit fff4beb

Browse files
committed
AST: Clarify SourceFile's existing missing imports record.
In anticipation of adding a new kind of missing import record to `SourceFile`, clarify the purpose of the existing "missing imports" record with more specific naming and documentation.
1 parent 5424ddd commit fff4beb

File tree

6 files changed

+30
-18
lines changed

6 files changed

+30
-18
lines changed

include/swift/AST/FileUnit.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -273,8 +273,8 @@ class FileUnit : public DeclContext, public ASTAllocated<FileUnit> {
273273
ModuleDecl::ImportFilter filter) const {}
274274

275275
/// Lists modules that are not imported from this file and used in API.
276-
virtual void
277-
getMissingImportedModules(SmallVectorImpl<ImportedModule> &imports) const {}
276+
virtual void getImplicitImportsForModuleInterface(
277+
SmallVectorImpl<ImportedModule> &imports) const {}
278278

279279
/// \see ModuleDecl::getImportedModulesForLookup
280280
virtual void getImportedModulesForLookup(

include/swift/AST/Module.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,8 +1034,8 @@ class ModuleDecl
10341034
ImportFilter filter = ImportFilterKind::Exported) const;
10351035

10361036
/// Lists modules that are not imported from a file and used in API.
1037-
void
1038-
getMissingImportedModules(SmallVectorImpl<ImportedModule> &imports) const;
1037+
void getImplicitImportsForModuleInterface(
1038+
SmallVectorImpl<ImportedModule> &imports) const;
10391039

10401040
/// Looks up which modules are imported by this module, ignoring any that
10411041
/// won't contain top-level decls.

include/swift/AST/SourceFile.h

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,10 @@ class SourceFile final : public FileUnit {
159159
/// The highest access level of declarations referencing each import.
160160
llvm::DenseMap<const ModuleDecl *, AccessLevel> ImportsUseAccessLevel;
161161

162+
/// Imports that should be printed in the module interface even though they
163+
/// were not written in the source file.
164+
llvm::SmallDenseSet<ImportedModule> ImplicitImportsForModuleInterface;
165+
162166
/// A unique identifier representing this file; used to mark private decls
163167
/// within the file to keep them from conflicting with other files in the
164168
/// same module.
@@ -510,12 +514,20 @@ class SourceFile final : public FileUnit {
510514

511515
SWIFT_DEBUG_DUMPER(dumpSeparatelyImportedOverlays());
512516

513-
llvm::SmallDenseSet<ImportedModule> MissingImportedModules;
514-
515-
void addMissingImportedModule(ImportedModule module) const {
516-
const_cast<SourceFile *>(this)->MissingImportedModules.insert(module);
517+
/// Record an import that should be printed in the module interface even
518+
/// though it was not written in the source file. These imports are needed in
519+
/// Swift 5 mode to preserve the integrity of swiftinterface files when code
520+
/// publicly use declarations from modules that were \c `@_implementationOnly`
521+
/// imported in other source files.
522+
void addImplicitImportForModuleInterface(ImportedModule module) {
523+
ImplicitImportsForModuleInterface.insert(module);
517524
}
518525

526+
/// Gather implicit imports that should printed in swiftinterfaces for
527+
/// compatibility with code in some Swift 5 modules.
528+
void getImplicitImportsForModuleInterface(
529+
SmallVectorImpl<ImportedModule> &imports) const override;
530+
519531
/// Record the source range info for a parsed \c #if clause.
520532
void recordIfConfigClauseRangeInfo(const IfConfigClauseRangeInfo &range);
521533

@@ -527,10 +539,10 @@ class SourceFile final : public FileUnit {
527539
ArrayRef<IfConfigClauseRangeInfo>
528540
getIfConfigClausesWithin(SourceRange outer) const;
529541

530-
void getMissingImportedModules(
531-
SmallVectorImpl<ImportedModule> &imports) const override;
532-
542+
/// Record visible declarations for use in code completion and refactoring.
533543
void cacheVisibleDecls(SmallVectorImpl<ValueDecl *> &&globals) const;
544+
545+
/// Retrieve visible declarations for use in code completion and refactoring.
534546
const SmallVectorImpl<ValueDecl *> &getCachedVisibleDecls() const;
535547

536548
virtual void lookupValue(DeclName name, NLKind lookupKind,

lib/AST/Module.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1720,9 +1720,9 @@ void ModuleDecl::getImportedModules(SmallVectorImpl<ImportedModule> &modules,
17201720
FORWARD(getImportedModules, (modules, filter));
17211721
}
17221722

1723-
void ModuleDecl::getMissingImportedModules(
1723+
void ModuleDecl::getImplicitImportsForModuleInterface(
17241724
SmallVectorImpl<ImportedModule> &imports) const {
1725-
FORWARD(getMissingImportedModules, (imports));
1725+
FORWARD(getImplicitImportsForModuleInterface, (imports));
17261726
}
17271727

17281728
const llvm::DenseMap<const clang::Module *, ModuleDecl *> &
@@ -1811,9 +1811,9 @@ SourceFile::getImportedModules(SmallVectorImpl<ImportedModule> &modules,
18111811
}
18121812
}
18131813

1814-
void SourceFile::getMissingImportedModules(
1814+
void SourceFile::getImplicitImportsForModuleInterface(
18151815
SmallVectorImpl<ImportedModule> &modules) const {
1816-
for (auto module : MissingImportedModules)
1816+
for (auto module : ImplicitImportsForModuleInterface)
18171817
modules.push_back(module);
18181818
}
18191819

lib/Frontend/ModuleInterfaceSupport.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ static void printToolVersionAndFlagsComment(raw_ostream &out,
8787

8888
SmallVector<ImportedModule> imports;
8989
M->getImportedModules(imports, filter);
90-
M->getMissingImportedModules(imports);
90+
M->getImplicitImportsForModuleInterface(imports);
9191

9292
for (ImportedModule import: imports) {
9393
StringRef importedName = import.importedModule->getNameStr();
@@ -337,7 +337,7 @@ static void printImports(raw_ostream &out,
337337
M->getImportedModules(allImports, allImportFilter);
338338

339339
if (Opts.PrintMissingImports)
340-
M->getMissingImportedModules(allImports);
340+
M->getImplicitImportsForModuleInterface(allImports);
341341

342342
ImportedModule::removeDuplicates(allImports);
343343
diagnoseScopedImports(ctx.Diags, allImports);

lib/Sema/ResilienceDiagnostics.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ static bool addMissingImport(SourceLoc loc, const Decl *D,
4545
// API.
4646
auto missingImport = ImportedModule(ImportPath::Access(),
4747
const_cast<ModuleDecl *>(M));
48-
SF->addMissingImportedModule(missingImport);
48+
SF->addImplicitImportForModuleInterface(missingImport);
4949
ctx.Diags.diagnose(loc, diag::missing_import_inserted, M->getName());
5050
return true;
5151
}

0 commit comments

Comments
 (0)