[interop][SwiftToCxx] Annotate emitted declarations with Clang's external_source_symbol attribute

Each emitted declaration is annotated with the external_source_symbol with its own USR, to allow Clang's indexer to recognize this declaration as a Swift declaration with a specific USR
This commit is contained in:
Alex Lorenz
2023-01-12 12:14:26 -08:00
parent 1d7c0ee7a5
commit 3b3d6c825a
58 changed files with 481 additions and 401 deletions

View File

@@ -905,6 +905,9 @@ ClangRepresentation DeclAndTypeClangFunctionPrinter::printFunctionSignature(
os << " const";
if (modifiers.isNoexcept)
os << " noexcept";
if (modifiers.hasSymbolUSR)
ClangSyntaxPrinter(os).printSymbolUSRAttribute(
modifiers.symbolUSROverride ? modifiers.symbolUSROverride : FD);
return resultingRepresentation;
}
@@ -1311,6 +1314,7 @@ void DeclAndTypeClangFunctionPrinter::printCxxMethod(
isa<FuncDecl>(FD) ? cast<FuncDecl>(FD)->isMutating() : false;
modifiers.isConst =
!isa<ClassDecl>(typeDeclContext) && !isMutating && !isConstructor;
modifiers.hasSymbolUSR = !isDefinition;
auto result = printFunctionSignature(
FD, signature,
isConstructor ? getConstructorName(FD)
@@ -1375,6 +1379,8 @@ void DeclAndTypeClangFunctionPrinter::printCxxPropertyAccessorMethod(
modifiers.isInline = true;
modifiers.isConst =
!isStatic && accessor->isGetter() && !isa<ClassDecl>(typeDeclContext);
modifiers.hasSymbolUSR = !isDefinition;
modifiers.symbolUSROverride = accessor->getStorage();
auto result = printFunctionSignature(
accessor, signature, remapPropertyName(accessor, resultTy), resultTy,
FunctionSignatureKind::CxxInlineThunk, modifiers);