diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/BaseSplitter.java b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/BaseSplitter.java index 1671da510340..17ae7a30249e 100644 --- a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/BaseSplitter.java +++ b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/BaseSplitter.java @@ -24,7 +24,6 @@ import org.jetbrains.annotations.Nullable; import java.text.CharacterIterator; import java.text.StringCharacterIterator; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -84,20 +83,6 @@ public abstract class BaseSplitter implements Splitter { return TextRange.from(range.getStartOffset() + start, end - start); } - public List split(@Nullable final String text) { - if (text == null) { - return Collections.emptyList(); - } - final List result = new ArrayList(); - split(text, new TextRange(0, text.length()), new Consumer() { - @Override - public void consume(TextRange textRange) { - result.add(new CheckArea(text, textRange)); - } - }); - return result; - } - protected static boolean tooSmall(int from, int till) { return till - from <= MIN_RANGE_LENGTH; } diff --git a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/CheckArea.java b/plugins/spellchecker/src/com/intellij/spellchecker/inspections/CheckArea.java deleted file mode 100644 index e437a742cd0c..000000000000 --- a/plugins/spellchecker/src/com/intellij/spellchecker/inspections/CheckArea.java +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.spellchecker.inspections; - -import com.intellij.openapi.util.TextRange; -import org.jetbrains.annotations.Nullable; - -public class CheckArea { - - private final String text; - private final TextRange textRange; - - public CheckArea(String text, TextRange range) { - this.text = text; - textRange = range; - } - - public TextRange getTextRange() { - return textRange; - } - - @Nullable - public String getWord() { - if (text == null || textRange == null) return null; - return textRange.substring(text); - } - - @Override - public String toString() { - return "CheckArea{range = " + textRange + ", word=" + (getWord() != null ? getWord() : "") + '}'; - } -} diff --git a/plugins/spellchecker/testSrc/com/intellij/spellchecker/inspector/SplitterTest.java b/plugins/spellchecker/testSrc/com/intellij/spellchecker/inspector/SplitterTest.java index 0ca691c622ef..fc79a89aad62 100644 --- a/plugins/spellchecker/testSrc/com/intellij/spellchecker/inspector/SplitterTest.java +++ b/plugins/spellchecker/testSrc/com/intellij/spellchecker/inspector/SplitterTest.java @@ -15,12 +15,13 @@ */ package com.intellij.spellchecker.inspector; -import com.intellij.spellchecker.inspections.CheckArea; +import com.intellij.openapi.util.TextRange; +import com.intellij.spellchecker.inspections.Splitter; import com.intellij.spellchecker.inspections.SplitterFactory; +import com.intellij.util.Consumer; import junit.framework.Assert; import junit.framework.TestCase; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.io.BufferedReader; import java.io.IOException; @@ -36,399 +37,336 @@ public class SplitterTest extends TestCase { public void testSplitSimpleCamelCase() { String text = "simpleCamelCase"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"simple", "Camel", "Case"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "simple", "Camel", "Case"); } public void testSplitCamelCaseWithUpperCasedWord() { String text = "camelCaseJSP"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"camel", "Case"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "camel", "Case"); } public void testArrays() { String text = "Token[]"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"Token"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "Token"); } public void testIdentifierInSingleQuotes() { String text = "'fill'"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"fill"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "fill"); } public void testWordsInSingleQuotesWithSep() { String text = "'test-something'"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"test", "something"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "test", "something"); } public void testComplexWordsInQuotes() { String text = "\"test-customer's'\""; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"test", "customer's"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "test", "customer's"); } public void testCapitalizedWithShortWords() { String text = "IntelliJ"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"Intelli"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "Intelli"); } public void testWords() { String text = "first-last"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"first", "last"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "first", "last"); } public void testCapitalizedWithShortAndLongWords() { String text = "IntelliJTestTest"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"Intelli", "Test", "Test"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "Intelli", "Test", "Test"); } public void testWordWithApostrophe1() { String text = "don't check"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"don't", "check"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "don't", "check"); } public void testHexInPlainText() { String text = "some text 0xacvfgt"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"some", "text"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "some", "text"); } public void testHexInStringLiteral() { String text = "qwerty 0x12acfgt test"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"qwerty", "test"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "qwerty", "test"); } public void testHex() { String text = "0xacvfgt"; - List checkAreas = SplitterFactory.getInstance().getWordSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); + correctListToCheck(SplitterFactory.getInstance().getWordSplitter(), text); } public void testCheckXmlIgnored() { String text = "abcdef" + new String(new char[]{0xDC00}) + "test"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text); } public void testIdentifiersWithNumbers() { String text = "result1"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"result"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "result"); } - public void testIdentifiersWithNumbersInside() { + public void testIdentifiersWithNumbersInside() { String text = "result1result"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"result","result"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "result","result"); } public void testWordWithApostrophe2() { String text = "customers'"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"customers"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "customers"); } public void testWordWithApostrophe3() { String text = "customer's"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"customer's"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "customer's"); } public void testWordWithApostrophe4() { String text = "we'll"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"we'll"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "we'll"); } public void testWordWithApostrophe5() { String text = "I'm you're we'll"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"you're", "we'll"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "you're", "we'll"); } public void testConstantName() { String text = "TEST_CONSTANT"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"TEST", "CONSTANT"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "TEST", "CONSTANT"); } public void testLongConstantName() { String text = "TEST_VERY_VERY_LONG_AND_COMPLEX_CONSTANT"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"TEST", "VERY", "VERY", "LONG", "COMPLEX", "CONSTANT"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "TEST", "VERY", "VERY", "LONG", "COMPLEX", "CONSTANT"); } public void testJavaComments() { String text = "/*special symbols*/"; - List checkAreas = SplitterFactory.getInstance().getCommentSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"special", "symbols"}); + correctListToCheck(SplitterFactory.getInstance().getCommentSplitter(), text, "special", "symbols"); } public void testXmlComments() { String text = ""; - List checkAreas = SplitterFactory.getInstance().getCommentSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"special", "symbols"}); + correctListToCheck(SplitterFactory.getInstance().getCommentSplitter(), text, "special", "symbols"); } public void testCamelCaseInXmlComments() { String text = ""; - List checkAreas = SplitterFactory.getInstance().getCommentSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"special", "Case", "symbols"}); + correctListToCheck(SplitterFactory.getInstance().getCommentSplitter(), text, "special", "Case", "symbols"); } public void testWordsWithNumbers() { String text = "testCamelCase123"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"test", "Camel", "Case"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "test", "Camel", "Case"); } public void testCommentsWithWordsWithNumbers() { String text = ""; - List checkAreas = SplitterFactory.getInstance().getCommentSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"special", "Case", "symbols"}); + correctListToCheck(SplitterFactory.getInstance().getCommentSplitter(), text, "special", "Case", "symbols"); } public void testCommentsWithAbr() { String text = ""; - List checkAreas = SplitterFactory.getInstance().getCommentSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"Test", "Class"}); + correctListToCheck(SplitterFactory.getInstance().getCommentSplitter(), text, "Test", "Class"); } public void testStringLiterals() { String text = "test\ntest\n"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"test", "test"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "test", "test"); } public void testCommentWithHtml() { String text = ""; - List checkAreas = SplitterFactory.getInstance().getCommentSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"something", "here", "next", "content", "foooo", "barrrr", "text"}); + correctListToCheck(SplitterFactory.getInstance().getCommentSplitter(), text, "something", "here", "next", "content", "foooo", "barrrr", + "text"); } public void testCommentWithHtmlTagsAndAtr() { String text = ""; - List checkAreas = SplitterFactory.getInstance().getCommentSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"something", "here", "foooo", "barrrr", "text", "text"}); + correctListToCheck(SplitterFactory.getInstance().getCommentSplitter(), text, "something", "here", "foooo", "barrrr", "text", "text"); } public void testSpecial() { String text = "test   test"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"test", "test"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "test", "test"); } public void testColorUC() { String text = "#AABBFF"; - List checkAreas = SplitterFactory.getInstance().getWordSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); + correctListToCheck(SplitterFactory.getInstance().getWordSplitter(), text); } public void testColorUCSC() { String text = "#AABBFF;"; - List checkAreas = SplitterFactory.getInstance().getWordSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); + correctListToCheck(SplitterFactory.getInstance().getWordSplitter(), text); } public void testColorUCSurrounded() { String text = "\"#AABBFF\""; - List checkAreas = SplitterFactory.getInstance().getWordSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); + correctListToCheck(SplitterFactory.getInstance().getWordSplitter(), text); } public void testColorLC() { String text = "#fff"; - List checkAreas = SplitterFactory.getInstance().getAttributeValueSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); + correctListToCheck(SplitterFactory.getInstance().getAttributeValueSplitter(), text); } public void testTooShort() { String text = "bgColor carLight"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"Color", "Light"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "Color", "Light"); } public void testPhpVariableCorrectSimple() { String text = "$this"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"this"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "this"); } public void testPhpVariableCorrect() { String text = "$this_this$this"; - List checkAreas = SplitterFactory.getInstance().getIdentifierSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"this", "this", "this"}); + correctListToCheck(SplitterFactory.getInstance().getIdentifierSplitter(), text, "this", "this", "this"); } public void testEmail() { String text = "some text with email (shkate.test@gmail.com) inside"; - List checkAreas = SplitterFactory.getInstance().getStringLiteralSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"some", "text", "with", "email", "inside"}); + correctListToCheck(SplitterFactory.getInstance().getStringLiteralSplitter(), text, "some", "text", "with", "email", "inside"); } public void testEmailOnly() { String text = "shkate123-\u00DC.test@gmail.com"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text); } public void testUrl() { String text = "http://www.jetbrains.com/idea"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{}); - + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text); } public void testWordBeforeDelimiter() { String text = "badd,"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"badd"}); - + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "badd"); } public void testWordAfterDelimiter() { String text = ",badd"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"badd"}); - + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "badd"); } public void testWordInCapsBeforeDelimiter() { String text = "BADD,"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"BADD"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "BADD"); } public void testWordInCapsAfterDelimiter() { String text = ",BADD"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"BADD"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "BADD"); } public void testWordInCapsAfterDelimiter2() { String text = "BADD;"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"BADD"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "BADD"); } public void testWordInCapsAfterDelimiter3() { String text = ";BADD;"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"BADD"}); - + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "BADD"); } public void testWordWithUmlauts() { String text = "rechtsb\u00FCndig"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{text}); - + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, text); } - public void testWordUpperCasedWithUmlauts() { String text = "RECHTSB\u00DCNDIG"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{text}); - + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, text); } public void testCommaSeparatedList() { String text = "properties,test,properties"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"properties", "test", "properties"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "properties", "test", "properties"); } public void testSemicolonSeparatedList() { String text = "properties;test;properties"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"properties", "test", "properties"}); + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, "properties", "test", "properties"); } public void testProperties1() { String text = "properties.test.properties"; - List checkAreas = SplitterFactory.getInstance().getPropertiesSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"properties", "test", "properties"}); - + correctListToCheck(SplitterFactory.getInstance().getPropertiesSplitter(), text, "properties", "test", "properties"); } public void testPropertiesWithCamelCase() { String text = "upgrade.testCommit.propertiesSomeNews"; - List checkAreas = SplitterFactory.getInstance().getPropertiesSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{"upgrade", "test", "Commit", "properties", "Some", "News"}); - + correctListToCheck(SplitterFactory.getInstance().getPropertiesSplitter(), text, "upgrade", "test", "Commit", "properties", "Some", + "News"); } public void testWordUpperCasedWithUmlautsInTheBeginning() { String text = "\u00DCNDIG"; - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - correctListToCheck(checkAreas, text, new String[]{text}); - + correctListToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text, text); } public void testTCData() { final InputStream stream = SplitterTest.class.getResourceAsStream("contents.txt"); String text = convertStreamToString(stream); - List checkAreas = SplitterFactory.getInstance().getPlainTextSplitter().split(text); - List words = wordsToCheck(checkAreas, text); - assertNull(words); + List words = wordsToCheck(SplitterFactory.getInstance().getPlainTextSplitter(), text); + assertEquals(0, words.size()); } - @Nullable - private static List wordsToCheck(List toCheck, String text) { - if (text == null || toCheck == null) return null; - List words = new ArrayList(); - for (CheckArea area : toCheck) { - words.add(area.getWord()); - } - return (words.size() != 0) ? words : null; + private static List wordsToCheck(Splitter splitter, final String text) { + final List words = new ArrayList(); + splitter.split(text, TextRange.allOf(text), new Consumer() { + @Override + public void consume(TextRange textRange) { + words.add(textRange.substring(text)); + } + }); + return words; } - private static void correctListToCheck(List toCheck, String text, @NotNull String[] expected) { - List words = wordsToCheck(toCheck, text); + private static void correctListToCheck(Splitter splitter, String text, @NotNull String... expected) { + List words = wordsToCheck(splitter, text); List expectedWords = Arrays.asList(expected); Assert.assertEquals("Splitting:'" + text + "'", expectedWords.toString(), words!=null ? words.toString() : "[]"); }