Class HashCodeMethod

  • All Implemented Interfaces:
    InstrumentedType.Prepareable, Implementation

    @Enhance
    public class HashCodeMethod
    extends java.lang.Object
    implements Implementation
    An implementation of Object.hashCode() that takes a class's declared fields into consideration. A hash code is computed by transforming primitive field types to an int value and by summing those values up starting from a given offset after multiplying any previous value with a multiplier. Reference values are checked against null values unless specified otherwise.
    • Constructor Detail

      • HashCodeMethod

        protected HashCodeMethod​(HashCodeMethod.OffsetProvider offsetProvider)
        Creates a new hash code method implementation.
        Parameters:
        offsetProvider - The hash code's offset provider.
    • Method Detail

      • usingSuperClassOffset

        public static HashCodeMethod usingSuperClassOffset()
        Creates a hash code method implementation that bases the hash code on the instrumented type's super class's hash code value.
        Returns:
        A hash code method implementation that bases the hash code on the instrumented type's super class's hash code value.
      • usingDefaultOffset

        public static HashCodeMethod usingDefaultOffset()
        Creates a hash code method implementation that bases the hash code on a fixed value.
        Returns:
        A hash code method implementation that bases the hash code on a fixed value.
      • usingOffset

        public static HashCodeMethod usingOffset​(int value)
        Creates a hash code method implementation that bases the hash code on a fixed value.
        Parameters:
        value - The fixed value.
        Returns:
        A hash code method implementation that bases the hash code on a fixed value.
      • withIgnoredFields

        public HashCodeMethod withIgnoredFields​(ElementMatcher<? super FieldDescription.InDefinedShape> ignored)
        Returns a new version of this hash code method implementation that ignores the specified fields additionally to any previously specified fields.
        Parameters:
        ignored - A matcher to specify any fields that should be ignored.
        Returns:
        A new version of this hash code method implementation that also ignores any fields matched by the provided matcher.
      • withNonNullableFields

        public HashCodeMethod withNonNullableFields​(ElementMatcher<? super FieldDescription.InDefinedShape> nonNullable)
        Returns a new version of this hash code method implementation that does not apply a null value check for the specified fields if they have a reference type additionally to any previously specified fields.
        Parameters:
        nonNullable - A matcher to specify any fields that should not be guarded against null values.
        Returns:
        A new version of this hash code method implementation that also does not apply null value checks to any fields matched by the provided matcher.
      • withMultiplier

        public Implementation withMultiplier​(int multiplier)
        Returns a new version of this hash code method implementation that uses the given multiplier onto any given hash code before adding a field's hash code.
        Parameters:
        multiplier - The multiplier to use for any hash code before adding any field's hash code.
        Returns:
        A new version of this hash code method implementation that uses the given multiplier onto any given hash code before adding a field's hash code.
      • appender

        public ByteCodeAppender appender​(Implementation.Target implementationTarget)
        Creates a byte code appender that determines the implementation of the instrumented type's methods.
        Specified by:
        appender in interface Implementation
        Parameters:
        implementationTarget - The target of the current implementation.
        Returns:
        A byte code appender for implementing methods delegated to this implementation. This byte code appender is also responsible for handling methods that were added by this implementation on the call to InstrumentedType.Prepareable.prepare(InstrumentedType).