BUG-1485: store patterns in an array 63/21163/4
authorRobert Varga <rovarga@cisco.com>
Tue, 26 May 2015 18:32:20 +0000 (20:32 +0200)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 28 May 2015 07:23:51 +0000 (07:23 +0000)
Internal compiled patters are only ever iterated over, hence there is no
need to store them in a list. Convert the field into an array, improving
both CPU and memory efficiency very slightly. Also saves instantiation
of a temporary list.

Change-Id: I5140bc81d0a78d4f91d4ad2d6f81cbd6ed1f6d55
Signed-off-by: Robert Varga <rovarga@cisco.com>
code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend
code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java

index cc3a78809a8215943b3f82a2469f8f54ed705313..6da9c0a7b199e216d5aade24feec09e65e49d57d 100644 (file)
@@ -472,7 +472,7 @@ class ClassTemplate extends BaseTemplate {
                 «IF c.name == TypeConstants.PATTERN_CONSTANT_NAME»
                     «val cValue = c.value»
                     «IF cValue instanceof List<?>»
-                        private static final «List.importedName»<«Pattern.importedName»> «Constants.MEMBER_PATTERN_LIST»;
+                        private static final «Pattern.importedName»[] «Constants.MEMBER_PATTERN_LIST»;
                         public static final «List.importedName»<String> «TypeConstants.PATTERN_CONSTANT_NAME» = «ImmutableList.importedName».of(«
                         FOR v : cValue SEPARATOR ", "»«
                             IF v instanceof String»"«
@@ -496,12 +496,13 @@ class ClassTemplate extends BaseTemplate {
      */
     def protected generateStaticInicializationBlock() '''
         static {
-            final «List.importedName»<«Pattern.importedName»> l = new «ArrayList.importedName»<«Pattern.importedName»>();
+            final «Pattern.importedName» a[] = new «Pattern.importedName»[«TypeConstants.PATTERN_CONSTANT_NAME».size()];
+            int i = 0;
             for (String regEx : «TypeConstants.PATTERN_CONSTANT_NAME») {
-                l.add(Pattern.compile(regEx));
+                a[i++] = Pattern.compile(regEx);
             }
 
-            «Constants.MEMBER_PATTERN_LIST» = «ImmutableList.importedName».copyOf(l);
+            «Constants.MEMBER_PATTERN_LIST» = a;
         }
     '''
 
index 86e16edbfaaab34cba193b66a9c6207b8bcc93ad..5d3f1f89b2fbf0ce5c049a3c5e751c9d3e93ae7a 100644 (file)
@@ -36,6 +36,7 @@ import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.regex.Pattern;
 import org.junit.Test;
 import org.opendaylight.yangtools.sal.binding.model.api.Type;
 import org.opendaylight.yangtools.sal.java.api.generator.GeneratorJavaFile;
@@ -186,7 +187,7 @@ public class TypedefCompilationTest extends BaseCompilationTest {
         assertFalse(stringExt1Class.isInterface());
         assertContainsField(stringExt1Class, VAL, String.class);
         assertContainsField(stringExt1Class, LENGTH, List.class);
-        assertContainsField(stringExt1Class, "patterns", List.class);
+        assertContainsField(stringExt1Class, "patterns", Pattern[].class);
         assertContainsField(stringExt1Class, "PATTERN_CONSTANTS", List.class);
         assertContainsFieldWithValue(stringExt1Class, "serialVersionUID", Long.TYPE, 6943827552297110991L, String.class);
         // assertEquals(5, stringExt1Class.getDeclaredFields().length);