BUG-582: Optimize string modification 83/7383/1
authorRobert Varga <rovarga@cisco.com>
Sat, 24 May 2014 09:37:50 +0000 (11:37 +0200)
committerRobert Varga <rovarga@cisco.com>
Sun, 25 May 2014 15:54:13 +0000 (17:54 +0200)
This code could potentially end up with a lot of copying around. Pay a
single copy operation, iterate over the character array once and replace
characters as needed.

Change-Id: Ifdb80f83c938fde9c70ec6f34300fd010b01db6a
Signed-off-by: Robert Varga <rovarga@cisco.com>
code-generator/binding-generator-util/src/main/java/org/opendaylight/yangtools/binding/generator/util/BindingGeneratorUtil.java

index 84e194a1fdad89e6bd0ca12e7313efc3c1a865d7..b420ed80d1289148fe2f3fb2df1acbc26a109d42 100644 (file)
@@ -159,21 +159,26 @@ public final class BindingGeneratorUtil {
         String namespace = module.getNamespace().toString();
         namespace = COLON_SLASH_SLASH.matcher(namespace).replaceAll(QUOTED_DOT);
 
-        // FIXME: improve these
-        namespace = namespace.replace("/", ".");
-        namespace = namespace.replace(":", ".");
-        namespace = namespace.replace("-", ".");
-        namespace = namespace.replace("@", ".");
-        namespace = namespace.replace("$", ".");
-        namespace = namespace.replace("#", ".");
-        namespace = namespace.replace("'", ".");
-        namespace = namespace.replace("*", ".");
-        namespace = namespace.replace("+", ".");
-        namespace = namespace.replace(",", ".");
-        namespace = namespace.replace(";", ".");
-        namespace = namespace.replace("=", ".");
-
-        packageNameBuilder.append(namespace);
+        final char[] chars = namespace.toCharArray();
+        for (int i = 0; i < chars.length; ++i) {
+            switch (chars[i]) {
+            case '/':
+            case ':':
+            case '-':
+            case '@':
+            case '$':
+            case '#':
+            case '\'':
+            case '*':
+            case '+':
+            case ',':
+            case ';':
+            case '=':
+                chars[i] = '.';
+            }
+        }
+
+        packageNameBuilder.append(chars);
         packageNameBuilder.append(".rev");
         packageNameBuilder.append(DATE_FORMAT.get().format(module.getRevision()));
 
@@ -218,11 +223,11 @@ public final class BindingGeneratorUtil {
             traversalSteps = (pathToNode.size() - 1);
         }
         for (int i = 0; i < traversalSteps; ++i) {
-            builder.append(".");
+            builder.append('.');
             String nodeLocalName = pathToNode.get(i).getLocalName();
 
-            nodeLocalName = nodeLocalName.replace(":", ".");
-            nodeLocalName = nodeLocalName.replace("-", ".");
+            nodeLocalName = nodeLocalName.replace(':', '.');
+            nodeLocalName = nodeLocalName.replace('-', '.');
             builder.append(nodeLocalName);
         }
         return validateJavaPackage(builder.toString());