diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/beans/ConvertUsagesUtil.java b/platform/platform-impl/src/com/intellij/internal/statistic/beans/ConvertUsagesUtil.java index f3cada41e1c3..5f9d75957849 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/beans/ConvertUsagesUtil.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/beans/ConvertUsagesUtil.java @@ -16,14 +16,17 @@ package com.intellij.internal.statistic.beans; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.hash.HashMap; +import org.jetbrains.annotations.NotNull; import java.util.*; +import java.util.regex.Pattern; public class ConvertUsagesUtil { - private static final Character GROUP_SEPARATOR = ':'; - private static final Character GROUPS_SEPARATOR = ';'; - private static final Character GROUP_VALUE_SEPARATOR = ','; + private static final char GROUP_SEPARATOR = ':'; + private static final char GROUPS_SEPARATOR = ';'; + private static final char GROUP_VALUE_SEPARATOR = ','; private ConvertUsagesUtil() { } @@ -76,9 +79,9 @@ public class ConvertUsagesUtil { public static Map> convertString(String usages) { assert usages != null; Map> descriptors = new HashMap>(); - for (String groupStr : usages.split(GROUPS_SEPARATOR.toString())) { + for (String groupStr : usages.split(Character.toString(GROUPS_SEPARATOR))) { if (!isEmptyOrSpaces(groupStr)) { - final StringPair group = getPair(groupStr, GROUP_SEPARATOR.toString()); + final StringPair group = getPair(groupStr, Character.toString(GROUP_SEPARATOR)); if (group != null) { descriptors.putAll(convertValueString(GroupDescriptor.create(group.first), group.second)); } @@ -91,7 +94,7 @@ public class ConvertUsagesUtil { public static Map> convertValueString(GroupDescriptor groupId, String valueData) { assert groupId != null; final Map> descriptors = new HashMap>(); - for (String value : valueData.split(GROUP_VALUE_SEPARATOR.toString())) { + for (String value : valueData.split(Character.toString(GROUP_VALUE_SEPARATOR))) { if (!isEmptyOrSpaces(value)) { final StringPair pair = getPair(value, "="); if (pair != null) { @@ -168,7 +171,29 @@ public class ConvertUsagesUtil { assert key.contains("\"") == false; } + @NotNull + public static String ensureProperKey(@NotNull String input) { + final StringBuilder escaped = new StringBuilder(); + for (int i = 0; i < input.length(); i++) { + final char ch = input.charAt(i); + switch (ch) { + case GROUP_SEPARATOR: + case GROUPS_SEPARATOR: + case GROUP_VALUE_SEPARATOR: + case '\'': + case '\"': + case '=': + escaped.append(' '); + break; + default: + escaped.append(ch); + break; + } + } + return escaped.toString(); + } + public static boolean containsChar(final String value, final char ch) { - return value.indexOf(ch) >= 0; + return value.indexOf(ch) >= 0; } } diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/beans/GroupDescriptor.java b/platform/platform-impl/src/com/intellij/internal/statistic/beans/GroupDescriptor.java index 9da21feb3126..f67236f3bbe8 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/beans/GroupDescriptor.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/beans/GroupDescriptor.java @@ -24,8 +24,6 @@ public class GroupDescriptor implements Comparable { private double myPriority; public static GroupDescriptor create(String id) { - ConvertUsagesUtil.assertDescriptorName(id); - return new GroupDescriptor(id); } @@ -40,7 +38,7 @@ public class GroupDescriptor implements Comparable { private GroupDescriptor(String id, double priority) { assert id != null; - myId = id; + myId = ConvertUsagesUtil.ensureProperKey(id); myPriority = priority; } diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/beans/UsageDescriptor.java b/platform/platform-impl/src/com/intellij/internal/statistic/beans/UsageDescriptor.java index a806a674e132..4b22ddcd4982 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/beans/UsageDescriptor.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/beans/UsageDescriptor.java @@ -14,31 +14,31 @@ * limitations under the License. */ package com.intellij.internal.statistic.beans; + public class UsageDescriptor implements Comparable { - private final String myKey; - private int myValue; + private final String myKey; + private int myValue; - public UsageDescriptor(String key, int value) { - ConvertUsagesUtil.assertDescriptorName(key); + public UsageDescriptor(String key, int value) { + assert key != null; + myKey = ConvertUsagesUtil.ensureProperKey(key); + myValue = value; + } - myKey = key; - myValue = value; - } + public String getKey() { + return myKey; + } - public String getKey() { - return myKey; - } + public int getValue() { + return myValue; + } - public int getValue() { - return myValue; - } - - public void setValue(int i) { - myValue = i; - } + public void setValue(int i) { + myValue = i; + } public int compareTo(UsageDescriptor ud) { - return this.getKey().compareTo(ud.myKey); - } + return this.getKey().compareTo(ud.myKey); + } }