From e3bdc18aeaac3464e8db6cbcf21bb453f269dcd8 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 9 Apr 2015 20:07:54 +0300 Subject: [PATCH] KT-7344 Completion of second type argument in class instantiation does not work #KT-7344 Fixed --- .../completion/KotlinCompletionContributor.kt | 7 +++++-- .../common/typeArgsOrNot/SecondTypeArg2.kt | 8 ++++++++ .../common/typeArgsOrNot/SecondTypeArg3.kt | 7 +++++++ .../common/typeArgsOrNot/SecondTypeArg4.kt | 7 +++++++ .../JSBasicCompletionTestGenerated.java | 18 ++++++++++++++++++ .../JvmBasicCompletionTestGenerated.java | 18 ++++++++++++++++++ ...KotlinCopyPasteConversionTestGenerated.java | 1 + 7 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg2.kt create mode 100644 idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg3.kt create mode 100644 idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg4.kt diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionContributor.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionContributor.kt index e5d5d296eec..15a7121cdcd 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionContributor.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/KotlinCompletionContributor.kt @@ -46,7 +46,6 @@ import org.jetbrains.kotlin.resolve.lazy.BodyResolveMode import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull public class KotlinCompletionContributor : CompletionContributor() { - private val AFTER_NUMBER_LITERAL = psiElement().afterLeafSkipping(psiElement().withText(""), psiElement().withElementType(elementType().oneOf(JetTokens.FLOAT_LITERAL, JetTokens.INTEGER_LITERAL))) private val AFTER_INTEGER_LITERAL_AND_DOT = psiElement().afterLeafSkipping(psiElement().withText("."), psiElement().withElementType(elementType().oneOf(JetTokens.INTEGER_LITERAL))) @@ -286,6 +285,11 @@ public class KotlinCompletionContributor : CompletionContributor() { private fun specialInTypeArgsDummyIdentifier(tokenBefore: PsiElement?): String? { if (tokenBefore == null) return null + + if (tokenBefore.getParentOfType(true) != null) { // already parsed inside type argument list + return CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED // do not insert '$' to not break type argument list parsing + } + val pair = unclosedTypeArgListNameAndBalance(tokenBefore) ?: return null val (nameToken, balance) = pair assert(balance > 0) @@ -308,7 +312,6 @@ public class KotlinCompletionContributor : CompletionContributor() { } private fun unclosedTypeArgListNameAndBalance(tokenBefore: PsiElement): Pair? { - if (tokenBefore.getParentOfType(true) != null) return null // already parsed inside type argument list val nameToken = findCallNameTokenIfInTypeArgs(tokenBefore) ?: return null val pair = unclosedTypeArgListNameAndBalance(nameToken) if (pair == null) { diff --git a/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg2.kt b/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg2.kt new file mode 100644 index 00000000000..797cabce27a --- /dev/null +++ b/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg2.kt @@ -0,0 +1,8 @@ +import java.util.HashMap + +fun foo() { + val v = HashMap> +} + +// EXIST: String +// EXIST: java diff --git a/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg3.kt b/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg3.kt new file mode 100644 index 00000000000..e93dc89c449 --- /dev/null +++ b/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg3.kt @@ -0,0 +1,7 @@ +import java.util.HashMap + +fun foo() { + val v = HashMap +} + +// EXIST: String diff --git a/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg4.kt b/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg4.kt new file mode 100644 index 00000000000..066dc11cc0d --- /dev/null +++ b/idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg4.kt @@ -0,0 +1,7 @@ +import java.util.HashMap + +fun foo() { + val v = HashMap> +} + +// EXIST: String diff --git a/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java index bb17312bc68..293d7220f21 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/JSBasicCompletionTestGenerated.java @@ -1403,6 +1403,24 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg.kt"); doTest(fileName); } + + @TestMetadata("SecondTypeArg2.kt") + public void testSecondTypeArg2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg2.kt"); + doTest(fileName); + } + + @TestMetadata("SecondTypeArg3.kt") + public void testSecondTypeArg3() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg3.kt"); + doTest(fileName); + } + + @TestMetadata("SecondTypeArg4.kt") + public void testSecondTypeArg4() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg4.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/completion/basic/common/visibility") diff --git a/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java index 9884f46e153..101fef43526 100644 --- a/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/completion/JvmBasicCompletionTestGenerated.java @@ -1403,6 +1403,24 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg.kt"); doTest(fileName); } + + @TestMetadata("SecondTypeArg2.kt") + public void testSecondTypeArg2() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg2.kt"); + doTest(fileName); + } + + @TestMetadata("SecondTypeArg3.kt") + public void testSecondTypeArg3() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg3.kt"); + doTest(fileName); + } + + @TestMetadata("SecondTypeArg4.kt") + public void testSecondTypeArg4() throws Exception { + String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/typeArgsOrNot/SecondTypeArg4.kt"); + doTest(fileName); + } } @TestMetadata("idea/testData/completion/basic/common/visibility") diff --git a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java index 78ed2d9f22a..fc94b3e35bc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/conversion/copy/JavaToKotlinCopyPasteConversionTestGenerated.java @@ -17,6 +17,7 @@ package org.jetbrains.kotlin.idea.conversion.copy; import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.InnerTestClasses; import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; import org.jetbrains.kotlin.test.JetTestUtils; import org.jetbrains.kotlin.test.TestMetadata;