mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-13 21:55:01 +07:00
ignore static imports for method references (IDEA-92590)
This commit is contained in:
+4
-2
@@ -61,8 +61,10 @@ public class AddOnDemandStaticImportAction extends PsiElementBaseIntentionAction
|
||||
return null;
|
||||
}
|
||||
PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)element.getParent();
|
||||
if (!(refExpr.getParent() instanceof PsiJavaCodeReferenceElement) ||
|
||||
isParameterizedReference((PsiJavaCodeReferenceElement)refExpr.getParent())) return null;
|
||||
if (refExpr instanceof PsiMethodReferenceExpression) return null;
|
||||
final PsiElement gParent = refExpr.getParent();
|
||||
if (!(gParent instanceof PsiJavaCodeReferenceElement) ||
|
||||
isParameterizedReference((PsiJavaCodeReferenceElement)gParent)) return null;
|
||||
|
||||
PsiElement resolved = refExpr.resolve();
|
||||
if (!(resolved instanceof PsiClass)) {
|
||||
|
||||
+31
-28
@@ -56,35 +56,38 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
|
||||
public static String getStaticImportClass(@NotNull PsiElement element) {
|
||||
if (!PsiUtil.isLanguageLevel5OrHigher(element)) return null;
|
||||
PsiFile file = element.getContainingFile();
|
||||
if (element instanceof PsiIdentifier && element.getParent() instanceof PsiJavaCodeReferenceElement &&
|
||||
((PsiJavaCodeReferenceElement)element.getParent()).getQualifier() != null) {
|
||||
PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)element.getParent();
|
||||
PsiReferenceParameterList parameterList = refExpr.getParameterList();
|
||||
if (parameterList != null && parameterList.getFirstChild() != null) return null;
|
||||
PsiElement resolved = refExpr.resolve();
|
||||
if (resolved instanceof PsiMember && ((PsiModifierListOwner)resolved).hasModifierProperty(PsiModifier.STATIC)) {
|
||||
PsiClass aClass = getResolvedClass(element, (PsiMember)resolved);
|
||||
if (aClass != null && !PsiTreeUtil.isAncestor(aClass, element, true) && !aClass.hasModifierProperty(PsiModifier.PRIVATE)) {
|
||||
String qName = aClass.getQualifiedName();
|
||||
if (qName != null && !Comparing.strEqual(qName, aClass.getName())) {
|
||||
qName = qName + "." +refExpr.getReferenceName();
|
||||
if (file instanceof PsiJavaFile) {
|
||||
PsiImportList importList = ((PsiJavaFile)file).getImportList();
|
||||
if (importList != null) {
|
||||
for (PsiImportStaticStatement staticStatement : importList.getImportStaticStatements()) {
|
||||
if (staticStatement.isOnDemand()) {
|
||||
if (staticStatement.resolveTargetClass() == aClass) {
|
||||
return null;
|
||||
if (element instanceof PsiIdentifier) {
|
||||
final PsiElement parent = element.getParent();
|
||||
if (parent instanceof PsiMethodReferenceExpression) return null;
|
||||
if (parent instanceof PsiJavaCodeReferenceElement && ((PsiJavaCodeReferenceElement)parent).getQualifier() != null) {
|
||||
PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)parent;
|
||||
PsiReferenceParameterList parameterList = refExpr.getParameterList();
|
||||
if (parameterList != null && parameterList.getFirstChild() != null) return null;
|
||||
PsiElement resolved = refExpr.resolve();
|
||||
if (resolved instanceof PsiMember && ((PsiModifierListOwner)resolved).hasModifierProperty(PsiModifier.STATIC)) {
|
||||
PsiClass aClass = getResolvedClass(element, (PsiMember)resolved);
|
||||
if (aClass != null && !PsiTreeUtil.isAncestor(aClass, element, true) && !aClass.hasModifierProperty(PsiModifier.PRIVATE)) {
|
||||
String qName = aClass.getQualifiedName();
|
||||
if (qName != null && !Comparing.strEqual(qName, aClass.getName())) {
|
||||
qName = qName + "." +refExpr.getReferenceName();
|
||||
if (file instanceof PsiJavaFile) {
|
||||
PsiImportList importList = ((PsiJavaFile)file).getImportList();
|
||||
if (importList != null) {
|
||||
for (PsiImportStaticStatement staticStatement : importList.getImportStaticStatements()) {
|
||||
if (staticStatement.isOnDemand()) {
|
||||
if (staticStatement.resolveTargetClass() == aClass) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
final PsiImportStatementBase importStatement = importList.findSingleImportStatement(refExpr.getReferenceName());
|
||||
if (importStatement == null) {
|
||||
return qName;
|
||||
}
|
||||
final PsiElement resolve = importStatement.resolve();
|
||||
if (resolve instanceof PsiMember && ((PsiMember)resolve).getContainingClass() != aClass) {
|
||||
return qName;
|
||||
final PsiImportStatementBase importStatement = importList.findSingleImportStatement(refExpr.getReferenceName());
|
||||
if (importStatement == null) {
|
||||
return qName;
|
||||
}
|
||||
final PsiElement resolve = importStatement.resolve();
|
||||
if (resolve instanceof PsiMember && ((PsiMember)resolve).getContainingClass() != aClass) {
|
||||
return qName;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -158,7 +161,7 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
|
||||
if (reference.getParameterList() != null &&
|
||||
reference.getParameterList().getFirstChild() != null) return;
|
||||
|
||||
if (referenceName.equals(reference.getReferenceName())) {
|
||||
if (referenceName.equals(reference.getReferenceName()) && !(reference instanceof PsiMethodReferenceExpression)) {
|
||||
final PsiElement qualifierExpression = reference.getQualifier();
|
||||
PsiElement referent = reference.getUserData(TEMP_REFERENT_USER_DATA);
|
||||
if (!reference.isQualified()) {
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
// "Add on demand static import for 'java.util.Arrays'" "true"
|
||||
package test;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static java.util.Arrays.*;
|
||||
|
||||
public class Foo {
|
||||
{
|
||||
Block<Integer[]> b2 = Arrays::sort;
|
||||
sort((byte[]) null);
|
||||
}
|
||||
|
||||
public interface Block<T> {
|
||||
void apply(T t);
|
||||
}
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
// "Add on demand static import for 'java.util.Arrays'" "true"
|
||||
package test;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class Foo {
|
||||
{
|
||||
Block<Integer[]> b2 = Arrays::sort;
|
||||
Arra<caret>ys.sort((byte[])null);
|
||||
}
|
||||
|
||||
public interface Block<T> {
|
||||
void apply(T t);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user