Index: docs/LibASTMatchersReference.html =================================================================== --- docs/LibASTMatchersReference.html +++ docs/LibASTMatchersReference.html @@ -4353,7 +4353,7 @@ For ObjectiveC, given @interface I - (void) f:(int) y; @end - void foo(I *i) { [i f:12] } + void foo(I *i) { [i f:12]; } objcMessageExpr(hasAnyArgument(integerLiteral(equals(12)))) matches [i f:12] @@ -4706,7 +4706,7 @@ For ObjectiveC, given @interface I - (void) f:(int) y; @end - void foo(I *i) { [i f:12] } + void foo(I *i) { [i f:12]; } objcMessageExpr(hasAnyArgument(integerLiteral(equals(12)))) matches [i f:12] @@ -5272,7 +5272,7 @@ Matcher<FunctionDecl>hasAnyParameterMatcher<ParmVarDecl> InnerMatcher -
Matches any parameter of a function declaration.
+
Matches any parameter of a function or ObjC method declaration.
 
 Does not match the 'this' parameter of a method.
 
@@ -5321,7 +5321,7 @@
 
 
 Matcher<FunctionDecl>hasParameterunsigned N, Matcher<ParmVarDecl> InnerMatcher
-
Matches the n'th parameter of a function declaration.
+
Matches the n'th parameter of a function or ObjC method declaration.
 
 Given
   class X { void f(int x) {} };
@@ -5329,6 +5329,12 @@
   matches f(int x) {}
 with hasParameter(...)
   matching int x
+
+For ObjectiveC, given
+  @interface I - (void) f:(int) y; @end
+
+the matcher {@code objcMethodDecl(hasAnyArgument(hasName("y")))}
+matches the declaration of parameter {@code y}.
 
@@ -5659,7 +5665,7 @@ For ObjectiveC, given @interface I - (void) f:(int) y; @end - void foo(I *i) { [i f:12] } + void foo(I *i) { [i f:12]; } objcMessageExpr(hasAnyArgument(integerLiteral(equals(12)))) matches [i f:12]
@@ -5687,6 +5693,20 @@
+Matcher<ObjCMethodDecl>hasAnyParameterMatcher<ParmVarDecl> InnerMatcher +
Matches any parameter of a function or ObjC method declaration.
+
+Does not match the 'this' parameter of a method.
+
+Given
+  class X { void f(int x, int y, int z) {} };
+cxxMethodDecl(hasAnyParameter(hasName("y")))
+  matches f(int x, int y, int z) {}
+with hasAnyParameter(...)
+  matching int y
+
+ + Matcher<OpaqueValueExpr>hasSourceExpressionMatcher<Expr> InnerMatcher
Matches if the cast's source expression
 or opaque value's source expression matches the given matcher.
Index: include/clang/ASTMatchers/ASTMatchers.h
===================================================================
--- include/clang/ASTMatchers/ASTMatchers.h
+++ include/clang/ASTMatchers/ASTMatchers.h
@@ -3466,7 +3466,7 @@
   return Node.requiresZeroInitialization();
 }
 
-/// \brief Matches the n'th parameter of a function declaration.
+/// \brief Matches the n'th parameter of a function or ObjC method declaration.
 ///
 /// Given
 /// \code
@@ -3476,6 +3476,14 @@
 ///   matches f(int x) {}
 /// with hasParameter(...)
 ///   matching int x
+///
+/// For ObjectiveC, given
+/// \code
+///   @interface I - (void) f:(int) y; @end
+/// \endcode
+//
+/// the matcher {@code objcMethodDecl(hasAnyArgument(hasName("y")))}
+/// matches the declaration of parameter {@code y}.
 AST_MATCHER_P2(FunctionDecl, hasParameter,
                unsigned, N, internal::Matcher,
                InnerMatcher) {
@@ -3538,7 +3546,7 @@
   return Matched;
 }
 
-/// \brief Matches any parameter of a function declaration.
+/// \brief Matches any parameter of a function or ObjC method declaration.
 ///
 /// Does not match the 'this' parameter of a method.
 ///
@@ -3550,8 +3558,11 @@
 ///   matches f(int x, int y, int z) {}
 /// with hasAnyParameter(...)
 ///   matching int y
-AST_MATCHER_P(FunctionDecl, hasAnyParameter,
-              internal::Matcher, InnerMatcher) {
+AST_POLYMORPHIC_MATCHER_P(hasAnyParameter,
+                          AST_POLYMORPHIC_SUPPORTED_TYPES(FunctionDecl,
+                                                          ObjCMethodDecl),
+                          internal::Matcher,
+                          InnerMatcher) {
   return matchesFirstInPointerRange(InnerMatcher, Node.param_begin(),
                                     Node.param_end(), Finder, Builder);
 }
Index: unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
===================================================================
--- unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
+++ unittests/ASTMatchers/ASTMatchersTraversalTest.cpp
@@ -568,6 +568,8 @@
   EXPECT_TRUE(matches(
     "class Y {}; class X { void x(Y y, X x) {} };",
     cxxMethodDecl(hasAnyParameter(hasType(recordDecl(hasName("X")))))));
+  EXPECT_TRUE(matches("@interface I -(void)f:(int) x; @end",
+                      objcMethodDecl(hasAnyParameter(hasName("x")))));
 }
 
 TEST(Returns, MatchesReturnTypes) {