When in code-completion, skip obj-c method bodies for speed up.

llvm-svn: 122781
diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp
index d25cc11..28b140e 100644
--- a/clang/lib/Parse/ParseStmt.cpp
+++ b/clang/lib/Parse/ParseStmt.cpp
@@ -1466,18 +1466,8 @@
   assert(Tok.is(tok::l_brace));
   SourceLocation LBraceLoc = Tok.getLocation();
 
-  // When in code-completion, skip parsing for all function bodies unless
-  // the body contains the code-completion point.
-  if (PP.isCodeCompletionEnabled()) {
-    TentativeParsingAction PA(*this);
-    ConsumeBrace();
-    if (SkipUntil(tok::r_brace, /*StopAtSemi=*/false, /*DontConsume=*/false,
-                  /*StopAtCodeCompletion=*/true)) {
-      PA.Commit();
-      return Actions.ActOnFinishFunctionBody(Decl, 0);
-    }
-    PA.Revert();
-  }
+  if (MaybeSkipFunctionBodyForCodeCompletion())
+    return Actions.ActOnFinishFunctionBody(Decl, 0);
 
   PrettyDeclStackTraceEntry CrashInfo(Actions, Decl, LBraceLoc,
                                       "parsing function body");
@@ -1511,6 +1501,9 @@
   if (Tok.is(tok::colon))
     ParseConstructorInitializer(Decl);
 
+  if (MaybeSkipFunctionBodyForCodeCompletion())
+    return Actions.ActOnFinishFunctionBody(Decl, 0);
+
   SourceLocation LBraceLoc = Tok.getLocation();
   StmtResult FnBody(ParseCXXTryBlockCommon(TryLoc));
   // If we failed to parse the try-catch, we just give the function an empty
@@ -1522,6 +1515,26 @@
   return Actions.ActOnFinishFunctionBody(Decl, FnBody.take());
 }
 
+bool Parser::MaybeSkipFunctionBodyForCodeCompletion() {
+  assert(Tok.is(tok::l_brace));
+
+  if (!PP.isCodeCompletionEnabled())
+    return false;
+
+  // We're in code-completion mode. Skip parsing for all function bodies unless
+  // the body contains the code-completion point.
+  TentativeParsingAction PA(*this);
+  ConsumeBrace();
+  if (SkipUntil(tok::r_brace, /*StopAtSemi=*/false, /*DontConsume=*/false,
+                /*StopAtCodeCompletion=*/true)) {
+    PA.Commit();
+    return true;
+  }
+
+  PA.Revert();
+  return false;
+}
+
 /// ParseCXXTryBlock - Parse a C++ try-block.
 ///
 ///       try-block: