Optimize JavaIdentifierNormalizer.normalizePartialPackageName() 44/60444/1
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 5 Jul 2017 08:55:27 +0000 (10:55 +0200)
committerMartin Ciglan <martin.ciglan@pantheon.tech>
Mon, 17 Jul 2017 06:51:21 +0000 (06:51 +0000)
- eliminate duplicate String.toLower() calls
- use StringBuilder.length() instead of toString.isEmpty()
- use CharMatcher.replaceFrom() instead of String.replaceAll()
- reuse innerSb

Change-Id: I7fcdb1f2b3d6a9a0d549b1506e5a381d94ed1ba6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 539c9d657cc0aff53bd05bba74545275cba8885c)

binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java

index 03bac43cc3c04fe38ec6a9ede9001fe8acb60ef0..44cb795778f765e1f83155107fb004667aca668f 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.mdsal.binding.javav2.generator.util;
 
 import com.google.common.annotations.Beta;
+import com.google.common.base.CharMatcher;
 import com.google.common.base.Splitter;
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableSet;
@@ -213,6 +214,7 @@ public final class JavaIdentifierNormalizer {
     private static final ListMultimap<String, String> PACKAGES_MAP = ArrayListMultimap.create();
     private static final Set<String> PRIMITIVE_TYPES = ImmutableSet.of("char[]", "byte[]");
 
+    private static final CharMatcher DASH_MATCHER = CharMatcher.is(DASH);
     private static final Splitter DOT_SPLITTER = Splitter.on('.');
 
     private JavaIdentifierNormalizer() {
@@ -282,29 +284,30 @@ public final class JavaIdentifierNormalizer {
     public static String normalizePartialPackageName(final String packageNamePart) {
         // if part of package name consist from java or windows reserved word, return it with
         // underscore at the end and in lower case
-        if (BindingMapping.JAVA_RESERVED_WORDS.contains(packageNamePart.toLowerCase())
+        final String lowerPart = packageNamePart.toLowerCase();
+        if (BindingMapping.JAVA_RESERVED_WORDS.contains(lowerPart)
                 || BindingMapping.WINDOWS_RESERVED_WORDS.contains(packageNamePart.toUpperCase())) {
-            return new StringBuilder(packageNamePart).append(UNDERSCORE).toString().toLowerCase();
-        }
-        String normalizedPackageNamePart = packageNamePart;
-        if (packageNamePart.contains(String.valueOf(DASH))) {
-            normalizedPackageNamePart = packageNamePart.replaceAll(String.valueOf(DASH), String.valueOf(UNDERSCORE));
+            return lowerPart + UNDERSCORE;
         }
+
+        final String normalizedPart = DASH_MATCHER.replaceFrom(packageNamePart, UNDERSCORE);
+
         final StringBuilder sb = new StringBuilder();
-        StringBuilder innserSb = new StringBuilder();
-        for (int i = 0; i < normalizedPackageNamePart.length(); i++) {
-            if (normalizedPackageNamePart.charAt(i) == UNDERSCORE) {
-                if (!innserSb.toString().isEmpty()) {
-                    sb.append(normalizeSpecificIdentifier(innserSb.toString(), JavaIdentifier.PACKAGE));
-                    innserSb = new StringBuilder();
+        final StringBuilder innerSb = new StringBuilder();
+        for (int i = 0; i < normalizedPart.length(); i++) {
+            final char c = normalizedPart.charAt(i);
+            if (c == UNDERSCORE) {
+                if (innerSb.length() != 0) {
+                    sb.append(normalizeSpecificIdentifier(innerSb.toString(), JavaIdentifier.PACKAGE));
+                    innerSb.setLength(0);
                 }
                 sb.append(UNDERSCORE);
             } else {
-                innserSb.append(normalizedPackageNamePart.charAt(i));
+                innerSb.append(c);
             }
         }
-        if (!innserSb.toString().isEmpty()) {
-            sb.append(normalizeSpecificIdentifier(innserSb.toString(), JavaIdentifier.PACKAGE));
+        if (innerSb.length() != 0) {
+            sb.append(normalizeSpecificIdentifier(innerSb.toString(), JavaIdentifier.PACKAGE));
         }
         // returned normalized part of package name
         return sb.toString();