mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
java: add import on inner class: disable if qualifier has provided type arguments (IDEA-267858)
fix for deep type parameters, according to the review GitOrigin-RevId: 77b28eb04ae16ba9e063b10c0f24c4a473f7a3c0
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6fc32f26d6
commit
a07b56e42c
@@ -107,13 +107,7 @@ public class AddSingleMemberStaticImportAction extends BaseElementAtCaretIntenti
|
||||
.createReferenceFromText(refNameElement.getText(), refExpr);
|
||||
final PsiElement target = copy.resolve();
|
||||
if (target != null && PsiTreeUtil.getParentOfType(target, PsiClass.class) != aClass) return null;
|
||||
PsiElement qualifier = refExpr.getQualifier();
|
||||
if (qualifier instanceof PsiJavaCodeReferenceElement) {
|
||||
PsiReferenceParameterList parameterList = ((PsiJavaCodeReferenceElement)qualifier).getParameterList();
|
||||
if (parameterList != null && parameterList.getTypeParameterElements().length > 0) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
if (hasTypeArguments(refExpr.getQualifier())) return null;
|
||||
}
|
||||
return new ImportAvailability(qName + "." +refExpr.getReferenceName(), (PsiMember) resolved);
|
||||
}
|
||||
@@ -125,6 +119,11 @@ public class AddSingleMemberStaticImportAction extends BaseElementAtCaretIntenti
|
||||
return null;
|
||||
}
|
||||
|
||||
private static boolean hasTypeArguments(PsiElement qualifier) {
|
||||
return !PsiTreeUtil.processElements(qualifier, element -> !(element instanceof PsiReferenceParameterList) ||
|
||||
((PsiReferenceParameterList)element).getTypeParameterElements().length == 0);
|
||||
}
|
||||
|
||||
private static PsiImportStatementBase findExistingImport(PsiFile file, PsiClass aClass, String refName) {
|
||||
if (file instanceof PsiJavaFile) {
|
||||
PsiImportList importList = ((PsiJavaFile)file).getImportList();
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
package foo;
|
||||
|
||||
class Outer<O> {
|
||||
public abstract class Inner {
|
||||
class Inner1 {}
|
||||
}
|
||||
|
||||
final class AnoterInner extends Outer<String>.Inner.Inn<caret>er1 { }
|
||||
}
|
||||
@@ -35,6 +35,11 @@ public class AddSingleStaticImportActionTest extends JavaCodeInsightFixtureTestC
|
||||
assertNull(myFixture.getAvailableIntention("Add import for 'foo.Outer.Inner'"));
|
||||
}
|
||||
|
||||
public void testDisabledInsideParameterizedQualifierReferenceDeep() {
|
||||
myFixture.configureByFile(getTestName(false) + ".java");
|
||||
assertNull(myFixture.getAvailableIntention("Add import for 'foo.Outer.Inner.Inner1'"));
|
||||
}
|
||||
|
||||
public void testWrongCandidateAfterImport() {
|
||||
myFixture.addClass("package foo; class Empty {}"); //to ensure package is in the project
|
||||
doTest("Add static import for 'foo.Test.X.test'");
|
||||
|
||||
Reference in New Issue
Block a user