reference to static method from interface: prefer static import context if provided (IDEA-130136)

This commit is contained in:
Anna Kozlova
2014-09-30 15:47:29 +02:00
parent 30b12e3e25
commit 3f940f370f
6 changed files with 59 additions and 22 deletions
@@ -15,6 +15,7 @@
*/
package com.intellij.psi.util;
import com.intellij.openapi.util.Comparing;
import com.intellij.psi.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -79,4 +80,29 @@ public class ImportsUtil {
refExpr.replace(elementFactory.createReferenceFromText(referenceExpression.getText() + "." + refExpr.getText(), refExpr));
}
}
public static boolean hasStaticImportOn(final PsiElement expr, final PsiMember member, boolean acceptOnDemand) {
if (expr.getContainingFile() instanceof PsiJavaFile) {
final PsiImportList importList = ((PsiJavaFile)expr.getContainingFile()).getImportList();
if (importList != null) {
final PsiImportStaticStatement[] importStaticStatements = importList.getImportStaticStatements();
for (PsiImportStaticStatement stmt : importStaticStatements) {
final PsiClass containingClass = member.getContainingClass();
final String referenceName = stmt.getReferenceName();
if (containingClass != null && stmt.resolveTargetClass() == containingClass) {
if (!stmt.isOnDemand() && Comparing.strEqual(referenceName, member.getName())) {
if (member instanceof PsiMethod) {
return containingClass.findMethodsByName(referenceName, false).length == 1;
}
return true;
}
if (acceptOnDemand && stmt.isOnDemand()) {
return true;
}
}
}
}
}
return false;
}
}