Use instanceof pattern match in fieldsFrom()
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / BuilderTemplate.xtend
index d920c519085644d984989c4c4ec6e30cef926bc9..1427d2edbc73a4412bc7d6cf6fab58606b3f825c 100644 (file)
@@ -107,7 +107,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
              *
              * @return A new {@link «targetTypeName»} instance.
              */
-            public «targetTypeName» build() {
+            public «targetType.importedNonNull» build() {
                 return new «type.enclosedTypes.get(0).importedName»(this);
             }
 
@@ -226,7 +226,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
          * </ul>
          *
          * @param arg grouping object
-         * @throws IllegalArgumentException if given argument is none of valid types or has property with incompatible value
+         * @throws «IAE.importedName» if given argument is none of valid types or has property with incompatible value
         */
     '''
 
@@ -246,7 +246,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
     def private generateIfCheck(Type impl, List<Type> done) '''
         «IF (impl instanceof GeneratedType && (impl as GeneratedType).hasNonDefaultMethods)»
             «val implType = impl as GeneratedType»
-            if (arg instanceof «implType.importedName») {
+            if (arg instanceof «implType.importedName» castArg) {
                 «printPropertySetter(implType)»
                 isValidArg = true;
             }
@@ -258,7 +258,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
         «val ifc = implementedIfc as GeneratedType»
         «FOR getter : ifc.nonDefaultMethods»
             «IF BindingMapping.isGetterMethodName(getter.name) && !hasOverrideAnnotation(getter)»
-                «printPropertySetter(getter, '''((«ifc.importedName»)arg).«getter.name»()''', getter.propertyNameFromGetter)»;
+                «printPropertySetter(getter, '''castArg.«getter.name»()''', getter.propertyNameFromGetter)»;
             «ENDIF»
         «ENDFOR»
         «ENDIF»
@@ -339,7 +339,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
         «ENDFOR»
     '''
 
-    def private generateSetter(GeneratedProperty field) {
+    def private generateSetter(BuilderGeneratedProperty field) {
         val returnType = field.returnType
         if (returnType instanceof ParameterizedType) {
             if (Types.isListType(returnType) || Types.isSetType(returnType)) {
@@ -355,11 +355,19 @@ class BuilderTemplate extends AbstractBuilderTemplate {
         return generateSimpleSetter(field, returnType)
     }
 
-    def private generateListSetter(GeneratedProperty field, Type actualType) '''
+    def private generateListSetter(BuilderGeneratedProperty field, Type actualType) '''
         «val restrictions = restrictionsForSetter(actualType)»
         «IF restrictions !== null»
             «generateCheckers(field, restrictions, actualType)»
         «ENDIF»
+
+        /**
+         * Set the property corresponding to {@link «targetType.importedName»#«field.getterName»()} to the specified
+         * value.
+         *
+         * @param values desired value
+         * @return this builder
+         */
         public «type.getName» set«field.getName.toFirstUpper»(final «field.returnType.importedName» values) {
         «IF restrictions !== null»
             if (values != null) {
@@ -374,11 +382,19 @@ class BuilderTemplate extends AbstractBuilderTemplate {
 
     '''
 
-    def private generateMapSetter(GeneratedProperty field, Type actualType) '''
+    def private generateMapSetter(BuilderGeneratedProperty field, Type actualType) '''
         «val restrictions = restrictionsForSetter(actualType)»
         «IF restrictions !== null»
             «generateCheckers(field, restrictions, actualType)»
         «ENDIF»
+
+        /**
+         * Set the property corresponding to {@link «targetType.importedName»#«field.getterName»()} to the specified
+         * value.
+         *
+         * @param values desired value
+         * @return this builder
+         */
         public «type.getName» set«field.name.toFirstUpper»(final «field.returnType.importedName» values) {
         «IF restrictions !== null»
             if (values != null) {
@@ -392,13 +408,20 @@ class BuilderTemplate extends AbstractBuilderTemplate {
         }
     '''
 
-    def private generateSimpleSetter(GeneratedProperty field, Type actualType) '''
+    def private generateSimpleSetter(BuilderGeneratedProperty field, Type actualType) '''
         «val restrictions = restrictionsForSetter(actualType)»
         «IF restrictions !== null»
 
             «generateCheckers(field, restrictions, actualType)»
         «ENDIF»
 
+        /**
+         * Set the property corresponding to {@link «targetType.importedName»#«field.getterName»()} to the specified
+         * value.
+         *
+         * @param value desired value
+         * @return this builder
+         */
         «val setterName = "set" + field.getName.toFirstUpper»
         public «type.getName» «setterName»(final «field.returnType.importedName» value) {
             «IF restrictions !== null»
@@ -435,7 +458,7 @@ class BuilderTemplate extends AbstractBuilderTemplate {
               *
               * @param augmentation augmentation to be added
               * @return this builder
-              * @throws NullPointerException if {@code augmentation} is null
+              * @throws «NPE.importedName» if {@code augmentation} is null
               */
             public «type.name» addAugmentation(«augmentTypeRef» augmentation) {
                 if (!(this.«AUGMENTATION_FIELD» instanceof «hashMapRef»)) {
@@ -514,6 +537,14 @@ class BuilderTemplate extends AbstractBuilderTemplate {
     }
 
     private def generateAugmentation() '''
+        /**
+         * Return the specified augmentation, if it is present in this builder.
+         *
+         * @param <E$$> augmentation type
+         * @param augmentationType augmentation type class
+         * @return Augmentation object from this builder, or {@code null} if not present
+         * @throws «NPE.importedName» if {@code augmentType} is {@code null}
+         */
         @«SUPPRESS_WARNINGS.importedName»({ "unchecked", "checkstyle:methodTypeParameterName"})
         public <E$$ extends «augmentType.importedName»> E$$ «AUGMENTABLE_AUGMENTATION_NAME»(«CLASS.importedName»<E$$> augmentationType) {
             return (E$$) «AUGMENTATION_FIELD».get(«JU_OBJECTS.importedName».requireNonNull(augmentationType));
@@ -533,14 +564,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);
+       }
+    '''
 }