From 54048315cd6c6be8672bb678bae4c89e7eed1a42 Mon Sep 17 00:00:00 2001 From: Baron Roberts Date: Mon, 20 Aug 2018 09:59:23 -0700 Subject: [PATCH] SI-8116 Signifcantly reduce the dependency on Guava. Only data-avro and restli-int-test subproject now depend on Guava. RB=1396146 BUG=SI-8116 R=kbalasub,ajing,aponniah,xma,mlamure,mapatel A=kbalasub,aponniah,xma --- CHANGELOG | 5 ++++ build.gradle | 20 +++++++++---- .../d2/balancer/clients/RewriteClient.java | 2 -- .../clients/RewriteLoadBalancerClient.java | 2 -- .../balancer/simple/SimpleLoadBalancer.java | 2 -- data-avro/build.gradle | 1 + .../data/avro/SchemaToAvroJsonEncoder.java | 6 ++-- .../data/avro/TestDataTranslator.java | 19 ++++-------- data/build.gradle | 1 - .../DataSchemaAnnotationValidator.java | 30 ++++++++----------- gradle.properties | 2 +- multipart-mime/build.gradle | 1 - .../linkedin/multipart/TestMIMEWriter.java | 9 +++--- .../TestMIMEIntegrationReaderWriter.java | 10 +++---- .../multipart/utils/MIMETestUtils.java | 16 +++++----- .../common/util/ProjectionMaskApplier.java | 6 ++-- restli-int-test-server/build.gradle | 1 - .../CustomMetadataProjectionResource.java | 5 ++-- .../rest/impl/GroupContactsResource2.java | 4 +-- .../server/rest/impl/GroupsResource2.java | 3 +- .../internal/server/ResourceContextImpl.java | 6 ++-- restli-tools/build.gradle | 1 - .../data/TestSchemaFormatTranslator.java | 4 +-- 23 files changed, 76 insertions(+), 80 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 97b7a92a4c..3ff3cd4a52 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,7 +1,12 @@ +23.0.16 +------- + 23.0.15 ------- (RB=1394375) Populate internal DataMap for gathered batch response. +(RB=1396146) +Remove Guava dependency from compile in all modules except data-avro and restli-int-test (RB=1396585) Updated gradle wrapper to version 4.6. diff --git a/build.gradle b/build.gradle index ada3b2bbb5..69bfc25055 100644 --- a/build.gradle +++ b/build.gradle @@ -147,8 +147,7 @@ subprojects { apply plugin: 'eclipse' afterEvaluate { - if (project.plugins.hasPlugin('pegasus')) - { + if (project.plugins.hasPlugin('pegasus')) { configurations { pluginsRuntime { visible = false @@ -165,9 +164,7 @@ subprojects { pegasusPlugin project(':generator') pegasusPlugin project(':restli-tools') } - } - else - { + } else { apply from: "${buildScriptDirPath}/cleanGenerated.gradle", to: it } } @@ -191,6 +188,19 @@ subprojects { configurations.testArtifacts.visible = true } + if (!(it.name in ['data-avro', 'restli-int-test'])) { + configurations { + // Prevent Guava from creeping in to avoid incompatibilities in multiple classloader environments. + compile.resolutionStrategy { + eachDependency { DependencyResolveDetails details -> + if (details.requested.group == 'com.google.guava' && details.requested.name == 'guava') { + throw new GradleException('Cannot directly or transitively depend on Guava.') + } + } + } + } + } + // Default dependencies for all subprojects dependencies { compile externalDependency.slf4jApi diff --git a/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteClient.java b/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteClient.java index b14f012d6e..81787b6a71 100644 --- a/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteClient.java +++ b/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteClient.java @@ -16,7 +16,6 @@ package com.linkedin.d2.balancer.clients; -import com.google.common.annotations.VisibleForTesting; import com.linkedin.common.callback.Callback; import com.linkedin.common.util.None; import com.linkedin.d2.balancer.util.URIRewriter; @@ -90,7 +89,6 @@ public void shutdown(Callback callback) _transportClient.shutdown(callback); } - @VisibleForTesting public TransportClient getDecoratedClient() { return _transportClient; diff --git a/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteLoadBalancerClient.java b/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteLoadBalancerClient.java index d6110ada31..dde59d37ff 100644 --- a/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteLoadBalancerClient.java +++ b/d2/src/main/java/com/linkedin/d2/balancer/clients/RewriteLoadBalancerClient.java @@ -17,7 +17,6 @@ package com.linkedin.d2.balancer.clients; -import com.google.common.annotations.VisibleForTesting; import com.linkedin.common.callback.Callback; import com.linkedin.common.util.None; import com.linkedin.d2.balancer.LoadBalancerClient; @@ -87,7 +86,6 @@ public TransportClient getWrappedClient() return _client; } - @VisibleForTesting public TransportClient getDecoratedClient() { return _client; diff --git a/d2/src/main/java/com/linkedin/d2/balancer/simple/SimpleLoadBalancer.java b/d2/src/main/java/com/linkedin/d2/balancer/simple/SimpleLoadBalancer.java index 8c4bd61b02..7f2e10174f 100644 --- a/d2/src/main/java/com/linkedin/d2/balancer/simple/SimpleLoadBalancer.java +++ b/d2/src/main/java/com/linkedin/d2/balancer/simple/SimpleLoadBalancer.java @@ -16,7 +16,6 @@ package com.linkedin.d2.balancer.simple; -import com.google.common.annotations.VisibleForTesting; import com.linkedin.common.callback.Callback; import com.linkedin.common.callback.Callbacks; import com.linkedin.common.callback.FutureCallback; @@ -94,7 +93,6 @@ public class SimpleLoadBalancer implements LoadBalancer, HashRingProvider, Clien private final ScheduledExecutorService _executor; private final Random _random = new Random(); - @VisibleForTesting public SimpleLoadBalancer(LoadBalancerState state, ScheduledExecutorService executorService) { this(state, new Stats(1000), new Stats(1000), 0, TimeUnit.SECONDS, executorService); diff --git a/data-avro/build.gradle b/data-avro/build.gradle index 76720c0355..2bf06d6ed8 100644 --- a/data-avro/build.gradle +++ b/data-avro/build.gradle @@ -5,6 +5,7 @@ dependencies { compile project(':data') + compile externalDependency.guava compile externalDependency.jacksonCoreAsl_1_4 compile externalDependency.avro testCompile externalDependency.testng diff --git a/data-avro/src/main/java/com/linkedin/data/avro/SchemaToAvroJsonEncoder.java b/data-avro/src/main/java/com/linkedin/data/avro/SchemaToAvroJsonEncoder.java index 4466cbebba..2f7a49ee41 100644 --- a/data-avro/src/main/java/com/linkedin/data/avro/SchemaToAvroJsonEncoder.java +++ b/data-avro/src/main/java/com/linkedin/data/avro/SchemaToAvroJsonEncoder.java @@ -17,7 +17,6 @@ package com.linkedin.data.avro; -import com.google.common.collect.Maps; import com.linkedin.data.Data; import com.linkedin.data.DataMap; import com.linkedin.data.schema.DataSchema; @@ -384,7 +383,10 @@ protected void encodeFieldOptional(RecordDataSchema.Field field) throws IOExcept @Override protected void encodeFieldProperties(RecordDataSchema.Field field) throws IOException { - _builder.writeProperties(Maps.filterKeys(field.getProperties(), property -> !RESERVED_DATA_PROPERTIES.contains(property))); + final Map filteredMap = field.getProperties().entrySet().stream() + .filter(entry -> !RESERVED_DATA_PROPERTIES.contains(entry.getKey())) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + _builder.writeProperties(filteredMap); } /** diff --git a/data-avro/src/test/java/com/linkedin/data/avro/TestDataTranslator.java b/data-avro/src/test/java/com/linkedin/data/avro/TestDataTranslator.java index bffc99f315..62013bf968 100644 --- a/data-avro/src/test/java/com/linkedin/data/avro/TestDataTranslator.java +++ b/data-avro/src/test/java/com/linkedin/data/avro/TestDataTranslator.java @@ -16,7 +16,6 @@ package com.linkedin.data.avro; -import com.google.common.collect.ImmutableList; import com.linkedin.data.DataMap; import com.linkedin.data.TestUtil; import com.linkedin.data.avro.util.AvroUtil; @@ -31,6 +30,8 @@ import java.io.IOException; import java.io.PrintStream; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Optional; @@ -1223,24 +1224,16 @@ public Object[][] arrayFieldProvider() { null }, { - ImmutableList.of() + Collections.emptyList() }, { - ImmutableList.of("foo", "bar", "baz") + Collections.unmodifiableList(Arrays.asList("foo", "bar", "baz")) }, { - getList(() -> { - ArrayList list = new ArrayList<>(); - list.addAll(ImmutableList.of("foo", "bar")); - return list; - }) + getList(() -> new ArrayList<>(Arrays.asList("foo", "bar"))) }, { - getList(() -> { - LinkedList list = new LinkedList<>(); - list.addAll(ImmutableList.of("foo", "bar")); - return list; - }) + getList(() -> new LinkedList<>(Arrays.asList("foo", "bar"))) }, { getList(() -> { diff --git a/data/build.gradle b/data/build.gradle index 07480a956a..03725d8b55 100644 --- a/data/build.gradle +++ b/data/build.gradle @@ -4,7 +4,6 @@ dependencies { compile project(':entity-stream') compile externalDependency.antlrRuntime compile externalDependency.commonsLang3 - compile externalDependency.guava compile externalDependency.jacksonCore testCompile project(':data-testutils') diff --git a/data/src/main/java/com/linkedin/data/schema/validator/DataSchemaAnnotationValidator.java b/data/src/main/java/com/linkedin/data/schema/validator/DataSchemaAnnotationValidator.java index 5fd90f8181..6dda96f847 100644 --- a/data/src/main/java/com/linkedin/data/schema/validator/DataSchemaAnnotationValidator.java +++ b/data/src/main/java/com/linkedin/data/schema/validator/DataSchemaAnnotationValidator.java @@ -16,20 +16,6 @@ package com.linkedin.data.schema.validator; - -import com.google.common.cache.Cache; -import com.google.common.cache.CacheBuilder; -import java.lang.reflect.Constructor; -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.Comparator; -import java.util.IdentityHashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; - import com.linkedin.data.DataMap; import com.linkedin.data.element.DataElement; import com.linkedin.data.message.Message; @@ -40,6 +26,17 @@ import com.linkedin.data.schema.NamedDataSchema; import com.linkedin.data.schema.RecordDataSchema; import com.linkedin.data.schema.TyperefDataSchema; +import java.lang.reflect.Constructor; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.concurrent.ConcurrentHashMap; /** @@ -197,8 +194,7 @@ public int compare(ValidatorInfo v1, ValidatorInfo v2) } }; - private static final Cache> VALIDATOR_CLASS_CACHE = - CacheBuilder.newBuilder().maximumSize(500).build(); + private static final Map> VALIDATOR_CLASS_CACHE = new ConcurrentHashMap<>(); // No-op {@link Validator} implementation to denote a negative cache value in {@link #VALIDATOR_CLASS_CACHE} private static final Validator NULL_VALIDATOR = (context) -> {}; @@ -474,7 +470,7 @@ protected Class locateValidatorClass(String key, ListemptyMap()).build(); final List withPreambleDataSourceWriterList = - ImmutableList.of(purelyEmptyBodyWriterPreamble, headerLessBodyWriterPreamble, normalWriterPreamble); + Collections.unmodifiableList(Arrays.asList(purelyEmptyBodyWriterPreamble, headerLessBodyWriterPreamble, + normalWriterPreamble)); final MultiPartMIMEWriter.Builder multiPartMIMEWriterWithPreamble = new MultiPartMIMEWriter.Builder("preamble", "epilogue"); @@ -277,7 +277,8 @@ public Object[][] prependDataSources() throws Exception Collections.emptyMap()).build(); final List withoutPreambleDataSourceWriterList = - ImmutableList.of(purelyEmptyBodyWriterNoPreamble, headerLessBodyWriterNoPreamble, normalWriterNoPreamble); + Collections.unmodifiableList(Arrays.asList(purelyEmptyBodyWriterNoPreamble, headerLessBodyWriterNoPreamble, + normalWriterNoPreamble)); final MultiPartMIMEWriter.Builder multiPartMIMEWriterWithoutPreamble = new MultiPartMIMEWriter.Builder("", "epilogue"); diff --git a/multipart-mime/src/test/java/com/linkedin/multipart/integ/TestMIMEIntegrationReaderWriter.java b/multipart-mime/src/test/java/com/linkedin/multipart/integ/TestMIMEIntegrationReaderWriter.java index 02595efce1..e8a8b1be9f 100644 --- a/multipart-mime/src/test/java/com/linkedin/multipart/integ/TestMIMEIntegrationReaderWriter.java +++ b/multipart-mime/src/test/java/com/linkedin/multipart/integ/TestMIMEIntegrationReaderWriter.java @@ -42,13 +42,12 @@ import com.linkedin.r2.transport.common.bridge.server.TransportDispatcherBuilder; import com.linkedin.r2.transport.http.client.HttpClientFactory; -import com.google.common.collect.ImmutableList; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.URI; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -170,7 +169,7 @@ public void testEachSingleBodyDataSource(final int chunkSize, final MIMEDataPart final MultiPartMIMEWriter writer = new MultiPartMIMEWriter.Builder("some preamble", "").appendDataSource(inputStreamDataSource).build(); - executeRequestAndAssert(writer, ImmutableList.of(bodyPart)); + executeRequestAndAssert(writer, Collections.unmodifiableList(Collections.singletonList(bodyPart))); } @Test(dataProvider = "eachSingleBodyDataSource", enabled = false) @@ -188,7 +187,7 @@ public void testEachSingleBodyDataSourceMultipleTimes(final int chunkSize, final final MultiPartMIMEWriter writer = new MultiPartMIMEWriter.Builder("some preamble", "").appendDataSources(dataSources).build(); - executeRequestAndAssert(writer, ImmutableList.of(bodyPart, bodyPart, bodyPart, bodyPart)); + executeRequestAndAssert(writer, Collections.unmodifiableList(Arrays.asList(bodyPart, bodyPart, bodyPart, bodyPart))); } /////////////////////////////////////////////////////////////////////////////////////// @@ -227,7 +226,8 @@ public void testMultipleBodies(final int chunkSize) throws Exception .appendDataSource(headerLessBodyInputStream).appendDataSource(bodyLessBodyInputStream) .appendDataSource(purelyEmptyBodyInputStream).build(); - executeRequestAndAssert(writer, ImmutableList.of(_normalBody, _headerLessBody, _bodyLessBody, _purelyEmptyBody)); + executeRequestAndAssert(writer, Collections.unmodifiableList(Arrays.asList(_normalBody, _headerLessBody, + _bodyLessBody, _purelyEmptyBody))); } @Test diff --git a/multipart-mime/src/test/java/com/linkedin/multipart/utils/MIMETestUtils.java b/multipart-mime/src/test/java/com/linkedin/multipart/utils/MIMETestUtils.java index d368673f9d..ad04cbc8e0 100644 --- a/multipart-mime/src/test/java/com/linkedin/multipart/utils/MIMETestUtils.java +++ b/multipart-mime/src/test/java/com/linkedin/multipart/utils/MIMETestUtils.java @@ -24,8 +24,6 @@ import com.linkedin.multipart.MultiPartMIMEReaderCallback; import com.linkedin.multipart.SinglePartMIMEReaderCallback; -import com.google.common.collect.ImmutableMap; - import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -156,11 +154,11 @@ public static List generatePrimeNumbers(final int limit) { //Non javax mail sources: final byte[] bodyAbytes = "BODY_A".getBytes(); - final Map bodyAHeaders = ImmutableMap.of("headerA", "valueA"); + final Map bodyAHeaders = Collections.unmodifiableMap(Collections.singletonMap("headerA", "valueA")); BODY_A = new MIMEDataPart(ByteString.copy(bodyAbytes), bodyAHeaders); final byte[] bodyBbytes = "BODY_B".getBytes(); - final Map bodyBHeaders = ImmutableMap.of("headerB", "valueB"); + final Map bodyBHeaders = Collections.unmodifiableMap(Collections.singletonMap("headerB", "valueB")); BODY_B = new MIMEDataPart(ByteString.copy(bodyBbytes), bodyBHeaders); //body c has no headers @@ -168,26 +166,26 @@ public static List generatePrimeNumbers(final int limit) BODY_C = new MIMEDataPart(ByteString.copy(bodyCbytes), Collections.emptyMap()); final byte[] bodyDbytes = "BODY_D".getBytes(); - final Map bodyDHeaders = ImmutableMap.of("headerD", "valueD"); + final Map bodyDHeaders = Collections.unmodifiableMap(Collections.singletonMap("headerD", "valueD")); BODY_D = new MIMEDataPart(ByteString.copy(bodyDbytes), bodyDHeaders); final byte[] body1bytes = "BODY_1".getBytes(); - final Map body1Headers = ImmutableMap.of("header1", "value1"); + final Map body1Headers = Collections.unmodifiableMap(Collections.singletonMap("header1", "value1")); BODY_1 = new MIMEDataPart(ByteString.copy(body1bytes), body1Headers); final byte[] body2bytes = "BODY_2".getBytes(); - final Map body2Headers = ImmutableMap.of("header2", "value2"); + final Map body2Headers = Collections.unmodifiableMap(Collections.singletonMap("header2", "value2")); BODY_2 = new MIMEDataPart(ByteString.copy(body2bytes), body2Headers); //body 3 is completely empty BODY_3 = new MIMEDataPart(ByteString.empty(), Collections.emptyMap()); final byte[] body4bytes = "BODY_4".getBytes(); - final Map body4Headers = ImmutableMap.of("header4", "value4"); + final Map body4Headers = Collections.unmodifiableMap(Collections.singletonMap("header4", "value4")); BODY_4 = new MIMEDataPart(ByteString.copy(body4bytes), body4Headers); final byte[] localInputStreamBytes = "local input stream".getBytes(); - final Map localInputStreamHeaders = ImmutableMap.of("local1", "local2"); + final Map localInputStreamHeaders = Collections.unmodifiableMap(Collections.singletonMap("local1", "local2")); BODY_5 = new MIMEDataPart(ByteString.copy(localInputStreamBytes), localInputStreamHeaders); } diff --git a/restli-common/src/main/java/com/linkedin/restli/common/util/ProjectionMaskApplier.java b/restli-common/src/main/java/com/linkedin/restli/common/util/ProjectionMaskApplier.java index 34b501fdb0..f1d16644a1 100644 --- a/restli-common/src/main/java/com/linkedin/restli/common/util/ProjectionMaskApplier.java +++ b/restli-common/src/main/java/com/linkedin/restli/common/util/ProjectionMaskApplier.java @@ -16,7 +16,6 @@ package com.linkedin.restli.common.util; -import com.google.common.collect.Sets; import com.linkedin.data.DataMap; import com.linkedin.data.schema.ArrayDataSchema; import com.linkedin.data.schema.DataSchema; @@ -27,6 +26,8 @@ import com.linkedin.data.schema.UnionDataSchema; import com.linkedin.data.transform.filter.FilterConstants; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -41,7 +42,8 @@ */ public class ProjectionMaskApplier { - private static final Set ARRAY_RANGE_PARAMS = Sets.newHashSet(FilterConstants.START, FilterConstants.COUNT); + private static final Set ARRAY_RANGE_PARAMS = + new HashSet<>(Arrays.asList(FilterConstants.START, FilterConstants.COUNT)); /** * Build a new schema that contains only the projected fields from the original schema recursively. diff --git a/restli-int-test-server/build.gradle b/restli-int-test-server/build.gradle index f3cba8598a..a1242f4d5a 100644 --- a/restli-int-test-server/build.gradle +++ b/restli-int-test-server/build.gradle @@ -19,7 +19,6 @@ dependencies { compile project(':restli-server') compile project(':restli-server-extras') compile project(':restli-common') - compile externalDependency.guava compile externalDependency.commonsLang compile externalDependency.javaxInject compile externalDependency.parseq diff --git a/restli-int-test-server/src/main/java/com/linkedin/restli/examples/greetings/server/CustomMetadataProjectionResource.java b/restli-int-test-server/src/main/java/com/linkedin/restli/examples/greetings/server/CustomMetadataProjectionResource.java index 07eab0de73..32f46f4650 100644 --- a/restli-int-test-server/src/main/java/com/linkedin/restli/examples/greetings/server/CustomMetadataProjectionResource.java +++ b/restli-int-test-server/src/main/java/com/linkedin/restli/examples/greetings/server/CustomMetadataProjectionResource.java @@ -17,7 +17,6 @@ package com.linkedin.restli.examples.greetings.server; -import com.google.common.collect.ImmutableList; import com.linkedin.data.transform.filter.request.MaskOperation; import com.linkedin.data.transform.filter.request.MaskTree; import com.linkedin.restli.examples.greetings.api.Greeting; @@ -35,6 +34,8 @@ import com.linkedin.restli.server.resources.CollectionResourceTemplate; import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; import java.util.List; @@ -183,7 +184,7 @@ private List applyRootObjectProjection(final MaskTree rootObjectProjec //However since we are testing to make sure that manual root object projection works as intended, we will //intentionally apply an incorrect projection by hand to verify restli doesn't interfere with it. } - return ImmutableList.of(clonedGreetingOne, clonedGreetingTwo); + return Collections.unmodifiableList(Arrays.asList(clonedGreetingOne, clonedGreetingTwo)); } private Greeting applyMetadataProjection(final MaskTree metadataProjection) throws CloneNotSupportedException diff --git a/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupContactsResource2.java b/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupContactsResource2.java index e1c0dbdeb2..5472bc153c 100644 --- a/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupContactsResource2.java +++ b/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupContactsResource2.java @@ -16,10 +16,10 @@ package com.linkedin.restli.examples.groups.server.rest.impl; +import java.util.HashMap; import java.util.Map; import java.util.Set; -import com.google.common.collect.Maps; import static com.linkedin.restli.common.HttpStatus.*; import com.linkedin.restli.common.PatchRequest; @@ -52,7 +52,7 @@ public CreateResponse create(GroupContact entity) @Override public Map batchGet(Set ids) { - Map map = Maps.newHashMap(); + Map map = new HashMap<>(); for (int id : ids) { map.put(id, createContact(id)); diff --git a/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupsResource2.java b/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupsResource2.java index 5c4da1518f..d6e1b3b999 100644 --- a/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupsResource2.java +++ b/restli-int-test-server/src/main/java/com/linkedin/restli/examples/groups/server/rest/impl/GroupsResource2.java @@ -17,7 +17,6 @@ package com.linkedin.restli.examples.groups.server.rest.impl; -import com.google.common.collect.Sets; import com.linkedin.data.ByteString; import com.linkedin.data.template.IntegerArray; import com.linkedin.data.template.IntegerMap; @@ -162,7 +161,7 @@ public List complexCircuit(@PagingContextParam PagingContext pagingContex @Override public Group get(Integer id) { - Group group = getGroupMgr().batchGet(Sets.newHashSet(id)).get(id); + Group group = getGroupMgr().batchGet(Collections.singleton(id)).get(id); return group; } diff --git a/restli-server/src/main/java/com/linkedin/restli/internal/server/ResourceContextImpl.java b/restli-server/src/main/java/com/linkedin/restli/internal/server/ResourceContextImpl.java index 5069ad6c41..0854c485d7 100644 --- a/restli-server/src/main/java/com/linkedin/restli/internal/server/ResourceContextImpl.java +++ b/restli-server/src/main/java/com/linkedin/restli/internal/server/ResourceContextImpl.java @@ -57,8 +57,6 @@ import java.util.Optional; import java.util.TreeMap; -import com.google.common.base.Strings; - /** * @author Josh Walker @@ -553,7 +551,7 @@ public RestLiResponseAttachments getResponseAttachments() @Override public Optional getCustomContextData(String key) { - if (_customRequestContext != null && !Strings.isNullOrEmpty(key) && _customRequestContext.containsKey(key)) + if (_customRequestContext != null && key != null && !key.isEmpty() && _customRequestContext.containsKey(key)) { return Optional.of(_customRequestContext.get(key)); } @@ -563,7 +561,7 @@ public Optional getCustomContextData(String key) @Override public void putCustomContextData(String key, Object data) { - if (!Strings.isNullOrEmpty(key) && data != null) + if (key != null && !key.isEmpty() && data != null) { if (_customRequestContext == null) { diff --git a/restli-tools/build.gradle b/restli-tools/build.gradle index bc165a7ddd..6268085f01 100644 --- a/restli-tools/build.gradle +++ b/restli-tools/build.gradle @@ -14,7 +14,6 @@ dependencies { compile externalDependency.jacksonCore compile externalDependency.jacksonDataBind compile externalDependency.jdkTools - testCompile externalDependency.guava testCompile externalDependency.testng testCompile externalDependency.commonsHttpClient } diff --git a/restli-tools/src/test/java/com/linkedin/restli/tools/data/TestSchemaFormatTranslator.java b/restli-tools/src/test/java/com/linkedin/restli/tools/data/TestSchemaFormatTranslator.java index b8b6da4398..691de9f053 100644 --- a/restli-tools/src/test/java/com/linkedin/restli/tools/data/TestSchemaFormatTranslator.java +++ b/restli-tools/src/test/java/com/linkedin/restli/tools/data/TestSchemaFormatTranslator.java @@ -1,9 +1,9 @@ package com.linkedin.restli.tools.data; -import com.google.common.io.Files; import com.linkedin.data.schema.NamedDataSchema; import com.linkedin.data.schema.resolver.MultiFormatDataSchemaResolver; import java.io.File; +import java.nio.file.Files; import org.testng.annotations.Test; import static org.testng.Assert.*; @@ -15,7 +15,7 @@ public class TestSchemaFormatTranslator { @Test public void testTranslatePdscToPdl() throws Exception { - String temp = Files.createTempDir().getAbsolutePath(); + String temp = Files.createTempDirectory("restli").toFile().getAbsolutePath(); SchemaFormatTranslator.main(new String[] {RESOLVER_DIR, RESOLVER_DIR, temp}); MultiFormatDataSchemaResolver sourceResolver = MultiFormatDataSchemaResolver.withBuiltinFormats(RESOLVER_DIR); MultiFormatDataSchemaResolver translatedResolver = MultiFormatDataSchemaResolver.withBuiltinFormats(temp);