From: Ilya Igushev Date: Tue, 21 Jul 2020 08:02:32 +0000 (+0300) Subject: Skip bindingHashCode() generation on properties' absence X-Git-Tag: v7.0.0~68 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=a53a4808ddd6f28c03a7d2a90218de5071151d35;p=mdsal.git Skip bindingHashCode() generation on properties' absence When DataObject implementation has no properties, augmentations, its hashcode() wouldn't be overridden, so bindingHashcode() remains unused. JIRA: MDSAL-471 Change-Id: If2f7bbb65f9dccf2353ba22b49d530f2a1ab4a71 Signed-off-by: illia.ihushev --- diff --git a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend index 62d1df8d5c..9007afcfdf 100644 --- a/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend +++ b/binding/mdsal-binding-java-api-generator/src/main/java/org/opendaylight/mdsal/binding/java/api/generator/InterfaceTemplate.xtend @@ -224,34 +224,36 @@ class InterfaceTemplate extends BaseTemplate { @VisibleForTesting def generateBindingHashCode() ''' «val augmentable = analyzeType» - /** - * Default implementation of {@link «Object.importedName»#hashCode()} contract for this interface. - * Implementations of this interface are encouraged to defer to this method to get consistent hashing - * results across all implementations. - * - «IF augmentable» - * @param implementation type, which has to also implement «AUGMENTATION_HOLDER.importedName» interface - * contract. - «ENDIF» - * @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 - */ - «IF augmentable» - static > int «BINDING_HASHCODE_NAME»(final @«NONNULL.importedName» T$$ obj) { - «ELSE» - static int «BINDING_HASHCODE_NAME»(final «type.fullyQualifiedName» obj) { - «ENDIF» - final int prime = 31; - int result = 1; - «FOR property : typeAnalysis.value» - result = prime * result + «property.importedUtilClass».hashCode(obj.«property.getterMethodName»()); - «ENDFOR» + «IF augmentable || !typeAnalysis.value.empty» + /** + * Default implementation of {@link «Object.importedName»#hashCode()} contract for this interface. + * Implementations of this interface are encouraged to defer to this method to get consistent hashing + * results across all implementations. + * + «IF augmentable» + * @param implementation type, which has to also implement «AUGMENTATION_HOLDER.importedName» interface + * contract. + «ENDIF» + * @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 + */ «IF augmentable» - result = prime * result + «CODEHELPERS.importedName».hashAugmentations(obj); + static > int «BINDING_HASHCODE_NAME»(final @«NONNULL.importedName» T$$ obj) { + «ELSE» + static int «BINDING_HASHCODE_NAME»(final «type.fullyQualifiedName» obj) { «ENDIF» - return result; - } + final int prime = 31; + int result = 1; + «FOR property : typeAnalysis.value» + result = prime * result + «property.importedUtilClass».hashCode(obj.«property.getterMethodName»()); + «ENDFOR» + «IF augmentable» + result = prime * result + «CODEHELPERS.importedName».hashAugmentations(obj); + «ENDIF» + return result; + } + «ENDIF» ''' def private generateBindingEquals() ''' diff --git a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java index 08c0482d83..7fb78485e5 100644 --- a/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java +++ b/binding/mdsal-binding-java-api-generator/src/test/java/org/opendaylight/mdsal/binding/java/api/generator/BuilderGeneratorTest.java @@ -56,6 +56,11 @@ public class BuilderGeneratorTest { + "}\n", genHashCode(genType).toString()); } + @Test + public void builderTemplateGenerateHashCodeWithoutAnyPropertyTest() throws Exception { + assertEquals("", genHashCode(mockGenType(TEST)).toString()); + } + @Test public void builderTemplateGenerateHashCodeWithMorePropertiesTest() throws Exception { assertEquals("/**\n"