JCLOUDS-415: Preparing for Guava 16.0

Invokable.equals has changed from 15 to 16 so we need to implement the check differently ourselves.
This commit is contained in:
Andrew Phillips 2014-01-24 17:08:05 -05:00
parent 0625c087fa
commit d77f96bed7
1 changed files with 17 additions and 1 deletions

View File

@ -141,7 +141,7 @@ public class DelegatesToInvocationFunction<S, F extends Function<Invocation, Obj
protected Object handle(Invocation invocation) {
Invokable<?, ?> invokable = invocation.getInvokable();
if (CLOSE.equals(invokable)) {
if (isCloseMethod(invokable)) {
try {
injector.getInstance(Closer.class).close();
return null;
@ -157,6 +157,22 @@ public class DelegatesToInvocationFunction<S, F extends Function<Invocation, Obj
}
}
private static boolean isCloseMethod(Invokable<?, ?> invokable) {
/*
* Tests equality according to the Javadoc for java.lang.reflect.Method:
*
* Two Methods are the same if they were declared by the same class
* and have the same name and formal parameter types and return type.
*
* Invokable now uses the *owning* class (not the declaring class) in
* its equals check.
*/
return CLOSE.getDeclaringClass().equals(invokable.getDeclaringClass())
&& CLOSE.getName().equals(invokable.getName())
&& CLOSE.getParameters().equals(invokable.getParameters())
&& CLOSE.getReturnType().equals(invokable.getReturnType());
}
protected final Injector injector;
protected final TypeToken<S> ownerType;
protected final SetCaller setCaller;