From b54086f0798b4d9201b2b29112aacd327d453252 Mon Sep 17 00:00:00 2001 From: "Maxim.Medvedev" Date: Thu, 16 Feb 2012 11:22:11 +0400 Subject: [PATCH] unnecessary qualifier to static member --- ...necessaryQualifiedReferenceInspection.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/UnnecessaryQualifiedReferenceInspection.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/UnnecessaryQualifiedReferenceInspection.java index b4f9d4c7488d..6aa1377702f8 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/UnnecessaryQualifiedReferenceInspection.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/codeInspection/confusing/UnnecessaryQualifiedReferenceInspection.java @@ -19,6 +19,8 @@ import com.intellij.codeInspection.ProblemDescriptor; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiMember; +import com.intellij.psi.PsiModifier; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -30,6 +32,7 @@ import org.jetbrains.plugins.groovy.intentions.style.ReplaceQualifiedReferenceWi import org.jetbrains.plugins.groovy.lang.GrReferenceAdjuster; import org.jetbrains.plugins.groovy.lang.psi.GrQualifiedReference; import org.jetbrains.plugins.groovy.lang.psi.GrReferenceElement; +import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrMethodCall; import org.jetbrains.plugins.groovy.lang.psi.api.statements.expressions.GrReferenceExpression; import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; @@ -55,13 +58,37 @@ public class UnnecessaryQualifiedReferenceInspection extends BaseInspection { public void visitReferenceExpression(GrReferenceExpression referenceExpression) { super.visitReferenceExpression(referenceExpression); - if (ReplaceQualifiedReferenceWithImportIntention.canBeReplacedWithImport(referenceExpression)) { + if (ReplaceQualifiedReferenceWithImportIntention.canBeReplacedWithImport(referenceExpression) || + isQualifiedStaticMethodWithUnnecessaryQualifier(referenceExpression)) { registerError(referenceExpression); } } }; } + private static boolean isQualifiedStaticMethodWithUnnecessaryQualifier(GrReferenceExpression ref) { + if (ref.getQualifier() == null) return false; + + final PsiElement resolved = ref.resolve(); + if (!(resolved instanceof PsiMember)) return false; + if (!((PsiMember)resolved).hasModifierProperty(PsiModifier.STATIC)) return false; + + PsiElement copyResolved; + final PsiElement parent = ref.getParent(); + if (parent instanceof GrMethodCall) { + final GrMethodCall copy = (GrMethodCall)parent.copy(); + ((GrReferenceExpression)copy.getInvokedExpression()).setQualifier(null); + + copyResolved = ((GrReferenceExpression)copy.getInvokedExpression()).resolve(); + } + else { + final GrReferenceExpression copy = (GrReferenceExpression)ref.copy(); + copy.setQualifier(null); + copyResolved = copy.resolve(); + } + return ref.getManager().areElementsEquivalent(copyResolved, resolved); + } + @Nls @NotNull @Override