Updated Branches: refs/heads/JCLOUDS-415-1.7.x [created] 349c133a4
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/349c133a Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/349c133a Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/349c133a Branch: refs/heads/JCLOUDS-415-1.7.x Commit: 349c133a4ece4db5aa0fdac4e8141b9d21994b0c Parents: d395a07 Author: Andrew Phillips <[email protected]> Authored: Fri Jan 24 17:08:05 2014 -0500 Committer: Andrew Phillips <[email protected]> Committed: Mon Jan 27 14:55:07 2014 -0500 ---------------------------------------------------------------------- .../internal/DelegatesToInvocationFunction.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/349c133a/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;
