From 12d0396905aa77ead83ad1d6f8d9fdee9fa84d2b Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Fri, 7 Aug 2020 17:22:53 +0700 Subject: [PATCH] [java-i18n] Fix starting format handling (IDEA-247626) GitOrigin-RevId: d5b824f0321faee830d0691ed77e2352dbc0695e --- .../capitalization/TitleCapitalizationInspection.java | 6 ++++-- .../testData/inspections/capitalization/PropertyTest.java | 3 +++ .../codeInspection/CapitalizationInspectionTest.java | 3 ++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/plugins/java-i18n/src/com/intellij/codeInspection/capitalization/TitleCapitalizationInspection.java b/plugins/java-i18n/src/com/intellij/codeInspection/capitalization/TitleCapitalizationInspection.java index 61a0723457b5..0d808df48612 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/capitalization/TitleCapitalizationInspection.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/capitalization/TitleCapitalizationInspection.java @@ -270,11 +270,13 @@ public class TitleCapitalizationInspection extends AbstractBaseJavaLocalInspecti MessageFormat clone = (MessageFormat)myFormat.clone(); clone.setFormats(new Format[formats.length]); if (!NlsCapitalizationUtil.isCapitalizationSatisfied(clone.toPattern(), capitalization)) return false; - for (Format format : formats) { + boolean startsWithFormat = myFormat.toPattern().startsWith("{"); + for (int i = 0; i < formats.length; i++) { + Format format = formats[i]; if (format instanceof ChoiceFormat) { for (Object subValue : ((ChoiceFormat)format).getFormats()) { String str = subValue.toString(); - if (capitalization == Nls.Capitalization.Sentence) { + if (capitalization == Nls.Capitalization.Sentence && (i > 0 || !startsWithFormat)) { str = "The " + str; } if (!NlsCapitalizationUtil.isCapitalizationSatisfied(str, capitalization)) return false; diff --git a/plugins/java-i18n/testData/inspections/capitalization/PropertyTest.java b/plugins/java-i18n/testData/inspections/capitalization/PropertyTest.java index ef4207195a89..7c18f2ce604a 100644 --- a/plugins/java-i18n/testData/inspections/capitalization/PropertyTest.java +++ b/plugins/java-i18n/testData/inspections/capitalization/PropertyTest.java @@ -31,5 +31,8 @@ class X { test2(message("property.choice.lower", x)); test2(message("property.sentence.with.quote")); + + test(message("property.choice.sentence.start", x)); + test2(message("property.choice.sentence.start", x)); } } \ No newline at end of file diff --git a/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationInspectionTest.java b/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationInspectionTest.java index 0b4f5248187e..129cf50b0310 100644 --- a/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationInspectionTest.java +++ b/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationInspectionTest.java @@ -67,7 +67,8 @@ public class CapitalizationInspectionTest extends LightJavaCodeInsightFixtureTes "property.parameterized=Hello {0}\n" + "property.choice.title=Hello {0,choice,0#World|1#Universe}\n" + "property.choice.mixed=Hello {0,choice,0#World|1#universe}\n" + - "property.choice.lower=Hello {0,choice,0#world|1#universe}\n" + + "property.choice.lower=Hello {0,choice,0#world|1#universe}\n" + + "property.choice.sentence.start={0,choice,0#No|1#{0}} {0,choice,0#occurrences|1#occurrence|2#occurrences} found so far\n" + "property.sentence.with.quote='return' is not allowed here"; myFixture.addFileToProject("MyBundle.properties", props); doTest(false);