From 1994a3eaf9e4a25f0ccd9e6860839a65cb736553 Mon Sep 17 00:00:00 2001 From: anna Date: Mon, 9 Aug 2010 18:32:40 +0400 Subject: [PATCH] sanitize suggested java identifiers --- .../codeStyle/JavaCodeStyleManagerImpl.java | 5 ++--- .../intellij/openapi/util/text/StringUtil.java | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java index 84931bc09cad..c00498228edb 100644 --- a/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/source/codeStyle/JavaCodeStyleManagerImpl.java @@ -38,7 +38,6 @@ import com.intellij.psi.util.TypeConversionUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; import com.intellij.util.containers.ContainerUtil; -import com.intellij.util.containers.HashSet; import gnu.trove.THashSet; import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NonNls; @@ -589,7 +588,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { String[] names = getSuggestionsByName(propertyName, variableKind, false); final PsiExpression qualifierExpression = methodExpr.getQualifierExpression(); if (qualifierExpression instanceof PsiReferenceExpression && ((PsiReferenceExpression)qualifierExpression).resolve() instanceof PsiVariable) { - names = ArrayUtil.append(names, changeIfNotIdentifier(qualifierExpression.getText() + StringUtil.capitalize(propertyName))); + names = ArrayUtil.append(names, StringUtil.sanitizeJavaIdentifier(changeIfNotIdentifier(qualifierExpression.getText() + StringUtil.capitalize(propertyName)))); } return new NamesByExprInfo(propertyName, names); } @@ -945,7 +944,7 @@ public class JavaCodeStyleManagerImpl extends JavaCodeStyleManager { @NotNull public SuggestedNameInfo suggestUniqueVariableName(@NotNull final SuggestedNameInfo baseNameInfo, PsiElement place, boolean lookForward) { final String[] names = baseNameInfo.names; - Set uniqueNames = new HashSet(names.length); + final LinkedHashSet uniqueNames = new LinkedHashSet(names.length); for (String name : names) { uniqueNames.add(suggestUniqueVariableName(name, place, lookForward)); } 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 24144ebeb38b..b09340a4bf2a 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -31,11 +31,8 @@ import org.jetbrains.annotations.Nullable; import java.beans.Introspector; import java.io.ByteArrayInputStream; import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; import java.text.DateFormat; import java.util.*; -import java.util.regex.MatchResult; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -1608,6 +1605,19 @@ public class StringUtil { return "a" + Character.toUpperCase(c) + name.substring(1); } + public static String sanitizeJavaIdentifier(String name) { + final StringBuilder result = new StringBuilder(); + + for (int i = 0; i < name.length(); i++) { + final char ch = name.charAt(i); + if (Character.isLetterOrDigit(ch)) { + result.append(ch); + } + } + + return result.toString(); + } + public static void assertValidSeparators(@NotNull CharSequence s) { for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == '\r') {