diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java index 5cdf6edce78a..6ca14f343b6e 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionData.java @@ -538,11 +538,14 @@ public class JavaCompletionData extends JavaAwareCompletionData { return false; } - if (psiElement().afterLeaf( - or( - psiElement().withoutText(".").inside(psiElement(PsiModifierList.class).withParent(not(psiElement(PsiParameter.class)))).andNot( - psiElement().inside(PsiAnnotationParameterList.class)), - psiElement().isNull())).accepts(position)) { + PsiElement prev = PsiTreeUtil.prevVisibleLeaf(position); + if (prev == null) { + return true; + } + if (psiElement().withoutText(".").inside( + psiElement(PsiModifierList.class).withParent( + not(psiElement(PsiParameter.class)).andNot(psiElement(PsiParameterList.class)))).accepts(prev) && + !psiElement().inside(PsiAnnotationParameterList.class).accepts(prev)) { return true; } diff --git a/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno2.java b/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno2.java new file mode 100644 index 000000000000..276bfb3844c3 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/keywords/finalAfterParameterAnno2.java @@ -0,0 +1,3 @@ +public class Util { + void foo(@Foo int args) { } +} diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java index fe96da3cd6a4..747417d2771a 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/KeywordCompletionTest.java @@ -105,6 +105,7 @@ public class KeywordCompletionTest extends LightCompletionTestCase { public void testCharInAnnotatedParameter() throws Exception { doTest(1, "char"); } public void testReturnInTernary() throws Exception { doTest(1, "return"); } public void testFinalAfterParameterAnno() throws Exception { doTest(2, "final", "float", "class"); } + public void testFinalAfterParameterAnno2() throws Exception { doTest(2, "final", "float", "class"); } public void testClassInMethod() throws Exception { doTest(2, "class", "char"); } public void testIntInClassArray() throws Throwable { doTest(2, "int", "char", "final"); } public void testIntInClassArray2() throws Throwable { doTest(2, "int", "char", "final"); }