diff --git a/core/pom.xml b/core/pom.xml
index a8ebdacc775..fddbe919f49 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -95,7 +95,7 @@
com.google.guava
guava
- 16.0
+ 16.0.1
org.osgi
diff --git a/core/src/main/java/org/jclouds/internal/BaseView.java b/core/src/main/java/org/jclouds/internal/BaseView.java
index 87e7d5fce03..50c191e8616 100644
--- a/core/src/main/java/org/jclouds/internal/BaseView.java
+++ b/core/src/main/java/org/jclouds/internal/BaseView.java
@@ -70,18 +70,11 @@ public C unwrap() throws ClassCastException {
public A unwrapApi(Class apiClass) {
checkArgument(ApiContext.class.isAssignableFrom(backendType.getRawType()),
"backend type: %s should be an ApiContext", backendType);
- /*
- * Revert back to ApiContext extends A>...where(A, apiClass) as soon as
- * https://code.google.com/p/guava-libraries/issues/detail?id=1635
- * is resolved.
- */
- TypeToken> contextToken = new TypeToken>() {
+ TypeToken> contextToken = new TypeToken>(delegate().getClass()) {
private static final long serialVersionUID = 1L;
- };
- Closeable api = unwrap(contextToken).getApi();
- checkArgument(apiClass.isAssignableFrom(api.getClass()),
- "API type: %s not assignable to %s", api.getClass(), apiClass);
- return apiClass.cast(api);
+ }.where(new TypeParameter() {
+ }, TypeToken.of(apiClass));
+ return unwrap(contextToken).getApi();
}
@Override
diff --git a/core/src/main/java/org/jclouds/rest/config/BinderUtils.java b/core/src/main/java/org/jclouds/rest/config/BinderUtils.java
index 6a79d5eaac1..bf21dab4953 100644
--- a/core/src/main/java/org/jclouds/rest/config/BinderUtils.java
+++ b/core/src/main/java/org/jclouds/rest/config/BinderUtils.java
@@ -21,9 +21,6 @@
import com.google.inject.Binder;
import com.google.inject.TypeLiteral;
-import org.jclouds.util.TypeToken2;
-import org.jclouds.util.TypeToken2.TypeParameter2;
-
/**
*
* @author Adrian Cole
@@ -102,13 +99,13 @@ private static void bindAnnotatedSyncToAsyncHttpApiProvider(Binder binder, C
@Deprecated
@SuppressWarnings({ "unchecked", "serial" })
private static void bindHttpApiProvider(Binder binder, Class sync, Class async) {
- TypeToken> token = new TypeToken2>() {
- }.where(new TypeParameter2() {
- }, sync, new TypeParameter2() {
+ TypeToken> token = new TypeToken>() {
+ }.where(new TypeParameter() {
+ }, sync).where(new TypeParameter() {
}, async);
binder.bind(sync).toProvider(TypeLiteral.class.cast(TypeLiteral.get(token.getType())));
}
-
+
/**
* adds an explicit binding for an interface which synchronously blocks on
* similar calls to an {@code async} type.
@@ -142,9 +139,9 @@ public static void bindSyncToAsyncApi(Binder binder, Class sync, Class
@Deprecated
@SuppressWarnings({ "unchecked", "serial" })
private static void bindCallGetOnFutures(Binder binder, Class sync, Class async) {
- TypeToken> token = new TypeToken2>() {
- }.where(new TypeParameter2() {
- }, sync, new TypeParameter2() {
+ TypeToken> token = new TypeToken>() {
+ }.where(new TypeParameter() {
+ }, sync).where(new TypeParameter() {
}, async);
binder.bind(sync).toProvider(TypeLiteral.class.cast(TypeLiteral.get(token.getType())));
}
diff --git a/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java b/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java
index 8af312d14cf..efc30022483 100644
--- a/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java
+++ b/core/src/main/java/org/jclouds/rest/internal/BaseRestApiMetadata.java
@@ -24,11 +24,10 @@
import org.jclouds.apis.ApiMetadata;
import org.jclouds.apis.internal.BaseApiMetadata;
import org.jclouds.rest.RestApiMetadata;
-import org.jclouds.util.TypeToken2;
-import org.jclouds.util.TypeToken2.TypeParameter2;
import com.google.common.annotations.Beta;
import com.google.common.base.Objects.ToStringHelper;
+import com.google.common.reflect.TypeParameter;
import com.google.common.reflect.TypeToken;
/**
@@ -57,10 +56,10 @@ public static Properties defaultProperties() {
}
public static TypeToken> contextToken(TypeToken apiToken, TypeToken asyncApiToken) {
- return new TypeToken2>() {
+ return new TypeToken>() {
private static final long serialVersionUID = 1L;
- }.where(new TypeParameter2() {
- }, apiToken, new TypeParameter2() {
+ }.where(new TypeParameter() {
+ }, apiToken).where(new TypeParameter() {
}, asyncApiToken);
}
diff --git a/core/src/main/java/org/jclouds/util/TypeToken2.java b/core/src/main/java/org/jclouds/util/TypeToken2.java
deleted file mode 100644
index 99e47e5c387..00000000000
--- a/core/src/main/java/org/jclouds/util/TypeToken2.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.jclouds.util;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.Map;
-
-import org.jclouds.reflect.Reflection2;
-
-import com.google.common.collect.ImmutableMap;
-import com.google.common.reflect.Invokable;
-import com.google.common.reflect.TypeParameter;
-import com.google.common.reflect.TypeResolver;
-import com.google.common.reflect.TypeToken;
-
-/*
- * FIXME: remove this class ASAP!
- *
- * Evil stuff, adapted from https://code.google.com/p/guava-libraries/source/browse/guava/src/com/google/common/reflect/TypeToken.java#236.
- * See https://issues.apache.org/jira/browse/JCLOUDS-427 and
- * https://code.google.com/p/guava-libraries/issues/detail?id=1635
- */
-public class TypeToken2 extends TypeToken {
- private static final long serialVersionUID = 1L;
-
- @SuppressWarnings("unchecked")
- public TypeToken where(TypeParameter2 typeParam1,
- TypeToken typeArg1, TypeParameter2 typeParam2, TypeToken typeArg2) {
- // resolving both parameters in one shot seems to work around 1635
- TypeResolver resolver = new TypeResolver();
- // where(Map) is package-private in TypeResolver
- Invokable whereWithMap =
- Reflection2.method(TypeResolver.class, "where",
- Map.class);
- try {
- resolver = whereWithMap.invoke(resolver, ImmutableMap.of(
- typeParam1.getTypeVariable(), typeArg1.getType(),
- typeParam2.getTypeVariable(), typeArg2.getType()));
- } catch (IllegalAccessException exception) {
- // should never happen
- throw new IllegalStateException(exception);
- } catch (InvocationTargetException exception) {
- // should never happen
- throw new IllegalStateException(exception);
- }
- return (TypeToken) TypeToken.of(resolver.resolveType(getType()));
- }
-
- public TypeToken where(TypeParameter2 typeParam1, Class typeArg1,
- TypeParameter2 typeParam2, Class typeArg2) {
- return where(typeParam1, of(typeArg1), typeParam2, of(typeArg2));
- }
-
- public static abstract class TypeParameter2 extends TypeParameter {
- TypeVariable> getTypeVariable() {
- // duplicated from TypeCapture, where it's package-private
- Type superclass = getClass().getGenericSuperclass();
- return (TypeVariable>) ((ParameterizedType) superclass).getActualTypeArguments()[0];
- }
- }
-}
\ No newline at end of file