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:
*
«FOR impl : type.getAllIfcs»
- * - «impl.importedName»
+ * - {@link «impl.importedName»}
«ENDFOR»
*
*
@@ -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» extends «augmentTypeRef»>, «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);
+ }
+ '''
}