mirror of https://github.com/apache/jclouds.git
allow @Provides to return suppliers w/o qualifiers
This commit is contained in:
parent
2bc8e39e0a
commit
edbd09b984
|
@ -149,18 +149,13 @@ public class AsyncRestClientProxy<T> implements InvocationHandler {
|
||||||
|
|
||||||
public Object lookupValueFromGuice(Method method) {
|
public Object lookupValueFromGuice(Method method) {
|
||||||
try {
|
try {
|
||||||
|
//TODO: tidy
|
||||||
Type genericReturnType = method.getGenericReturnType();
|
Type genericReturnType = method.getGenericReturnType();
|
||||||
try {
|
try {
|
||||||
Annotation qualifier = Iterables.find(ImmutableList.copyOf(method.getAnnotations()), isQualifierPresent);
|
Annotation qualifier = Iterables.find(ImmutableList.copyOf(method.getAnnotations()), isQualifierPresent);
|
||||||
Binding<?> binding = injector.getExistingBinding(Key.get(genericReturnType, qualifier));
|
return getInstanceOfTypeWithQualifier(genericReturnType, qualifier);
|
||||||
if (binding != null)
|
|
||||||
return binding.getProvider().get();
|
|
||||||
// try looking via supplier
|
|
||||||
return Supplier.class.cast(
|
|
||||||
injector.getInstance(Key.get(Types.newParameterizedType(Supplier.class, genericReturnType),
|
|
||||||
qualifier))).get();
|
|
||||||
} catch (NoSuchElementException e) {
|
} catch (NoSuchElementException e) {
|
||||||
return injector.getInstance(Key.get(genericReturnType));
|
return getInstanceOfType(genericReturnType);
|
||||||
}
|
}
|
||||||
} catch (ProvisionException e) {
|
} catch (ProvisionException e) {
|
||||||
AuthorizationException aex = Throwables2.getFirstThrowableOfType(e, AuthorizationException.class);
|
AuthorizationException aex = Throwables2.getFirstThrowableOfType(e, AuthorizationException.class);
|
||||||
|
@ -170,6 +165,39 @@ public class AsyncRestClientProxy<T> implements InvocationHandler {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: tidy
|
||||||
|
private Object getInstanceOfType(Type genericReturnType) {
|
||||||
|
// look for an existing binding
|
||||||
|
Binding<?> binding = injector.getExistingBinding(Key.get(genericReturnType));
|
||||||
|
if (binding != null)
|
||||||
|
return binding.getProvider().get();
|
||||||
|
|
||||||
|
// then, try looking via supplier
|
||||||
|
binding = injector.getExistingBinding(Key.get(Types.newParameterizedType(Supplier.class, genericReturnType)));
|
||||||
|
if (binding != null)
|
||||||
|
return Supplier.class.cast(binding.getProvider().get()).get();
|
||||||
|
|
||||||
|
// else try to create an instance
|
||||||
|
return injector.getInstance(Key.get(genericReturnType));
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: tidy
|
||||||
|
private Object getInstanceOfTypeWithQualifier(Type genericReturnType, Annotation qualifier) {
|
||||||
|
// look for an existing binding
|
||||||
|
Binding<?> binding = injector.getExistingBinding(Key.get(genericReturnType, qualifier));
|
||||||
|
if (binding != null)
|
||||||
|
return binding.getProvider().get();
|
||||||
|
|
||||||
|
// then, try looking via supplier
|
||||||
|
binding = injector.getExistingBinding(Key.get(Types.newParameterizedType(Supplier.class, genericReturnType),
|
||||||
|
qualifier));
|
||||||
|
if (binding != null)
|
||||||
|
return Supplier.class.cast(binding.getProvider().get()).get();
|
||||||
|
|
||||||
|
// else try to create an instance
|
||||||
|
return injector.getInstance(Key.get(genericReturnType, qualifier));
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings( { "unchecked", "rawtypes" })
|
@SuppressWarnings( { "unchecked", "rawtypes" })
|
||||||
private ListenableFuture<?> createListenableFutureForHttpRequestMappedToMethodAndArgs(Method method, Object[] args)
|
private ListenableFuture<?> createListenableFutureForHttpRequestMappedToMethodAndArgs(Method method, Object[] args)
|
||||||
throws ExecutionException {
|
throws ExecutionException {
|
||||||
|
|
Loading…
Reference in New Issue