public final class BridgeMethodResolver
extends java.lang.Object
bridge Methods
to the
Method
being bridged.
Given a synthetic bridge Method
returns the Method
being bridged. A bridge method may be created by the compiler when extending a
parameterized type whose methods have parameterized arguments. During runtime
invocation the bridge Method
may be invoked and/or used via reflection.
When attempting to locate annotations on Methods
, it is wise to check
for bridge Methods
as appropriate and find the bridged Method
.
See The Java Language Specification for more details on the use of bridge methods.
Modifier and Type | Field and Description |
---|---|
private static java.util.Map<java.lang.reflect.Method,java.lang.reflect.Method> |
cache |
Modifier | Constructor and Description |
---|---|
private |
BridgeMethodResolver() |
Modifier and Type | Method and Description |
---|---|
static java.lang.reflect.Method |
findBridgedMethod(java.lang.reflect.Method bridgeMethod)
Find the original method for the supplied
bridge Method . |
private static java.lang.reflect.Method |
findGenericDeclaration(java.lang.reflect.Method bridgeMethod)
Searches for the generic
Method declaration whose erased signature
matches that of the supplied bridge method. |
private static boolean |
isBridgedCandidateFor(java.lang.reflect.Method candidateMethod,
java.lang.reflect.Method bridgeMethod)
Returns
true if the supplied 'candidateMethod ' can be
consider a validate candidate for the Method that is bridged
by the supplied bridge Method . |
(package private) static boolean |
isBridgeMethodFor(java.lang.reflect.Method bridgeMethod,
java.lang.reflect.Method candidateMethod,
java.lang.Class<?> declaringClass)
Determines whether or not the bridge
Method is the bridge for the
supplied candidate Method . |
private static boolean |
isResolvedTypeMatch(java.lang.reflect.Method genericMethod,
java.lang.reflect.Method candidateMethod,
java.lang.Class<?> declaringClass)
Returns
true if the Type signature of both the supplied
generic Method and concrete Method
are equal after resolving all types against the declaringType, otherwise
returns false . |
static boolean |
isVisibilityBridgeMethodPair(java.lang.reflect.Method bridgeMethod,
java.lang.reflect.Method bridgedMethod)
Compare the signatures of the bridge method and the method which it bridges.
|
private static java.lang.reflect.Method |
searchCandidates(java.util.List<java.lang.reflect.Method> candidateMethods,
java.lang.reflect.Method bridgeMethod)
Searches for the bridged method in the given candidates.
|
private static java.lang.reflect.Method |
searchForMatch(java.lang.Class<?> type,
java.lang.reflect.Method bridgeMethod)
If the supplied
Class has a declared Method whose signature matches
that of the supplied Method , then this matching Method is returned,
otherwise null is returned. |
private static java.lang.reflect.Method |
searchInterfaces(java.lang.Class<?>[] interfaces,
java.lang.reflect.Method bridgeMethod) |
private static final java.util.Map<java.lang.reflect.Method,java.lang.reflect.Method> cache
public static java.lang.reflect.Method findBridgedMethod(java.lang.reflect.Method bridgeMethod)
bridge Method
.
It is safe to call this method passing in a non-bridge Method
instance.
In such a case, the supplied Method
instance is returned directly to the caller.
Callers are not required to check for bridging before calling this method.
bridgeMethod
- the method to introspectprivate static boolean isBridgedCandidateFor(java.lang.reflect.Method candidateMethod, java.lang.reflect.Method bridgeMethod)
true
if the supplied 'candidateMethod
' can be
consider a validate candidate for the Method
that is bridged
by the supplied bridge Method
. This method performs inexpensive
checks and can be used quickly filter for a set of possible matches.@Nullable private static java.lang.reflect.Method searchCandidates(java.util.List<java.lang.reflect.Method> candidateMethods, java.lang.reflect.Method bridgeMethod)
candidateMethods
- the List of candidate MethodsbridgeMethod
- the bridge methodnull
if none foundstatic boolean isBridgeMethodFor(java.lang.reflect.Method bridgeMethod, java.lang.reflect.Method candidateMethod, java.lang.Class<?> declaringClass)
Method
is the bridge for the
supplied candidate Method
.private static boolean isResolvedTypeMatch(java.lang.reflect.Method genericMethod, java.lang.reflect.Method candidateMethod, java.lang.Class<?> declaringClass)
true
if the Type
signature of both the supplied
generic Method
and concrete Method
are equal after resolving all types against the declaringType, otherwise
returns false
.@Nullable private static java.lang.reflect.Method findGenericDeclaration(java.lang.reflect.Method bridgeMethod)
Method
declaration whose erased signature
matches that of the supplied bridge method.java.lang.IllegalStateException
- if the generic declaration cannot be found@Nullable private static java.lang.reflect.Method searchInterfaces(java.lang.Class<?>[] interfaces, java.lang.reflect.Method bridgeMethod)
@Nullable private static java.lang.reflect.Method searchForMatch(java.lang.Class<?> type, java.lang.reflect.Method bridgeMethod)
Class
has a declared Method
whose signature matches
that of the supplied Method
, then this matching Method
is returned,
otherwise null
is returned.public static boolean isVisibilityBridgeMethodPair(java.lang.reflect.Method bridgeMethod, java.lang.reflect.Method bridgedMethod)