From: Martin Vitez Date: Thu, 7 Nov 2013 14:11:48 +0000 (+0100) Subject: Optimized method "fieldsFrom" in builder classes. X-Git-Tag: yangtools-0.6.0~196 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=364cb72059ace69d9a7b52d565e489aef72f7198;p=yangtools.git Optimized method "fieldsFrom" in builder classes. Added javadoc to method. Added throw clause if given argument is none of valid types. Signed-off-by: Martin Vitez --- 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 0bf6252fbb..7471406e83 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 @@ -18,6 +18,8 @@ import static org.opendaylight.yangtools.binding.generator.util.Types.* import java.util.HashMap import java.util.Collections import org.opendaylight.yangtools.yang.binding.DataObject import java.util.ArrayList +import java.util.HashSet +import java.util.Collection /** * Template for generating JAVA builder classes. @@ -274,46 +276,103 @@ class BuilderTemplate extends BaseTemplate { def private generateSetterFromIfcs(Type type) ''' «IF (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject))» «val ifc = type as GeneratedType» - «val List done = new ArrayList()» + «val List done = ifc.getBaseIfcs» + «generateCommentForSetter(ifc)» public void fieldsFrom(«DataObject.importedName» arg) { - «FOR impl : ifc.implements» + boolean isValidArg = false; + «FOR impl : ifc.getAllIfcs» «generateSettersForIfc(impl, done)» «ENDFOR» + if (!isValidArg) { + throw new IllegalArgumentException( + "expected one of: «ifc.getAllIfcs.toListOfNames» \n" + + "but was: " + arg + ); + } } «ENDIF» ''' def private generateSettersForIfc(Type impl, List done) ''' + «IF (impl instanceof GeneratedType) && !((impl as GeneratedType).methodDefinitions.empty)» + «val implType = impl as GeneratedType» + if (arg instanceof «implType.fullyQualifiedName») { + «printSetterProperties(implType)» + isValidArg = true; + } + «ENDIF» + ''' + + def private generateSettersForNestedIfc(Type impl, List done) ''' «IF (impl instanceof GeneratedType) && !((impl as GeneratedType).methodDefinitions.empty)» «val implType = impl as GeneratedType» «val boolean added = done.contains(impl)» «IF !(added)» if (arg instanceof «implType.fullyQualifiedName») { - «printSetterProperties(implType, done)» + «printSetterProperties(implType)» } «ENDIF» «FOR implTypeImplement : implType.implements» - «generateSettersForIfc(implTypeImplement, done)» + «generateSettersForNestedIfc(implTypeImplement, done)» «ENDFOR» «ENDIF» ''' - def private printSetterProperties(Type implementedIfc, List done) ''' + def private printSetterProperties(Type implementedIfc) ''' «IF (implementedIfc instanceof GeneratedType && !(implementedIfc instanceof GeneratedTransferObject))» «val ifc = implementedIfc as GeneratedType» - «val boolean added = done.contains(ifc)» - «IF !(added)» «FOR getter : ifc.methodDefinitions» this._«getter.propertyNameFromGetter» = ((«implementedIfc.fullyQualifiedName»)arg).«getter.name»(); «ENDFOR» - «val add = done.add(ifc)» - «ENDIF» - «FOR impl : ifc.implements» - «printSetterProperties(impl, done)» - «ENDFOR» «ENDIF» ''' + def private generateCommentForSetter(GeneratedType type) ''' + /** + Set fields from given grouping argument. Valid argument is instance of one of following types: + *
    + «FOR impl : type.getAllIfcs» + *
  • «impl.fullyQualifiedName»
  • + «ENDFOR» + *
+ * + * @param arg grouping object + * @throws IllegalArgumentException if given argument is none of valid types + */ + ''' + + private def List getBaseIfcs(GeneratedType type) { + val List baseIfcs = new ArrayList(); + for (ifc : type.implements) { + if (ifc instanceof GeneratedType && !(ifc as GeneratedType).methodDefinitions.empty) { + baseIfcs.add(ifc) + } + } + return baseIfcs + } + + private def Set getAllIfcs(Type type) { + val Set baseIfcs = new HashSet() + if (type instanceof GeneratedType && !(type instanceof GeneratedTransferObject)) { + val ifc = type as GeneratedType + for (impl : ifc.implements) { + if (impl instanceof GeneratedType && !(impl as GeneratedType).methodDefinitions.empty) { + baseIfcs.add(impl) + } + baseIfcs.addAll(impl.getAllIfcs) + } + } + return baseIfcs + } + + private def List toListOfNames(Collection types) { + val List names = new ArrayList + for (type : types) { + names.add(type.fullyQualifiedName) + } + return names + } + /** * Template method which generates class attributes. *