Eliminate use of String.replace{All}() 89/62989/3
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 11 Sep 2017 16:33:03 +0000 (18:33 +0200)
committerTom Pantelis <tompantelis@gmail.com>
Mon, 11 Sep 2017 21:58:05 +0000 (21:58 +0000)
We can pre-compile the pattern, so use that instead of the built-in
String thing.

Change-Id: I831fdb89debbe4eac8a4ca99f5b950e70e9556cf
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java
binding2/mdsal-binding2-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/javav2/java/api/generator/util/TextTemplateUtil.java

index 7dc111e9ad646e823bee9c81c80a3881559ca68d..ea090f72db6a59056661a424583a4a42fd925392 100644 (file)
@@ -15,6 +15,7 @@ import com.google.common.collect.ListMultimap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.regex.Pattern;
 import org.opendaylight.mdsal.binding.javav2.generator.context.ModuleContext;
 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration;
 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration.Pair;
@@ -216,6 +217,8 @@ public final class JavaIdentifierNormalizer {
     private static final Splitter DOT_SPLITTER = Splitter.on('.');
     private static final Splitter UNDERSCORE_SPLITTER = Splitter.on(UNDERSCORE);
 
+    private static final Pattern DOUBLE_UNDERSCORE_PATTERN = Pattern.compile("__", Pattern.LITERAL);
+
     // Converted to lower case
     private static final Set<String> WINDOWS_RESERVED_WORDS = BindingMapping.WINDOWS_RESERVED_WORDS.stream()
             .map(String::toLowerCase).collect(ImmutableSet.toImmutableSet());
@@ -333,7 +336,7 @@ public final class JavaIdentifierNormalizer {
      * @return - java acceptable identifier
      */
     static String normalizeClassIdentifier(final String packageName, final String className,
-            ModuleContext context) {
+            final ModuleContext context) {
         if (packageName.isEmpty() && PRIMITIVE_TYPES.contains(className)) {
             return className;
         }
@@ -404,8 +407,9 @@ public final class JavaIdentifierNormalizer {
                 sb.append(actualChar);
             }
         }
+
         // apply camel case in appropriate way
-        return fixCasesByJavaType(sb.toString().replace("__", "_").toLowerCase(), javaIdentifier);
+        return fixCasesByJavaType(DOUBLE_UNDERSCORE_PATTERN.matcher(sb).replaceAll("_").toLowerCase(), javaIdentifier);
     }
 
     /**
@@ -423,7 +427,7 @@ public final class JavaIdentifierNormalizer {
      * @return converted identifier
      */
     private static String normalizeClassIdentifier(final String packageName, final String origClassName,
-            final String actualClassName, final int rank, ModuleContext context) {
+            final String actualClassName, final int rank, final ModuleContext context) {
 
         final ListMultimap<String, String> packagesMap = context.getPackagesMap();
 
@@ -432,7 +436,7 @@ public final class JavaIdentifierNormalizer {
                 for (final String existingName : packagesMap.get(packageName)) {
                     if (actualClassName.equalsIgnoreCase(existingName)) {
                        return normalizeClassIdentifier(packageName, origClassName, origClassName + rank,
-                     rank + 1, context);
+                           rank + 1, context);
                     }
                 }
             }
index ff86acc46a1dc55b027d8e24d05bdc5c7a9123d6..654767e27bbd2546f2049438085b69adc30ab5af 100644 (file)
@@ -16,6 +16,7 @@ import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
 import java.util.List;
 import java.util.StringTokenizer;
+import java.util.regex.Pattern;
 import org.opendaylight.mdsal.binding.javav2.generator.util.Types;
 import org.opendaylight.mdsal.binding.javav2.model.api.AccessModifier;
 import org.opendaylight.mdsal.binding.javav2.model.api.ConcreteType;
@@ -43,6 +44,9 @@ public final class TextTemplateUtil {
     private static final CharMatcher LT_MATCHER = CharMatcher.is('<');
     private static final Splitter NL_SPLITTER = Splitter.on(NL_MATCHER);
 
+    private static final Pattern TAIL_COMMENT_PATTERN = Pattern.compile("*/", Pattern.LITERAL);
+    private static final Pattern MULTIPLE_SPACES_PATTERN = Pattern.compile(" +");
+
     private TextTemplateUtil() {
         throw new UnsupportedOperationException("Util class");
     }
@@ -287,7 +291,7 @@ public final class TextTemplateUtil {
                 .append(typeName)
                 .append(" set")
                 .append(toFirstUpper(field.getName()))
-                .append("(")
+                .append('(')
                 .append(returnTypeName)
                 .append(" value) {\n    this.")
                 .append(fieldName(field))
@@ -394,7 +398,7 @@ public final class TextTemplateUtil {
         final StringBuilder lineBuilder = new StringBuilder();
         final String lineIndent = Strings.repeat(" ", nextLineIndent);
         final String textToFormat = NEWLINE_OR_TAB.removeFrom(encodeJavadocSymbols(text));
-        final String formattedText = textToFormat.replaceAll(" +", " ");
+        final String formattedText = MULTIPLE_SPACES_PATTERN.matcher(textToFormat).replaceAll(" ");
         final StringTokenizer tokenizer = new StringTokenizer(formattedText, " ", true);
 
         while (tokenizer.hasMoreElements()) {
@@ -430,10 +434,7 @@ public final class TextTemplateUtil {
     }
 
     private static String encodeJavadocSymbols(final String description) {
-        if (description == null || description.isEmpty()) {
-            return description;
-        }
-        final String ret = description.replace("*/", "&#42;&#47;");
-        return AMP_MATCHER.replaceFrom(ret, "&amp;");
+        return Strings.isNullOrEmpty(description) ? description
+                : AMP_MATCHER.replaceFrom(TAIL_COMMENT_PATTERN.matcher(description).replaceAll("&#42;&#47;"), "&amp;");
     }
 }
\ No newline at end of file