org.springframework.core
abstract public class: BridgeMethodResolver [javadoc |
source]
java.lang.Object
org.springframework.core.BridgeMethodResolver
Helper for resolving synthetic
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.
Only usable on JDK 1.5 and higher. Use an appropriate JdkVersion
check before calling this class if a fallback for JDK 1.4 is desirable.
Also see:
- JdkVersion
- author:
Rob - Harrop
- author:
Juergen - Hoeller
- since:
2.0 -
| Methods from java.lang.Object: |
|---|
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Method from org.springframework.core.BridgeMethodResolver Detail: |
public static Method findBridgedMethod(Method bridgeMethod) {
Assert.notNull(bridgeMethod, "Method must not be null");
if (!bridgeMethod.isBridge()) {
return bridgeMethod;
}
// Gather all methods with matching name and parameter size.
List candidateMethods = new ArrayList();
Method[] methods = ReflectionUtils.getAllDeclaredMethods(bridgeMethod.getDeclaringClass());
for (int i = 0; i < methods.length; i++) {
Method candidateMethod = methods[i];
if (isBridgedCandidateFor(candidateMethod, bridgeMethod)) {
candidateMethods.add(candidateMethod);
}
}
Method result;
// Now perform simple quick checks.
if (candidateMethods.size() == 1) {
result = (Method) candidateMethods.get(0);
}
else {
result = searchCandidates(candidateMethods, bridgeMethod);
}
if (result == null) {
throw new IllegalStateException(
"Unable to locate bridged method for bridge method '" + bridgeMethod + "'");
}
return result;
}
Find the original method for the supplied 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. |
static boolean isBridgeMethodFor(Method bridgeMethod,
Method candidateMethod,
Map typeVariableMap) {
if (isResolvedTypeMatch(candidateMethod, bridgeMethod, typeVariableMap)) {
return true;
}
Method method = findGenericDeclaration(bridgeMethod);
return (method != null && isResolvedTypeMatch(method, candidateMethod, typeVariableMap));
}
Determines whether or not the bridge Method is the bridge for the
supplied candidate Method . |