From 7d1929fa208817401ef25b03fce2699bfa221ce4 Mon Sep 17 00:00:00 2001 From: Robert Varga Date: Tue, 21 Apr 2020 14:44:25 +0200 Subject: [PATCH] Centralize non-key property copies 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 --- .../api/generator/AbstractBuilderTemplate.xtend | 14 ++++++++++---- .../java/api/generator/BuilderImplTemplate.xtend | 1 + .../java/api/generator/BuilderTemplate.xtend | 4 +--- 3 files changed, 12 insertions(+), 7 deletions(-) diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend index 24acb8d519..010450485b 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/AbstractBuilderTemplate.xtend @@ -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 props) ''' + «FOR field : props» + this.«field.fieldName» = base.«field.getterMethodName»(); + «ENDFOR» + ''' + def protected abstract CharSequence generateCopyKeys(List keyProps) def protected abstract CharSequence generateCopyAugmentation(Type implType) diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend index e782775166..5a37e75809 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderImplTemplate.xtend @@ -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 diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend index d687462792..d095d726be 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderTemplate.xtend @@ -429,9 +429,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { override protected generateCopyKeys(List 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) { -- 2.36.6