mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
make rationalize static import to cleanup inspection (IDEA-187319)
This commit is contained in:
+2
-1
@@ -117,7 +117,8 @@ public class PsiReplacementUtil {
|
||||
final JavaPsiFacade psiFacade = JavaPsiFacade.getInstance(project);
|
||||
final PsiElementFactory factory = psiFacade.getElementFactory();
|
||||
final PsiReferenceExpression newExpression = (PsiReferenceExpression)factory.createExpressionFromText("xxx", expression);
|
||||
final PsiReferenceExpression replacementExpression = (PsiReferenceExpression)expression.replace(newExpression);
|
||||
CommentTracker tracker = new CommentTracker();
|
||||
final PsiReferenceExpression replacementExpression = (PsiReferenceExpression)tracker.replaceAndRestoreComments(expression, newExpression);
|
||||
final PsiElement element = replacementExpression.bindToElement(target);
|
||||
final JavaCodeStyleManager styleManager = JavaCodeStyleManager.getInstance(project);
|
||||
styleManager.shortenClassReferences(element);
|
||||
|
||||
+13
-16
@@ -15,9 +15,11 @@
|
||||
*/
|
||||
package com.siyeh.ig.bugs;
|
||||
|
||||
import com.intellij.codeInspection.CleanupLocalInspectionTool;
|
||||
import com.intellij.codeInspection.ProblemDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.util.ObjectUtils;
|
||||
import com.siyeh.InspectionGadgetsBundle;
|
||||
import com.siyeh.ig.BaseInspection;
|
||||
import com.siyeh.ig.BaseInspectionVisitor;
|
||||
@@ -25,7 +27,7 @@ import com.siyeh.ig.InspectionGadgetsFix;
|
||||
import com.siyeh.ig.PsiReplacementUtil;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class StaticFieldReferenceOnSubclassInspection extends BaseInspection {
|
||||
public class StaticFieldReferenceOnSubclassInspection extends BaseInspection implements CleanupLocalInspectionTool {
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
@@ -67,11 +69,12 @@ public class StaticFieldReferenceOnSubclassInspection extends BaseInspection {
|
||||
|
||||
@Override
|
||||
public void doFix(Project project, ProblemDescriptor descriptor) {
|
||||
final PsiIdentifier name = (PsiIdentifier)descriptor.getPsiElement();
|
||||
final PsiReferenceExpression expression = (PsiReferenceExpression)name.getParent();
|
||||
assert expression != null;
|
||||
final PsiField field = (PsiField)expression.resolve();
|
||||
assert field != null;
|
||||
final PsiIdentifier name = ObjectUtils.tryCast(descriptor.getPsiElement(), PsiIdentifier.class);
|
||||
if (name == null) return;
|
||||
final PsiReferenceExpression expression = ObjectUtils.tryCast(name.getParent(), PsiReferenceExpression.class);
|
||||
if (expression == null) return;
|
||||
final PsiField field = ObjectUtils.tryCast(expression.resolve(), PsiField.class);
|
||||
if (field == null) return;
|
||||
PsiReplacementUtil.replaceExpressionWithReferenceTo(expression, field);
|
||||
}
|
||||
}
|
||||
@@ -81,12 +84,10 @@ public class StaticFieldReferenceOnSubclassInspection extends BaseInspection {
|
||||
return new StaticFieldOnSubclassVisitor();
|
||||
}
|
||||
|
||||
private static class StaticFieldOnSubclassVisitor
|
||||
extends BaseInspectionVisitor {
|
||||
private static class StaticFieldOnSubclassVisitor extends BaseInspectionVisitor {
|
||||
|
||||
@Override
|
||||
public void visitReferenceExpression(
|
||||
PsiReferenceExpression expression) {
|
||||
public void visitReferenceExpression(PsiReferenceExpression expression) {
|
||||
super.visitReferenceExpression(expression);
|
||||
final PsiElement qualifier = expression.getQualifier();
|
||||
if (!(qualifier instanceof PsiReferenceExpression)) {
|
||||
@@ -100,17 +101,13 @@ public class StaticFieldReferenceOnSubclassInspection extends BaseInspection {
|
||||
if (!field.hasModifierProperty(PsiModifier.STATIC)) {
|
||||
return;
|
||||
}
|
||||
final PsiElement qualifierReferent =
|
||||
((PsiReference)qualifier).resolve();
|
||||
final PsiElement qualifierReferent = ((PsiReferenceExpression)qualifier).resolve();
|
||||
if (!(qualifierReferent instanceof PsiClass)) {
|
||||
return;
|
||||
}
|
||||
final PsiClass referencedClass = (PsiClass)qualifierReferent;
|
||||
final PsiClass declaringClass = field.getContainingClass();
|
||||
if (declaringClass == null) {
|
||||
return;
|
||||
}
|
||||
if (declaringClass.equals(referencedClass)) {
|
||||
if (declaringClass == null || declaringClass.equals(referencedClass)) {
|
||||
return;
|
||||
}
|
||||
final PsiResolveHelper resolveHelper = JavaPsiFacade.getInstance(expression.getProject()).getResolveHelper();
|
||||
|
||||
@@ -367,7 +367,7 @@
|
||||
<localInspection groupPath="Java" language="JAVA" suppressId="StaticFieldReferencedViaSubclass" shortName="StaticFieldReferenceOnSubclass"
|
||||
bundle="com.siyeh.InspectionGadgetsBundle" key="static.field.via.subclass.display.name"
|
||||
groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="false" level="WARNING"
|
||||
implementationClass="com.siyeh.ig.bugs.StaticFieldReferenceOnSubclassInspection"/>
|
||||
implementationClass="com.siyeh.ig.bugs.StaticFieldReferenceOnSubclassInspection" cleanupTool="true"/>
|
||||
<localInspection groupPath="Java" language="JAVA" shortName="StringEquality" bundle="com.siyeh.InspectionGadgetsBundle" key="string.comparison.display.name"
|
||||
groupBundle="messages.InspectionsBundle" groupKey="group.names.probable.bugs" enabledByDefault="true" level="WARNING"
|
||||
implementationClass="com.siyeh.ig.bugs.StringEqualityInspection"/>
|
||||
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
interface Super {
|
||||
String FOO = "";
|
||||
}
|
||||
|
||||
class Child implements Super {}
|
||||
|
||||
class Bar {
|
||||
{
|
||||
/*some comment*/
|
||||
String s = Super.FOO;
|
||||
}
|
||||
}
|
||||
+11
@@ -0,0 +1,11 @@
|
||||
interface Super {
|
||||
String FOO = "";
|
||||
}
|
||||
|
||||
class Child implements Super {}
|
||||
|
||||
class Bar {
|
||||
{
|
||||
String s = Child./*some comment*/FO<caret>O;
|
||||
}
|
||||
}
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
// Copyright 2000-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.siyeh.ig.fixes.bugs;
|
||||
|
||||
import com.siyeh.InspectionGadgetsBundle;
|
||||
import com.siyeh.ig.IGQuickFixesTestCase;
|
||||
import com.siyeh.ig.bugs.StaticFieldReferenceOnSubclassInspection;
|
||||
|
||||
public class StaticFieldReferenceOnSubclassTest extends IGQuickFixesTestCase {
|
||||
@Override
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myFixture.enableInspections(new StaticFieldReferenceOnSubclassInspection());
|
||||
}
|
||||
|
||||
public void testPreserveTypeArgs() {
|
||||
doTest("preserveComments", InspectionGadgetsBundle.message("static.field.via.subclass.rationalize.quickfix"));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getRelativePath() {
|
||||
return "bugs/staticFieldRefOnSubclass";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user