BUG-2498: optimize enum's forValue() method 32/13532/1
authorRobert Varga <rovarga@cisco.com>
Wed, 10 Dec 2014 11:12:13 +0000 (12:12 +0100)
committerRobert Varga <rovarga@cisco.com>
Wed, 10 Dec 2014 11:12:13 +0000 (12:12 +0100)
Use an ImmutableMap, as it provides optimized lookups based on
cardinality. Also hide the map from the package and turn it into a
constant.

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

index cc05fb49120d10dbfc12e065d76440dd837ae6f8..417451bc181eee82bc51d14c51909aeb56430d8c 100644 (file)
@@ -58,14 +58,16 @@ class EnumTemplate extends BaseTemplate {
 
 
             int value;
-            static java.util.Map<java.lang.Integer, «enums.name»> valueMap;
+            private static final java.util.Map<java.lang.Integer, «enums.name»> VALUE_MAP;
 
             static {
-                valueMap = new java.util.HashMap<>();
+                final com.google.common.collect.ImmutableMap.Builder<java.lang.Integer, «enums.name»> b = com.google.common.collect.ImmutableMap.builder();
                 for («enums.name» enumItem : «enums.name».values())
                 {
-                    valueMap.put(enumItem.value, enumItem);
+                    b.put(enumItem.value, enumItem);
                 }
+
+                VALUE_MAP = b.build();
             }
         
             private «enums.name»(int value) {
@@ -84,7 +86,7 @@ class EnumTemplate extends BaseTemplate {
              * @return corresponding «enums.name» item
              */
             public static «enums.name» forValue(int valueArg) {
-                return valueMap.get(valueArg);
+                return VALUE_MAP.get(valueArg);
             }
         }
     '''