Builder should acquire augmentations only once 65/76965/2
authorRobert Varga <robert.varga@pantheon.tech>
Sat, 13 Oct 2018 08:28:34 +0000 (10:28 +0200)
committerRobert Varga <nite@hq.sk>
Sat, 13 Oct 2018 09:59:13 +0000 (09:59 +0000)
While generated DataObjects have this method simple, LazyDataObject
constructs the map lazily and caches it -- hence additional access
is forcing an additional volatile read.

Therefore instead of invoking augmentations() twice, store its
result in a local variable and reuse that.

Change-Id: Ifbe2002bb7edbd253d65b5bdc1e53c4d687bed32
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend

index 8c595ba6416989eefefa827d68e0b2cdf6c0db7c..c44acd22bf34e017bf1fe7a6aa07027b79bc701a 100644 (file)
@@ -361,6 +361,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
         val augmentationHolderRef = AugmentationHolder.importedName
         val typeRef = targetType.importedName
         val hashMapRef = HashMap.importedName
+        val augmentTypeRef = augmentType.importedName
         return '''
             if (base instanceof «implTypeRef») {
                 «implTypeRef» impl = («implTypeRef») base;
@@ -369,9 +370,9 @@ class BuilderTemplate extends AbstractBuilderTemplate {
                 }
             } else if (base instanceof «augmentationHolderRef») {
                 @SuppressWarnings("unchecked")
-                «augmentationHolderRef»<«typeRef»> casted =(«augmentationHolderRef»<«typeRef»>) base;
-                if (!casted.augmentations().isEmpty()) {
-                    this.«AUGMENTATION_FIELD» = new «hashMapRef»<>(casted.augmentations());
+                «Map.importedName»<«Class.importedName»<? extends «augmentTypeRef»>, «augmentTypeRef»> aug =((«augmentationHolderRef»<«typeRef»>) base).augmentations();
+                if (!aug.isEmpty()) {
+                    this.«AUGMENTATION_FIELD» = new «hashMapRef»<>(aug);
                 }
             }
         '''