Optimize JavaIdentifierNormalizer reserved words lookup 63/59963/2
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 5 Jul 2017 09:44:41 +0000 (11:44 +0200)
committerMartin Ciglan <martin.ciglan@pantheon.tech>
Thu, 6 Jul 2017 09:03:13 +0000 (09:03 +0000)
Rather than having to go to upper case for each identifier being
looked up, cache a lower-case version of
BindingMapping.WINDOWS_RESERVED_WORDS.

Change-Id: I1fe5f89cfd2b443b059bde3c5250c916b33b0978
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

index 3c478051fda276a13478b5029c29ea4c1de78a3a..8202f192a1650ad7b571772898b7734994d8810b 100644 (file)
@@ -218,6 +218,10 @@ public final class JavaIdentifierNormalizer {
     private static final CharMatcher DASH_OR_SPACE_MATCHER = CharMatcher.anyOf(" -");
     private static final Splitter DOT_SPLITTER = Splitter.on('.');
 
+    // Converted to lower case
+    private static final Set<String> WINDOWS_RESERVED_WORDS = BindingMapping.WINDOWS_RESERVED_WORDS.stream()
+            .map(String::toLowerCase).collect(ImmutableSet.toImmutableSet());
+
     private JavaIdentifierNormalizer() {
         throw new UnsupportedOperationException("Util class");
     }
@@ -286,8 +290,7 @@ public final class JavaIdentifierNormalizer {
         // if part of package name consist from java or windows reserved word, return it with
         // underscore at the end and in lower case
         final String lowerPart = packageNamePart.toLowerCase();
-        if (BindingMapping.JAVA_RESERVED_WORDS.contains(lowerPart)
-                || BindingMapping.WINDOWS_RESERVED_WORDS.contains(packageNamePart.toUpperCase())) {
+        if (BindingMapping.JAVA_RESERVED_WORDS.contains(lowerPart) || WINDOWS_RESERVED_WORDS.contains(lowerPart)) {
             return lowerPart + UNDERSCORE;
         }
 
@@ -376,19 +379,16 @@ public final class JavaIdentifierNormalizer {
      * @return - java acceptable identifier
      */
     public static String normalizeSpecificIdentifier(final String identifier, final JavaIdentifier javaIdentifier) {
-        final StringBuilder sb = new StringBuilder();
-
         // if identifier isn't PACKAGE type then check it by reserved keywords
-        if(javaIdentifier != JavaIdentifier.PACKAGE) {
-            if (BindingMapping.JAVA_RESERVED_WORDS.contains(identifier.toLowerCase())
-                    || BindingMapping.WINDOWS_RESERVED_WORDS.contains(identifier.toUpperCase())) {
-                return fixCasesByJavaType(
-                        sb.append(identifier).append(UNDERSCORE).append(RESERVED_KEYWORD).toString().toLowerCase(),
-                        javaIdentifier);
+        if (javaIdentifier != JavaIdentifier.PACKAGE) {
+            final String lower = identifier.toLowerCase();
+            if (BindingMapping.JAVA_RESERVED_WORDS.contains(lower) || WINDOWS_RESERVED_WORDS.contains(lower)) {
+                return fixCasesByJavaType(lower + UNDERSCORE + RESERVED_KEYWORD, javaIdentifier);
             }
         }
 
         // check and convert first char in identifier if there is non-java char
+        final StringBuilder sb = new StringBuilder();
         final char firstChar = identifier.charAt(FIRST_CHAR);
         if (!Character.isJavaIdentifierStart(firstChar)) {
             // converting first char of identifier