Centralize non-key property copies 35/89235/1
authorRobert Varga <robert.varga@pantheon.tech>
Tue, 21 Apr 2020 12:44:25 +0000 (14:44 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Tue, 21 Apr 2020 13:00:14 +0000 (15:00 +0200)
AbstractBuilderTemplate can discern between a copied key property
and other properties. Make sure we split the second part into a
separte method, allowing it to be customized.

The immediate benefit here is that we do not end up copying properties
if there are no keys.

JIRA: MDSAL-451
Change-Id: Ic1ba59d12cd65e7e8991345d50dc80db3fc029bf
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/AbstractBuilderTemplate.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend

index 24acb8d519cfa95de52f769f464c109d6efed361..010450485b20ce354bd291c6aabd318d09b5d82f 100644 (file)
@@ -129,18 +129,18 @@ abstract class AbstractBuilderTemplate extends BaseTemplate {
             «IF augmentType !== null»
                 «generateCopyAugmentation(implType)»
             «ENDIF»
-            «val allProps = new ArrayList(properties)»
             «IF keyType !== null && implementsIfc(targetType, BindingTypes.identifiable(targetType))»
                 «val keyProps = new ArrayList((keyType as GeneratedTransferObject).properties)»
                 «keyProps.sort(KEY_PROPS_COMPARATOR)»
+                «val allProps = new ArrayList(properties)»
                 «FOR field : keyProps»
                     «removeProperty(allProps, field.name)»
                 «ENDFOR»
                 «generateCopyKeys(keyProps)»
+                «generateCopyNonKeys(allProps)»
+            «ELSE»
+                «generateCopyNonKeys(properties)»
             «ENDIF»
-            «FOR field : allProps»
-                this.«field.fieldName» = base.«field.getterMethodName»();
-            «ENDFOR»
         }
     '''
 
@@ -152,6 +152,12 @@ abstract class AbstractBuilderTemplate extends BaseTemplate {
         return generateDeprecatedAnnotation(found)
     }
 
+    def protected final CharSequence generateCopyNonKeys(Collection<GeneratedProperty> props) '''
+        «FOR field : props»
+            this.«field.fieldName» = base.«field.getterMethodName»();
+        «ENDFOR»
+    '''
+
     def protected abstract CharSequence generateCopyKeys(List<GeneratedProperty> keyProps)
 
     def protected abstract CharSequence generateCopyAugmentation(Type implType)
index e782775166816ae12aceb2183d4cdc3d23515ddf..5a37e75809aafbc86c4da39b0ad3ec0a4a9d1af6 100644 (file)
@@ -12,6 +12,7 @@ import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTA
 import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTABLE_AUGMENTATION_NAME
 import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME
 
+import java.util.Collection
 import java.util.List
 import org.opendaylight.mdsal.binding.model.api.AnnotationType
 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty
index d68746279294e721957aa8010445f859d0d83715..d095d726be2b9dca6061c7272ad2f656e5e69847 100644 (file)
@@ -429,9 +429,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
 
     override protected generateCopyKeys(List<GeneratedProperty> keyProps) '''
         this.key = base.«BindingMapping.IDENTIFIABLE_KEY_NAME»();
-        «FOR field : keyProps»
-            this.«field.fieldName» = base.«field.getterMethodName»();
-        «ENDFOR»
+        «generateCopyNonKeys(keyProps)»
     '''
 
     override protected generateCopyAugmentation(Type implType) {