From 4e7a6e8225f1907cd1ac4fc1c86663a2a8f01934 Mon Sep 17 00:00:00 2001 From: "Maxim.Mossienko" Date: Tue, 22 Mar 2016 19:00:01 +0100 Subject: [PATCH] fix SIOOBE: String's split can return empty strings --- .../TitleCapitalizationInspection.java | 13 +++++++------ .../intellij/codeInspection/CapitalizationTest.java | 1 + 2 files changed, 8 insertions(+), 6 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 6eca8d446dd2..ee7b2b346401 100644 --- a/plugins/java-i18n/src/com/intellij/codeInspection/capitalization/TitleCapitalizationInspection.java +++ b/plugins/java-i18n/src/com/intellij/codeInspection/capitalization/TitleCapitalizationInspection.java @@ -35,6 +35,7 @@ import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Collections; +import java.util.List; /** * @author yole @@ -182,11 +183,11 @@ public class TitleCapitalizationInspection extends BaseJavaLocalInspectionTool { } private static boolean checkSentenceCapitalization(@NotNull String value) { - String[] words = value.split(" "); - if (words.length == 0) return true; - if (Character.isLetter(words[0].charAt(0)) && !isCapitalizedWord(words[0])) return false; - for (int i = 1; i < words.length; i++) { - String word = words[i]; + List words = StringUtil.split(value, " "); + if (words.size() == 0) return true; + if (Character.isLetter(words.get(0).charAt(0)) && !isCapitalizedWord(words.get(0))) return false; + for (int i = 1, size = words.size(); i < size; i++) { + String word = words.get(i); if (isCapitalizedWord(word)) { // check for abbreviations like SQL or I18n if (word.length() == 1 || !Character.isLowerCase(word.charAt(1))) @@ -198,7 +199,7 @@ public class TitleCapitalizationInspection extends BaseJavaLocalInspectionTool { } private static boolean isCapitalizedWord(String word) { - return Character.isLetter(word.charAt(0)) && Character.isUpperCase(word.charAt(0)); + return word.length() > 0 && Character.isLetter(word.charAt(0)) && Character.isUpperCase(word.charAt(0)); } private static class TitleCapitalizationFix implements LocalQuickFix { diff --git a/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationTest.java b/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationTest.java index 17206f8426e8..c3ff40e2e06c 100644 --- a/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationTest.java +++ b/plugins/java-i18n/testSrc/com/intellij/codeInspection/CapitalizationTest.java @@ -27,5 +27,6 @@ public class CapitalizationTest extends TestCase { assertTrue(TitleCapitalizationInspection.checkCapitalization("Fix C issues", Nls.Capitalization.Sentence)); assertTrue(TitleCapitalizationInspection.checkCapitalization("@charset is invalid", Nls.Capitalization.Sentence)); assertTrue(TitleCapitalizationInspection.checkCapitalization("Add 'this' qualifier", Nls.Capitalization.Sentence)); + assertTrue(TitleCapitalizationInspection.checkCapitalization("Add 'this' qualifier", Nls.Capitalization.Sentence)); } }