From 620b863120d334412d280cf1d4480107f4aa392d Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Wed, 5 Jul 2017 13:19:44 +0200 Subject: [PATCH] Optimize JavaIdentifierNormalizer.normalizeClassIdentifier() 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 --- .../util/JavaIdentifierNormalizer.java | 35 ++++++------------- 1 file changed, 11 insertions(+), 24 deletions(-) diff --git a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java index 3f0d7e760f..c98a03dfc7 100644 --- a/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java +++ b/binding2/mdsal-binding2-generator-util/src/main/java/org/opendaylight/mdsal/binding/javav2/generator/util/JavaIdentifierNormalizer.java @@ -341,32 +341,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); } /** -- 2.36.6