diff --git a/.idea/inspectionProfiles/idea_default.xml b/.idea/inspectionProfiles/idea_default.xml index 1e68b7b72e03..fd3a0fa6c311 100644 --- a/.idea/inspectionProfiles/idea_default.xml +++ b/.idea/inspectionProfiles/idea_default.xml @@ -757,6 +757,10 @@ + + + + diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/TypeRepr.java b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/TypeRepr.java index a53dcc59f367..7ccdf002f8e3 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/TypeRepr.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/java/dependencyView/TypeRepr.java @@ -15,7 +15,6 @@ */ package org.jetbrains.jps.builders.java.dependencyView; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.io.DataExternalizer; import com.intellij.util.io.DataInputOutputUtil; import org.jetbrains.annotations.NotNull; @@ -241,7 +240,7 @@ public class TypeRepr { switch (t.getSort()) { case Type.OBJECT: - return context.getType(new ClassType(context.get(StringUtil.replaceChar(t.getClassName(), '.', '/')))); + return context.getType(new ClassType(context.get(t.getClassName().replace('.', '/')))); case Type.ARRAY: return context.getType(new ArrayType(getType(context, t.getElementType()))); diff --git a/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java b/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java index 4108c1bce9c9..df50098750f7 100644 --- a/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java +++ b/platform/analysis-impl/src/com/intellij/codeInspection/ProblemDescriptorUtil.java @@ -55,7 +55,7 @@ public class ProblemDescriptorUtil { } } } - ref = StringUtil.replaceChar(ref, '\n', ' ').trim(); + ref = ref.replace('\n', ' ').trim(); ref = StringUtil.first(ref, 100, true); return ref.trim().replaceAll("\\s+", " "); } diff --git a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java index ab28ec093213..8a1429f18ee7 100644 --- a/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java +++ b/platform/platform-impl/src/com/intellij/ide/actions/ShowSettingsUtilImpl.java @@ -28,7 +28,6 @@ import com.intellij.openapi.options.newEditor.SettingsDialogFactory; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; import com.intellij.openapi.ui.DialogWrapper; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.navigation.Place; import com.intellij.util.ui.update.Activatable; import com.intellij.util.ui.update.UiNotifyConnector; @@ -244,7 +243,7 @@ public class ShowSettingsUtilImpl extends ShowSettingsUtil { @NotNull public static String createDimensionKey(@NotNull Configurable configurable) { - return '#' + StringUtil.replaceChar(StringUtil.replaceChar(configurable.getDisplayName(), '\n', '_'), ' ', '_'); + return '#' + configurable.getDisplayName().replace('\n', '_').replace(' ', '_'); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/FilePointerPartNode.java b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/FilePointerPartNode.java index 776ce21020dc..c681b4606244 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/impl/FilePointerPartNode.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/impl/FilePointerPartNode.java @@ -309,7 +309,7 @@ class FilePointerPartNode { while (start1 < len1 && start2 < len2) { char c1 = s1.charAt(start1); char c2 = s2.charAt(start2); - if (!StringUtil.charsEqual(c1, c2, ignoreCase)) { + if (!StringUtil.charsMatch(c1, c2, ignoreCase)) { return start1; } start1++; diff --git a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java index 141bf14e6734..9eb1377c3d99 100644 --- a/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java +++ b/platform/platform-impl/src/com/intellij/ui/AppUIUtil.java @@ -33,7 +33,6 @@ import com.intellij.openapi.ui.popup.Balloon; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.SystemInfo; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.ToolWindowManager; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.*; @@ -135,7 +134,7 @@ public class AppUIUtil { public static String getFrameClass() { String name = ApplicationNamesInfo.getInstance().getProductName().toLowerCase(Locale.US); - String wmClass = VENDOR_PREFIX + StringUtil.replaceChar(name, ' ', '-'); + String wmClass = VENDOR_PREFIX + name.replace(' ', '-'); if ("true".equals(System.getProperty("idea.debug.mode"))) { wmClass += "-debug"; } diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index d16f2d027f0c..15c498a06ba9 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -144,6 +144,8 @@ public class StringUtil extends StringUtilRt { } }; + // Unlike String.replace(CharSequence,CharSequence) does not allocate intermediate objects on non-match + // TODO revise when JDK9 arrives - its String.replace(CharSequence, CharSequence) is more optimized @NotNull @Contract(pure = true) public static String replace(@NonNls @NotNull String text, @NonNls @NotNull String oldS, @NonNls @NotNull String newS) { @@ -156,34 +158,14 @@ public class StringUtil extends StringUtilRt { return replace(text, oldS, newS, true); } - public static void replaceChar(@NotNull char[] buffer, char oldChar, char newChar, int start, int end) { - for (int i = start; i < end; i++) { - char c = buffer[i]; - if (c == oldChar) { - buffer[i] = newChar; - } - } - } - + /** + * @deprecated Use {@link String#replace(char,char)} instead + */ @NotNull @Contract(pure = true) + @Deprecated public static String replaceChar(@NotNull String buffer, char oldChar, char newChar) { - StringBuilder newBuffer = null; - for (int i = 0; i < buffer.length(); i++) { - char c = buffer.charAt(i); - if (c == oldChar) { - if (newBuffer == null) { - newBuffer = new StringBuilder(buffer.length()); - newBuffer.append(buffer, 0, i); - } - - newBuffer.append(newChar); - } - else if (newBuffer != null) { - newBuffer.append(c); - } - } - return newBuffer == null ? buffer : newBuffer.toString(); + return buffer.replace(oldChar, newChar); } @Contract(pure = true) @@ -694,42 +676,6 @@ public class StringUtil extends StringUtilRt { return s; } - /** - * This is just an optimized version of Matcher.quoteReplacement - */ - @NotNull - @Contract(pure = true) - public static String quoteReplacement(@NotNull String s) { - boolean needReplacements = false; - - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (c == '\\' || c == '$') { - needReplacements = true; - break; - } - } - - if (!needReplacements) return s; - - StringBuilder sb = new StringBuilder(s.length() * 6 / 5); - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - if (c == '\\') { - sb.append('\\'); - sb.append('\\'); - } - else if (c == '$') { - sb.append('\\'); - sb.append('$'); - } - else { - sb.append(c); - } - } - return sb.toString(); - } - private static void unescapeStringCharacters(int length, @NotNull String s, @NotNull StringBuilder buffer) { boolean escaped = false; for (int idx = 0; idx < length; idx++) { @@ -954,7 +900,7 @@ public class StringUtil extends StringUtilRt { } @Contract(pure = true) - public static int stringHashCodeIgnoreWhitespaces(char[] chars, int from, int to) { + public static int stringHashCodeIgnoreWhitespaces(@NotNull char[] chars, int from, int to) { int h = 0; for (int off = from; off < to; off++) { char c = chars[off]; @@ -1148,10 +1094,10 @@ public class StringUtil extends StringUtilRt { @Contract(value = "null -> false", pure = true) public static boolean isNotEmpty(@Nullable String s) { - return s != null && !s.isEmpty(); + return !isEmpty(s); } - @Contract(value = "null -> true", pure=true) + @Contract(value = "null -> true", pure = true) public static boolean isEmpty(@Nullable String s) { return s == null || s.isEmpty(); } @@ -1688,12 +1634,9 @@ public class StringUtil extends StringUtilRt { @Contract(pure = true) public static boolean containsAnyChar(@NotNull final String value, @NotNull final String chars) { - if (chars.length() > value.length()) { - return containsAnyChar(value, chars, 0, value.length()); - } - else { - return containsAnyChar(chars, value, 0, chars.length()); - } + return chars.length() > value.length() + ? containsAnyChar(value, chars, 0, value.length()) + : containsAnyChar(chars, value, 0, chars.length()); } @Contract(pure = true) @@ -2780,7 +2723,7 @@ public class StringUtil extends StringUtilRt { return false; } for (int i = 0; i < s1.length(); i++) { - if (!charsMatch(s1.charAt(i), s2.charAt(i), true)) { + if (!charsEqualIgnoreCase(s1.charAt(i), s2.charAt(i))) { return false; } } @@ -2980,14 +2923,9 @@ public class StringUtil extends StringUtilRt { return shortenPathWithEllipsis(path, maxLength, false); } - @Contract(pure = true) - public static boolean charsEqual(char a, char b, boolean ignoreCase) { - return ignoreCase ? charsEqualIgnoreCase(a, b) : a == b; - } - @Contract(pure = true) public static boolean charsEqualIgnoreCase(char a, char b) { - return StringUtilRt.charsEqualIgnoreCase(a, b); + return charsMatch(a, b, true); } @Contract(pure = true) @@ -3051,14 +2989,6 @@ public class StringUtil extends StringUtilRt { return StringUtilRt.convertLineSeparators(text, newSeparator, offsetsToKeep); } - @NotNull - public static String convertLineSeparators(@NotNull String text, - @NotNull String newSeparator, - @Nullable int[] offsetsToKeep, - boolean keepCarriageReturn) { - return StringUtilRt.convertLineSeparators(text, newSeparator, offsetsToKeep, keepCarriageReturn); - } - @Contract(pure = true) public static int parseInt(final String string, final int defaultValue) { return StringUtilRt.parseInt(string, defaultValue); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java index 883bf404b45e..8fd7fc6938b9 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/execution/test/runner/TestMethodGradleConfigurationProducer.java @@ -190,6 +190,6 @@ public class TestMethodGradleConfigurationProducer extends GradleTestRunConfigur public static String createTestFilter(@Nullable String aClass, @Nullable String method) { if (aClass == null) return null; String testFilterPattern = aClass + (method == null ? "" : '.' + method); - return String.format("--tests \"%s\" ", StringUtil.replaceChar(testFilterPattern, '\"', '*')); + return String.format("--tests \"%s\" ", testFilterPattern.replace('\"', '*')); } } diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java index 82d89488df5e..da5336ba8e26 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator.java @@ -1397,7 +1397,7 @@ public class GroovyAnnotator extends GroovyElementVisitor { @Override public void visitGStringInjection(@NotNull GrStringInjection injection) { if (((GrString)injection.getParent()).isPlainString()) { - if (StringUtil.indexOf(injection.getText(), '\n') != -1) { + if (injection.getText().indexOf('\n') != -1) { myHolder.createErrorAnnotation(injection, GroovyBundle.message("injection.should.not.contain.line.feeds")); } } diff --git a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java index a29447dc376b..79e1641c0e6e 100644 --- a/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java +++ b/plugins/properties/src/com/intellij/lang/properties/ResourceBundleReference.java @@ -21,7 +21,6 @@ import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.icons.AllIcons; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; import com.intellij.util.Function; import com.intellij.util.IncorrectOperationException; @@ -50,7 +49,7 @@ public class ResourceBundleReference extends PsiReferenceBase public ResourceBundleReference(final PsiElement element, boolean soft) { super(element, soft); - myBundleName = StringUtil.replaceChar(getValue(), '/', '.'); + myBundleName = getValue().replace('/', '.'); } @Override @@ -96,7 +95,7 @@ public class ResourceBundleReference extends PsiReferenceBase } private char getPackageDelimiter() { - return StringUtil.indexOf(getValue(), '/') != -1 ? '/' : '.'; + return getValue().indexOf('/') != -1 ? '/' : '.'; } @Override diff --git a/spellchecker/src/com/intellij/spellchecker/inspections/PlainTextSplitter.java b/spellchecker/src/com/intellij/spellchecker/inspections/PlainTextSplitter.java index a818d2857c6b..091f742ea24d 100644 --- a/spellchecker/src/com/intellij/spellchecker/inspections/PlainTextSplitter.java +++ b/spellchecker/src/com/intellij/spellchecker/inspections/PlainTextSplitter.java @@ -50,11 +50,11 @@ public class PlainTextSplitter extends BaseSplitter { @Override public void split(@Nullable String text, @NotNull TextRange range, Consumer consumer) { - if (text == null || StringUtil.isEmpty(text)) { + if (StringUtil.isEmpty(text)) { return; } - final String substring = StringUtil.replaceChar(StringUtil.replaceChar(range.substring(text), '\b', '\n'), '\f', '\n'); + final String substring = range.substring(text).replace('\b', '\n').replace('\f', '\n'); if (Verifier.checkCharacterData(SPLIT_PATTERN.matcher(substring).replaceAll("")) != null) { return; }