Keep template parameters for pass-through types (#486)

Summary:

Implement the pass-through feature in ClangTypeParser (keeping template parameters for specified types0.

Reviewed By: JakeHillion

Differential Revision: D53815662
This commit is contained in:
Jonathan Haslam 2024-02-15 11:01:46 -08:00 committed by Facebook Community Bot
parent 34a35cd418
commit 1ba742b433
3 changed files with 9 additions and 2 deletions

View File

@ -88,6 +88,7 @@ class ConsumerContext {
std::optional<bool> pic;
const std::vector<std::unique_ptr<ContainerInfo>>& containerInfos;
std::set<std::string_view> typesToStub;
std::set<std::string_view> mustProcessTemplateParams;
private:
clang::Sema* sema = nullptr;
@ -142,6 +143,9 @@ int OIGenerator::generate(clang::tooling::CompilationDatabase& db,
ctx.typesToStub.insert(stubType);
}
for (const auto& cInfo : generatorConfig.passThroughTypes)
ctx.mustProcessTemplateParams.insert(cInfo.typeName);
CreateTypeGraphActionFactory factory{ctx};
clang::tooling::ClangTool tool{db, sourcePaths};
@ -249,6 +253,7 @@ class CreateTypeGraphConsumer : public clang::ASTConsumer {
type_graph::ClangTypeParserOptions opts;
opts.typesToStub = ctx.typesToStub;
opts.mustProcessTemplateParams = ctx.mustProcessTemplateParams;
type_graph::ClangTypeParser parser{ctx.typeGraph, ctx.containerInfos, opts};

View File

@ -211,10 +211,11 @@ Type& ClangTypeParser::enumerateClass(const clang::RecordType& ty) {
ty, kind, std::move(name), std::move(fqName), size, virtuality);
c.setAlign(ast->getTypeAlign(clang::QualType(&ty, 0)) / 8);
if (options_.mustProcessTemplateParams.contains(fqnWithoutTemplateParams))
enumerateClassTemplateParams(ty, c.templateParams);
// enumerateClassParents(ty, c.parents);
enumerateClassMembers(ty, c.members);
// enumerateClassFunctions(type, c.functions);
return c;
}

View File

@ -61,6 +61,7 @@ struct ClangTypeParserOptions {
bool chaseRawPointers = false;
bool readEnumValues = false;
std::set<std::string_view> typesToStub;
std::set<std::string_view> mustProcessTemplateParams;
};
/*