fix Common.testInSecondaryConstructorDelegationCall completion test: don't insert $ which breaks parsing of argument list and causes the block to be detached from the constructor itself

This commit is contained in:
Dmitry Jemerov
2015-04-27 17:35:32 +02:00
parent d00b4ca27a
commit b98e2513f2
@@ -82,6 +82,7 @@ public class KotlinCompletionContributor : CompletionContributor() {
else -> specialExtensionReceiverDummyIdentifier(tokenBefore)
?: specialInTypeArgsDummyIdentifier(tokenBefore)
?: specialInParameterListDummyIdentifier(tokenBefore)
?: specialInArgumentListDummyIdentifier(tokenBefore)
?: DEFAULT_DUMMY_IDENTIFIER
}
context.setDummyIdentifier(dummyIdentifier)
@@ -368,6 +369,15 @@ public class KotlinCompletionContributor : CompletionContributor() {
return null
}
private fun specialInArgumentListDummyIdentifier(tokenBefore: PsiElement?): String? {
// If we insert $ in the argument list of a delegation specifier, this will break parsing
// and the following block will not be attached as a body to the constructor. Therefore
// we need to use a regular identifier.
val argumentList = tokenBefore?.getNonStrictParentOfType<JetValueArgumentList>() ?: return null
if (argumentList.getParent() is JetConstructorDelegationCall) return CompletionUtil.DUMMY_IDENTIFIER_TRIMMED
return null
}
private fun countParenthesisBalance(at: PsiElement, container: PsiElement): Int {
val stopAt = container.prevLeaf()
var current: PsiElement? = at