replace all members with static import method (IDEA-90040)

This commit is contained in:
Anna Kozlova
2012-08-15 18:58:13 +04:00
parent c276567223
commit bd197be80e
4 changed files with 29 additions and 9 deletions

View File

@@ -21,6 +21,7 @@ import com.intellij.codeInsight.completion.JavaCompletionUtil;
import com.intellij.codeInsight.daemon.QuickFixBundle;
import com.intellij.codeInsight.daemon.impl.actions.AddImportAction;
import com.intellij.codeInsight.intention.IntentionAction;
import com.intellij.codeInsight.intention.impl.AddSingleMemberStaticImportAction;
import com.intellij.ide.util.MethodCellRenderer;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.command.CommandProcessor;
@@ -187,7 +188,7 @@ public class StaticImportMethodFix implements IntentionAction {
try {
PsiMethodCallExpression element = myMethodCall.getElement();
if (element != null) {
element.getMethodExpression().bindToElementViaStaticImport(toImport.getContainingClass());
AddSingleMemberStaticImportAction.bindAllClassRefs(element.getContainingFile(), toImport, toImport.getName(), toImport.getContainingClass());
}
}
catch (IncorrectOperationException e) {

View File

@@ -125,12 +125,19 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
final PsiJavaCodeReferenceElement refExpr = (PsiJavaCodeReferenceElement)element.getParent();
final PsiElement resolved = refExpr.resolve();
final String referenceName = refExpr.getReferenceName();
bindAllClassRefs(file, resolved, referenceName, resolved != null ? getResolvedClass(element, (PsiMember)resolved) : null);
}
public static void bindAllClassRefs(final PsiFile file,
final PsiElement resolved,
final String referenceName,
final PsiClass resolvedClass) {
file.accept(new JavaRecursiveElementWalkingVisitor() {
@Override
public void visitReferenceElement(PsiJavaCodeReferenceElement reference) {
super.visitReferenceElement(reference);
String referenceName = refExpr.getReferenceName();
if (referenceName != null && referenceName.equals(reference.getReferenceName())) {
PsiElement resolved = reference.resolve();
if (resolved != null) {
@@ -141,9 +148,7 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
});
if (resolved != null) {
PsiReferenceExpressionImpl.bindToElementViaStaticImport(
getResolvedClass(element, (PsiMember)resolved), ((PsiNamedElement)resolved).getName(), ((PsiJavaFile)file).getImportList()
);
PsiReferenceExpressionImpl.bindToElementViaStaticImport(resolvedClass, referenceName, ((PsiJavaFile)file).getImportList());
}
file.accept(new JavaRecursiveElementVisitor() {
@@ -153,11 +158,10 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
if (reference.getParameterList() != null &&
reference.getParameterList().getFirstChild() != null) return;
if (refExpr.getReferenceName().equals(reference.getReferenceName())) {
if (referenceName.equals(reference.getReferenceName())) {
final PsiElement qualifierExpression = reference.getQualifier();
PsiElement referent = reference.getUserData(TEMP_REFERENT_USER_DATA);
if (!reference.isQualified()) {
if (referent instanceof PsiMember && referent != reference.resolve()) {
PsiElementFactory factory = JavaPsiFacade.getInstance(reference.getProject()).getElementFactory();
try {
@@ -179,7 +183,7 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
if (aClass instanceof PsiVariable) {
aClass = PsiUtil.resolveClassInClassTypeOnly(((PsiVariable)aClass).getType());
}
if (aClass instanceof PsiClass && InheritanceUtil.isInheritorOrSelf((PsiClass)aClass, getResolvedClass(element, (PsiMember)resolved), true)) {
if (aClass instanceof PsiClass && InheritanceUtil.isInheritorOrSelf((PsiClass)aClass, resolvedClass, true)) {
boolean foundMemberByName = false;
if (referent instanceof PsiMember) {
final String memberName = ((PsiMember)referent).getName();
@@ -205,7 +209,6 @@ public class AddSingleMemberStaticImportAction extends PsiElementBaseIntentionAc
super.visitReferenceElement(reference);
}
});
}
@Override

View File

@@ -0,0 +1,9 @@
import static java.lang.String.format;
// "Static Import Method 'java.lang.String.format'" "true"
public class X {
{
format("");
format("");
}
}

View File

@@ -0,0 +1,7 @@
// "Static Import Method 'java.lang.String.format'" "true"
public class X {
{
String.format("");
<caret>format("");
}
}