Do not generate prime when not needed
[mdsal.git] / binding / mdsal-binding-java-api-generator / src / main / java / org / opendaylight / mdsal / binding / java / api / generator / InterfaceTemplate.xtend
index a72654c7af2707ba82303e6009983264c880e2cb..a6d549069fbf7f51ac7221f05655c546c7c6f605 100644 (file)
@@ -7,19 +7,19 @@
  */
 package org.opendaylight.mdsal.binding.java.api.generator
 
-import static extension org.opendaylight.mdsal.binding.spec.naming.BindingMapping.getGetterMethodForNonnull
-import static extension org.opendaylight.mdsal.binding.spec.naming.BindingMapping.getGetterMethodForRequire
-import static extension org.opendaylight.mdsal.binding.spec.naming.BindingMapping.isGetterMethodName
-import static extension org.opendaylight.mdsal.binding.spec.naming.BindingMapping.isNonnullMethodName
-import static extension org.opendaylight.mdsal.binding.spec.naming.BindingMapping.isRequireMethodName
+import static extension org.opendaylight.yangtools.yang.binding.contract.Naming.getGetterMethodForNonnull
+import static extension org.opendaylight.yangtools.yang.binding.contract.Naming.getGetterMethodForRequire
+import static extension org.opendaylight.yangtools.yang.binding.contract.Naming.isGetterMethodName
+import static extension org.opendaylight.yangtools.yang.binding.contract.Naming.isNonnullMethodName
+import static extension org.opendaylight.yangtools.yang.binding.contract.Naming.isRequireMethodName
 import static org.opendaylight.mdsal.binding.model.ri.Types.BOOLEAN
 import static org.opendaylight.mdsal.binding.model.ri.Types.STRING
-import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.REQUIRE_PREFIX
-import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.AUGMENTATION_FIELD
-import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.BINDING_CONTRACT_IMPLEMENTED_INTERFACE_NAME
-import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.BINDING_EQUALS_NAME
-import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.BINDING_HASHCODE_NAME
-import static org.opendaylight.mdsal.binding.spec.naming.BindingMapping.BINDING_TO_STRING_NAME
+import static org.opendaylight.yangtools.yang.binding.contract.Naming.REQUIRE_PREFIX
+import static org.opendaylight.yangtools.yang.binding.contract.Naming.AUGMENTATION_FIELD
+import static org.opendaylight.yangtools.yang.binding.contract.Naming.BINDING_CONTRACT_IMPLEMENTED_INTERFACE_NAME
+import static org.opendaylight.yangtools.yang.binding.contract.Naming.BINDING_EQUALS_NAME
+import static org.opendaylight.yangtools.yang.binding.contract.Naming.BINDING_HASHCODE_NAME
+import static org.opendaylight.yangtools.yang.binding.contract.Naming.BINDING_TO_STRING_NAME
 
 import com.google.common.annotations.VisibleForTesting;
 import java.util.List
@@ -296,14 +296,17 @@ class InterfaceTemplate extends BaseTemplate {
              *
              * @param obj Object for which to generate hashCode() result.
              * @return Hash code value of data modeled by this interface.
-             * @throws «NPE.importedName» if {@code obj} is null
+             * @throws «NPE.importedName» if {@code obj} is {@code null}
              */
             static int «BINDING_HASHCODE_NAME»(final «type.fullyQualifiedNonNull» obj) {
-                final int prime = 31;
                 int result = 1;
-                «FOR property : typeAnalysis.value»
-                    result = prime * result + «property.importedUtilClass».hashCode(obj.«property.getterMethodName»());
-                «ENDFOR»
+                «val props = typeAnalysis.value»
+                «IF !props.empty»
+                    final int prime = 31;
+                    «FOR property : props»
+                        result = prime * result + «property.importedUtilClass».hashCode(obj.«property.getterMethodName»());
+                    «ENDFOR»
+                «ENDIF»
                 «IF augmentable»
                     for (var augmentation : obj.augmentations().values()) {
                         result += augmentation.hashCode();
@@ -325,22 +328,18 @@ class InterfaceTemplate extends BaseTemplate {
              * @param thisObj Object acting as the receiver of equals invocation
              * @param obj Object acting as argument to equals invocation
              * @return True if thisObj and obj are considered equal
-             * @throws «NPE.importedName» if {@code thisObj} is null
+             * @throws «NPE.importedName» if {@code thisObj} is {@code null}
              */
             static boolean «BINDING_EQUALS_NAME»(final «type.fullyQualifiedNonNull» thisObj, final «Types.objectType().importedName» obj) {
                 if (thisObj == obj) {
                     return true;
                 }
-                final «type.fullyQualifiedName» other = «CODEHELPERS.importedName».checkCast(«type.fullyQualifiedName».class, obj);
-                if (other == null) {
-                    return false;
-                }
-                «FOR property : ByTypeMemberComparator.sort(typeAnalysis.value)»
-                    if (!«property.importedUtilClass».equals(thisObj.«property.getterName»(), other.«property.getterName»())) {
-                        return false;
-                    }
-                «ENDFOR»
-                return «IF augmentable»thisObj.augmentations().equals(other.augmentations())«ELSE»true«ENDIF»;
+                final var other = «CODEHELPERS.importedName».checkCast(«type.fullyQualifiedName».class, obj);
+                return other != null
+                    «FOR property : ByTypeMemberComparator.sort(typeAnalysis.value)»
+                        && «property.importedUtilClass».equals(thisObj.«property.getterName»(), other.«property.getterName»())
+                    «ENDFOR»
+                    «IF augmentable»&& thisObj.augmentations().equals(other.augmentations())«ENDIF»;
             }
         «ENDIF»
     '''
@@ -354,7 +353,7 @@ class InterfaceTemplate extends BaseTemplate {
          *
          * @param obj Object for which to generate toString() result.
          * @return {@link «STRING.importedName»} value of data modeled by this interface.
-         * @throws «NPE.importedName» if {@code obj} is null
+         * @throws «NPE.importedName» if {@code obj} is {@code null}
          */
         static «STRING.importedName» «BINDING_TO_STRING_NAME»(final «type.fullyQualifiedNonNull» obj) {
             final var helper = «MOREOBJECTS.importedName».toStringHelper("«type.name»");