diff --git a/oi/OIGenerator.cpp b/oi/OIGenerator.cpp index 758bc85..9170783 100644 --- a/oi/OIGenerator.cpp +++ b/oi/OIGenerator.cpp @@ -88,6 +88,7 @@ class ConsumerContext { std::optional pic; const std::vector>& containerInfos; std::set typesToStub; + std::set 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}; diff --git a/oi/type_graph/ClangTypeParser.cpp b/oi/type_graph/ClangTypeParser.cpp index c9e52cc..cd9e202 100644 --- a/oi/type_graph/ClangTypeParser.cpp +++ b/oi/type_graph/ClangTypeParser.cpp @@ -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); - enumerateClassTemplateParams(ty, c.templateParams); + if (options_.mustProcessTemplateParams.contains(fqnWithoutTemplateParams)) + enumerateClassTemplateParams(ty, c.templateParams); + // enumerateClassParents(ty, c.parents); enumerateClassMembers(ty, c.members); - // enumerateClassFunctions(type, c.functions); return c; } diff --git a/oi/type_graph/ClangTypeParser.h b/oi/type_graph/ClangTypeParser.h index 53cf8ac..2e126a4 100644 --- a/oi/type_graph/ClangTypeParser.h +++ b/oi/type_graph/ClangTypeParser.h @@ -61,6 +61,7 @@ struct ClangTypeParserOptions { bool chaseRawPointers = false; bool readEnumValues = false; std::set typesToStub; + std::set mustProcessTemplateParams; }; /*