Package net.bytebuddy.implementation
Class HashCodeMethod
- java.lang.Object
-
- net.bytebuddy.implementation.HashCodeMethod
-
- All Implemented Interfaces:
InstrumentedType.Prepareable
,Implementation
@Enhance public class HashCodeMethod extends java.lang.Object implements Implementation
An implementation ofObject.hashCode()
that takes a class's declared fields into consideration. A hash code is computed by transforming primitive field types to anint
value and by summing those values up starting from a given offset after multiplying any previous value with a multiplier. Reference values are checked againstnull
values unless specified otherwise.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected static class
HashCodeMethod.Appender
A byte code appender to implement a hash code method.protected static interface
HashCodeMethod.NullValueGuard
A guard againstnull
values for fields with reference types.protected static interface
HashCodeMethod.OffsetProvider
An offset provider is responsible for supplying the initial hash code.protected static class
HashCodeMethod.ValueTransformer
A value transformer that is responsible for resolving a field value to anint
value.-
Nested classes/interfaces inherited from interface net.bytebuddy.implementation.Implementation
Implementation.Composable, Implementation.Compound, Implementation.Context, Implementation.Simple, Implementation.SpecialMethodInvocation, Implementation.Target
-
-
Field Summary
Fields Modifier and Type Field Description private static int
DEFAULT_MULTIPLIER
The default multiplier for each value before adding a field's hash code value which should be a prime number.private static int
DEFAULT_OFFSET
The default offset which should be a prime number.private static MethodDescription.InDefinedShape
HASH_CODE
TheObject.hashCode()
method.private ElementMatcher.Junction<? super FieldDescription.InDefinedShape>
ignored
A matcher to filter fields that should not be used for a hash codes computation.private int
multiplier
A multiplier for each value before adding a field's hash code value.private ElementMatcher.Junction<? super FieldDescription.InDefinedShape>
nonNullable
A matcher to determine fields of a reference type that cannot benull
.private HashCodeMethod.OffsetProvider
offsetProvider
The hash code's offset provider.
-
Constructor Summary
Constructors Modifier Constructor Description protected
HashCodeMethod(HashCodeMethod.OffsetProvider offsetProvider)
Creates a new hash code method implementation.private
HashCodeMethod(HashCodeMethod.OffsetProvider offsetProvider, int multiplier, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> ignored, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> nonNullable)
Creates a new hash code method implementation.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ByteCodeAppender
appender(Implementation.Target implementationTarget)
Creates a byte code appender that determines the implementation of the instrumented type's methods.InstrumentedType
prepare(InstrumentedType instrumentedType)
Prepares a given instrumented type.static HashCodeMethod
usingDefaultOffset()
Creates a hash code method implementation that bases the hash code on a fixed value.static HashCodeMethod
usingOffset(int value)
Creates a hash code method implementation that bases the hash code on a fixed value.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.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.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.HashCodeMethod
withNonNullableFields(ElementMatcher<? super FieldDescription.InDefinedShape> nonNullable)
Returns a new version of this hash code method implementation that does not apply anull
value check for the specified fields if they have a reference type additionally to any previously specified fields.
-
-
-
Field Detail
-
DEFAULT_OFFSET
private static final int DEFAULT_OFFSET
The default offset which should be a prime number.- See Also:
- Constant Field Values
-
DEFAULT_MULTIPLIER
private static final int DEFAULT_MULTIPLIER
The default multiplier for each value before adding a field's hash code value which should be a prime number.- See Also:
- Constant Field Values
-
HASH_CODE
private static final MethodDescription.InDefinedShape HASH_CODE
TheObject.hashCode()
method.
-
offsetProvider
private final HashCodeMethod.OffsetProvider offsetProvider
The hash code's offset provider.
-
multiplier
private final int multiplier
A multiplier for each value before adding a field's hash code value.
-
ignored
private final ElementMatcher.Junction<? super FieldDescription.InDefinedShape> ignored
A matcher to filter fields that should not be used for a hash codes computation.
-
nonNullable
private final ElementMatcher.Junction<? super FieldDescription.InDefinedShape> nonNullable
A matcher to determine fields of a reference type that cannot benull
.
-
-
Constructor Detail
-
HashCodeMethod
protected HashCodeMethod(HashCodeMethod.OffsetProvider offsetProvider)
Creates a new hash code method implementation.- Parameters:
offsetProvider
- The hash code's offset provider.
-
HashCodeMethod
private HashCodeMethod(HashCodeMethod.OffsetProvider offsetProvider, int multiplier, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> ignored, ElementMatcher.Junction<? super FieldDescription.InDefinedShape> nonNullable)
Creates a new hash code method implementation.- Parameters:
offsetProvider
- The hash code's offset provider.multiplier
- A multiplier for each value before adding a field's hash code valueignored
- A matcher to filter fields that should not be used for a hash codes computation.nonNullable
- A matcher to determine fields of a reference type that cannot benull
.
-
-
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 anull
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 againstnull
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.
-
prepare
public InstrumentedType prepare(InstrumentedType instrumentedType)
Prepares a given instrumented type.- Specified by:
prepare
in interfaceInstrumentedType.Prepareable
- Parameters:
instrumentedType
- The instrumented type in its current form.- Returns:
- The prepared instrumented type.
-
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 interfaceImplementation
- 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)
.
-
-