Updated Branches: refs/heads/master 0625c087f -> ea5128209
JCLOUDS-415: Preparing for Guava 16.0 Invokable.equals has changed from 15 to 16 so we need to implement the check differently ourselves. Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/d77f96be Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/d77f96be Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/d77f96be Branch: refs/heads/master Commit: d77f96bed7ab3938388670f7051547cee66d9522 Parents: 0625c08 Author: Andrew Phillips <[email protected]> Authored: Fri Jan 24 17:08:05 2014 -0500 Committer: Andrew Phillips <[email protected]> Committed: Tue Jan 28 07:57:34 2014 -0500 ---------------------------------------------------------------------- .../internal/DelegatesToInvocationFunction.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/d77f96be/core/src/main/java/org/jclouds/rest/internal/DelegatesToInvocationFunction.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/jclouds/rest/internal/DelegatesToInvocationFunction.java b/core/src/main/java/org/jclouds/rest/internal/DelegatesToInvocationFunction.java index 280345e..8d94c3e 100644 --- a/core/src/main/java/org/jclouds/rest/internal/DelegatesToInvocationFunction.java +++ b/core/src/main/java/org/jclouds/rest/internal/DelegatesToInvocationFunction.java @@ -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;
