steveire created this revision.
steveire added a reviewer: aaron.ballman.
Herald added a subscriber: cfe-commits.

Repository:
  rC Clang

https://reviews.llvm.org/D54404

Files:
  lib/ASTMatchers/Dynamic/Registry.cpp
  unittests/ASTMatchers/Dynamic/RegistryTest.cpp


Index: unittests/ASTMatchers/Dynamic/RegistryTest.cpp
===================================================================
--- unittests/ASTMatchers/Dynamic/RegistryTest.cpp
+++ unittests/ASTMatchers/Dynamic/RegistryTest.cpp
@@ -579,6 +579,8 @@
   EXPECT_TRUE(!Contains(Matchers, "functionDecl()"));
 
   EXPECT_TRUE(Contains(Matchers, "cxxMethodDecl()"));
+
+  EXPECT_TRUE(!Contains(Matchers, "has()"));
 }
 
 } // end anonymous namespace
Index: lib/ASTMatchers/Dynamic/Registry.cpp
===================================================================
--- lib/ASTMatchers/Dynamic/Registry.cpp
+++ lib/ASTMatchers/Dynamic/Registry.cpp
@@ -601,15 +601,54 @@
 Registry::getMatchingMatchers(ast_type_traits::ASTNodeKind StaticType) {
   std::vector<MatchingMatcher> Result;
 
+  static std::vector<StringRef> excludedMatchers{
+      "allOf",
+      "anyOf",
+      "anything",
+      "containsDeclaration",
+      "eachOf",
+      "equalsNode",
+      "findAll",
+      "forEach",
+      "forEachConstructorInitializer",
+      "forEachDescendant",
+      "forEachOverridden",
+      "forEachSwitchCase",
+      "has",
+      "hasAncestor",
+      "hasAnyArgument",
+      "hasAnyConstructorInitializer",
+      "hasAnyDeclaration",
+      "hasAnyName",
+      "hasAnyParameter",
+      "hasAnySelector",
+      "hasAnySubstatement",
+      "hasAnyTemplateArgument",
+      "hasAnyUsingShadowDecl",
+      "hasArgumentOfType",
+      "hasDescendant",
+      "hasEitherOperand",
+      "hasMethod",
+      "hasParent",
+      "isExpansionInFileMatching",
+      "isSameOrDerivedFrom",
+      "matchesName",
+      "matchesSelector",
+      "unless"};
+  assert(std::is_sorted(excludedMatchers.begin(), excludedMatchers.end()));
+
   std::vector<ArgKind> AcceptedTypes;
   AcceptedTypes.push_back(StaticType);
 
   processAcceptableMatchers(
       AcceptedTypes, [&Result](StringRef Name, const MatcherDescriptor 
&Matcher,
                                std::set<ASTNodeKind> &RetKinds,
                                std::vector<std::vector<ArgKind>> ArgsKinds,
                                unsigned MaxSpecificity) {
-        Result.emplace_back((Name + "()").str());
+        if (!std::binary_search(excludedMatchers.begin(),
+                                excludedMatchers.end(), Name)) {
+          Result.emplace_back((Name + "()").str());
+        }
       });
 
   return Result;


Index: unittests/ASTMatchers/Dynamic/RegistryTest.cpp
===================================================================
--- unittests/ASTMatchers/Dynamic/RegistryTest.cpp
+++ unittests/ASTMatchers/Dynamic/RegistryTest.cpp
@@ -579,6 +579,8 @@
   EXPECT_TRUE(!Contains(Matchers, "functionDecl()"));
 
   EXPECT_TRUE(Contains(Matchers, "cxxMethodDecl()"));
+
+  EXPECT_TRUE(!Contains(Matchers, "has()"));
 }
 
 } // end anonymous namespace
Index: lib/ASTMatchers/Dynamic/Registry.cpp
===================================================================
--- lib/ASTMatchers/Dynamic/Registry.cpp
+++ lib/ASTMatchers/Dynamic/Registry.cpp
@@ -601,15 +601,54 @@
 Registry::getMatchingMatchers(ast_type_traits::ASTNodeKind StaticType) {
   std::vector<MatchingMatcher> Result;
 
+  static std::vector<StringRef> excludedMatchers{
+      "allOf",
+      "anyOf",
+      "anything",
+      "containsDeclaration",
+      "eachOf",
+      "equalsNode",
+      "findAll",
+      "forEach",
+      "forEachConstructorInitializer",
+      "forEachDescendant",
+      "forEachOverridden",
+      "forEachSwitchCase",
+      "has",
+      "hasAncestor",
+      "hasAnyArgument",
+      "hasAnyConstructorInitializer",
+      "hasAnyDeclaration",
+      "hasAnyName",
+      "hasAnyParameter",
+      "hasAnySelector",
+      "hasAnySubstatement",
+      "hasAnyTemplateArgument",
+      "hasAnyUsingShadowDecl",
+      "hasArgumentOfType",
+      "hasDescendant",
+      "hasEitherOperand",
+      "hasMethod",
+      "hasParent",
+      "isExpansionInFileMatching",
+      "isSameOrDerivedFrom",
+      "matchesName",
+      "matchesSelector",
+      "unless"};
+  assert(std::is_sorted(excludedMatchers.begin(), excludedMatchers.end()));
+
   std::vector<ArgKind> AcceptedTypes;
   AcceptedTypes.push_back(StaticType);
 
   processAcceptableMatchers(
       AcceptedTypes, [&Result](StringRef Name, const MatcherDescriptor &Matcher,
                                std::set<ASTNodeKind> &RetKinds,
                                std::vector<std::vector<ArgKind>> ArgsKinds,
                                unsigned MaxSpecificity) {
-        Result.emplace_back((Name + "()").str());
+        if (!std::binary_search(excludedMatchers.begin(),
+                                excludedMatchers.end(), Name)) {
+          Result.emplace_back((Name + "()").str());
+        }
       });
 
   return Result;
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to