Optimize JavaIdentifierNormalizer.normalizeClassIdentifier() 65/60465/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 5 Jul 2017 11:19:44 +0000 (13:19 +0200)
committerMartin Ciglan <martin.ciglan@pantheon.tech>
Mon, 17 Jul 2017 11:18:59 +0000 (11:18 +0000)
Inner split-and-iterate is really just a simple substring assembly,
as mentioned in comments. Let's not go off into weeds and perform
a simple lastIndexOf() and substring() operations.

Change-Id: I2f21a6c92644a358bd9f8316bedde33f8b661f13
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
(cherry picked from commit 620b863120d334412d280cf1d4480107f4aa392d)

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

index 6dae4f32f30d76d39a2163bfb732f841d8aec4c0..1cb46af66523e9e0afd1d2e8e975b27e50008227 100644 (file)
@@ -338,32 +338,19 @@ public final class JavaIdentifierNormalizer {
             }
         }
         final String convertedClassName = normalizeSpecificIdentifier(className, JavaIdentifier.CLASS);
-        // if packageName contains class name at the end, then the className is
-        // name of inner class
-        final String[] packageNameParts = packageName.split("\\.");
-        String suppInnerClassPackageName = packageName;
-        if (packageNameParts.length > 1) {
-            if (Character.isUpperCase(packageNameParts[packageNameParts.length - 1].charAt(FIRST_CHAR))) {
-                final StringBuilder sb = new StringBuilder();
-                // ignore class name in package name - inner class name has
-                // to be normalizing according to original package of parent
-                // class
-                for (int i = 0; i < packageNameParts.length - 1; i++) {
-                    if (!Character.isUpperCase(packageNameParts[i].charAt(FIRST_CHAR))) {
-                        sb.append(packageNameParts[i]);
-                        if (i != packageNameParts.length - 2 &&
-                                !Character.isUpperCase(packageNameParts[i+1].charAt(FIRST_CHAR))) {
-                            sb.append('.');
-                        }
-                    } else {
-                        break;
-                    }
-                }
-                suppInnerClassPackageName = sb.toString();
-            }
+
+        // if packageName contains class name at the end, then the className is name of inner class
+        final String basePackageName;
+        final int lastDot = packageName.lastIndexOf('.');
+        if (lastDot != -1 && Character.isUpperCase(packageName.charAt(lastDot + 1))) {
+            // ignore class name in package name - inner class name has to be normalized according to original package
+            // of parent class
+            basePackageName = packageName.substring(FIRST_CHAR, lastDot);
+        } else {
+            basePackageName = packageName;
         }
 
-        return normalizeClassIdentifier(suppInnerClassPackageName, convertedClassName, convertedClassName, FIRST_INDEX);
+        return normalizeClassIdentifier(basePackageName, convertedClassName, convertedClassName, FIRST_INDEX);
     }
 
     /**