From 744375238a6e69c3af6d3da97691c4b46b55fe4f Mon Sep 17 00:00:00 2001 From: Martin Vitez Date: Fri, 16 May 2014 10:28:48 +0200 Subject: [PATCH] BUG-1021: improve efficiency of generated builders. Improved construction of augmentation field. Change-Id: I5106c271dd7d73eafd3c35678a78a9906a1aa8c2 Signed-off-by: Martin Vitez --- .../java/api/generator/BuilderTemplate.xtend | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend index db0a31b8bd..7d954465df 100644 --- a/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend +++ b/code-generator/binding-java-api-generator/src/main/java/org/opendaylight/yangtools/sal/java/api/generator/BuilderTemplate.xtend @@ -207,6 +207,8 @@ class BuilderTemplate extends BaseTemplate { «generateFields(false)» + «generateAugmentField(true)» + «generateConstructorsFromIfcs(type)» «generateMethodFieldsFrom(type)» @@ -225,6 +227,8 @@ class BuilderTemplate extends BaseTemplate { «generateFields(true)» + «generateAugmentField(false)» + «generateConstructor» «generateGetters(true)» @@ -256,7 +260,7 @@ class BuilderTemplate extends BaseTemplate { /** * Generate constructor with argument of given type. */ - def private generateConstructorFromIfc(Type impl) ''' + def private Object generateConstructorFromIfc(Type impl) ''' «IF (impl instanceof GeneratedType)» «val implType = impl as GeneratedType» @@ -271,7 +275,7 @@ class BuilderTemplate extends BaseTemplate { «ENDIF» ''' - def private printConstructorPropertySetter(Type implementedIfc) ''' + def private Object printConstructorPropertySetter(Type implementedIfc) ''' «IF (implementedIfc instanceof GeneratedType && !(implementedIfc instanceof GeneratedTransferObject))» «val ifc = implementedIfc as GeneratedType» «FOR getter : ifc.methodDefinitions» @@ -398,8 +402,11 @@ class BuilderTemplate extends BaseTemplate { private«IF _final» final«ENDIF» «f.returnType.importedName» «f.fieldName»; «ENDFOR» «ENDIF» + ''' + + def private generateAugmentField(boolean init) ''' «IF augmentField != null» - private «Map.importedName», «augmentField.returnType.importedName»> «augmentField.name» = new «HashMap.importedName»<>(); + private final «Map.importedName», «augmentField.returnType.importedName»> «augmentField.name»«IF init» = new «HashMap.importedName»<>()«ENDIF»; «ENDIF» ''' @@ -467,7 +474,17 @@ class BuilderTemplate extends BaseTemplate { this.«field.fieldName» = builder.«field.getterMethodName»(); «ENDFOR» «IF augmentField != null» - this.«augmentField.name».putAll(builder.«augmentField.name»); + switch (builder.«augmentField.name».size()) { + case 0: + this.«augmentField.name» = «Collections.importedName».emptyMap(); + break; + case 1: + final «Map.importedName».Entry, «augmentField.returnType.importedName»> e = builder.«augmentField.name».entrySet().iterator().next(); + this.«augmentField.name» = «Collections.importedName»., «augmentField.returnType.importedName»>singletonMap(e.getKey(), e.getValue()); + break; + default : + this.«augmentField.name» = new «HashMap.importedName»<>(builder.«augmentField.name»); + } «ENDIF» } ''' -- 2.36.6