diff --git a/idea/idea-completion/testData/basic/common/SecondTypeArg.kt b/idea/idea-completion/testData/basic/common/SecondTypeArg.kt new file mode 100644 index 00000000000..61d404ee73e --- /dev/null +++ b/idea/idea-completion/testData/basic/common/SecondTypeArg.kt @@ -0,0 +1,5 @@ +// FIR_COMPARISON + +fun , S>.foo() {} + +// EXIST: S diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java index 1469defe3b5..fcead5603f1 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JSBasicCompletionTestGenerated.java @@ -651,6 +651,11 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes runTest("idea/idea-completion/testData/basic/common/RecieverMembersFromExtFun.kt"); } + @TestMetadata("SecondTypeArg.kt") + public void testSecondTypeArg() throws Exception { + runTest("idea/idea-completion/testData/basic/common/SecondTypeArg.kt"); + } + @TestMetadata("SetPrefixForProperties.kt") public void testSetPrefixForProperties() throws Exception { runTest("idea/idea-completion/testData/basic/common/SetPrefixForProperties.kt"); diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java index b3d3a766fe4..9353dd1b8f8 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/JvmBasicCompletionTestGenerated.java @@ -651,6 +651,11 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT runTest("idea/idea-completion/testData/basic/common/RecieverMembersFromExtFun.kt"); } + @TestMetadata("SecondTypeArg.kt") + public void testSecondTypeArg() throws Exception { + runTest("idea/idea-completion/testData/basic/common/SecondTypeArg.kt"); + } + @TestMetadata("SetPrefixForProperties.kt") public void testSetPrefixForProperties() throws Exception { runTest("idea/idea-completion/testData/basic/common/SetPrefixForProperties.kt"); diff --git a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/completion/HighLevelJvmBasicCompletionTestGenerated.java b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/completion/HighLevelJvmBasicCompletionTestGenerated.java index 059ac7be1e0..ff167aabb0d 100644 --- a/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/completion/HighLevelJvmBasicCompletionTestGenerated.java +++ b/idea/idea-fir/tests/org/jetbrains/kotlin/idea/fir/completion/HighLevelJvmBasicCompletionTestGenerated.java @@ -651,6 +651,11 @@ public class HighLevelJvmBasicCompletionTestGenerated extends AbstractHighLevelJ runTest("idea/idea-completion/testData/basic/common/RecieverMembersFromExtFun.kt"); } + @TestMetadata("SecondTypeArg.kt") + public void testSecondTypeArg() throws Exception { + runTest("idea/idea-completion/testData/basic/common/SecondTypeArg.kt"); + } + @TestMetadata("SetPrefixForProperties.kt") public void testSetPrefixForProperties() throws Exception { runTest("idea/idea-completion/testData/basic/common/SetPrefixForProperties.kt"); diff --git a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/completion/CompletionDummyIdentifierProviderService.kt b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/completion/CompletionDummyIdentifierProviderService.kt index 79fbe53ba39..805e939ae72 100644 --- a/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/completion/CompletionDummyIdentifierProviderService.kt +++ b/idea/idea-frontend-independent/src/org/jetbrains/kotlin/idea/completion/CompletionDummyIdentifierProviderService.kt @@ -43,10 +43,19 @@ abstract class CompletionDummyIdentifierProviderService { ?: specialExtensionReceiverDummyIdentifier(tokenBefore) ?: specialInTypeArgsDummyIdentifier(tokenBefore) ?: specialInArgumentListDummyIdentifier(tokenBefore) + ?: isInTypeParametersList(tokenBefore) ?: DEFAULT_DUMMY_IDENTIFIER } } + private fun isInTypeParametersList(tokenBefore: PsiElement?): String? { + if (tokenBefore == null) return null + if (tokenBefore.parents.any { it is KtTypeParameterList }) { + return CompletionUtilCore.DUMMY_IDENTIFIER_TRIMMED + } + return null + } + private fun specialLambdaSignatureDummyIdentifier(tokenBefore: PsiElement?): String? { var leaf = tokenBefore while (leaf is PsiWhiteSpace || leaf is PsiComment) {