diff --git a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java index 72914bc2a6c5..adabae9b5106 100644 --- a/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/completion/JavaCompletionUtil.java @@ -766,10 +766,23 @@ public class JavaCompletionUtil { public static LookupItem qualify(final LookupItem ret) { if (!(ret instanceof JavaMethodCallElement)) { final PsiMember completionElement = (PsiMember)ret.getObject(); - final PsiClass containingClass = completionElement.getContainingClass(); - if (containingClass != null) { + String prefix = ""; + PsiClass containingClass = completionElement.getContainingClass(); + while (containingClass != null) { final String className = containingClass.getName(); - ret.setLookupString(className + "." + ret.getLookupString()); + if (className == null) { + break; + } + + prefix = className + "." + prefix; + final PsiElement parent = containingClass.getParent(); + if (!(parent instanceof PsiClass)) { + break; + } + containingClass = (PsiClass)parent; + } + if (StringUtil.isNotEmpty(prefix)) { + ret.setLookupString(prefix + ret.getLookupString()); } } return ret.forceQualify(); diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers.java b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers.java new file mode 100644 index 000000000000..24e90f5919f8 --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers.java @@ -0,0 +1,11 @@ +class C1 { + static enum E { + FOO, BAAAAAAAAAR; + } +} + +class C2 { + void f() { + C1.E e = BAAAA; + } +} diff --git a/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers_after.java b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers_after.java new file mode 100644 index 000000000000..82d0c57137cc --- /dev/null +++ b/java/java-tests/testData/codeInsight/completion/normal/QualifyInnerMembers_after.java @@ -0,0 +1,11 @@ +class C1 { + static enum E { + FOO, BAAAAAAAAAR; + } +} + +class C2 { + void f() { + C1.E e = C1.E.BAAAAAAAAAR; + } +} 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 5b847b30ec40..747271723f48 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/NormalCompletionTest.groovy @@ -731,6 +731,12 @@ public class NormalCompletionTest extends LightFixtureCompletionTestCase { public void testPrimitiveMethodParameter() throws Throwable { doTest(); } + public void testQualifyInnerMembers() throws Throwable { + configure() + selectItem myItems[0] + checkResult() + } + public void testSuggestExpectedTypeMembers() throws Throwable { configure() selectItem myItems[0] diff --git a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java index 596c052f165b..6c8181b46798 100644 --- a/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java +++ b/java/java-tests/testSrc/com/intellij/codeInsight/completion/SmartTypeCompletionTest.java @@ -971,7 +971,7 @@ public class SmartTypeCompletionTest extends LightFixtureCompletionTestCase { getLookup().setCurrentItem(ContainerUtil.find(myItems, new Condition() { @Override public boolean value(final LookupElement lookupItem) { - return "Fubar.Bar".equals(lookupItem.getLookupString()); + return "Bar.Fubar.Bar".equals(lookupItem.getLookupString()); } })); select('\n');