diff --git a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/I18nInspection.java b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/I18nInspection.java index 72501f56a3c6..2e562b760054 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/i18n/I18nInspection.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/i18n/I18nInspection.java @@ -80,7 +80,7 @@ public class I18nInspection extends AbstractBaseUastLocalInspectionTool implemen CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_THROWABLE, "getMessage").parameterCount(0), CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_THROWABLE, "toString").parameterCount(0) ); - @RegExp private static final String DEFAULT_NON_NLS_LITERAL_PATTERN = "(?i)https?://.+|\\w*[.][\\w.]+|\\w*[$]\\w*||&\\w+;"; + @RegExp private static final String DEFAULT_NON_NLS_LITERAL_PATTERN = "((?i)https?://.+|\\w*[.][\\w.]+|\\w*[$]\\w*||&\\w+;)*"; private static final CallMatcher STRING_LENGTH = CallMatcher.instanceCall(CommonClassNames.JAVA_LANG_STRING, "length").parameterCount(0); private static final CallMatcher STRING_EQUALS = @@ -807,6 +807,14 @@ public class I18nInspection extends AbstractBaseUastLocalInspectionTool implemen return NlsInfo.nonLocalized(); } + if (isSuppressedByComment(project, expression)) { + return NlsInfo.nonLocalized(); + } + + if (value != null && myCachedLiteralPattern != null && myCachedLiteralPattern.matcher(value).matches()) { + return NlsInfo.nonLocalized(); + } + List usages = findIndirectUsages(expression); if (usages.isEmpty()) { usages = Collections.singletonList(expression); @@ -816,9 +824,6 @@ public class I18nInspection extends AbstractBaseUastLocalInspectionTool implemen NlsInfo info = NlsInfo.forExpression(usage); switch (info.getNlsStatus()) { case YES: { - if (isSuppressedByComment(project, expression)) { - return NlsInfo.nonLocalized(); - } return info; } case UNSURE: { @@ -870,10 +875,6 @@ public class I18nInspection extends AbstractBaseUastLocalInspectionTool implemen @Nullable String value, @NotNull Set nonNlsTargets, @NotNull UExpression usage) { - if (value != null && myCachedLiteralPattern != null && myCachedLiteralPattern.matcher(value).matches()) { - return true; - } - if (isInNonNlsCall(usage, nonNlsTargets)) { return true; } diff --git a/plugins/java-i18n/testData/inspections/i18n/HtmlEntitiesNlsMode.java b/plugins/java-i18n/testData/inspections/i18n/HtmlEntitiesNlsMode.java new file mode 100644 index 000000000000..800380bec7b8 --- /dev/null +++ b/plugins/java-i18n/testData/inspections/i18n/HtmlEntitiesNlsMode.java @@ -0,0 +1,8 @@ +package com.intellij.openapi.util; + +import org.jetbrains.annotations.Nls; +import java.lang.annotation.*; + +class X { + static final @Nls String EMPTY_BODY = ""; +} \ No newline at end of file diff --git a/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/I18NInspectionTest.java b/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/I18NInspectionTest.java index 0fb980a9f0f1..af64d215dc3b 100644 --- a/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/I18NInspectionTest.java +++ b/plugins/java-i18n/testSrc/com/intellij/codeInspection/i18n/I18NInspectionTest.java @@ -19,6 +19,16 @@ public class I18NInspectionTest extends LightJavaCodeInsightFixtureTestCase { myFixture.testHighlighting("i18n/" + getTestName(false) + ".java"); } + private void doTestNlsMode() { + boolean old = myTool.setIgnoreForAllButNls(true); + try { + doTest(); + } + finally { + myTool.setIgnoreForAllButNls(old); + } + } + @Override protected @NotNull LightProjectDescriptor getProjectDescriptor() { return JAVA_8; @@ -53,36 +63,18 @@ public class I18NInspectionTest extends LightJavaCodeInsightFixtureTestCase { } public void testNlsOnly() { - boolean old = myTool.setIgnoreForAllButNls(true); - try { - doTest(); - } - finally { - myTool.setIgnoreForAllButNls(old); - } + doTestNlsMode(); } public void testNlsOnlyFields() { - boolean old = myTool.setIgnoreForAllButNls(true); - try { - doTest(); - } - finally { - myTool.setIgnoreForAllButNls(old); - } + doTestNlsMode(); } public void testNlsPackage() { myFixture.addFileToProject("package-info.java", "@Nls\n" + "package foo;\n" + "import org.jetbrains.annotations.Nls;"); - boolean old = myTool.setIgnoreForAllButNls(true); - try { - doTest(); - } - finally { - myTool.setIgnoreForAllButNls(old); - } + doTestNlsMode(); } public void testAnnotationArgument() { doTest(); } @@ -111,56 +103,22 @@ public class I18NInspectionTest extends LightJavaCodeInsightFixtureTestCase { } } - public void testNlsTypeUse() { - boolean old = myTool.setIgnoreForAllButNls(true); - try { - doTest(); - } - finally { - myTool.setIgnoreForAllButNls(old); - } - } + public void testNlsTypeUse() { doTestNlsMode(); } - public void testNonNlsIndirect() { - doTest(); - } + public void testNonNlsIndirect() { doTest(); } - public void testNlsIndirect() { - boolean old = myTool.setIgnoreForAllButNls(true); - try { - doTest(); - } - finally { - myTool.setIgnoreForAllButNls(old); - } - } - - public void testNonNlsMeta() { - doTest(); - } + public void testNlsIndirect() { doTestNlsMode(); } - public void testNlsMeta() { - boolean old = myTool.setIgnoreForAllButNls(true); - try { - doTest(); - } - finally { - myTool.setIgnoreForAllButNls(old); - } - } + public void testNonNlsMeta() { doTest(); } - public void testUseConstant() { - doTest(); - } + public void testNlsMeta() { doTestNlsMode(); } - public void testUseConstantNls() { - boolean old = myTool.setIgnoreForAllButNls(true); - try { - doTest(); - } - finally { - myTool.setIgnoreForAllButNls(old); - } + public void testUseConstant() { doTest(); } + + public void testUseConstantNls() { doTestNlsMode(); } + + public void testHtmlEntitiesNlsMode() { + doTestNlsMode(); } @Override