Use Boolean.hashCode() for bits components 86/103186/1
authorRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Nov 2022 00:36:32 +0000 (01:36 +0100)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 10 Nov 2022 00:38:16 +0000 (01:38 +0100)
Rather than boxing to Boolean and then going through
Objects.hashCode(Object), employ some smarts and go directly to
Boolean.hashCode(boolean).

JIRA: MDSAL-744
Change-Id: Ida374207c67b776e1eeafb40e3a4f725fe2edf1f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/ClassTemplate.xtend

index b9a2e53c4e94653bc377b164cd2756f0d9e1fe91..01a76e1d22de64751e53821f5a1679a356797f0c 100644 (file)
@@ -44,6 +44,7 @@ import org.opendaylight.mdsal.binding.model.api.Constant
 import org.opendaylight.mdsal.binding.model.api.Enumeration
 import org.opendaylight.mdsal.binding.model.api.GeneratedProperty
 import org.opendaylight.mdsal.binding.model.api.GeneratedTransferObject
+import org.opendaylight.mdsal.binding.model.api.JavaTypeName
 import org.opendaylight.mdsal.binding.model.api.Restrictions
 import org.opendaylight.mdsal.binding.model.api.Type
 import org.opendaylight.mdsal.binding.model.ri.TypeConstants
@@ -67,6 +68,10 @@ class ClassTemplate extends BaseTemplate {
         UINT16_TYPE,
         UINT32_TYPE,
         UINT64_TYPE)
+    /**
+     * {@code java.lang.Boolean} as a JavaTypeName.
+     */
+    static val BOOLEAN = JavaTypeName.create(Boolean)
 
     protected val List<GeneratedProperty> properties
     protected val List<GeneratedProperty> finalProperties
@@ -544,7 +549,8 @@ class ClassTemplate extends BaseTemplate {
      * @return string with the <code>hashCode()</code> method definition in JAVA format
      */
     def protected generateHashCode() {
-        val size = genTO.hashCodeIdentifiers.size
+        val props = genTO.hashCodeIdentifiers
+        val size = props.size
         if (size == 0) {
             return ""
         }
@@ -554,17 +560,30 @@ class ClassTemplate extends BaseTemplate {
                 «IF size != 1»
                     final int prime = 31;
                     int result = 1;
-                    «FOR property : genTO.hashCodeIdentifier
-                        result = prime * result + «property.importedUtilClass».hashCode(«property.fieldName»);
+                    «FOR property : prop
+                        result = prime * result + «property.importedHashCodeUtilClass».hashCode(«property.fieldName»);
                     «ENDFOR»
                     return result;
                 «ELSE»
-                    return «CODEHELPERS.importedName».wrapperHashCode(«genTO.hashCodeIdentifiers.get(0).fieldName»);
+                    «val prop = props.get(0)»
+                    «IF prop.returnType.equals(Types.primitiveBooleanType())»
+                        return «BOOLEAN.importedName».hashCode(«prop.fieldName»);
+                    «ELSE»
+                        return «CODEHELPERS.importedName».wrapperHashCode(«prop.fieldName»);
+                    «ENDIF»
                 «ENDIF»
             }
         '''
     }
 
+    def private importedHashCodeUtilClass(GeneratedProperty prop) {
+        val propType = prop.returnType
+        if (propType.equals(Types.primitiveBooleanType)) {
+            return BOOLEAN.importedName
+        }
+        return propType.importedUtilClass
+    }
+
     /**
      * Template method which generates the method <code>equals()</code>.
      *