diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index bd2f88abce3868e890a5af0d2564b2f185a0b634..fcdfd547f111542d7af0018bba766b38af728684 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -2718,7 +2718,38 @@ bool Parser::parseObjCSelectorExpression(ExpressionAST *&)
     /*unsigned selector_token = */consumeToken();
     unsigned lparen_token = 0, rparen_token = 0;
     match(T_LPAREN, &lparen_token);
-    parseObjCMethodSignature();
+
+    if (LA() == T_COLON || LA() == T_COLON_COLON) {
+        consumeToken();
+
+        if (LA() == T_RPAREN) {
+            _translationUnit->warning(cursor(),
+                                      "error expended a selector");
+            match(T_RPAREN, &rparen_token);
+            return true;
+        }
+    } else if (lookAtObjCSelector()) {
+        unsigned start = cursor();
+        consumeToken();
+        if (LA() != T_RPAREN)
+            rewind(start);
+        else {
+            match(T_RPAREN, &rparen_token);
+            return true;
+        }
+    }
+
+    while (lookAtObjCSelector()) {
+        parseObjCSelector();
+        if (LA() == T_COLON || LA() == T_COLON_COLON)
+            consumeToken();
+        else {
+            _translationUnit->error(cursor(),
+                                    "expected :");
+            break;
+        }
+    }
+
     match(T_RPAREN, &rparen_token);
     return true;
 }