From 29c2d3351bdf371274433e71909236f133130bfb Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 26 May 2015 20:32:20 +0200 Subject: [PATCH] BUG-1485: store patterns in an array 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 --- .../yangtools/sal/java/api/generator/ClassTemplate.xtend | 9 +++++---- .../java/api/generator/test/TypedefCompilationTest.java | 3 ++- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend index cc3a78809a..6da9c0a7b1 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/ClassTemplate.xtend @@ -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» «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; } ''' diff --git a/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java b/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java index 86e16edbfa..5d3f1f89b2 100644 --- a/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java +++ b/code-generator/binding-java-api-generator/src/test/java/org/opendaylight/yangtools/sal/java/api/generator/test/TypedefCompilationTest.java @@ -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); -- 2.36.6