mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
java i18n: don't produce illegal forward references in duplicate string literal inspection
This commit is contained in:
+9
-6
@@ -43,6 +43,7 @@ import com.intellij.util.Processor;
|
||||
import com.intellij.util.Processors;
|
||||
import com.intellij.util.SmartList;
|
||||
import com.intellij.util.text.StringSearcher;
|
||||
import com.siyeh.ig.style.UnnecessarilyQualifiedStaticUsageInspection;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.THashSet;
|
||||
import gnu.trove.TIntProcedure;
|
||||
@@ -239,11 +240,9 @@ public class DuplicateStringLiteralInspection extends BaseLocalInspectionTool {
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiReferenceExpression createReferenceTo(final PsiField constant, final PsiLiteralExpression context) throws IncorrectOperationException {
|
||||
private static PsiReferenceExpression createReferenceTo(final PsiField constant) throws IncorrectOperationException {
|
||||
PsiElementFactory factory = JavaPsiFacade.getInstance(constant.getProject()).getElementFactory();
|
||||
PsiReferenceExpression reference = (PsiReferenceExpression)factory.createExpressionFromText(constant.getName(), context);
|
||||
if (reference.isReferenceTo(constant)) return reference;
|
||||
reference = (PsiReferenceExpression)factory.createExpressionFromText("XXX." + constant.getName(), null);
|
||||
PsiReferenceExpression reference = (PsiReferenceExpression)factory.createExpressionFromText("XXX." + constant.getName(), null);
|
||||
final PsiReferenceExpression classQualifier = (PsiReferenceExpression)reference.getQualifierExpression();
|
||||
PsiClass containingClass = constant.getContainingClass();
|
||||
if (containingClass.getQualifiedName() == null) return null;
|
||||
@@ -380,9 +379,13 @@ public class DuplicateStringLiteralInspection extends BaseLocalInspectionTool {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final PsiReferenceExpression reference = createReferenceTo(myConstant, myOriginalExpression);
|
||||
final PsiReferenceExpression reference = createReferenceTo(myConstant);
|
||||
if (reference != null) {
|
||||
myOriginalExpression.replace(reference);
|
||||
final PsiReferenceExpression newReference = (PsiReferenceExpression)myOriginalExpression.replace(reference);
|
||||
if (UnnecessarilyQualifiedStaticUsageInspection.isUnnecessarilyQualifiedAccess(newReference, false, false, true)) {
|
||||
//remove qualifier
|
||||
newReference.getChildren()[0].delete();
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (IncorrectOperationException e) {
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
class Test {
|
||||
public static final String S = "qw<caret>erty";
|
||||
public static final String S1 = "qwerty";
|
||||
}
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
class Test {
|
||||
public static final String S = Test.S1;
|
||||
public static final String S1 = "qwerty";
|
||||
}
|
||||
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
class Test {
|
||||
public static final String S = "qwerty";
|
||||
public static final String S1 = "qwe<caret>rty";
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
class Test {
|
||||
public static final String S = "qwerty";
|
||||
public static final String S1 = S;
|
||||
}
|
||||
+16
@@ -34,8 +34,24 @@ public class DuplicateStringLiteralInspectionTest extends JavaCodeInsightFixture
|
||||
myFixture.checkResultByFile("ApplyRenameForWholeFileAfter.java");
|
||||
}
|
||||
|
||||
public void testInvalidForwardReference() {
|
||||
doTestFix();
|
||||
}
|
||||
|
||||
public void testRemoveRedundantQualifier() {
|
||||
doTestFix();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTestDataPath() {
|
||||
return PluginPathManager.getPluginHomePath("java-i18n") + "/testData/inspections/duplicateStringLiteral/";
|
||||
}
|
||||
|
||||
private void doTestFix() {
|
||||
myFixture.configureByFile(getTestName(false) + ".java");
|
||||
final IntentionAction fix = myFixture.findSingleIntention("Replace");
|
||||
assertNotNull(fix);
|
||||
myFixture.launchAction(fix);
|
||||
myFixture.checkResultByFile(getTestName(false) + "After.java");
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user