Optimize JavaIdentifierNormalizer reserved words lookup 49/60449/6
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 5 Jul 2017 09:44:41 +0000 (11:44 +0200)
committerRobert Varga <nite@hq.sk>
Mon, 17 Jul 2017 14:04:46 +0000 (14:04 +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.

+ adjusted to Guava 19 (stable/carbon)

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

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

index 1cb46af66523e9e0afd1d2e8e975b27e50008227..cf88d27435b6416f15f9f0e64a3a4a8ce67f25ff 100644 (file)
@@ -16,6 +16,7 @@ import com.google.common.collect.ListMultimap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.stream.Collectors;
 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration;
 import org.opendaylight.mdsal.binding.javav2.model.api.Enumeration.Pair;
 import org.opendaylight.mdsal.binding.javav2.util.BindingMapping;
@@ -219,6 +220,10 @@ public final class JavaIdentifierNormalizer {
     private static final Splitter DOT_SPLITTER = Splitter.on('.');
     private static final Splitter UNDERSCORE_SPLITTER = Splitter.on(UNDERSCORE);
 
+    // Converted to lower case
+    private static final Set<String> WINDOWS_RESERVED_WORDS = BindingMapping.WINDOWS_RESERVED_WORDS.stream()
+            .map(String::toLowerCase).collect(Collectors.collectingAndThen(Collectors.toSet(), ImmutableSet::copyOf));
+
     private JavaIdentifierNormalizer() {
         throw new UnsupportedOperationException("Util class");
     }
@@ -287,8 +292,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;
         }
 
@@ -364,19 +368,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
@@ -438,7 +439,7 @@ public final class JavaIdentifierNormalizer {
     /**
      * Fix cases of converted identifiers by Java type
      *
-     * @param string
+     * @param convertedIdentifier
      *            - converted identifier
      * @param javaIdentifier
      *            - java type of identifier