diff --git a/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java b/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java index a4fdb8d35b56..f6fb9199d5c0 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/duplicateStringLiteral/DuplicateStringLiteralInspection.java @@ -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) { diff --git a/plugins/java-i18n/testData/inspections/duplicateStringLiteral/InvalidForwardReference.java b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/InvalidForwardReference.java new file mode 100644 index 000000000000..e09078293762 --- /dev/null +++ b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/InvalidForwardReference.java @@ -0,0 +1,5 @@ +class Test { + public static final String S = "qwerty"; + public static final String S1 = "qwerty"; +} + diff --git a/plugins/java-i18n/testData/inspections/duplicateStringLiteral/InvalidForwardReferenceAfter.java b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/InvalidForwardReferenceAfter.java new file mode 100644 index 000000000000..72f797869781 --- /dev/null +++ b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/InvalidForwardReferenceAfter.java @@ -0,0 +1,5 @@ +class Test { + public static final String S = Test.S1; + public static final String S1 = "qwerty"; +} + diff --git a/plugins/java-i18n/testData/inspections/duplicateStringLiteral/RemoveRedundantQualifier.java b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/RemoveRedundantQualifier.java new file mode 100644 index 000000000000..9f90f06acec8 --- /dev/null +++ b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/RemoveRedundantQualifier.java @@ -0,0 +1,4 @@ +class Test { + public static final String S = "qwerty"; + public static final String S1 = "qwerty"; +} \ No newline at end of file diff --git a/plugins/java-i18n/testData/inspections/duplicateStringLiteral/RemoveRedundantQualifierAfter.java b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/RemoveRedundantQualifierAfter.java new file mode 100644 index 000000000000..c73d0d452133 --- /dev/null +++ b/plugins/java-i18n/testData/inspections/duplicateStringLiteral/RemoveRedundantQualifierAfter.java @@ -0,0 +1,4 @@ +class Test { + public static final String S = "qwerty"; + public static final String S1 = S; +} \ No newline at end of file diff --git a/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/DuplicateStringLiteralInspectionTest.java b/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/DuplicateStringLiteralInspectionTest.java index 0a2df3ed3b89..64e02b01a6c2 100644 --- a/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/DuplicateStringLiteralInspectionTest.java +++ b/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/DuplicateStringLiteralInspectionTest.java @@ -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"); + } } \ No newline at end of file