@@ -30,29 +30,10 @@ namespace fs = std::filesystem;
3030
3131namespace {
3232
33- class ImplicitMemberDefiner
34- : public clang::RecursiveASTVisitor<ImplicitMemberDefiner > {
33+ class RuleUsageCollector
34+ : public clang::RecursiveASTVisitor<RuleUsageCollector > {
3535public:
36- explicit ImplicitMemberDefiner (clang::Sema &sema) : sema_(sema) {}
37-
38- bool shouldVisitTemplateInstantiations () const { return true ; }
39-
40- bool VisitCXXRecordDecl (clang::CXXRecordDecl *decl) {
41- if (decl->isThisDeclarationADefinition () && !decl->isDependentType () &&
42- IsConvertibleCXXRecordDecl (decl) &&
43- (decl->isStruct () || decl->isClass ()) && !decl->isAbstract ()) {
44- DefineImplicitMembers (sema_, decl);
45- }
46- return true ;
47- }
48-
49- private:
50- clang::Sema &sema_;
51- };
52-
53- class KeyCollector : public clang ::RecursiveASTVisitor<KeyCollector> {
54- public:
55- KeyCollector (clang::Sema &sema, std::set<fs::path> &paths)
36+ RuleUsageCollector (clang::Sema &sema, std::set<fs::path> &paths)
5637 : ctx_(sema.Context), sema_(sema), paths_(paths) {}
5738
5839 bool shouldVisitTemplateInstantiations () const { return true ; }
@@ -67,6 +48,15 @@ class KeyCollector : public clang::RecursiveASTVisitor<KeyCollector> {
6748 return RecursiveASTVisitor::TraverseDecl (decl);
6849 }
6950
51+ bool VisitCXXRecordDecl (clang::CXXRecordDecl *decl) {
52+ if (decl->isThisDeclarationADefinition () && !decl->isDependentType () &&
53+ IsConvertibleCXXRecordDecl (decl) &&
54+ (decl->isStruct () || decl->isClass ()) && !decl->isAbstract ()) {
55+ DefineImplicitMembers (sema_, decl);
56+ }
57+ return true ;
58+ }
59+
7060 bool VisitExpr (clang::Expr *expr) {
7161 if (expr->isTypeDependent () || expr->isValueDependent ()) {
7262 return true ;
@@ -440,12 +430,7 @@ void PragmaHandler::HandlePragma(clang::Preprocessor &PP,
440430 }
441431 ctx.setTraversalScope (user_decls);
442432 std::set<fs::path> selected;
443- ImplicitMemberDefiner definer (CI_ .getSema ());
444- for (auto *decl : user_decls) {
445- definer.TraverseDecl (decl);
446- }
447- CI_ .getSema ().PerformPendingInstantiations ();
448- KeyCollector collector (CI_ .getSema (), selected);
433+ RuleUsageCollector collector (CI_ .getSema (), selected);
449434 for (auto *decl : user_decls) {
450435 collector.TraverseDecl (decl);
451436 }
0 commit comments