From 8c84138f29364a03b7efe02cb1f75bbd25d26605 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Tue, 20 Feb 2024 20:08:44 +0100 Subject: [PATCH] [java] fix strange completion when trying to create vararg parameter (IDEA-346732) GitOrigin-RevId: 7ba3612b1df542111163d635ae1fdd0ad8877fce --- .../codeInsight/completion/JavaCompletionContributor.java | 7 +++++-- .../completion/normal/PrimitiveVarargMethodParameter.java | 3 +++ .../completion/normal/PrimitiveVarargMethodParameter2.java | 3 +++ .../normal/PrimitiveVarargMethodParameter2_after.java | 3 +++ .../normal/PrimitiveVarargMethodParameter_after.java | 3 +++ .../java/codeInsight/completion/NormalCompletionTest.java | 6 +++++- 6 files changed, 22 insertions(+), 3 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2_after.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java index a051ff0af72b..be3e1cf50b42 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionContributor.java @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.codeInsight.completion; import com.intellij.application.options.CodeStyle; @@ -88,7 +88,10 @@ public final class JavaCompletionContributor extends CompletionContributor imple psiElement().afterLeaf(".").insideStarting(psiExpressionStatement()), // like `call(Cls::methodRef.` psiElement().afterLeaf(psiElement(JavaTokenType.DOT).afterSibling(psiElement(PsiMethodCallExpression.class).withLastChild( - psiElement(PsiExpressionList.class).withLastChild(psiElement(PsiErrorElement.class)))))); + psiElement(PsiExpressionList.class).withLastChild(psiElement(PsiErrorElement.class))))), + // dot after primitive type `int.` or dot after dot `Object..` + psiElement().afterLeaf(psiElement(JavaTokenType.DOT).withParent( + psiElement(PsiErrorElement.class).afterSibling(psiElement(PsiErrorElement.class))))); private static final PsiNameValuePairPattern NAME_VALUE_PAIR = psiNameValuePair().withSuperParent(2, psiElement(PsiAnnotation.class)); private static final ElementPattern ANNOTATION_ATTRIBUTE_NAME = diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter.java new file mode 100644 index 000000000000..ec6981c81947 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter.java @@ -0,0 +1,3 @@ +public class Foo { + void foo(int.){ } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2.java new file mode 100644 index 000000000000..448323b73e2f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2.java @@ -0,0 +1,3 @@ +public class Foo { + void foo(int..){ } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2_after.java new file mode 100644 index 000000000000..5bae55b8c80c --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter2_after.java @@ -0,0 +1,3 @@ +public class Foo { + void foo(int...){ } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter_after.java b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter_after.java new file mode 100644 index 000000000000..448323b73e2f --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/PrimitiveVarargMethodParameter_after.java @@ -0,0 +1,3 @@ +public class Foo { + void foo(int..){ } +} diff --git a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java index 82e51f825c5a..c32713e719ba 100644 --- a/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/java/codeInsight/completion/NormalCompletionTest.java @@ -1,4 +1,4 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.java.codeInsight.completion; import com.intellij.application.options.CodeStyle; @@ -1127,6 +1127,10 @@ public class NormalCompletionTest extends NormalCompletionTestCase { public void testEnumConstantFromEnumMember() { doTest(); } public void testPrimitiveMethodParameter() { doTest(); } + + public void testPrimitiveVarargMethodParameter() { doTest("."); } + + public void testPrimitiveVarargMethodParameter2() { doTest("."); } public void testNewExpectedClassParens() { doTest("\n"); }