X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=binding%2Fmdsal-binding-java-api-generator%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fmdsal%2Fbinding%2Fjava%2Fapi%2Fgenerator%2FBuilderTemplate.xtend;h=70f4563316541cb55d264e0b322b90900c5f6289;hb=ba647bb5dc471b2681edb4aa7ea4e6aed5262a3b;hp=fc45d33295668b6e3f4df4a5cf2dee08adc549ea;hpb=aa2ff80e8294ab1590bebcb4b8c60e36d266bda7;p=mdsal.git 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 fc45d33295..70f4563316 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 @@ -33,14 +33,11 @@ import org.opendaylight.mdsal.binding.model.api.Type import org.opendaylight.mdsal.binding.model.ri.TypeConstants import org.opendaylight.mdsal.binding.model.ri.Types import org.opendaylight.mdsal.binding.spec.naming.BindingMapping -import org.opendaylight.yangtools.concepts.Builder /** * Template for generating JAVA builder classes. */ class BuilderTemplate extends AbstractBuilderTemplate { - static val BUILDER = JavaTypeName.create(Builder) - val BuilderImplTemplate implTemplate /** @@ -66,7 +63,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { «wrapToDocumentation(formatDataForJavaDoc(targetType))» «targetType.annotations.generateDeprecatedAnnotation» «generatedAnnotation» - public class «type.name» implements «BUILDER.importedName»<«targetType.importedName»> { + public class «type.name» { «generateFields(false)» @@ -90,7 +87,11 @@ class BuilderTemplate extends AbstractBuilderTemplate { «generateSetters» - @«OVERRIDE.importedName» + /** + * A new {@link «targetType.name»} instance. + * + * @return A new {@link «targetType.name»} instance. + */ public «targetType.name» build() { return new «type.enclosedTypes.get(0).importedName»(this); } @@ -201,7 +202,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { * Set fields from given grouping argument. Valid argument is instance of one of following types: * * @@ -250,13 +251,39 @@ class BuilderTemplate extends AbstractBuilderTemplate { if (Types.strictTypeEquals(getter.returnType, ownGetterType)) { return "this._" + propertyName + " = " + retrieveProperty } - if (Types.isListType(ownGetterType)) { - val itemType = (ownGetterType as ParameterizedType).actualTypeArguments.get(0) - return ''' - this._«propertyName» = «CODEHELPERS.importedName».checkListFieldCast(«itemType.importedName».class, "«propertyName»", «retrieveProperty»)''' + if (ownGetterType instanceof ParameterizedType) { + val itemType = ownGetterType.actualTypeArguments.get(0) + if (Types.isListType(ownGetterType)) { + val importedClass = importedClass(itemType) + if (importedClass !== null) { + return printPropertySetter(retrieveProperty, propertyName, "checkListFieldCastIdentity", importedClass) + } + return printPropertySetter(retrieveProperty, propertyName, "checkListFieldCast", itemType.importedName) + } + if (Types.isSetType(ownGetterType)) { + val importedClass = importedClass(itemType) + if (importedClass !== null) { + return printPropertySetter(retrieveProperty, propertyName, "checkSetFieldCastIdentity", importedClass) + } + return printPropertySetter(retrieveProperty, propertyName, "checkSetFieldCast", itemType.importedName) + } + if (Types.CLASS.equals(ownGetterType)) { + return printPropertySetter(retrieveProperty, propertyName, "checkFieldCastIdentity", itemType.identifier.importedName) + } } - return ''' - this._«propertyName» = «CODEHELPERS.importedName».checkFieldCast(«ownGetter.returnType.importedName».class, "«propertyName»", «retrieveProperty»)''' + return printPropertySetter(retrieveProperty, propertyName, "checkFieldCast", ownGetterType.importedName) + } + + def private printPropertySetter(String retrieveProperty, String propertyName, String checkerName, String className) ''' + this._«propertyName» = «CODEHELPERS.importedName».«checkerName»(«className».class, "«propertyName»", «retrieveProperty»)''' + + private def importedClass(Type type) { + if (type instanceof ParameterizedType) { + if (Types.CLASS.equals(type.rawType)) { + return type.actualTypeArguments.get(0).identifier.importedName + } + } + return null } private def List getBaseIfcs(GeneratedType type) { @@ -316,7 +343,7 @@ class BuilderTemplate extends AbstractBuilderTemplate { def private generateSetter(GeneratedProperty field) { val returnType = field.returnType if (returnType instanceof ParameterizedType) { - if (Types.isListType(returnType)) { + if (Types.isListType(returnType) || Types.isSetType(returnType)) { val arguments = returnType.actualTypeArguments if (arguments.isEmpty) { return generateListSetter(field, Types.objectType) @@ -476,7 +503,6 @@ class BuilderTemplate extends AbstractBuilderTemplate { @see «target» - @see «BUILDER.importedName» ''' } @@ -510,14 +536,10 @@ class BuilderTemplate extends AbstractBuilderTemplate { «ENDFOR» ''' - override protected generateCopyAugmentation(Type implType) { - val hashMapRef = JU_HASHMAP.importedName - val augmentTypeRef = augmentType.importedName - return ''' - «JU_MAP.importedName»<«CLASS.importedName», «augmentTypeRef»> aug = base.augmentations(); - if (!aug.isEmpty()) { - this.«AUGMENTATION_FIELD» = new «hashMapRef»<>(aug); - } - ''' - } + override protected generateCopyAugmentation(Type implType) ''' + final var aug = base.augmentations(); + if (!aug.isEmpty()) { + this.«AUGMENTATION_FIELD» = new «JU_HASHMAP.importedName»<>(aug); + } + ''' }