public abstract class BridgeMethodResolver
extends java.lang.Object
bridge Methods
to the
<code>Method</code> being bridged.
Given a synthetic bridge Method
returns the <code>Method</code>
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 <code>Method</code> may be invoked and/or used via reflection.
When attempting to locate annotations on <code>Methods</code>, it is wise to check
for bridge <code>Methods</code> as appropriate and find the bridged <code>Method</code>.
See The Java Language Specification for more details on the use of bridge methods.
Constructor and Description |
---|
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 <code>bridge Method</code>.
|
private static java.lang.reflect.Method |
findGenericDeclaration(java.lang.reflect.Method bridgeMethod)
Searches for the generic <code>Method</code> 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 <code>Method</code> that is bridged
by the supplied <code>bridge Method</code>. |
(package private) static boolean |
isBridgeMethodFor(java.lang.reflect.Method bridgeMethod,
java.lang.reflect.Method candidateMethod,
java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> typeVariableMap)
Determines whether or not the bridge <code>Method</code> is the bridge for the
supplied candidate <code>Method</code>.
|
private static boolean |
isResolvedTypeMatch(java.lang.reflect.Method genericMethod,
java.lang.reflect.Method candidateMethod,
java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> typeVariableMap)
Returns
true if the <code>Type</code> signature of both the supplied
generic Method and concrete <code>Method</code>
are equal after resolving all <code>TypeVariables</code> using the supplied
TypeVariable Map, 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 <code>Class</code> has a declared <code>Method</code> whose signature matches
that of the supplied <code>Method</code>, then this matching <code>Method</code> is returned,
otherwise
null is returned. |
public static java.lang.reflect.Method findBridgedMethod(java.lang.reflect.Method bridgeMethod)
It is safe to call this method passing in a non-bridge <code>Method</code> instance. In such a case, the supplied <code>Method</code> 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 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 foundprivate 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 <code>Method</code> that is bridged
by the supplied <code>bridge Method</code>. This method performs inexpensive
checks and can be used quickly filter for a set of possible matches.static boolean isBridgeMethodFor(java.lang.reflect.Method bridgeMethod, java.lang.reflect.Method candidateMethod, java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> typeVariableMap)
private static java.lang.reflect.Method findGenericDeclaration(java.lang.reflect.Method bridgeMethod)
java.lang.IllegalStateException
- if the generic declaration cannot be foundprivate static boolean isResolvedTypeMatch(java.lang.reflect.Method genericMethod, java.lang.reflect.Method candidateMethod, java.util.Map<java.lang.reflect.TypeVariable,java.lang.reflect.Type> typeVariableMap)
true
if the <code>Type</code> signature of both the supplied
generic Method
and concrete <code>Method</code>
are equal after resolving all <code>TypeVariables</code> using the supplied
TypeVariable Map, otherwise returns false
.private static java.lang.reflect.Method searchForMatch(java.lang.Class type, java.lang.reflect.Method bridgeMethod)
null
is returned.public static boolean isVisibilityBridgeMethodPair(java.lang.reflect.Method bridgeMethod, java.lang.reflect.Method bridgedMethod)