From 01bb23e701a2fe1dc7fac021765651ee0b1970b2 Mon Sep 17 00:00:00 2001 From: peter Date: Fri, 13 Jun 2014 14:46:05 +0200 Subject: [PATCH] IDEA-125954 Incorrect code completion for deep inner class --- .../JavaClassNameCompletionContributor.java | 6 ++++-- .../completion/JavaClassNameInsertHandler.java | 16 +++++++--------- .../codeInsight/completion/normal/DeepInner.java | 13 +++++++++++++ .../completion/normal/DeepInner_after.java | 13 +++++++++++++ .../completion/NormalCompletionTest.groovy | 7 +++++++ 5 files changed, 44 insertions(+), 11 deletions(-) create mode 100644 java/java-tests/testData/codeInsight/completion/normal/DeepInner.java create mode 100644 java/java-tests/testData/codeInsight/completion/normal/DeepInner_after.java diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameCompletionContributor.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameCompletionContributor.java index df113a5a77a1..66dbe098e5ce 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameCompletionContributor.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameCompletionContributor.java @@ -151,9 +151,11 @@ public class JavaClassNameCompletionContributor extends CompletionContributor { if (withInners && name != null) { for (PsiClass inner : psiClass.getInnerClasses()) { if (inner.hasModifierProperty(PsiModifier.STATIC)) { - for (JavaPsiClassReferenceElement lookupInner : createClassLookupItems(inner, withInners, insertHandler, condition)) { + for (JavaPsiClassReferenceElement lookupInner : createClassLookupItems(inner, true, insertHandler, condition)) { String forced = lookupInner.getForcedPresentableName(); - lookupInner.setForcedPresentableName(name + "." + (forced != null ? forced : inner.getName())); + String qualifiedName = name + "." + (forced != null ? forced : inner.getName()); + lookupInner.setForcedPresentableName(qualifiedName); + lookupInner.setLookupString(qualifiedName); result.add(lookupInner); } } diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java index d80b6b590c98..be6d8146ce3d 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaClassNameInsertHandler.java @@ -53,6 +53,8 @@ class JavaClassNameInsertHandler implements InsertHandler + } +} \ No newline at end of file diff --git a/java/java-tests/testData/codeInsight/completion/normal/DeepInner_after.java b/java/java-tests/testData/codeInsight/completion/normal/DeepInner_after.java new file mode 100644 index 000000000000..f46d6f10dc00 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/DeepInner_after.java @@ -0,0 +1,13 @@ +class ClassMain{ + public static class ClassInner1{ + public static class ClassInner2{ + + } + } +} + +class Foo { + { + new ClassMain.ClassInner1.ClassInner2() + } +} \ No newline at end of file diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy index 824c62cf3004..16132567de64 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -938,6 +938,13 @@ public class ListUtils { public void testQualifyInnerMembers() throws Throwable { doTest('\n') } + public void testDeepInner() throws Throwable { + configure() + assert myFixture.lookupElementStrings == ['ClassInner1', 'ClassInner1.ClassInner2'] + selectItem(lookup.items[1]) + checkResult() + } + public void testSuggestExpectedTypeMembers() throws Throwable { doTest('\n') } public void testSuggestExpectedTypeMembersInCall() throws Throwable { doTest('\n') } public void testSuggestExpectedTypeMembersInAnno() throws Throwable { doTest('\n') }