Correct YangModuleInfo.getInstance() nullness warning
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / BuilderImplTemplate.xtend
index b6e38045ce14d79ebbec5f1dd27df69be42c043f..a57d5778def5550ae75e503e89780ddc896126ba 100644 (file)
@@ -11,14 +11,13 @@ import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTA
 import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTABLE_AUGMENTATION_NAME
 import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.DATA_CONTAINER_IMPLEMENTED_INTERFACE_NAME
 
-import com.google.common.collect.ImmutableMap
 import java.util.List
-import java.util.Map
-import java.util.Objects
+import org.opendaylight.mdsal.binding.model.api.AnnotationType
 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty
 import org.opendaylight.mdsal.binding.model.api.GeneratedType
 import org.opendaylight.mdsal.binding.model.api.Type
 import org.opendaylight.mdsal.binding.spec.naming.BindingMapping
+import org.opendaylight.yangtools.yang.binding.AbstractAugmentable
 import org.opendaylight.yangtools.yang.binding.DataObject
 
 class BuilderImplTemplate extends AbstractBuilderTemplate {
@@ -31,21 +30,17 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
     }
 
     override body() '''
-        private static final class «type.name» implements «targetType.importedName» {
-
-            «generateFields(true)»
-
+        «targetType.annotations.generateDeprecatedAnnotation»
+        private static final class «type.name»
+            «val impIface = targetType.importedName»
             «IF augmentType !== null»
-                private «generateAugmentField()»
+                extends «AbstractAugmentable.importedName»<«impIface»>
             «ENDIF»
+            implements «impIface» {
 
-            «generateCopyConstructor(builderType, type)»
+            «generateFields(true)»
 
-            @«Deprecated.importedName»
-            @«Override.importedName»
-            public «Class.importedName»<«targetType.importedName»> getImplementedInterface() {
-                return «targetType.importedName».class;
-            }
+            «generateCopyConstructor(builderType, type)»
 
             «generateGetters(true)»
 
@@ -57,6 +52,10 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
         }
     '''
 
+    override generateDeprecatedAnnotation(AnnotationType ann) {
+        return generateAnnotation(ann)
+    }
+
     /**
      * Template method which generates the method <code>hashCode()</code>.
      *
@@ -67,7 +66,7 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
             private int hash = 0;
             private volatile boolean hashValid = false;
 
-            @«Override.importedName»
+            @«OVERRIDE.importedName»
             public int hashCode() {
                 if (hashValid) {
                     return hash;
@@ -75,7 +74,7 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
 
                 «hashCodeResult(properties)»
                 «IF augmentType !== null»
-                    result = prime * result + «Objects.importedName».hashCode(«AUGMENTATION_FIELD»);
+                    result = prime * result + «JU_OBJECTS.importedName».hashCode(augmentations());
                 «ENDIF»
 
                 hash = result;
@@ -92,7 +91,7 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
      */
     def protected generateEquals() '''
         «IF !properties.empty || augmentType !== null»
-            @«Override.importedName»
+            @«OVERRIDE.importedName»
             public boolean equals(«Object.importedName» obj) {
                 if (this == obj) {
                     return true;
@@ -114,12 +113,12 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
                     if (getClass() == obj.getClass()) {
                         // Simple case: we are comparing against self
                         «type.name» otherImpl = («type.name») obj;
-                        if (!«Objects.importedName».equals(«AUGMENTATION_FIELD», otherImpl.«AUGMENTATION_FIELD»)) {
+                        if (!«JU_OBJECTS.importedName».equals(augmentations(), otherImpl.augmentations())) {
                             return false;
                         }
                     } else {
                         // Hard case: compare our augments with presence there...
-                        for («Map.importedName».Entry<«Class.importedName»<? extends «augmentType.importedName»>, «augmentType.importedName»> e : «AUGMENTATION_FIELD».entrySet()) {
+                        for («JU_MAP.importedName».Entry<«CLASS.importedName»<? extends «augmentType.importedName»>, «augmentType.importedName»> e : augmentations().entrySet()) {
                             if (!e.getValue().equals(other.«AUGMENTABLE_AUGMENTATION_NAME»(e.getKey()))) {
                                 return false;
                             }
@@ -147,6 +146,6 @@ class BuilderImplTemplate extends AbstractBuilderTemplate {
     '''
 
     override protected generateCopyAugmentation(Type implType) '''
-        this.«AUGMENTATION_FIELD» = «ImmutableMap.importedName».copyOf(base.«AUGMENTATION_FIELD»);
+        super(base.«AUGMENTATION_FIELD»);
     '''
 }
\ No newline at end of file