[CodeCompletion] Fix incorrect Objective-C block parameter formatting

This commit fixes an incorrectly formatted Objective-C block parameter
placeholder in a code completion result. The incorrect parameter had a
redundant leading parenthesis.

rdar://25224416

llvm-svn: 287771
This commit is contained in:
Alex Lorenz 2016-11-23 16:28:34 +00:00
parent 4ad5def9b0
commit 01bcfc1414
2 changed files with 27 additions and 4 deletions

View File

@ -2264,9 +2264,13 @@ static std::string FormatFunctionParameter(const PrintingPolicy &Policy,
QualType Type = Param->getType().getUnqualifiedType();
if (ObjCMethodParam) {
Result = "(" + formatObjCParamQualifiers(Param->getObjCDeclQualifier(),
Type);
Result += Type.getAsString(Policy) + Result + ")";
Result = Type.getAsString(Policy);
std::string Quals =
formatObjCParamQualifiers(Param->getObjCDeclQualifier(), Type);
if (!Quals.empty())
Result = "(" + Quals + " " + Result + ")";
if (Result.back() != ')')
Result += " ";
if (Param->getIdentifier())
Result += Param->getIdentifier()->getName();
} else {
@ -2275,7 +2279,7 @@ static std::string FormatFunctionParameter(const PrintingPolicy &Policy,
return Result;
}
// We have the function prototype behind the block pointer type, as it was
// written in the source.
return formatBlockPlaceholder(Policy, Param, Block, BlockProto,

View File

@ -51,3 +51,22 @@ typedef int (^BarBlock)(int *);
//CHECK-CC1-NEXT: ObjCPropertyDecl:{ResultType int}{TypedText performB}{LeftParen (}{Placeholder int x}{Comma , }{Placeholder int y}{RightParen )} (35)
@end
// rdar://25224416
@interface NoQualifierParens
@property(copy) void (^blockProperty)(void);
@property BarBlock blockProperty2;
@end
void noQualifierParens(NoQualifierParens *f) {
[f setBlockProperty: ^{}];
}
// RUN: c-index-test -code-completion-at=%s:65:6 %s | FileCheck -check-prefix=CHECK-CC2 %s
//CHECK-CC2: ObjCInstanceMethodDecl:{ResultType void (^)(void)}{TypedText blockProperty} (35)
//CHECK-CC2-NEXT: ObjCInstanceMethodDecl:{ResultType BarBlock}{TypedText blockProperty2} (35)
//CHECK-CC2-NEXT: ObjCInstanceMethodDecl:{ResultType void}{TypedText setBlockProperty2:}{Placeholder BarBlock blockProperty2} (35)
//CHECK-CC2-NEXT: ObjCInstanceMethodDecl:{ResultType void}{TypedText setBlockProperty:}{Placeholder void (^)(void)blockProperty} (35)