You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ga...@apache.org on 2016/09/07 04:49:44 UTC
jclouds git commit: JCLOUDS-1074: Guava 20 compatibility
Repository: jclouds
Updated Branches:
refs/heads/master 7aad59972 -> 7cde28a4d
JCLOUDS-1074: Guava 20 compatibility
* dynamically call TypeToken.isSupertypeOf with Guava 19 and later and
TypeToken.isAssignableFrom with Guava 18 and earlier
* consume or ignore values from methods with CheckReturnValue
* replace usage of removed Iterators.emptyIterator
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/7cde28a4
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/7cde28a4
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/7cde28a4
Branch: refs/heads/master
Commit: 7cde28a4d2af3cde0adec62186b19116893b06f2
Parents: 7aad599
Author: Andrew Gaul <ga...@apache.org>
Authored: Thu Feb 4 14:36:21 2016 -0800
Committer: Andrew Gaul <ga...@apache.org>
Committed: Tue Sep 6 21:49:20 2016 -0700
----------------------------------------------------------------------
.../docker/features/ImageApiLiveTest.java | 5 +-
.../options/UpdateCDNContainerOptionsTest.java | 2 +
.../jclouds/googlecloud/internal/ListPages.java | 3 +-
.../main/java/org/jclouds/ContextBuilder.java | 3 +-
.../java/org/jclouds/apis/ApiPredicates.java | 5 +-
core/src/main/java/org/jclouds/apis/Apis.java | 3 +-
.../java/org/jclouds/internal/BaseView.java | 3 +-
.../jclouds/providers/ProviderPredicates.java | 3 +-
.../org/jclouds/rest/InputParamValidator.java | 2 +-
.../java/org/jclouds/util/TypeTokenUtils.java | 74 ++++++++++++++++++++
.../java/org/jclouds/internal/BaseViewTest.java | 2 +-
.../ec2/features/PlacementGroupApiLiveTest.java | 1 +
.../features/VirtualGuestApiLiveTest.java | 9 ++-
13 files changed, 103 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java b/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
index 051ea01..b75b6e8 100644
--- a/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
+++ b/apis/docker/src/test/java/org/jclouds/docker/features/ImageApiLiveTest.java
@@ -16,6 +16,7 @@
*/
package org.jclouds.docker.features;
+import static org.assertj.guava.api.Assertions.assertThat;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertNull;
@@ -29,6 +30,7 @@ import org.jclouds.docker.domain.ImageSummary;
import org.jclouds.docker.options.CreateImageOptions;
import org.testng.annotations.Test;
+import com.google.common.base.Optional;
import com.google.common.base.Predicate;
import com.google.common.collect.Iterables;
@@ -61,12 +63,13 @@ public class ImageApiLiveTest extends BaseDockerApiLiveTest {
List<ImageSummary> listImages = api().listImages();
assertNotNull(listImages);
- Iterables.find(listImages, new Predicate<ImageSummary>() {
+ Optional<ImageSummary> summary = Iterables.tryFind(listImages, new Predicate<ImageSummary>() {
@Override
public boolean apply(ImageSummary input) {
return input.repoTags().contains("jclouds:testTag");
}
});
+ assertThat(summary).isPresent();
}
@Test(dependsOnMethods = "testListImages", alwaysRun = true)
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java
----------------------------------------------------------------------
diff --git a/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java
index 04c2bc0..c4d47f6 100644
--- a/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java
+++ b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java
@@ -44,6 +44,7 @@ public class UpdateCDNContainerOptionsTest {
assertEquals(ImmutableList.of("123456"), options.buildRequestHeaders().get(CDN_TTL));
}
+ @SuppressWarnings("CheckReturnValue")
@Test(expectedExceptions = IllegalStateException.class)
public void testTTLLessThanMin() {
UpdateCDNContainerOptions options =
@@ -51,6 +52,7 @@ public class UpdateCDNContainerOptionsTest {
options.buildRequestHeaders().get(CDN_TTL);
}
+ @SuppressWarnings("CheckReturnValue")
@Test(expectedExceptions = IllegalStateException.class)
public void testTTLGreaterThanMax() {
UpdateCDNContainerOptions options =
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/common/googlecloud/src/main/java/org/jclouds/googlecloud/internal/ListPages.java
----------------------------------------------------------------------
diff --git a/common/googlecloud/src/main/java/org/jclouds/googlecloud/internal/ListPages.java b/common/googlecloud/src/main/java/org/jclouds/googlecloud/internal/ListPages.java
index b874ca0..2955681 100644
--- a/common/googlecloud/src/main/java/org/jclouds/googlecloud/internal/ListPages.java
+++ b/common/googlecloud/src/main/java/org/jclouds/googlecloud/internal/ListPages.java
@@ -27,6 +27,7 @@ import org.jclouds.googlecloud.options.ListOptions;
import org.jclouds.javax.annotation.Nullable;
import com.google.common.collect.AbstractIterator;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterators;
public final class ListPages {
@@ -49,7 +50,7 @@ public final class ListPages {
}
static <T> Iterator<ListPage<T>> singletonOrEmptyIterator(ListPage<T> input) {
- return input.isEmpty() ? Iterators.<ListPage<T>>emptyIterator() : Iterators.singletonIterator(input);
+ return input.isEmpty() ? ImmutableList.<ListPage<T>>of().iterator() : Iterators.singletonIterator(input);
}
private ListPages() {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/main/java/org/jclouds/ContextBuilder.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/ContextBuilder.java b/core/src/main/java/org/jclouds/ContextBuilder.java
index 2e82808..404ef79 100644
--- a/core/src/main/java/org/jclouds/ContextBuilder.java
+++ b/core/src/main/java/org/jclouds/ContextBuilder.java
@@ -82,6 +82,7 @@ import org.jclouds.rest.config.CredentialStoreModule;
import org.jclouds.rest.config.HttpApiModule;
import org.jclouds.rest.config.RestModule;
import org.jclouds.rest.internal.InvokeHttpMethod;
+import org.jclouds.util.TypeTokenUtils;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Function;
@@ -620,7 +621,7 @@ public class ContextBuilder {
@SuppressWarnings("unchecked")
public <C extends Context> C build(TypeToken<C> contextType) {
TypeToken<C> returnType = null;
- if (contextType.isAssignableFrom(apiMetadata.getContext()))
+ if (TypeTokenUtils.isSupertypeOf(contextType, apiMetadata.getContext()))
returnType = (TypeToken<C>) apiMetadata.getContext();
else
throw new IllegalArgumentException(String.format("api %s not assignable from %s; context: %s", apiMetadata,
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/main/java/org/jclouds/apis/ApiPredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/apis/ApiPredicates.java b/core/src/main/java/org/jclouds/apis/ApiPredicates.java
index f75fe3a..0be2324 100644
--- a/core/src/main/java/org/jclouds/apis/ApiPredicates.java
+++ b/core/src/main/java/org/jclouds/apis/ApiPredicates.java
@@ -20,6 +20,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Strings.emptyToNull;
import org.jclouds.View;
+import org.jclouds.util.TypeTokenUtils;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
@@ -84,7 +85,7 @@ public class ApiPredicates {
*/
@Override
public boolean apply(ApiMetadata apiMetadata) {
- return type.isAssignableFrom(apiMetadata.getContext());
+ return TypeTokenUtils.isSupertypeOf(type, apiMetadata.getContext());
}
/**
@@ -114,7 +115,7 @@ public class ApiPredicates {
@Override
public boolean apply(ApiMetadata apiMetadata) {
for (TypeToken<? extends View> to : apiMetadata.getViews())
- if (type.isAssignableFrom(to))
+ if (TypeTokenUtils.isSupertypeOf(type, to))
return true;
return false;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/main/java/org/jclouds/apis/Apis.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/apis/Apis.java b/core/src/main/java/org/jclouds/apis/Apis.java
index 9031300..a94a857 100644
--- a/core/src/main/java/org/jclouds/apis/Apis.java
+++ b/core/src/main/java/org/jclouds/apis/Apis.java
@@ -26,6 +26,7 @@ import java.util.ServiceLoader;
import org.jclouds.View;
import org.jclouds.osgi.ApiRegistry;
+import org.jclouds.util.TypeTokenUtils;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
@@ -131,7 +132,7 @@ public class Apis {
@Override
public boolean apply(TypeToken<?> input) {
- return view.isAssignableFrom(input);
+ return TypeTokenUtils.isSupertypeOf(view, input);
}
});
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/main/java/org/jclouds/internal/BaseView.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/internal/BaseView.java b/core/src/main/java/org/jclouds/internal/BaseView.java
index 153bfc5..287852c 100644
--- a/core/src/main/java/org/jclouds/internal/BaseView.java
+++ b/core/src/main/java/org/jclouds/internal/BaseView.java
@@ -25,6 +25,7 @@ import org.jclouds.Context;
import org.jclouds.View;
import org.jclouds.location.Provider;
import org.jclouds.rest.ApiContext;
+import org.jclouds.util.TypeTokenUtils;
import com.google.common.base.Objects;
import com.google.common.base.Objects.ToStringHelper;
@@ -45,7 +46,7 @@ public abstract class BaseView extends ForwardingObject implements View {
@SuppressWarnings("unchecked")
@Override
public <C extends Context> C unwrap(TypeToken<C> type) {
- checkArgument(checkNotNull(type, "type").isAssignableFrom(backendType), "backend type: %s not assignable to %s", backendType, type);
+ checkArgument(TypeTokenUtils.isSupertypeOf(checkNotNull(type, "type"), backendType), "%s is not a supertype of backend type %s", type, backendType);
return (C) backend;
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/main/java/org/jclouds/providers/ProviderPredicates.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/providers/ProviderPredicates.java b/core/src/main/java/org/jclouds/providers/ProviderPredicates.java
index 4aa5594..d9996cc 100644
--- a/core/src/main/java/org/jclouds/providers/ProviderPredicates.java
+++ b/core/src/main/java/org/jclouds/providers/ProviderPredicates.java
@@ -23,6 +23,7 @@ import org.jclouds.Context;
import org.jclouds.View;
import org.jclouds.apis.ApiMetadata;
import org.jclouds.apis.ApiPredicates;
+import org.jclouds.util.TypeTokenUtils;
import com.google.common.base.Preconditions;
import com.google.common.base.Predicate;
@@ -237,7 +238,7 @@ public class ProviderPredicates {
*/
@Override
public boolean apply(ProviderMetadata providerMetadata) {
- return apiClass.isAssignableFrom(providerMetadata.getApiMetadata().getClass());
+ return TypeTokenUtils.isSupertypeOf(apiClass, providerMetadata.getApiMetadata().getClass());
}
/**
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/main/java/org/jclouds/rest/InputParamValidator.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/rest/InputParamValidator.java b/core/src/main/java/org/jclouds/rest/InputParamValidator.java
index efb84dd..8586240 100644
--- a/core/src/main/java/org/jclouds/rest/InputParamValidator.java
+++ b/core/src/main/java/org/jclouds/rest/InputParamValidator.java
@@ -129,7 +129,7 @@ public class InputParamValidator {
}
}
- @SuppressWarnings("unchecked")
+ @SuppressWarnings({"CheckReturnValue", "unchecked"})
private void runPredicatesAgainstArgs(List<Validator<?>> predicates, List<Object> args) {
for (@SuppressWarnings("rawtypes")
Validator validator : predicates) {
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/main/java/org/jclouds/util/TypeTokenUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/util/TypeTokenUtils.java b/core/src/main/java/org/jclouds/util/TypeTokenUtils.java
new file mode 100644
index 0000000..7eb23f5
--- /dev/null
+++ b/core/src/main/java/org/jclouds/util/TypeTokenUtils.java
@@ -0,0 +1,74 @@
+/*
+ * 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.Method;
+import java.lang.reflect.Type;
+
+import com.google.common.annotations.Beta;
+import com.google.common.base.Throwables;
+import com.google.common.reflect.TypeToken;
+
+@Beta
+public final class TypeTokenUtils {
+ private static final Method IS_SUPERTYPE_OF_TYPE;
+ private static final Method IS_SUPERTYPE_OF_TYPETOKEN;
+ static {
+ Method isSuperTypeOfType;
+ Method isSuperTypeOfTypeToken;
+ try {
+ // Guava 19 and later method
+ isSuperTypeOfType = TypeToken.class.getDeclaredMethod("isSupertypeOf", Type.class);
+ isSuperTypeOfTypeToken = TypeToken.class.getDeclaredMethod("isSupertypeOf", TypeToken.class);
+ } catch (NoSuchMethodException nsme) {
+ try {
+ // Guava 18 and earlier method
+ isSuperTypeOfType = TypeToken.class.getDeclaredMethod("isAssignableFrom", Type.class);
+ isSuperTypeOfTypeToken = TypeToken.class.getDeclaredMethod("isAssignableFrom", TypeToken.class);
+ } catch (NoSuchMethodException nsme2) {
+ throw Throwables.propagate(nsme2);
+ }
+ }
+ IS_SUPERTYPE_OF_TYPE = isSuperTypeOfType;
+ IS_SUPERTYPE_OF_TYPETOKEN = isSuperTypeOfTypeToken;
+ }
+
+ private TypeTokenUtils() {
+ throw new AssertionError("intentionally not implemented");
+ }
+
+ public static <C> boolean isSupertypeOf(TypeToken<C> token, Type type) {
+ try {
+ return (Boolean) IS_SUPERTYPE_OF_TYPE.invoke(token, type);
+ } catch (IllegalAccessException iae) {
+ throw Throwables.propagate(iae);
+ } catch (InvocationTargetException ite) {
+ throw Throwables.propagate(ite);
+ }
+ }
+
+ public static <C, D> boolean isSupertypeOf(TypeToken<C> token, TypeToken<D> token2) {
+ try {
+ return (Boolean) IS_SUPERTYPE_OF_TYPETOKEN.invoke(token, token2);
+ } catch (IllegalAccessException iae) {
+ throw Throwables.propagate(iae);
+ } catch (InvocationTargetException ite) {
+ throw Throwables.propagate(ite);
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/core/src/test/java/org/jclouds/internal/BaseViewTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/jclouds/internal/BaseViewTest.java b/core/src/test/java/org/jclouds/internal/BaseViewTest.java
index 75be8df..f634caa 100644
--- a/core/src/test/java/org/jclouds/internal/BaseViewTest.java
+++ b/core/src/test/java/org/jclouds/internal/BaseViewTest.java
@@ -104,7 +104,7 @@ public class BaseViewTest {
wine.unwrap(typeToken(PeanutButter.class));
fail();
} catch (IllegalArgumentException e) {
- assertEquals(e.getMessage(), "backend type: org.jclouds.internal.BaseViewTest$Water not assignable to org.jclouds.internal.BaseViewTest$PeanutButter");
+ assertEquals(e.getMessage(), "org.jclouds.internal.BaseViewTest$PeanutButter is not a supertype of backend type org.jclouds.internal.BaseViewTest$Water");
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiLiveTest.java b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiLiveTest.java
index 754edcf..816e7a9 100644
--- a/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiLiveTest.java
+++ b/providers/aws-ec2/src/test/java/org/jclouds/aws/ec2/features/PlacementGroupApiLiveTest.java
@@ -165,6 +165,7 @@ public class PlacementGroupApiLiveTest extends BaseComputeServiceContextLiveTest
assert availableTester.apply(group) : group;
}
+ @SuppressWarnings("CheckReturnValue")
public void testStartHS1Instance() throws Exception {
Template template = view.getComputeService().templateBuilder()
http://git-wip-us.apache.org/repos/asf/jclouds/blob/7cde28a4/providers/softlayer/src/test/java/org/jclouds/softlayer/features/VirtualGuestApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/softlayer/src/test/java/org/jclouds/softlayer/features/VirtualGuestApiLiveTest.java b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/VirtualGuestApiLiveTest.java
index c35474b..d540bc7 100644
--- a/providers/softlayer/src/test/java/org/jclouds/softlayer/features/VirtualGuestApiLiveTest.java
+++ b/providers/softlayer/src/test/java/org/jclouds/softlayer/features/VirtualGuestApiLiveTest.java
@@ -17,6 +17,7 @@
package org.jclouds.softlayer.features;
import static com.google.common.base.Preconditions.checkState;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.jclouds.util.Predicates2.retry;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
@@ -132,9 +133,13 @@ public class VirtualGuestApiLiveTest extends BaseSoftLayerApiLiveTest {
VirtualGuest found = virtualGuestApi.getVirtualGuest(virtualGuest.getId());
Set<TagReference> tagReferences = found.getTagReferences();
assertNotNull(tagReferences);
- for (String tag : tags) {
- Iterables.contains(tagReferences, tag);
+
+ ImmutableSet.Builder<String> actualTagsBuilder = ImmutableSet.builder();
+ for (TagReference ref : tagReferences) {
+ actualTagsBuilder.add(ref.getTag().getName());
}
+ Set<String> actualTags = actualTagsBuilder.build();
+ assertThat(actualTags).containsAll(tags);
}
@Test(dependsOnMethods = "testSetTagsOnVirtualGuest")