mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
IDEA-125954 Incorrect code completion for deep inner class
This commit is contained in:
+4
-2
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
+7
-9
@@ -53,6 +53,8 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
|
||||
}
|
||||
|
||||
PsiElement position = file.findElementAt(offset);
|
||||
PsiJavaCodeReferenceElement ref = position != null && position.getParent() instanceof PsiJavaCodeReferenceElement ?
|
||||
(PsiJavaCodeReferenceElement) position.getParent() : null;
|
||||
PsiClass psiClass = item.getObject();
|
||||
final Project project = context.getProject();
|
||||
|
||||
@@ -75,14 +77,8 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
|
||||
return;
|
||||
}
|
||||
|
||||
if (position != null) {
|
||||
PsiElement parent = position.getParent();
|
||||
if (parent instanceof PsiJavaCodeReferenceElement) {
|
||||
final PsiJavaCodeReferenceElement ref = (PsiJavaCodeReferenceElement)parent;
|
||||
if (PsiTreeUtil.getParentOfType(position, PsiDocTag.class) != null && ref.isReferenceTo(psiClass)) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (ref != null && PsiTreeUtil.getParentOfType(position, PsiDocTag.class) != null && ref.isReferenceTo(psiClass)) {
|
||||
return;
|
||||
}
|
||||
|
||||
OffsetKey refEnd = context.trackOffset(context.getTailOffset(), false);
|
||||
@@ -92,7 +88,9 @@ class JavaClassNameInsertHandler implements InsertHandler<JavaPsiClassReferenceE
|
||||
context.setAddCompletionChar(false);
|
||||
}
|
||||
|
||||
PsiTypeLookupItem.addImportForItem(context, psiClass);
|
||||
if (ref == null || !ref.isQualified()) {
|
||||
PsiTypeLookupItem.addImportForItem(context, psiClass);
|
||||
}
|
||||
if (context.getOffset(refEnd) < 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
class ClassMain{
|
||||
public static class ClassInner1{
|
||||
public static class ClassInner2{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Foo {
|
||||
{
|
||||
new ClassMain.Cla<caret>
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
class ClassMain{
|
||||
public static class ClassInner1{
|
||||
public static class ClassInner2{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Foo {
|
||||
{
|
||||
new ClassMain.ClassInner1.ClassInner2()<caret>
|
||||
}
|
||||
}
|
||||
+7
@@ -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') }
|
||||
|
||||
Reference in New Issue
Block a user