Optimize JavaIdentifierNormalizer.fixCases() 60/60460/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 5 Jul 2017 09:55:38 +0000 (11:55 +0200)
committerMartin Ciglan <martin.ciglan@pantheon.tech>
Mon, 17 Jul 2017 10:42:26 +0000 (10:42 +0000)
Rather than doing expensive String.split(), optimize the method
for non-underscore case and take advantage of Splitter. Also
peel the first iteration out of the loop.

Change-Id: I452737f1d3b65600aa73b19cf17ea837b12f843c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 21600d42239d0733a7b8d9de9ee442de108c8149)

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

index 3c478051fda276a13478b5029c29ea4c1de78a3a..b5f2fc3c5dfd2a33b823ed386f756c30ff6c14cf 100644 (file)
@@ -217,6 +217,7 @@ public final class JavaIdentifierNormalizer {
     private static final CharMatcher DASH_MATCHER = CharMatcher.is(DASH);
     private static final CharMatcher DASH_OR_SPACE_MATCHER = CharMatcher.anyOf(" -");
     private static final Splitter DOT_SPLITTER = Splitter.on('.');
+    private static final Splitter UNDERSCORE_SPLITTER = Splitter.on(UNDERSCORE);
 
     private JavaIdentifierNormalizer() {
         throw new UnsupportedOperationException("Util class");
@@ -486,19 +487,15 @@ public final class JavaIdentifierNormalizer {
      * @return resolved identifier
      */
     private static String fixCases(final String convertedIdentifier) {
-        final StringBuilder sb = new StringBuilder();
-        if (convertedIdentifier.contains(String.valueOf(UNDERSCORE))) {
-            boolean isFirst = true;
-            for (final String part : convertedIdentifier.split(String.valueOf(UNDERSCORE))) {
-                if (isFirst) {
-                    isFirst = false;
-                    sb.append(part);
-                } else {
-                    sb.append(capitalize(part));
-                }
-            }
-        } else {
-            sb.append(convertedIdentifier);
+        if (convertedIdentifier.indexOf(UNDERSCORE) == -1) {
+            return convertedIdentifier;
+        }
+
+        final StringBuilder sb = new StringBuilder(convertedIdentifier.length());
+        final Iterator<String> it = UNDERSCORE_SPLITTER.split(convertedIdentifier).iterator();
+        sb.append(it.next());
+        while (it.hasNext()) {
+            sb.append(capitalize(it.next()));
         }
         return sb.toString();
     }