From 7a3b297a8766bf6c43c024e410f50a84301e3532 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Wed, 11 Aug 2021 23:00:41 +0000 Subject: [PATCH 01/11] chore: release 3.0.2-SNAPSHOT (#730) :robot: I have created a release \*beep\* \*boop\* --- ### Updating meta-information for bleeding-edge SNAPSHOT release. --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- google-cloud-firestore-admin/pom.xml | 4 ++-- google-cloud-firestore-bom/pom.xml | 16 ++++++++-------- google-cloud-firestore/pom.xml | 4 ++-- grpc-google-cloud-firestore-admin-v1/pom.xml | 4 ++-- grpc-google-cloud-firestore-v1/pom.xml | 4 ++-- pom.xml | 12 ++++++------ proto-google-cloud-firestore-admin-v1/pom.xml | 4 ++-- proto-google-cloud-firestore-bundle-v1/pom.xml | 4 ++-- proto-google-cloud-firestore-v1/pom.xml | 4 ++-- versions.txt | 16 ++++++++-------- 10 files changed, 36 insertions(+), 36 deletions(-) diff --git a/google-cloud-firestore-admin/pom.xml b/google-cloud-firestore-admin/pom.xml index 2da47fcc5f..feee2470b1 100644 --- a/google-cloud-firestore-admin/pom.xml +++ b/google-cloud-firestore-admin/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 google-cloud-firestore-admin - 3.0.1 + 3.0.2-SNAPSHOT jar Google Cloud Firestore Admin Client https://github.com/googleapis/java-firestore @@ -14,7 +14,7 @@ com.google.cloud google-cloud-firestore-parent - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/google-cloud-firestore-bom/pom.xml b/google-cloud-firestore-bom/pom.xml index 937ca8a9ee..77bf11b4d1 100644 --- a/google-cloud-firestore-bom/pom.xml +++ b/google-cloud-firestore-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-firestore-bom - 3.0.1 + 3.0.2-SNAPSHOT pom com.google.cloud @@ -52,37 +52,37 @@ com.google.cloud google-cloud-firestore - 3.0.1 + 3.0.2-SNAPSHOT com.google.api.grpc proto-google-cloud-firestore-admin-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.cloud proto-google-cloud-firestore-bundle-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.api.grpc proto-google-cloud-firestore-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-firestore-admin-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-firestore-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.cloud google-cloud-firestore-admin - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/google-cloud-firestore/pom.xml b/google-cloud-firestore/pom.xml index e277f136bf..4e33dc4657 100644 --- a/google-cloud-firestore/pom.xml +++ b/google-cloud-firestore/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 google-cloud-firestore - 3.0.1 + 3.0.2-SNAPSHOT jar Google Cloud Firestore https://github.com/googleapis/java-firestore @@ -14,7 +14,7 @@ com.google.cloud google-cloud-firestore-parent - 3.0.1 + 3.0.2-SNAPSHOT google-cloud-firestore diff --git a/grpc-google-cloud-firestore-admin-v1/pom.xml b/grpc-google-cloud-firestore-admin-v1/pom.xml index c78169fb01..272953a86b 100644 --- a/grpc-google-cloud-firestore-admin-v1/pom.xml +++ b/grpc-google-cloud-firestore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-firestore-admin-v1 - 3.0.1 + 3.0.2-SNAPSHOT grpc-google-cloud-firestore-admin-v1 GRPC library for grpc-google-cloud-firestore-admin-v1 com.google.cloud google-cloud-firestore-parent - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/grpc-google-cloud-firestore-v1/pom.xml b/grpc-google-cloud-firestore-v1/pom.xml index 2d57f03b3a..c2913a49d0 100644 --- a/grpc-google-cloud-firestore-v1/pom.xml +++ b/grpc-google-cloud-firestore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-firestore-v1 - 3.0.1 + 3.0.2-SNAPSHOT grpc-google-cloud-firestore-v1 GRPC library for grpc-google-cloud-firestore-v1 com.google.cloud google-cloud-firestore-parent - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/pom.xml b/pom.xml index f7c930a613..01d9cb7446 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-firestore-parent pom - 3.0.1 + 3.0.2-SNAPSHOT Google Cloud Firestore Parent https://github.com/googleapis/java-firestore @@ -150,27 +150,27 @@ com.google.api.grpc proto-google-cloud-firestore-admin-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.cloud proto-google-cloud-firestore-bundle-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.api.grpc proto-google-cloud-firestore-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-firestore-admin-v1 - 3.0.1 + 3.0.2-SNAPSHOT com.google.api.grpc grpc-google-cloud-firestore-v1 - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/proto-google-cloud-firestore-admin-v1/pom.xml b/proto-google-cloud-firestore-admin-v1/pom.xml index e58ad1871f..875536481e 100644 --- a/proto-google-cloud-firestore-admin-v1/pom.xml +++ b/proto-google-cloud-firestore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-firestore-admin-v1 - 3.0.1 + 3.0.2-SNAPSHOT proto-google-cloud-firestore-admin-v1 PROTO library for proto-google-cloud-firestore-admin-v1 com.google.cloud google-cloud-firestore-parent - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/proto-google-cloud-firestore-bundle-v1/pom.xml b/proto-google-cloud-firestore-bundle-v1/pom.xml index 6a9b484694..f5814e66b3 100644 --- a/proto-google-cloud-firestore-bundle-v1/pom.xml +++ b/proto-google-cloud-firestore-bundle-v1/pom.xml @@ -5,14 +5,14 @@ 4.0.0 proto-google-cloud-firestore-bundle-v1 - 3.0.1 + 3.0.2-SNAPSHOT proto-google-cloud-firestore-bundle-v1 PROTO library for proto-google-cloud-firestore-bundle-v1 com.google.cloud google-cloud-firestore-parent - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/proto-google-cloud-firestore-v1/pom.xml b/proto-google-cloud-firestore-v1/pom.xml index 917cb2b995..82b61e5eca 100644 --- a/proto-google-cloud-firestore-v1/pom.xml +++ b/proto-google-cloud-firestore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-firestore-v1 - 3.0.1 + 3.0.2-SNAPSHOT proto-google-cloud-firestore-v1 PROTO library for proto-google-cloud-firestore-v1 com.google.cloud google-cloud-firestore-parent - 3.0.1 + 3.0.2-SNAPSHOT diff --git a/versions.txt b/versions.txt index 224d4d62b7..4a5c481479 100644 --- a/versions.txt +++ b/versions.txt @@ -1,11 +1,11 @@ # Format: # module:released-version:current-version -google-cloud-firestore:3.0.1:3.0.1 -google-cloud-firestore-admin:3.0.1:3.0.1 -google-cloud-firestore-bom:3.0.1:3.0.1 -google-cloud-firestore-parent:3.0.1:3.0.1 -grpc-google-cloud-firestore-admin-v1:3.0.1:3.0.1 -grpc-google-cloud-firestore-v1:3.0.1:3.0.1 -proto-google-cloud-firestore-admin-v1:3.0.1:3.0.1 -proto-google-cloud-firestore-v1:3.0.1:3.0.1 +google-cloud-firestore:3.0.1:3.0.2-SNAPSHOT +google-cloud-firestore-admin:3.0.1:3.0.2-SNAPSHOT +google-cloud-firestore-bom:3.0.1:3.0.2-SNAPSHOT +google-cloud-firestore-parent:3.0.1:3.0.2-SNAPSHOT +grpc-google-cloud-firestore-admin-v1:3.0.1:3.0.2-SNAPSHOT +grpc-google-cloud-firestore-v1:3.0.1:3.0.2-SNAPSHOT +proto-google-cloud-firestore-admin-v1:3.0.1:3.0.2-SNAPSHOT +proto-google-cloud-firestore-v1:3.0.1:3.0.2-SNAPSHOT From 00a2f28e04a399c12e8009349cad8c5f3a421a50 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 12 Aug 2021 17:44:27 +0200 Subject: [PATCH 02/11] chore(deps): update dependency com.google.cloud:google-cloud-firestore to v3.0.1 (#731) --- samples/install-without-bom/pom.xml | 2 +- samples/snapshot/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml index e425c334d0..2906ab398e 100644 --- a/samples/install-without-bom/pom.xml +++ b/samples/install-without-bom/pom.xml @@ -29,7 +29,7 @@ com.google.cloud google-cloud-firestore - 3.0.0 + 3.0.1 diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml index fdd9a9cff2..63e0e47482 100644 --- a/samples/snapshot/pom.xml +++ b/samples/snapshot/pom.xml @@ -28,7 +28,7 @@ com.google.cloud google-cloud-firestore - 3.0.0 + 3.0.1 From a2369912ab0997e3eea08f11de56976091726e42 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 12 Aug 2021 08:54:44 -0700 Subject: [PATCH 03/11] chore: regenerate README (#732) This PR was generated using Autosynth. :rainbow:
Log from Synthtool ``` 2021-08-12 15:46:33,377 synthtool [DEBUG] > Executing /root/.cache/synthtool/java-firestore/.github/readme/synth.py. On branch autosynth-readme nothing to commit, working tree clean 2021-08-12 15:46:34,747 synthtool [DEBUG] > Wrote metadata to .github/readme/synth.metadata/synth.metadata. ```
Full log will be available here: https://source.cloud.google.com/results/invocations/e364f6d2-b21a-49fe-b200-e7b8cf337536/targets - [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.) --- .github/readme/synth.metadata/synth.metadata | 4 ++-- README.md | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/readme/synth.metadata/synth.metadata b/.github/readme/synth.metadata/synth.metadata index 5aa7ba2734..092311ecc0 100644 --- a/.github/readme/synth.metadata/synth.metadata +++ b/.github/readme/synth.metadata/synth.metadata @@ -4,14 +4,14 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-firestore.git", - "sha": "2c7f0d845d0f44dbaf81b44d2cae1a87a2e55ccf" + "sha": "00a2f28e04a399c12e8009349cad8c5f3a421a50" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "6252f2cd074c38f37b44abe5e96d128733eb1b61" + "sha": "7e1f6da50524b5d98eb67adbf6dd0805df54233d" } } ] diff --git a/README.md b/README.md index 23491489f3..ffcec69ae1 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ If you are using Maven without BOM, add this to your dependencies: com.google.cloud google-cloud-firestore - 3.0.0 + 3.0.1 ``` @@ -56,13 +56,13 @@ compile 'com.google.cloud:google-cloud-firestore' If you are using Gradle without BOM, add this to your dependencies ```Groovy -compile 'com.google.cloud:google-cloud-firestore:3.0.0' +compile 'com.google.cloud:google-cloud-firestore:3.0.1' ``` If you are using SBT, add this to your dependencies ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-firestore" % "3.0.0" +libraryDependencies += "com.google.cloud" % "google-cloud-firestore" % "3.0.1" ``` ## Authentication From e48f2f9d2404a054c6c9b6a946108999cea65dca Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Thu, 12 Aug 2021 12:54:42 -0600 Subject: [PATCH 04/11] chore: hello Java8 (#726) --- .../cloud/firestore/BulkCommitBatch.java | 71 ++- .../google/cloud/firestore/BulkWriter.java | 253 +++-------- .../cloud/firestore/CollectionGroup.java | 50 +-- .../cloud/firestore/CollectionReference.java | 10 +- .../cloud/firestore/CustomClassMapper.java | 4 +- .../cloud/firestore/DocumentReference.java | 38 +- .../google/cloud/firestore/DocumentSet.java | 3 +- .../com/google/cloud/firestore/FieldMask.java | 2 +- .../com/google/cloud/firestore/FieldPath.java | 2 +- .../cloud/firestore/FirestoreBundle.java | 14 +- .../cloud/firestore/FirestoreOptions.java | 13 +- .../com/google/cloud/firestore/Internal.java | 2 +- .../com/google/cloud/firestore/Query.java | 83 ++-- .../cloud/firestore/RecursiveDelete.java | 75 ++-- .../google/cloud/firestore/ResourcePath.java | 9 +- .../google/cloud/firestore/Transaction.java | 26 +- .../cloud/firestore/TransactionRunner.java | 60 +-- .../google/cloud/firestore/UpdateBuilder.java | 20 +- .../com/google/cloud/firestore/Watch.java | 128 +++--- .../firestore/collection/ArraySortedMap.java | 18 +- .../collection/ImmutableSortedMap.java | 12 +- .../ImmutableSortedMapIterator.java | 4 +- .../collection/ImmutableSortedSet.java | 16 +- .../collection/LLRBBlackValueNode.java | 2 +- .../firestore/collection/LLRBEmptyNode.java | 2 +- .../cloud/firestore/collection/LLRBNode.java | 4 +- .../collection/LLRBRedValueNode.java | 4 +- .../firestore/collection/LLRBValueNode.java | 8 +- .../firestore/collection/RBTreeSortedMap.java | 39 +- .../collection/StandardComparator.java | 2 +- .../firestore/spi/v1/GrpcFirestoreRpc.java | 12 +- .../cloud/firestore/BulkWriterTest.java | 167 ++----- .../firestore/CollectionReferenceTest.java | 2 +- .../firestore/ConformanceConversions.java | 4 +- .../cloud/firestore/ConformanceTest.java | 97 ++-- .../firestore/DocumentReferenceTest.java | 30 +- .../cloud/firestore/FirestoreBundleTest.java | 14 +- .../google/cloud/firestore/FirestoreTest.java | 7 +- .../cloud/firestore/ITBulkWriterTest.java | 38 +- .../cloud/firestore/LocalFirestoreHelper.java | 58 +-- .../google/cloud/firestore/MapperTest.java | 422 +++--------------- .../com/google/cloud/firestore/QueryTest.java | 65 ++- .../cloud/firestore/RecursiveDeleteTest.java | 132 +++--- .../cloud/firestore/TransactionTest.java | 327 ++++---------- .../com/google/cloud/firestore/WatchTest.java | 60 +-- .../cloud/firestore/it/ITQueryWatchTest.java | 63 +-- .../cloud/firestore/it/ITShutdownTest.java | 28 +- .../cloud/firestore/it/ITSystemTest.java | 212 ++++----- 48 files changed, 883 insertions(+), 1829 deletions(-) diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkCommitBatch.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkCommitBatch.java index 7d6dd81c67..5ad7868672 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkCommitBatch.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkCommitBatch.java @@ -16,8 +16,6 @@ package com.google.cloud.firestore; -import com.google.api.core.ApiAsyncFunction; -import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; import com.google.api.gax.rpc.ApiException; @@ -92,32 +90,29 @@ ApiFuture bulkCommit() { return ApiFutures.transformAsync( response, - new ApiAsyncFunction() { - @Override - public ApiFuture apply(BatchWriteResponse batchWriteResponse) { - List> pendingUserCallbacks = new ArrayList<>(); - - List writeResults = - batchWriteResponse.getWriteResultsList(); - List statuses = batchWriteResponse.getStatusList(); - - for (int i = 0; i < writeResults.size(); ++i) { - com.google.firestore.v1.WriteResult writeResult = writeResults.get(i); - com.google.rpc.Status status = statuses.get(i); - BulkWriterOperation operation = pendingOperations.get(i); - Status code = Status.fromCodeValue(status.getCode()); - if (code == Status.OK) { - pendingUserCallbacks.add( - operation.onSuccess( - new WriteResult(Timestamp.fromProto(writeResult.getUpdateTime())))); - } else { - pendingUserCallbacks.add( - operation.onException( - FirestoreException.forServerRejection(code, status.getMessage()))); - } + batchWriteResponse -> { + List> pendingUserCallbacks = new ArrayList<>(); + + List writeResults = + batchWriteResponse.getWriteResultsList(); + List statuses = batchWriteResponse.getStatusList(); + + for (int i = 0; i < writeResults.size(); ++i) { + com.google.firestore.v1.WriteResult writeResult = writeResults.get(i); + com.google.rpc.Status status = statuses.get(i); + BulkWriterOperation operation = pendingOperations.get(i); + Status code = Status.fromCodeValue(status.getCode()); + if (code == Status.OK) { + pendingUserCallbacks.add( + operation.onSuccess( + new WriteResult(Timestamp.fromProto(writeResult.getUpdateTime())))); + } else { + pendingUserCallbacks.add( + operation.onException( + FirestoreException.forServerRejection(code, status.getMessage()))); } - return BulkWriter.silenceFuture(ApiFutures.allAsList(pendingUserCallbacks)); } + return BulkWriter.silenceFuture(ApiFutures.allAsList(pendingUserCallbacks)); }, executor); } @@ -127,20 +122,18 @@ private ApiFuture processExceptions(ApiFuture() { - @Override - public BatchWriteResponse apply(ApiException exception) { - com.google.rpc.Status.Builder status = - com.google.rpc.Status.newBuilder() - .setCode(exception.getStatusCode().getCode().ordinal()) - .setMessage(exception.getMessage()); - BatchWriteResponse.Builder response = BatchWriteResponse.newBuilder(); - for (int i = 0; i < pendingOperations.size(); ++i) { - response.addWriteResults(com.google.firestore.v1.WriteResult.getDefaultInstance()); - response.addStatus(status); - } - return response.build(); + exception -> { + com.google.rpc.Status.Builder status = + com.google.rpc.Status.newBuilder() + .setCode(exception.getStatusCode().getCode().ordinal()) + .setMessage(exception.getMessage()); + BatchWriteResponse.Builder responseBuilder = BatchWriteResponse.newBuilder(); + for (int i = 0; i < pendingOperations.size(); ++i) { + responseBuilder.addWriteResults( + com.google.firestore.v1.WriteResult.getDefaultInstance()); + responseBuilder.addStatus(status); } + return responseBuilder.build(); }, MoreExecutors.directExecutor()); } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkWriter.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkWriter.java index 365fa6c3ec..d0c134736c 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkWriter.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/BulkWriter.java @@ -18,7 +18,6 @@ import static com.google.cloud.firestore.BulkWriterOperation.DEFAULT_BACKOFF_MAX_DELAY_MS; -import com.google.api.core.ApiAsyncFunction; import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutureCallback; @@ -59,7 +58,7 @@ public interface WriteResultCallback { * @param result The result of the operation. */ void onResult(DocumentReference documentReference, WriteResult result); - }; + } /** * A callback set by `addWriteErrorListener()` to be run every time an operation fails and @@ -132,24 +131,20 @@ enum OperationType { static final double DEFAULT_JITTER_FACTOR = 0.3; private static final WriteResultCallback DEFAULT_SUCCESS_LISTENER = - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) {} - }; + (documentReference, result) -> {}; private static final WriteErrorCallback DEFAULT_ERROR_LISTENER = - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - if (error.getFailedAttempts() > MAX_RETRY_ATTEMPTS) { - return false; - } - Set codes = FirestoreSettings.newBuilder().batchWriteSettings().getRetryableCodes(); - for (Code code : codes) { - if (code.equals(Code.valueOf(error.getStatus().getCode().name()))) { - return true; - } - } + error -> { + if (error.getFailedAttempts() > MAX_RETRY_ATTEMPTS) { return false; } + Set codes = FirestoreSettings.newBuilder().batchWriteSettings().getRetryableCodes(); + for (Code code : codes) { + if (code.equals(Code.valueOf(error.getStatus().getCode().name()))) { + return true; + } + } + return false; }; private static final Logger logger = Logger.getLogger(BulkWriter.class.getName()); @@ -295,13 +290,7 @@ public ApiFuture create( @Nonnull final DocumentReference documentReference, @Nonnull final Map fields) { return executeWrite( - documentReference, - OperationType.CREATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.create(documentReference, fields); - } - }); + documentReference, OperationType.CREATE, batch -> batch.create(documentReference, fields)); } /** @@ -317,13 +306,7 @@ public ApiFuture apply(BulkCommitBatch batch) { public ApiFuture create( @Nonnull final DocumentReference documentReference, @Nonnull final Object pojo) { return executeWrite( - documentReference, - OperationType.CREATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.create(documentReference, pojo); - } - }); + documentReference, OperationType.CREATE, batch -> batch.create(documentReference, pojo)); } /** @@ -336,13 +319,7 @@ public ApiFuture apply(BulkCommitBatch batch) { @Nonnull public ApiFuture delete(@Nonnull final DocumentReference documentReference) { return executeWrite( - documentReference, - OperationType.DELETE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.delete(documentReference); - } - }); + documentReference, OperationType.DELETE, batch -> batch.delete(documentReference)); } /** @@ -360,11 +337,7 @@ public ApiFuture delete( return executeWrite( documentReference, OperationType.DELETE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.delete(documentReference, precondition); - } - }); + batch -> batch.delete(documentReference, precondition)); } /** @@ -381,13 +354,7 @@ public ApiFuture set( @Nonnull final DocumentReference documentReference, @Nonnull final Map fields) { return executeWrite( - documentReference, - OperationType.SET, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.set(documentReference, fields); - } - }); + documentReference, OperationType.SET, batch -> batch.set(documentReference, fields)); } /** @@ -409,11 +376,7 @@ public ApiFuture set( return executeWrite( documentReference, OperationType.SET, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.set(documentReference, fields, options); - } - }); + batch -> batch.set(documentReference, fields, options)); } /** @@ -433,13 +396,7 @@ public ApiFuture set( @Nonnull final Object pojo, @Nonnull final SetOptions options) { return executeWrite( - documentReference, - OperationType.SET, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.set(documentReference, pojo, options); - } - }); + documentReference, OperationType.SET, batch -> batch.set(documentReference, pojo, options)); } /** @@ -455,13 +412,7 @@ public ApiFuture apply(BulkCommitBatch batch) { public ApiFuture set( @Nonnull final DocumentReference documentReference, @Nonnull final Object pojo) { return executeWrite( - documentReference, - OperationType.SET, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.set(documentReference, pojo); - } - }); + documentReference, OperationType.SET, batch -> batch.set(documentReference, pojo)); } /** @@ -483,13 +434,7 @@ public ApiFuture update( @Nonnull final DocumentReference documentReference, @Nonnull final Map fields) { return executeWrite( - documentReference, - OperationType.UPDATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.update(documentReference, fields); - } - }); + documentReference, OperationType.UPDATE, batch -> batch.update(documentReference, fields)); } /** @@ -515,11 +460,7 @@ public ApiFuture update( return executeWrite( documentReference, OperationType.UPDATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.update(documentReference, fields, precondition); - } - }); + batch -> batch.update(documentReference, fields, precondition)); } /** @@ -547,11 +488,7 @@ public ApiFuture update( return executeWrite( documentReference, OperationType.UPDATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.update(documentReference, field, value, moreFieldsAndValues); - } - }); + batch -> batch.update(documentReference, field, value, moreFieldsAndValues)); } /** @@ -579,11 +516,7 @@ public ApiFuture update( return executeWrite( documentReference, OperationType.UPDATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.update(documentReference, fieldPath, value, moreFieldsAndValues); - } - }); + batch -> batch.update(documentReference, fieldPath, value, moreFieldsAndValues)); } /** @@ -612,11 +545,7 @@ public ApiFuture update( return executeWrite( documentReference, OperationType.UPDATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.update(documentReference, precondition, field, value, moreFieldsAndValues); - } - }); + batch -> batch.update(documentReference, precondition, field, value, moreFieldsAndValues)); } /** @@ -646,12 +575,8 @@ public ApiFuture update( return executeWrite( documentReference, OperationType.UPDATE, - new ApiFunction>() { - public ApiFuture apply(BulkCommitBatch batch) { - return batch.update( - documentReference, precondition, fieldPath, value, moreFieldsAndValues); - } - }); + batch -> + batch.update(documentReference, precondition, fieldPath, value, moreFieldsAndValues)); } /** @@ -666,29 +591,20 @@ private ApiFuture executeWrite( new BulkWriterOperation( documentReference, operationType, - new ApiFunction() { - @Override - public Void apply(BulkWriterOperation operation) { - synchronized (lock) { - sendOperationLocked(enqueueOperationOnBatchCallback, operation); - } - return null; + op -> { + synchronized (lock) { + sendOperationLocked(enqueueOperationOnBatchCallback, op); } + return null; }, - new ApiFunction>() { - @Override - public ApiFuture apply(WriteResult writeResult) { - synchronized (lock) { - return invokeUserSuccessCallbackLocked(documentReference, writeResult); - } + writeResult -> { + synchronized (lock) { + return invokeUserSuccessCallbackLocked(documentReference, writeResult); } }, - new ApiFunction>() { - @Override - public ApiFuture apply(BulkWriterException e) { - synchronized (lock) { - return invokeUserErrorCallbackLocked(e); - } + e -> { + synchronized (lock) { + return invokeUserErrorCallbackLocked(e); } }); @@ -701,12 +617,7 @@ public ApiFuture apply(BulkWriterException e) { lastOperation = ApiFutures.transformAsync( lastOperation, - new ApiAsyncFunction() { - @Override - public ApiFuture apply(Void aVoid) { - return silenceFuture(operation.getFuture()); - } - }, + aVoid -> silenceFuture(operation.getFuture()), MoreExecutors.directExecutor()); // Schedule the operation if the BulkWriter has fewer than the maximum number of allowed @@ -716,13 +627,10 @@ public ApiFuture apply(Void aVoid) { sendOperationLocked(enqueueOperationOnBatchCallback, operation); } else { bufferedOperations.add( - new Runnable() { - @Override - public void run() { - synchronized (lock) { - pendingOpsCount++; - sendOperationLocked(enqueueOperationOnBatchCallback, operation); - } + () -> { + synchronized (lock) { + pendingOpsCount++; + sendOperationLocked(enqueueOperationOnBatchCallback, operation); } }); } @@ -731,24 +639,20 @@ public void run() { ApiFuture processedOperationFuture = ApiFutures.transformAsync( operation.getFuture(), - new ApiAsyncFunction() { - public ApiFuture apply(WriteResult result) throws Exception { - pendingOpsCount--; - processBufferedOperations(); - return ApiFutures.immediateFuture(result); - } + result -> { + pendingOpsCount--; + processBufferedOperations(); + return ApiFutures.immediateFuture(result); }, MoreExecutors.directExecutor()); return ApiFutures.catchingAsync( processedOperationFuture, ApiException.class, - new ApiAsyncFunction() { - public ApiFuture apply(ApiException e) throws Exception { - pendingOpsCount--; - processBufferedOperations(); - throw e; - } + e -> { + pendingOpsCount--; + processBufferedOperations(); + throw e; }, MoreExecutors.directExecutor()); } @@ -978,12 +882,9 @@ private void scheduleCurrentBatchLocked(final boolean flush) { final int backoffMsWithJitter = applyJitter(highestBackoffDuration); bulkWriterExecutor.schedule( - new Runnable() { - @Override - public void run() { - synchronized (lock) { - sendBatchLocked(pendingBatch, flush); - } + () -> { + synchronized (lock) { + sendBatchLocked(pendingBatch, flush); } }, backoffMsWithJitter, @@ -999,13 +900,10 @@ private void sendBatchLocked(final BulkCommitBatch batch, final boolean flush) { batch .bulkCommit() .addListener( - new Runnable() { - @Override - public void run() { - if (flush) { - synchronized (lock) { - scheduleCurrentBatchLocked(/* flush= */ true); - } + () -> { + if (flush) { + synchronized (lock) { + scheduleCurrentBatchLocked(/* flush= */ true); } } }, @@ -1014,12 +912,9 @@ public void run() { long delayMs = rateLimiter.getNextRequestDelayMs(batch.getMutationsSize()); logger.log(Level.FINE, String.format("Backing off for %d seconds", delayMs / 1000)); bulkWriterExecutor.schedule( - new Runnable() { - @Override - public void run() { - synchronized (lock) { - sendBatchLocked(batch, flush); - } + () -> { + synchronized (lock) { + sendBatchLocked(batch, flush); } }, delayMs, @@ -1090,15 +985,12 @@ private SettableApiFuture invokeUserErrorCallbackLocked( final SettableApiFuture callbackResult = SettableApiFuture.create(); final WriteErrorCallback listener = errorListener; errorExecutor.execute( - new Runnable() { - @Override - public void run() { - try { - boolean shouldRetry = listener.onError(error); - callbackResult.set(shouldRetry); - } catch (Exception e) { - callbackResult.setException(e); - } + () -> { + try { + boolean shouldRetry = listener.onError(error); + callbackResult.set(shouldRetry); + } catch (Exception e) { + callbackResult.setException(e); } }); return callbackResult; @@ -1110,15 +1002,12 @@ private ApiFuture invokeUserSuccessCallbackLocked( final SettableApiFuture callbackResult = SettableApiFuture.create(); final WriteResultCallback listener = successListener; successExecutor.execute( - new Runnable() { - @Override - public void run() { - try { - listener.onResult(documentReference, result); - callbackResult.set(null); - } catch (Exception e) { - callbackResult.setException(e); - } + () -> { + try { + listener.onResult(documentReference, result); + callbackResult.set(null); + } catch (Exception e) { + callbackResult.setException(e); } }); return callbackResult; diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionGroup.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionGroup.java index 0a4c35e73b..8ecce62cb1 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionGroup.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionGroup.java @@ -16,15 +16,12 @@ package com.google.cloud.firestore; -import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; import com.google.api.gax.rpc.ApiException; import com.google.api.gax.rpc.ApiExceptions; import com.google.api.gax.rpc.ApiStreamObserver; -import com.google.cloud.firestore.v1.FirestoreClient; import com.google.cloud.firestore.v1.FirestoreClient.PartitionQueryPagedResponse; -import com.google.common.base.Function; import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.MoreExecutors; @@ -35,8 +32,8 @@ import io.opencensus.trace.Status; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; +import java.util.function.Function; import javax.annotation.Nullable; /** @@ -79,7 +76,7 @@ public void getPartitions( } else { PartitionQueryRequest request = buildRequest(desiredPartitionCount); - final FirestoreClient.PartitionQueryPagedResponse response; + final PartitionQueryPagedResponse response; final TraceUtil traceUtil = TraceUtil.getInstance(); Span span = traceUtil.startSpan(TraceUtil.SPAN_NAME_PARTITIONQUERY); try (Scope scope = traceUtil.getTracer().withSpan(span)) { @@ -90,12 +87,9 @@ public void getPartitions( consumePartitions( response, - new Function() { - @Override - public Void apply(QueryPartition queryPartition) { - observer.onNext(queryPartition); - return null; - } + queryPartition -> { + observer.onNext(queryPartition); + return null; }); observer.onCompleted(); @@ -121,21 +115,15 @@ public ApiFuture> getPartitions(long desiredPartitionCount) try (Scope scope = traceUtil.getTracer().withSpan(span)) { return ApiFutures.transform( rpcContext.sendRequest(request, rpcContext.getClient().partitionQueryPagedCallable()), - new ApiFunction>() { - @Override - public List apply(PartitionQueryPagedResponse response) { - final ImmutableList.Builder partitions = ImmutableList.builder(); - consumePartitions( - response, - new Function() { - @Override - public Void apply(QueryPartition queryPartition) { - partitions.add(queryPartition); - return null; - } - }); - return partitions.build(); - } + response -> { + final ImmutableList.Builder partitions = ImmutableList.builder(); + consumePartitions( + response, + queryPartition -> { + partitions.add(queryPartition); + return null; + }); + return partitions.build(); }, MoreExecutors.directExecutor()); } catch (ApiException exception) { @@ -169,14 +157,8 @@ private void consumePartitions( } // Sort the partitions as they may not be ordered if responses are paged. - Collections.sort( - cursors, - new Comparator() { - @Override - public int compare(Cursor left, Cursor right) { - return Order.INSTANCE.compareArrays(left.getValuesList(), right.getValuesList()); - } - }); + cursors.sort( + (left, right) -> Order.INSTANCE.compareArrays(left.getValuesList(), right.getValuesList())); @Nullable Object[] lastCursor = null; for (Cursor cursor : cursors) { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionReference.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionReference.java index 54d2d69bca..3b771fdb86 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionReference.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CollectionReference.java @@ -16,7 +16,6 @@ package com.google.cloud.firestore; -import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; import com.google.api.core.InternalExtensionOnly; @@ -195,14 +194,7 @@ public ApiFuture add(@Nonnull final Map field ApiFuture createFuture = documentReference.create(fields); return ApiFutures.transform( - createFuture, - new ApiFunction() { - @Override - public DocumentReference apply(WriteResult writeResult) { - return documentReference; - } - }, - MoreExecutors.directExecutor()); + createFuture, writeResult -> documentReference, MoreExecutors.directExecutor()); } /** diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CustomClassMapper.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CustomClassMapper.java index 96689ff6f2..a17c3a08e2 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CustomClassMapper.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/CustomClassMapper.java @@ -305,7 +305,7 @@ private static T deserializeToParameterizedType( try { result = (rawType == Map.class) - ? new HashMap() + ? new HashMap<>() : (HashMap) rawType.getDeclaredConstructor().newInstance(); } catch (InstantiationException | IllegalAccessException @@ -789,7 +789,7 @@ private void addProperty(String property) { } T deserialize(Map values, DeserializeContext context) { - return deserialize(values, Collections.>, Type>emptyMap(), context); + return deserialize(values, Collections.emptyMap(), context); } T deserialize( diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java index ebf892ba7a..5841bdcf7d 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentReference.java @@ -16,7 +16,6 @@ package com.google.cloud.firestore; -import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; import com.google.api.core.InternalExtensionOnly; @@ -131,12 +130,7 @@ public CollectionReference collection(@Nonnull String collectionPath) { private ApiFuture extractFirst(ApiFuture> results) { return ApiFutures.transform( results, - new ApiFunction, T>() { - @Override - public T apply(List results) { - return results.isEmpty() ? null : results.get(0); - } - }, + results1 -> results1.isEmpty() ? null : results1.get(0), MoreExecutors.directExecutor()); } @@ -436,26 +430,22 @@ public ListenerRegistration addSnapshotListener( return Watch.forDocument(this) .runWatch( executor, - new EventListener() { - @Override - public void onEvent( - @Nullable QuerySnapshot value, @Nullable FirestoreException error) { - if (value == null) { - listener.onEvent(null, error); - return; - } + (value, error) -> { + if (value == null) { + listener.onEvent(null, error); + return; + } - for (DocumentSnapshot doc : value) { - if (doc.getReference().equals(DocumentReference.this)) { - listener.onEvent(value.getDocuments().get(0), null); - return; - } + for (DocumentSnapshot doc : value) { + if (doc.getReference().equals(DocumentReference.this)) { + listener.onEvent(value.getDocuments().get(0), null); + return; } - listener.onEvent( - DocumentSnapshot.fromMissing( - rpcContext, DocumentReference.this, value.getReadTime()), - null); } + listener.onEvent( + DocumentSnapshot.fromMissing( + rpcContext, DocumentReference.this, value.getReadTime()), + null); }); } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSet.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSet.java index d453092694..4230709030 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSet.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSet.java @@ -36,8 +36,7 @@ class DocumentSet implements Iterable { /** Returns an empty DocumentSet sorted by the given comparator, then by keys. */ static DocumentSet emptySet(final Comparator comparator) { return new DocumentSet( - EMPTY_DOCUMENT_MAP, - new ImmutableSortedSet<>(Collections.emptyList(), comparator)); + EMPTY_DOCUMENT_MAP, new ImmutableSortedSet<>(Collections.emptyList(), comparator)); } /** diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldMask.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldMask.java index 2bcfa252bd..0277029da1 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldMask.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldMask.java @@ -27,7 +27,7 @@ /** A FieldMask can be used to limit the number of fields returned by a `getAll()` call. */ public final class FieldMask { - static final FieldMask EMPTY_MASK = new FieldMask(new TreeSet()); + static final FieldMask EMPTY_MASK = new FieldMask(new TreeSet<>()); private final SortedSet fieldPaths; // Sorted for testing. diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java index b850f2522f..752b7ea09e 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FieldPath.java @@ -87,7 +87,7 @@ static FieldPath fromDotSeparatedString(String field) { static FieldPath empty() { // NOTE: This is not static since it would create a circular class dependency during // initialization. - return new AutoValue_FieldPath(ImmutableList.of()); + return new AutoValue_FieldPath(ImmutableList.of()); } private String encodedPath; diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java index f28c1aab95..2b4977aebc 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreBundle.java @@ -17,7 +17,6 @@ package com.google.cloud.firestore; import com.google.cloud.Timestamp; -import com.google.common.base.Optional; import com.google.common.collect.Lists; import com.google.firestore.bundle.BundleElement; import com.google.firestore.bundle.BundleMetadata; @@ -33,6 +32,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; /** Represents a Firestore data bundle with results from the given document and query snapshots. */ public final class FirestoreBundle { @@ -43,16 +43,16 @@ public final class FirestoreBundle { private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8; // Raw byte array to hold the content of the bundle. - private byte[] bundleData; + private final byte[] bundleData; /** Builds a Firestore data bundle with results from the given document and query snapshots. */ public static final class Builder { // Id of the bundle. - private String id; + private final String id; // Resulting documents for the bundle, keyed by full document path. - private Map documents = new HashMap<>(); + private final Map documents = new HashMap<>(); // Named queries saved in the bundle, keyed by query name. - private Map namedQueries = new HashMap<>(); + private final Map namedQueries = new HashMap<>(); // The latest read time among all bundled documents and queries. private Timestamp latestReadTime = Timestamp.MIN_VALUE; @@ -73,7 +73,7 @@ public String getId() { * @returns This instance. */ public Builder add(DocumentSnapshot documentSnapshot) { - return add(documentSnapshot, Optional.absent()); + return add(documentSnapshot, Optional.empty()); } private Builder add(DocumentSnapshot documentSnapshot, Optional queryName) { @@ -81,7 +81,7 @@ private Builder add(DocumentSnapshot documentSnapshot, Optional queryNam BundledDocument originalDocument = documents.get(documentSnapshot.getReference().getName()); List queries = originalDocument == null - ? Lists.newArrayList() + ? Lists.newArrayList() : Lists.newArrayList(originalDocument.getMetadata().getQueriesList()); // Update with document built from `documentSnapshot` because it is newer. diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java index 392bf78416..47de09d39a 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/FirestoreOptions.java @@ -16,7 +16,6 @@ package com.google.cloud.firestore; -import com.google.api.core.ApiFunction; import com.google.api.core.InternalApi; import com.google.api.gax.core.CredentialsProvider; import com.google.api.gax.core.FixedCredentialsProvider; @@ -36,7 +35,7 @@ import io.grpc.ManagedChannelBuilder; import java.io.IOException; import java.net.URI; -import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; @@ -236,13 +235,7 @@ public FirestoreOptions build() { this.setChannelProvider( InstantiatingGrpcChannelProvider.newBuilder() .setEndpoint(emulatorHost) - .setChannelConfigurator( - new ApiFunction() { - @Override - public ManagedChannelBuilder apply(ManagedChannelBuilder input) { - return input.usePlaintext(); - } - }) + .setChannelConfigurator(ManagedChannelBuilder::usePlaintext) .build()); // Use a `CredentialProvider` to match the Firebase Admin SDK, which prevents the Admin SDK // from overwriting the Emulator credentials. @@ -255,7 +248,7 @@ public ManagedChannelBuilder apply(ManagedChannelBuilder input) { public static class EmulatorCredentials extends Credentials { private final Map> HEADERS = - ImmutableMap.of("Authorization", Arrays.asList("Bearer owner")); + ImmutableMap.of("Authorization", Collections.singletonList("Bearer owner")); @Override public String getAuthenticationType() { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java index 3d1bbc4f4f..46f16f5f38 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Internal.java @@ -28,7 +28,7 @@ @InternalApi public class Internal { - private FirestoreImpl firestore; + private final FirestoreImpl firestore; @InternalApi public Internal(FirestoreImpl firestore) { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Query.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Query.java index b1f5fa0bf1..3cf86a81ed 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Query.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Query.java @@ -268,9 +268,9 @@ static Builder builder() { return new AutoValue_Query_QueryOptions.Builder() .setAllDescendants(false) .setLimitType(LimitType.First) - .setFieldOrders(ImmutableList.of()) - .setFieldFilters(ImmutableList.of()) - .setFieldProjections(ImmutableList.of()) + .setFieldOrders(ImmutableList.of()) + .setFieldFilters(ImmutableList.of()) + .setFieldProjections(ImmutableList.of()) .setKindless(false) .setRequireConsistency(true); } @@ -1617,7 +1617,7 @@ ApiFuture get(@Nullable ByteString transactionId) { internalStream( new QuerySnapshotObserver() { - List documentSnapshots = new ArrayList<>(); + final List documentSnapshots = new ArrayList<>(); @Override public void onNext(QueryDocumentSnapshot documentSnapshot) { @@ -1649,48 +1649,45 @@ public void onCompleted() { } Comparator comparator() { - return new Comparator() { - @Override - public int compare(QueryDocumentSnapshot doc1, QueryDocumentSnapshot doc2) { - // Add implicit sorting by name, using the last specified direction. - ImmutableList fieldOrders = options.getFieldOrders(); - Direction lastDirection = - fieldOrders.isEmpty() - ? Direction.ASCENDING - : fieldOrders.get(fieldOrders.size() - 1).direction; - - List orderBys = new ArrayList<>(fieldOrders); - orderBys.add(new FieldOrder(FieldPath.DOCUMENT_ID.toProto(), lastDirection)); - - for (FieldOrder orderBy : orderBys) { - int comp; - - String path = orderBy.fieldReference.getFieldPath(); - if (FieldPath.isDocumentId(path)) { - comp = - doc1.getReference() - .getResourcePath() - .compareTo(doc2.getReference().getResourcePath()); - } else { - FieldPath fieldPath = FieldPath.fromDotSeparatedString(path); - Preconditions.checkState( - doc1.contains(fieldPath) && doc2.contains(fieldPath), - "Can only compare fields that exist in the DocumentSnapshot." - + " Please include the fields you are ordering on in your select() call."); - Value v1 = doc1.extractField(fieldPath); - Value v2 = doc2.extractField(fieldPath); - - comp = com.google.cloud.firestore.Order.INSTANCE.compare(v1, v2); - } - - if (comp != 0) { - int direction = orderBy.direction.equals(Direction.ASCENDING) ? 1 : -1; - return direction * comp; - } + return (doc1, doc2) -> { + // Add implicit sorting by name, using the last specified direction. + ImmutableList fieldOrders = options.getFieldOrders(); + Direction lastDirection = + fieldOrders.isEmpty() + ? Direction.ASCENDING + : fieldOrders.get(fieldOrders.size() - 1).direction; + + List orderBys = new ArrayList<>(fieldOrders); + orderBys.add(new FieldOrder(FieldPath.DOCUMENT_ID.toProto(), lastDirection)); + + for (FieldOrder orderBy : orderBys) { + int comp; + + String path = orderBy.fieldReference.getFieldPath(); + if (FieldPath.isDocumentId(path)) { + comp = + doc1.getReference() + .getResourcePath() + .compareTo(doc2.getReference().getResourcePath()); + } else { + FieldPath fieldPath = FieldPath.fromDotSeparatedString(path); + Preconditions.checkState( + doc1.contains(fieldPath) && doc2.contains(fieldPath), + "Can only compare fields that exist in the DocumentSnapshot." + + " Please include the fields you are ordering on in your select() call."); + Value v1 = doc1.extractField(fieldPath); + Value v2 = doc2.extractField(fieldPath); + + comp = com.google.cloud.firestore.Order.INSTANCE.compare(v1, v2); } - return 0; + if (comp != 0) { + int direction = orderBy.direction.equals(Direction.ASCENDING) ? 1 : -1; + return direction * comp; + } } + + return 0; }; } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/RecursiveDelete.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/RecursiveDelete.java index b14eb19834..eba64e7690 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/RecursiveDelete.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/RecursiveDelete.java @@ -262,29 +262,29 @@ private void onQueryEnd() { // Completes the future returned by run() and sets the exception if an error occurred. ApiFutures.transformAsync( ApiFutures.allAsList(pendingFutures), - new ApiAsyncFunction, Void>() { - public ApiFuture apply(List unused) { - synchronized (lock) { - if (lastError == null) { - completionFuture.set(null); - } else { - String message = - errorCount - + (errorCount != 1 ? " deletes" : " delete") - + " failed. " - + lastError.getMessage(); - if (lastError instanceof FirestoreException) { - lastError = - new FirestoreException(message, ((FirestoreException) lastError).getStatus()); + (ApiAsyncFunction, Void>) + unused -> { + synchronized (lock) { + if (lastError == null) { + completionFuture.set(null); } else { - lastError = new Throwable(message, lastError); + String message = + errorCount + + (errorCount != 1 ? " deletes" : " delete") + + " failed. " + + lastError.getMessage(); + if (lastError instanceof FirestoreException) { + lastError = + new FirestoreException( + message, ((FirestoreException) lastError).getStatus()); + } else { + lastError = new Throwable(message, lastError); + } + completionFuture.setException(lastError); } - completionFuture.setException(lastError); + return ApiFutures.immediateFuture(null); } - return ApiFutures.immediateFuture(null); - } - } - }, + }, MoreExecutors.directExecutor()); } @@ -298,33 +298,28 @@ private ApiFuture deleteReference(final DocumentReference reference) { ApiFutures.catchingAsync( writer.delete(reference), Throwable.class, - new ApiAsyncFunction() { - public ApiFuture apply(Throwable e) { - synchronized (lock) { - errorCount++; - lastError = e; - return ApiFutures.immediateFuture(null); - } + e -> { + synchronized (lock) { + errorCount++; + lastError = e; + return ApiFutures.immediateFuture(null); } }, MoreExecutors.directExecutor()); return ApiFutures.transformAsync( catchingDeleteFuture, - new ApiAsyncFunction() { - - public ApiFuture apply(WriteResult result) { - synchronized (lock) { - pendingOperationsCount--; - // We wait until the previous stream has ended in order to ensure the - // startAfter document is correct. Starting the next stream while - // there are pending operations allows Firestore to maximize - // BulkWriter throughput. - if (documentsPending && !streamInProgress && pendingOperationsCount < minPendingOps) { - streamDescendants(); - } - return ApiFutures.immediateFuture(null); + result -> { + synchronized (lock) { + pendingOperationsCount--; + // We wait until the previous stream has ended in order to ensure the + // startAfter document is correct. Starting the next stream while + // there are pending operations allows Firestore to maximize + // BulkWriter throughput. + if (documentsPending && !streamInProgress && pendingOperationsCount < minPendingOps) { + streamDescendants(); } + return ApiFutures.immediateFuture(null); } }, MoreExecutors.directExecutor()); diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/ResourcePath.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/ResourcePath.java index ee44cf4f38..6a289b9172 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/ResourcePath.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/ResourcePath.java @@ -44,7 +44,7 @@ static ResourcePath create(DatabaseRootName databaseName, ImmutableList * @param databaseName The Firestore database name. */ static ResourcePath create(DatabaseRootName databaseName) { - return new AutoValue_ResourcePath(ImmutableList.of(), databaseName); + return new AutoValue_ResourcePath(ImmutableList.of(), databaseName); } /** @@ -185,11 +185,6 @@ ResourcePath createPathWithSegments(ImmutableList segments) { } public static Comparator comparator() { - return new Comparator() { - @Override - public int compare(ResourcePath left, ResourcePath right) { - return left.compareTo(right); - } - }; + return Comparator.naturalOrder(); } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Transaction.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Transaction.java index d8e9ca31ce..5d3693fdd6 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Transaction.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Transaction.java @@ -16,7 +16,6 @@ package com.google.cloud.firestore; -import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; import com.google.cloud.firestore.TransactionOptions.TransactionOptionsType; @@ -107,12 +106,9 @@ ApiFuture begin() { return ApiFutures.transform( transactionBeginFuture, - new ApiFunction() { - @Override - public Void apply(BeginTransactionResponse beginTransactionResponse) { - transactionId = beginTransactionResponse.getTransaction(); - return null; - } + beginTransactionResponse -> { + transactionId = beginTransactionResponse.getTransaction(); + return null; }, MoreExecutors.directExecutor()); } @@ -133,14 +129,7 @@ ApiFuture rollback() { firestore.sendRequest(reqBuilder.build(), firestore.getClient().rollbackCallable()); return ApiFutures.transform( - rollbackFuture, - new ApiFunction() { - @Override - public Void apply(Empty beginTransactionResponse) { - return null; - } - }, - MoreExecutors.directExecutor()); + rollbackFuture, beginTransactionResponse -> null, MoreExecutors.directExecutor()); } /** @@ -155,12 +144,7 @@ public ApiFuture get(@Nonnull DocumentReference documentRef) { Tracing.getTracer().getCurrentSpan().addAnnotation(TraceUtil.SPAN_NAME_GETDOCUMENT); return ApiFutures.transform( firestore.getAll(new DocumentReference[] {documentRef}, /*fieldMask=*/ null, transactionId), - new ApiFunction, DocumentSnapshot>() { - @Override - public DocumentSnapshot apply(List snapshots) { - return snapshots.isEmpty() ? null : snapshots.get(0); - } - }, + snapshots -> snapshots.isEmpty() ? null : snapshots.get(0), MoreExecutors.directExecutor()); } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/TransactionRunner.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/TransactionRunner.java index 3c479f0fc9..420f41e08e 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/TransactionRunner.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/TransactionRunner.java @@ -116,7 +116,7 @@ ApiFuture run() { private ApiFuture maybeRollback() { return transaction.hasTransactionId() ? transaction.rollback() - : ApiFutures.immediateFuture(null); + : ApiFutures.immediateFuture(null); } /** A callback that invokes the BeginTransaction callback. */ @@ -126,11 +126,8 @@ public ApiFuture apply(Void input) { final SettableApiFuture backoff = SettableApiFuture.create(); // Add a backoff delay. At first, this is 0. firestoreExecutor.schedule( - new Runnable() { - @Override - public void run() { - backoff.set(null); - } + () -> { + backoff.set(null); }, nextBackoffAttempt.getRandomizedRetryDelay().toMillis(), TimeUnit.MILLISECONDS); @@ -148,30 +145,27 @@ private SettableApiFuture invokeUserCallback() { final SettableApiFuture returnedResult = SettableApiFuture.create(); userCallbackExecutor.execute( - new Runnable() { - @Override - public void run() { - ApiFuture userCallbackResult; - try { - userCallbackResult = userCallback.updateCallback(transaction); - } catch (Exception e) { - userCallbackResult = ApiFutures.immediateFailedFuture(e); - } - ApiFutures.addCallback( - userCallbackResult, - new ApiFutureCallback() { - @Override - public void onFailure(Throwable t) { - returnedResult.setException(t); - } - - @Override - public void onSuccess(T result) { - returnedResult.set(result); - } - }, - firestoreExecutor); + () -> { + ApiFuture userCallbackResult; + try { + userCallbackResult = userCallback.updateCallback(transaction); + } catch (Exception e) { + userCallbackResult = ApiFutures.immediateFailedFuture(e); } + ApiFutures.addCallback( + userCallbackResult, + new ApiFutureCallback() { + @Override + public void onFailure(Throwable t) { + returnedResult.setException(t); + } + + @Override + public void onSuccess(T result) { + returnedResult.set(result); + } + }, + firestoreExecutor); }); return returnedResult; } @@ -289,13 +283,7 @@ private ApiFuture rollbackAndReject(final Throwable throwable) { transaction .rollback() .addListener( - new Runnable() { - @Override - public void run() { - failedTransaction.setException(throwable); - } - }, - MoreExecutors.directExecutor()); + () -> failedTransaction.setException(throwable), MoreExecutors.directExecutor()); } else { failedTransaction.setException(throwable); } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java index 18fee618a0..ee21f0e06e 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/UpdateBuilder.java @@ -16,7 +16,6 @@ package com.google.cloud.firestore; -import com.google.api.core.ApiFunction; import com.google.api.core.ApiFuture; import com.google.api.core.ApiFutures; import com.google.api.core.InternalExtensionOnly; @@ -619,20 +618,17 @@ ApiFuture> commit(@Nullable ByteString transactionId) { return ApiFutures.transform( response, - new ApiFunction>() { - @Override - public List apply(CommitResponse commitResponse) { - List writeResults = - commitResponse.getWriteResultsList(); + commitResponse -> { + List writeResults = + commitResponse.getWriteResultsList(); - List result = new ArrayList<>(); + List result = new ArrayList<>(); - for (com.google.firestore.v1.WriteResult writeResult : writeResults) { - result.add(WriteResult.fromProto(writeResult, commitResponse.getCommitTime())); - } - - return result; + for (com.google.firestore.v1.WriteResult writeResult : writeResults) { + result.add(WriteResult.fromProto(writeResult, commitResponse.getCommitTime())); } + + return result; }, MoreExecutors.directExecutor()); } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Watch.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Watch.java index 7eda432cbe..f655b58c40 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Watch.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/Watch.java @@ -38,7 +38,6 @@ import io.grpc.StatusRuntimeException; import io.opencensus.trace.Tracing; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; @@ -105,7 +104,7 @@ class Watch implements ApiStreamObserver { * Indicates whether we are interested in data from the stream. Set to false in the * 'unsubscribe()' callback. */ - private AtomicBoolean isActive; + private final AtomicBoolean isActive; /** The list of document changes in a snapshot separated by change type. */ static class ChangeSet { @@ -281,25 +280,19 @@ ListenerRegistration runWatch( initStream(); - return new ListenerRegistration() { - @Override - public void remove() { - isActive.set(false); - - firestore - .getClient() - .getExecutor() - .execute( - new Runnable() { - @Override - public void run() { - synchronized (Watch.this) { - stream.onCompleted(); - stream = null; - } - } - }); - } + return () -> { + isActive.set(false); + + firestore + .getClient() + .getExecutor() + .execute( + () -> { + synchronized (Watch.this) { + stream.onCompleted(); + stream = null; + } + }); }; } @@ -334,21 +327,18 @@ private void closeStream(final Throwable throwable) { if (isActive.getAndSet(false)) { userCallbackExecutor.execute( - new Runnable() { - @Override - public void run() { - if (throwable instanceof FirestoreException) { - listener.onEvent(null, (FirestoreException) throwable); - } else { - Status status = getStatus(throwable); - FirestoreException firestoreException = - FirestoreException.forApiException( - new ApiException( - throwable, - GrpcStatusCode.of(status != null ? status.getCode() : Code.UNKNOWN), - false)); - listener.onEvent(null, firestoreException); - } + () -> { + if (throwable instanceof FirestoreException) { + listener.onEvent(null, (FirestoreException) throwable); + } else { + Status status = getStatus(throwable); + FirestoreException firestoreException = + FirestoreException.forApiException( + new ApiException( + throwable, + GrpcStatusCode.of(status != null ? status.getCode() : Code.UNKNOWN), + false)); + listener.onEvent(null, firestoreException); } }); } @@ -383,40 +373,36 @@ private void resetStream() { /** Initializes a new stream to the backend with backoff. */ private void initStream() { firestoreExecutor.schedule( - new Runnable() { - @Override - public void run() { - try { + () -> { + try { + if (!isActive.get()) { + return; + } + + synchronized (Watch.this) { if (!isActive.get()) { return; } - synchronized (Watch.this) { - if (!isActive.get()) { - return; - } - - Preconditions.checkState(stream == null); - - current = false; - nextAttempt = backoff.createNextAttempt(nextAttempt); + Preconditions.checkState(stream == null); - Tracing.getTracer().getCurrentSpan().addAnnotation(TraceUtil.SPAN_NAME_LISTEN); - stream = - firestore.streamRequest(Watch.this, firestore.getClient().listenCallable()); + current = false; + nextAttempt = backoff.createNextAttempt(nextAttempt); - ListenRequest.Builder request = ListenRequest.newBuilder(); - request.setDatabase(firestore.getDatabaseName()); - request.setAddTarget(target); - if (resumeToken != null) { - request.getAddTargetBuilder().setResumeToken(resumeToken); - } + Tracing.getTracer().getCurrentSpan().addAnnotation(TraceUtil.SPAN_NAME_LISTEN); + stream = firestore.streamRequest(Watch.this, firestore.getClient().listenCallable()); - stream.onNext(request.build()); + ListenRequest.Builder request = ListenRequest.newBuilder(); + request.setDatabase(firestore.getDatabaseName()); + request.setAddTarget(target); + if (resumeToken != null) { + request.getAddTargetBuilder().setResumeToken(resumeToken); } - } catch (Throwable throwable) { - onError(throwable); + + stream.onNext(request.build()); } + } catch (Throwable throwable) { + onError(throwable); } }, nextAttempt.getRandomizedRetryDelay().toMillis(), @@ -465,13 +451,7 @@ private void pushSnapshot(final Timestamp readTime, ByteString nextResumeToken) if (!hasPushed || !changes.isEmpty()) { final QuerySnapshot querySnapshot = QuerySnapshot.withChanges(query, readTime, documentSet, changes); - userCallbackExecutor.execute( - new Runnable() { - @Override - public void run() { - listener.onEvent(querySnapshot, null); - } - }); + userCallbackExecutor.execute(() -> listener.onEvent(querySnapshot, null)); hasPushed = true; } @@ -497,7 +477,7 @@ private DocumentChange addDoc(QueryDocumentSnapshot newDocument) { documentSet = documentSet.add(newDocument); int newIndex = documentSet.indexOf(resourcePath); return new DocumentChange(newDocument, Type.ADDED, -1, newIndex); - }; + } /** * Applies a document modification to the document tree. Returns the DocumentChange event for @@ -516,7 +496,7 @@ private DocumentChange modifyDoc(QueryDocumentSnapshot newDocument) { return new DocumentChange(newDocument, Type.MODIFIED, oldIndex, newIndex); } return null; - }; + } /** * Applies the mutations in changeMap to the document tree. Modified 'documentSet' in-place and @@ -532,17 +512,17 @@ private List computeSnapshot(Timestamp readTime) { // Process the sorted changes in the order that is expected by our clients (removals, additions, // and then modifications). We also need to sort the individual changes to assure that // oldIndex/newIndex keep incrementing. - Collections.sort(changeSet.deletes, comparator); + changeSet.deletes.sort(comparator); for (QueryDocumentSnapshot delete : changeSet.deletes) { appliedChanges.add(deleteDoc(delete)); } - Collections.sort(changeSet.adds, comparator); + changeSet.adds.sort(comparator); for (QueryDocumentSnapshot add : changeSet.adds) { appliedChanges.add(addDoc(add)); } - Collections.sort(changeSet.updates, comparator); + changeSet.updates.sort(comparator); for (QueryDocumentSnapshot update : changeSet.updates) { DocumentChange change = modifyDoc(update); if (change != null) { @@ -590,5 +570,5 @@ private static Status getStatus(Throwable throwable) { private static boolean isResourceExhaustedError(Throwable throwable) { Status status = getStatus(throwable); return status != null && status.getCode().equals(Code.RESOURCE_EXHAUSTED); - }; + } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ArraySortedMap.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ArraySortedMap.java index dd23461964..a27d7effa0 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ArraySortedMap.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ArraySortedMap.java @@ -19,7 +19,6 @@ import com.google.api.core.InternalApi; import java.util.AbstractMap; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; @@ -44,7 +43,7 @@ public static ArraySortedMap buildFrom( Map values, Builder.KeyTranslator translator, Comparator comparator) { - Collections.sort(keys, comparator); + keys.sort(comparator); int size = keys.size(); A[] keyArray = (A[]) new Object[size]; C[] valueArray = (C[]) new Object[size]; @@ -55,12 +54,11 @@ public static ArraySortedMap buildFrom( valueArray[pos] = value; pos++; } - return new ArraySortedMap(comparator, keyArray, valueArray); + return new ArraySortedMap<>(comparator, keyArray, valueArray); } public static ArraySortedMap fromMap(Map map, Comparator comparator) { - return buildFrom( - new ArrayList(map.keySet()), map, Builder.identityTranslator(), comparator); + return buildFrom(new ArrayList<>(map.keySet()), map, Builder.identityTranslator(), comparator); } private final K[] keys; @@ -100,7 +98,7 @@ public ImmutableSortedMap remove(K key) { } else { K[] keys = removeFromArray(this.keys, pos); V[] values = removeFromArray(this.values, pos); - return new ArraySortedMap(this.comparator, keys, values); + return new ArraySortedMap<>(this.comparator, keys, values); } } @@ -114,12 +112,12 @@ public ImmutableSortedMap insert(K key, V value) { // The key and/or value might have changed, even though the comparison might still yield 0 K[] newKeys = replaceInArray(this.keys, pos, key); V[] newValues = replaceInArray(this.values, pos, value); - return new ArraySortedMap(this.comparator, newKeys, newValues); + return new ArraySortedMap<>(this.comparator, newKeys, newValues); } } else { if (this.keys.length > Builder.ARRAY_TO_RB_TREE_SIZE_THRESHOLD) { @SuppressWarnings("unchecked") - Map map = new HashMap(this.keys.length + 1); + Map map = new HashMap<>(this.keys.length + 1); for (int i = 0; i < this.keys.length; i++) { map.put(this.keys[i], this.values[i]); } @@ -129,7 +127,7 @@ public ImmutableSortedMap insert(K key, V value) { int newPos = findKeyOrInsertPosition(key); K[] keys = addToArray(this.keys, newPos, key); V[] values = addToArray(this.values, newPos, value); - return new ArraySortedMap(this.comparator, keys, values); + return new ArraySortedMap<>(this.comparator, keys, values); } } } @@ -175,7 +173,7 @@ public Map.Entry next() { final K key = keys[currentPos]; final V value = values[currentPos]; currentPos = reverse ? currentPos - 1 : currentPos + 1; - return new AbstractMap.SimpleImmutableEntry(key, value); + return new AbstractMap.SimpleImmutableEntry<>(key, value); } @Override diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMap.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMap.java index 7191b38ada..006dbd0ef2 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMap.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMap.java @@ -120,20 +120,14 @@ public static class Builder { static final int ARRAY_TO_RB_TREE_SIZE_THRESHOLD = 25; public static ImmutableSortedMap emptyMap(Comparator comparator) { - return new ArraySortedMap(comparator); + return new ArraySortedMap<>(comparator); } public interface KeyTranslator { - public D translate(C key); + D translate(C key); } - private static final KeyTranslator IDENTITY_TRANSLATOR = - new KeyTranslator() { - @Override - public Object translate(Object key) { - return key; - } - }; + private static final KeyTranslator IDENTITY_TRANSLATOR = key -> key; @SuppressWarnings("unchecked") public static KeyTranslator identityTranslator() { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMapIterator.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMapIterator.java index 9c0c1c01ab..58444ae37a 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMapIterator.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedMapIterator.java @@ -36,7 +36,7 @@ public class ImmutableSortedMapIterator implements Iterator root, K startKey, Comparator comparator, boolean isReverse) { - this.nodeStack = new Stack>(); + this.nodeStack = new Stack<>(); this.isReverse = isReverse; LLRBNode node = root; @@ -81,7 +81,7 @@ public boolean hasNext() { public Map.Entry next() { try { final LLRBValueNode node = nodeStack.pop(); - Map.Entry entry = new AbstractMap.SimpleEntry(node.getKey(), node.getValue()); + Map.Entry entry = new AbstractMap.SimpleEntry<>(node.getKey(), node.getValue()); if (this.isReverse) { LLRBNode next = node.getLeft(); while (!next.isEmpty()) { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedSet.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedSet.java index 6c41979037..13b74472f0 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedSet.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/ImmutableSortedSet.java @@ -57,8 +57,8 @@ public ImmutableSortedSet(List elems, Comparator comparator) { this.map = ImmutableSortedMap.Builder.buildFrom( elems, - Collections.emptyMap(), - ImmutableSortedMap.Builder.identityTranslator(), + Collections.emptyMap(), + ImmutableSortedMap.Builder.identityTranslator(), comparator); } @@ -89,11 +89,11 @@ public boolean contains(T entry) { public ImmutableSortedSet remove(T entry) { ImmutableSortedMap newMap = this.map.remove(entry); - return (newMap == this.map) ? this : new ImmutableSortedSet(newMap); + return (newMap == this.map) ? this : new ImmutableSortedSet<>(newMap); } public ImmutableSortedSet insert(T entry) { - return new ImmutableSortedSet(map.insert(entry, null)); + return new ImmutableSortedSet<>(map.insert(entry, null)); } public T getMinEntry() { @@ -113,19 +113,19 @@ public boolean isEmpty() { } public Iterator iterator() { - return new WrappedEntryIterator(this.map.iterator()); + return new WrappedEntryIterator<>(this.map.iterator()); } public Iterator iteratorFrom(T entry) { - return new WrappedEntryIterator(this.map.iteratorFrom(entry)); + return new WrappedEntryIterator<>(this.map.iteratorFrom(entry)); } public Iterator reverseIteratorFrom(T entry) { - return new WrappedEntryIterator(this.map.reverseIteratorFrom(entry)); + return new WrappedEntryIterator<>(this.map.reverseIteratorFrom(entry)); } public Iterator reverseIterator() { - return new WrappedEntryIterator(this.map.reverseIterator()); + return new WrappedEntryIterator<>(this.map.reverseIterator()); } public T getPredecessorEntry(T entry) { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBBlackValueNode.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBBlackValueNode.java index d78043ae26..05d5a6296c 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBBlackValueNode.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBBlackValueNode.java @@ -71,6 +71,6 @@ protected LLRBValueNode copy(K key, V value, LLRBNode left, LLRBNode V newValue = value == null ? this.getValue() : value; LLRBNode newLeft = left == null ? this.getLeft() : left; LLRBNode newRight = right == null ? this.getRight() : right; - return new LLRBBlackValueNode(newKey, newValue, newLeft, newRight); + return new LLRBBlackValueNode<>(newKey, newValue, newLeft, newRight); } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBEmptyNode.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBEmptyNode.java index bf37c84223..8658432614 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBEmptyNode.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBEmptyNode.java @@ -41,7 +41,7 @@ public LLRBNode copy( @Override public LLRBNode insert(K key, V value, Comparator comparator) { - return new LLRBRedValueNode(key, value); + return new LLRBRedValueNode<>(key, value); } @Override diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBNode.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBNode.java index 8dec8bb744..b71a09267a 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBNode.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBNode.java @@ -24,11 +24,11 @@ @InternalApi public interface LLRBNode { - public interface ShortCircuitingNodeVisitor { + interface ShortCircuitingNodeVisitor { boolean shouldContinue(K key, V value); } - public abstract class NodeVisitor implements ShortCircuitingNodeVisitor { + abstract class NodeVisitor implements ShortCircuitingNodeVisitor { @Override public boolean shouldContinue(K key, V value) { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBRedValueNode.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBRedValueNode.java index 89fac9c9c6..bf9ae961c7 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBRedValueNode.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBRedValueNode.java @@ -24,7 +24,7 @@ public class LLRBRedValueNode extends LLRBValueNode { LLRBRedValueNode(K key, V value) { - super(key, value, LLRBEmptyNode.getInstance(), LLRBEmptyNode.getInstance()); + super(key, value, LLRBEmptyNode.getInstance(), LLRBEmptyNode.getInstance()); } LLRBRedValueNode(K key, V value, LLRBNode left, LLRBNode right) { @@ -52,6 +52,6 @@ protected LLRBValueNode copy(K key, V value, LLRBNode left, LLRBNode V newValue = value == null ? this.getValue() : value; LLRBNode newLeft = left == null ? this.getLeft() : left; LLRBNode newRight = right == null ? this.getRight() : right; - return new LLRBRedValueNode(newKey, newValue, newLeft, newRight); + return new LLRBRedValueNode<>(newKey, newValue, newLeft, newRight); } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBValueNode.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBValueNode.java index 087cee7c79..14c66f5141 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBValueNode.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/LLRBValueNode.java @@ -36,8 +36,8 @@ private static Color oppositeColor(LLRBNode node) { LLRBValueNode(K key, V value, LLRBNode left, LLRBNode right) { this.key = key; this.value = value; - this.left = left == null ? LLRBEmptyNode.getInstance() : left; - this.right = right == null ? LLRBEmptyNode.getInstance() : right; + this.left = left == null ? LLRBEmptyNode.getInstance() : left; + this.right = right == null ? LLRBEmptyNode.getInstance() : right; } @Override @@ -73,9 +73,9 @@ public LLRBValueNode copy( LLRBNode newLeft = left == null ? this.left : left; LLRBNode newRight = right == null ? this.right : right; if (color == Color.RED) { - return new LLRBRedValueNode(newKey, newValue, newLeft, newRight); + return new LLRBRedValueNode<>(newKey, newValue, newLeft, newRight); } else { - return new LLRBBlackValueNode(newKey, newValue, newLeft, newRight); + return new LLRBBlackValueNode<>(newKey, newValue, newLeft, newRight); } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/RBTreeSortedMap.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/RBTreeSortedMap.java index 0c199a9adb..befa7b7200 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/RBTreeSortedMap.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/RBTreeSortedMap.java @@ -18,7 +18,6 @@ import com.google.api.core.InternalApi; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; @@ -35,8 +34,8 @@ @InternalApi public class RBTreeSortedMap extends ImmutableSortedMap { - private LLRBNode root; - private Comparator comparator; + private final LLRBNode root; + private final Comparator comparator; RBTreeSortedMap(Comparator comparator) { this.root = LLRBEmptyNode.getInstance(); @@ -86,7 +85,7 @@ public ImmutableSortedMap remove(K key) { } else { LLRBNode newRoot = root.remove(key, this.comparator).copy(null, null, LLRBNode.Color.BLACK, null, null); - return new RBTreeSortedMap(newRoot, this.comparator); + return new RBTreeSortedMap<>(newRoot, this.comparator); } } @@ -94,7 +93,7 @@ public ImmutableSortedMap remove(K key) { public ImmutableSortedMap insert(K key, V value) { LLRBNode newRoot = root.insert(key, value, this.comparator).copy(null, null, LLRBNode.Color.BLACK, null, null); - return new RBTreeSortedMap(newRoot, this.comparator); + return new RBTreeSortedMap<>(newRoot, this.comparator); } @Override @@ -124,22 +123,22 @@ public void inOrderTraversal(LLRBNode.NodeVisitor visitor) { @Override public Iterator> iterator() { - return new ImmutableSortedMapIterator(root, null, this.comparator, false); + return new ImmutableSortedMapIterator<>(root, null, this.comparator, false); } @Override public Iterator> iteratorFrom(K key) { - return new ImmutableSortedMapIterator(root, key, this.comparator, false); + return new ImmutableSortedMapIterator<>(root, key, this.comparator, false); } @Override public Iterator> reverseIteratorFrom(K key) { - return new ImmutableSortedMapIterator(root, key, this.comparator, true); + return new ImmutableSortedMapIterator<>(root, key, this.comparator, true); } @Override public Iterator> reverseIterator() { - return new ImmutableSortedMapIterator(root, null, this.comparator, true); + return new ImmutableSortedMapIterator<>(root, null, this.comparator, true); } @Override @@ -233,9 +232,9 @@ public static RBTreeSortedMap buildFrom( public static RBTreeSortedMap fromMap(Map values, Comparator comparator) { return Builder.buildFrom( - new ArrayList(values.keySet()), + new ArrayList<>(values.keySet()), values, - ImmutableSortedMap.Builder.identityTranslator(), + ImmutableSortedMap.Builder.identityTranslator(), comparator); } @@ -248,7 +247,7 @@ static class BooleanChunk { static class Base1_2 implements Iterable { - private long value; + private final long value; private final int length; public Base1_2(int size) { @@ -315,14 +314,14 @@ private LLRBNode buildBalancedTree(int start, int size) { return LLRBEmptyNode.getInstance(); } else if (size == 1) { A key = this.keys.get(start); - return new LLRBBlackValueNode(key, getValue(key), null, null); + return new LLRBBlackValueNode<>(key, getValue(key), null, null); } else { int half = size / 2; int middle = start + half; LLRBNode left = buildBalancedTree(start, half); LLRBNode right = buildBalancedTree(middle + 1, half); A key = this.keys.get(middle); - return new LLRBBlackValueNode(key, getValue(key), left, right); + return new LLRBBlackValueNode<>(key, getValue(key), left, right); } } @@ -331,9 +330,9 @@ private void buildPennant(LLRBNode.Color color, int chunkSize, int start) { A key = this.keys.get(start); LLRBValueNode node; if (color == LLRBNode.Color.RED) { - node = new LLRBRedValueNode(key, getValue(key), null, treeRoot); + node = new LLRBRedValueNode<>(key, getValue(key), null, treeRoot); } else { - node = new LLRBBlackValueNode(key, getValue(key), null, treeRoot); + node = new LLRBBlackValueNode<>(key, getValue(key), null, treeRoot); } if (root == null) { root = node; @@ -349,8 +348,8 @@ public static RBTreeSortedMap buildFrom( Map values, ImmutableSortedMap.Builder.KeyTranslator translator, Comparator comparator) { - Builder builder = new Builder(keys, values, translator); - Collections.sort(keys, comparator); + Builder builder = new Builder<>(keys, values, translator); + keys.sort(comparator); Iterator iter = (new Base1_2(keys.size())).iterator(); int index = keys.size(); while (iter.hasNext()) { @@ -364,8 +363,8 @@ public static RBTreeSortedMap buildFrom( builder.buildPennant(LLRBNode.Color.RED, next.chunkSize, index); } } - return new RBTreeSortedMap( - builder.root == null ? LLRBEmptyNode.getInstance() : builder.root, comparator); + return new RBTreeSortedMap<>( + builder.root == null ? LLRBEmptyNode.getInstance() : builder.root, comparator); } } } diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/StandardComparator.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/StandardComparator.java index 5f06916325..95f360bf99 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/StandardComparator.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/collection/StandardComparator.java @@ -24,7 +24,7 @@ @InternalApi public class StandardComparator> implements Comparator { - private static StandardComparator INSTANCE = new StandardComparator(); + private static final StandardComparator INSTANCE = new StandardComparator(); private StandardComparator() {} diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1/GrpcFirestoreRpc.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1/GrpcFirestoreRpc.java index edd5471308..2af11145e7 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1/GrpcFirestoreRpc.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/spi/v1/GrpcFirestoreRpc.java @@ -99,8 +99,7 @@ public GrpcFirestoreRpc(final FirestoreOptions options) throws IOException { .setExecutor(executor) .setTransportChannel(transportChannel) .setDefaultCallContext(GrpcCallContext.of(managedChannel, CallOptions.DEFAULT)) - .setBackgroundResources( - Collections.singletonList(transportChannel)) + .setBackgroundResources(Collections.singletonList(transportChannel)) .build(); } else { FirestoreSettingsBuilder settingsBuilder = @@ -126,12 +125,9 @@ public GrpcFirestoreRpc(final FirestoreOptions options) throws IOException { clientContext = ClientContext.create(settingsBuilder.build()); } ApiFunction, Void> retrySettingsSetter = - new ApiFunction, Void>() { - @Override - public Void apply(UnaryCallSettings.Builder builder) { - builder.setRetrySettings(options.getRetrySettings()); - return null; - } + builder -> { + builder.setRetrySettings(options.getRetrySettings()); + return null; }; FirestoreStubSettings.Builder firestoreBuilder = FirestoreStubSettings.newBuilder(clientContext) diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/BulkWriterTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/BulkWriterTest.java index e3ae686352..9a6e248ed4 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/BulkWriterTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/BulkWriterTest.java @@ -36,8 +36,6 @@ import com.google.api.gax.rpc.ApiException; import com.google.api.gax.rpc.UnaryCallable; import com.google.cloud.Timestamp; -import com.google.cloud.firestore.BulkWriter.WriteErrorCallback; -import com.google.cloud.firestore.BulkWriter.WriteResultCallback; import com.google.cloud.firestore.LocalFirestoreHelper.ResponseStubber; import com.google.cloud.firestore.spi.v1.FirestoreRpc; import com.google.common.util.concurrent.MoreExecutors; @@ -71,7 +69,6 @@ import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.Spy; -import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; @@ -482,11 +479,7 @@ public void runsSuccessHandler() throws Exception { DocumentReference doc3 = firestoreMock.document("coll/doc3"); DocumentReference doc4 = firestoreMock.document("coll/doc4"); bulkWriter.addWriteResultListener( - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - writeResults.add((int) result.getUpdateTime().getSeconds()); - } - }); + (documentReference, result) -> writeResults.add((int) result.getUpdateTime().getSeconds())); bulkWriter.create(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.set(doc2, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.update(doc3, LocalFirestoreHelper.SINGLE_FIELD_MAP); @@ -528,18 +521,14 @@ public void retriesFailedOperationsWithGlobalErrorCallback() throws Exception { Executor userCallbackExecutor = Executors.newSingleThreadExecutor(); bulkWriter.addWriteErrorListener( userCallbackExecutor, - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - operations.add(error.getOperationType().name()); - return true; - } + error -> { + operations.add(error.getOperationType().name()); + return true; }); bulkWriter.addWriteResultListener( - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - operations.add("SUCCESS"); - writeResults.add((int) result.getUpdateTime().getSeconds()); - } + (documentReference, result) -> { + operations.add("SUCCESS"); + writeResults.add((int) result.getUpdateTime().getSeconds()); }); bulkWriter.create(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.set(doc2, LocalFirestoreHelper.SINGLE_FIELD_MAP); @@ -566,12 +555,10 @@ public void errorSurfacedEvenWithRetryFunction() throws Exception { final boolean[] errorListenerCalled = {false}; bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - errorListenerCalled[0] = true; - assertEquals(Status.INTERNAL, error.getStatus()); - return false; - } + error -> { + errorListenerCalled[0] = true; + assertEquals(Status.INTERNAL, error.getStatus()); + return false; }); ApiFuture result = bulkWriter.update(doc1, FieldPath.of("foo"), "bar"); @@ -598,11 +585,8 @@ public void surfacesExceptionsThrownByUserProvidedErrorListener() throws Excepti responseStubber.initializeStub(batchWriteCapture, firestoreMock); bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - throw new UnsupportedOperationException( - "Test code threw UnsupportedOperationException"); - } + error -> { + throw new UnsupportedOperationException("Test code threw UnsupportedOperationException"); }); ApiFuture result = bulkWriter.set(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); @@ -635,11 +619,8 @@ public void writeFailsIfUserProvidedSuccessListenerFails() throws Exception { responseStubber.initializeStub(batchWriteCapture, firestoreMock); bulkWriter.addWriteResultListener( - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - throw new UnsupportedOperationException( - "Test code threw UnsupportedOperationException"); - } + (documentReference, result) -> { + throw new UnsupportedOperationException("Test code threw UnsupportedOperationException"); }); ApiFuture result = @@ -668,10 +649,7 @@ public void cannotChangeExecutorOnceWriteEnqueued() throws Exception { bulkWriter.set(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); try { bulkWriter.addWriteResultListener( - MoreExecutors.directExecutor(), - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) {} - }); + MoreExecutors.directExecutor(), (documentReference, result) -> {}); fail("Operation should have failed in test"); } catch (Exception e) { assertTrue( @@ -679,13 +657,7 @@ public void onResult(DocumentReference documentReference, WriteResult result) {} } try { - bulkWriter.addWriteErrorListener( - MoreExecutors.directExecutor(), - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - return false; - } - }); + bulkWriter.addWriteErrorListener(MoreExecutors.directExecutor(), error -> false); fail("Operation should have failed in test"); } catch (Exception e) { assertTrue( @@ -716,12 +688,7 @@ public void retriesMultipleTimes() throws Exception { }; responseStubber.initializeStub(batchWriteCapture, firestoreMock); - bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - return true; - } - }); + bulkWriter.addWriteErrorListener(error -> true); ApiFuture result1 = bulkWriter.set(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.close(); @@ -784,30 +751,16 @@ public void retryResolvesBeforeFlush() throws Exception { final SettableApiFuture flushComplete = SettableApiFuture.create(); final List operations = new ArrayList<>(); - bulkWriter.addWriteErrorListener( - testExecutor, - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - return true; - } - }); - bulkWriter.addWriteResultListener( - testExecutor, - new WriteResultCallback() { - public void onResult(DocumentReference reference, WriteResult result) { - operations.add("DOC"); - } - }); + bulkWriter.addWriteErrorListener(testExecutor, error -> true); + bulkWriter.addWriteResultListener(testExecutor, (reference, result) -> operations.add("DOC")); bulkWriter.set(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter .flush() .addListener( - new Runnable() { - public void run() { - operations.add("FLUSH"); - flushComplete.set(null); - } + () -> { + operations.add("FLUSH"); + flushComplete.set(null); }, testExecutor); flushComplete.get(); @@ -836,12 +789,7 @@ public void returnsTheErrorIfNoRetrySpecified() throws Exception { }; responseStubber.initializeStub(batchWriteCapture, firestoreMock); - bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - return error.getFailedAttempts() < 3; - } - }); + bulkWriter.addWriteErrorListener(error -> error.getFailedAttempts() < 3); ApiFuture result1 = bulkWriter.set(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.close(); @@ -965,30 +913,16 @@ public void writesCompleteInCorrectOrderBeforeFlush() throws Exception { bulkWriter .set(doc1, (Object) LocalFirestoreHelper.SINGLE_FIELD_MAP, SetOptions.merge()) - .addListener( - new Runnable() { - public void run() { - completions.add("doc1"); - } - }, - testExecutor); + .addListener(() -> completions.add("doc1"), testExecutor); bulkWriter .set(doc2, LocalFirestoreHelper.SINGLE_FIELD_MAP) - .addListener( - new Runnable() { - public void run() { - completions.add("doc2"); - } - }, - testExecutor); + .addListener(() -> completions.add("doc2"), testExecutor); ApiFuture flush = bulkWriter.flush(); flush.addListener( - new Runnable() { - public void run() { - completions.add("flush"); - flushComplete.set(null); - } + () -> { + completions.add("flush"); + flushComplete.set(null); }, testExecutor); @@ -1185,12 +1119,11 @@ public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) }; doAnswer( - new Answer>() { - public ApiFuture answer(InvocationOnMock mock) { - retryAttempts[0]++; - return RETRYABLE_FAILED_FUTURE; - } - }) + (Answer>) + mock -> { + retryAttempts[0]++; + return RETRYABLE_FAILED_FUTURE; + }) .when(firestoreMock) .sendRequest( batchWriteCapture.capture(), @@ -1237,12 +1170,11 @@ public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) }; doAnswer( - new Answer>() { - public ApiFuture answer(InvocationOnMock mock) { - retryAttempts[0]++; - return RESOURCE_EXHAUSTED_FAILED_FUTURE; - } - }) + (Answer>) + mock -> { + retryAttempts[0]++; + return RESOURCE_EXHAUSTED_FAILED_FUTURE; + }) .when(firestoreMock) .sendRequest( batchWriteCapture.capture(), @@ -1250,12 +1182,7 @@ public ApiFuture answer(InvocationOnMock mock) { bulkWriter = firestoreMock.bulkWriter(BulkWriterOptions.builder().setExecutor(timeoutExecutor).build()); - bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - return error.getFailedAttempts() < 5; - } - }); + bulkWriter.addWriteErrorListener(error -> error.getFailedAttempts() < 5); ApiFuture result = bulkWriter.create(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.flush().get(); @@ -1322,12 +1249,7 @@ public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) bulkWriter = firestoreMock.bulkWriter(BulkWriterOptions.builder().setExecutor(timeoutExecutor).build()); - bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - return error.getFailedAttempts() < 5; - } - }); + bulkWriter.addWriteErrorListener(error -> error.getFailedAttempts() < 5); bulkWriter.create(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.set(doc2, LocalFirestoreHelper.SINGLE_FIELD_MAP); @@ -1354,12 +1276,7 @@ public void sendsBackoffBatchAfterOtherEnqueuedBatches() throws Exception { }; responseStubber.initializeStub(batchWriteCapture, firestoreMock); - bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - return error.getFailedAttempts() < 5; - } - }); + bulkWriter.addWriteErrorListener(error -> error.getFailedAttempts() < 5); bulkWriter.create(doc1, LocalFirestoreHelper.SINGLE_FIELD_MAP); bulkWriter.flush(); bulkWriter.set(doc2, LocalFirestoreHelper.SINGLE_FIELD_MAP); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/CollectionReferenceTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/CollectionReferenceTest.java index f95882926b..0ede445461 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/CollectionReferenceTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/CollectionReferenceTest.java @@ -41,7 +41,7 @@ public class CollectionReferenceTest { @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder().setProjectId("test-project").build(), Mockito.mock(FirestoreRpc.class)); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceConversions.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceConversions.java index 522a0addd0..6290bc65be 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceConversions.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceConversions.java @@ -80,9 +80,7 @@ static List convertInput(List jsonValues) { /** Helper function to convert test values in a nested Map to Firestore API types. */ private static Map convertMap(Map parsedData) { - for (Map.Entry entry : parsedData.entrySet()) { - parsedData.put(entry.getKey(), convertValue(entry.getValue())); - } + parsedData.replaceAll((k, v) -> convertValue(v)); return parsedData; } diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceTest.java index d7b7abd812..d6d4500859 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ConformanceTest.java @@ -63,7 +63,6 @@ import com.google.firestore.v1.ListenRequest; import com.google.firestore.v1.ListenResponse; import com.google.firestore.v1.RunQueryRequest; -import com.google.firestore.v1.Value; import com.google.protobuf.AbstractMessage; import com.google.protobuf.Message; import com.google.protobuf.util.JsonFormat; @@ -73,13 +72,10 @@ import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; -import javax.annotation.Nullable; -import junit.framework.Protectable; import junit.framework.Test; import junit.framework.TestResult; import junit.framework.TestSuite; @@ -94,7 +90,6 @@ import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; @RunWith(AllTests.class) @@ -224,14 +219,11 @@ public final void run(TestResult testResult) { testResult.startTest(this); testResult.runProtected( this, - new Protectable() { - @Override - public void protect() throws Throwable { - if (DEBUG_MODE) { - System.out.printf(DEBUG_MESSAGE_FORMAT, description, testParameters); - } - runTest(); + () -> { + if (DEBUG_MODE) { + System.out.printf(DEBUG_MESSAGE_FORMAT, description, testParameters); } + runTest(); }); testResult.endTest(this); } @@ -267,7 +259,7 @@ private ConformanceGetTestRunner(String description, GetTest testParameters) { @Override public void runTest() throws Throwable { - doAnswer(getAllResponse(Collections.emptyMap())) + doAnswer(getAllResponse(Collections.emptyMap())) .when(firestore) .streamRequest( getAllCapture.capture(), @@ -635,7 +627,7 @@ private static final class ConformanceListenTestRunner @Captor private ArgumentCaptor> streamObserverCapture; @Mock private ApiStreamObserver noOpRequestObserver; - private Query watchQuery; + private final Query watchQuery; private ConformanceListenTestRunner( String description, TestDefinition.ListenTest testParameters) { @@ -649,13 +641,11 @@ public void runTest() throws Throwable { final SettableApiFuture testCaseFinished = SettableApiFuture.create(); doAnswer( - new Answer>() { - @Override - public ApiStreamObserver answer(InvocationOnMock invocationOnMock) { - testCaseStarted.set(null); - return noOpRequestObserver; - } - }) + (Answer>) + invocationOnMock -> { + testCaseStarted.set(null); + return noOpRequestObserver; + }) .when(firestore) .streamRequest( streamObserverCapture.capture(), Matchers.any(BidiStreamingCallable.class)); @@ -664,30 +654,26 @@ public ApiStreamObserver answer(InvocationOnMock invocationOnMock final ListenerRegistration registration = watchQuery.addSnapshotListener( - new EventListener() { - @Override - public void onEvent( - @Nullable QuerySnapshot actualSnapshot, @Nullable FirestoreException error) { - try { - if (actualSnapshot != null) { - Assert.assertNull(error); - Assert.assertFalse(expectedSnapshots.isEmpty()); - Snapshot expectedSnapshot = expectedSnapshots.remove(0); - Assert.assertEquals(convertQuerySnapshot(expectedSnapshot), actualSnapshot); - if (expectedSnapshots.isEmpty()) { - if (!testParameters.getIsError()) { - testCaseFinished.set(null); - } + (actualSnapshot, error) -> { + try { + if (actualSnapshot != null) { + Assert.assertNull(error); + Assert.assertFalse(expectedSnapshots.isEmpty()); + Snapshot expectedSnapshot = expectedSnapshots.remove(0); + Assert.assertEquals(convertQuerySnapshot(expectedSnapshot), actualSnapshot); + if (expectedSnapshots.isEmpty()) { + if (!testParameters.getIsError()) { + testCaseFinished.set(null); } - } else { // Error case - Assert.assertNotNull(error); - Assert.assertTrue(expectedSnapshots.isEmpty()); - Assert.assertTrue(testParameters.getIsError()); - testCaseFinished.set(null); } - } catch (AssertionError e) { - testCaseFinished.setException(e); + } else { // Error case + Assert.assertNotNull(error); + Assert.assertTrue(expectedSnapshots.isEmpty()); + Assert.assertTrue(testParameters.getIsError()); + testCaseFinished.set(null); } + } catch (AssertionError e) { + testCaseFinished.setException(e); } }); @@ -715,23 +701,20 @@ private QuerySnapshot convertQuerySnapshot(Snapshot testSnapshot) { DocumentSet documentSet = DocumentSet.emptySet( - new Comparator() { - @Override - public int compare(QueryDocumentSnapshot o1, QueryDocumentSnapshot o2) { - // Comparator that preserves the insertion order as defined in the test case. - for (QueryDocumentSnapshot snapshot : documentSnapshots) { - if (o1.equals(o2)) { - return 0; - } else if (o1.equals(snapshot)) { - return -1; - } else if (o2.equals(snapshot)) { - return 1; - } + (o1, o2) -> { + // Comparator that preserves the insertion order as defined in the test case. + for (QueryDocumentSnapshot snapshot : documentSnapshots) { + if (o1.equals(o2)) { + return 0; + } else if (o1.equals(snapshot)) { + return -1; + } else if (o2.equals(snapshot)) { + return 1; } - - Assert.fail("Unable to find position for document snapshot"); - return 0; } + + Assert.fail("Unable to find position for document snapshot"); + return 0; }); for (QueryDocumentSnapshot snapshot : documentSnapshots) { diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java index 85433b5c83..7cc0832ac8 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/DocumentReferenceTest.java @@ -102,7 +102,7 @@ public class DocumentReferenceTest { @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder().setProjectId("test-project").build(), Mockito.mock(FirestoreRpc.class)); @@ -166,7 +166,7 @@ public void serializeDocumentReference() throws Exception { .sendRequest( commitCapture.capture(), Matchers.>any()); - documentReference.set(map("docRef", (Object) documentReference)).get(); + documentReference.set(map("docRef", documentReference)).get(); Map documentReferenceFields = new HashMap<>(); documentReferenceFields.put( @@ -414,7 +414,7 @@ public void createWithServerTimestamp() throws Exception { CommitRequest create = commit( - create(Collections.emptyMap()), + create(Collections.emptyMap()), transform("foo", serverTimestamp(), "inner.bar", serverTimestamp())); List commitRequests = commitCapture.getAllValues(); @@ -453,7 +453,7 @@ public void updateWithServerTimestamp() throws Exception { CommitRequest update = commit( - update(Collections.emptyMap(), Collections.singletonList("inner")), + update(Collections.emptyMap(), Collections.singletonList("inner")), transform("foo", serverTimestamp(), "inner.bar", serverTimestamp())); assertCommitEquals(update, commitCapture.getValue()); @@ -463,10 +463,7 @@ public void updateWithServerTimestamp() throws Exception { update = commit( - update( - Collections.emptyMap(), - new ArrayList(), - UPDATE_PRECONDITION), + update(Collections.emptyMap(), new ArrayList<>(), UPDATE_PRECONDITION), transform("foo", serverTimestamp(), "inner.bar", serverTimestamp())); assertCommitEquals(update, commitCapture.getValue()); @@ -488,7 +485,7 @@ public void mergeWithServerTimestamps() throws Exception { CommitRequest set = commit( - set(SERVER_TIMESTAMP_PROTO, new ArrayList()), + set(SERVER_TIMESTAMP_PROTO, new ArrayList<>()), transform("inner.bar", serverTimestamp())); List commitRequests = commitCapture.getAllValues(); @@ -509,7 +506,7 @@ public void setWithIncrement() throws Exception { CommitRequest set = commit( - set(Collections.emptyMap()), + set(Collections.emptyMap()), transform( "integer", increment(Value.newBuilder().setIntegerValue(1).build()), @@ -531,7 +528,7 @@ public void setWithArrayUnion() throws Exception { CommitRequest set = commit( - set(Collections.emptyMap()), + set(Collections.emptyMap()), transform("foo", arrayUnion(string("bar"), object("foo", string("baz"))))); CommitRequest commitRequest = commitCapture.getValue(); @@ -549,7 +546,7 @@ public void setWithArrayRemove() throws Exception { CommitRequest set = commit( - set(Collections.emptyMap()), + set(Collections.emptyMap()), transform("foo", arrayRemove(string("bar"), object("foo", string("baz"))))); CommitRequest commitRequest = commitCapture.getValue(); @@ -722,8 +719,7 @@ public void setDocumentWithEmptyMerge() throws Exception { documentReference.set(map(), SetOptions.merge()).get(); assertCommitEquals( - commit(set(Collections.emptyMap(), Collections.emptyList())), - commitCapture.getValue()); + commit(set(Collections.emptyMap(), Collections.emptyList())), commitCapture.getValue()); } @Test @@ -892,7 +888,7 @@ public void updateWithDotsInFieldName() throws Exception { .sendRequest( commitCapture.capture(), Matchers.>any()); - documentReference.update(map("a.b.c", (Object) map("d.e", "foo"))).get(); + documentReference.update(map("a.b.c", map("d.e", "foo"))).get(); Map nestedUpdate = new HashMap<>(); Value.Builder valueProto = Value.newBuilder(); @@ -1076,9 +1072,7 @@ public void deleteNestedFieldUsingFieldPath() throws Exception { FieldPath path = FieldPath.of("a.b", "c.d"); documentReference.update(path, FieldValue.delete()).get(); CommitRequest expectedCommit = - commit( - update( - Collections.emptyMap(), Collections.singletonList("`a.b`.`c.d`"))); + commit(update(Collections.emptyMap(), Collections.singletonList("`a.b`.`c.d`"))); assertEquals(expectedCommit, commitCapture.getValue()); } diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreBundleTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreBundleTest.java index 3d0c29f826..28ff1d7105 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreBundleTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreBundleTest.java @@ -52,10 +52,10 @@ public class FirestoreBundleTest { private static final String TEST_BUNDLE_ID = "test-bundle"; private static final int TEST_BUNDLE_VERSION = 1; - private static JsonFormat.Parser parser = JsonFormat.parser(); + private static final JsonFormat.Parser parser = JsonFormat.parser(); @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder().setProjectId("test-project").build(), Mockito.mock(FirestoreRpc.class)); @@ -189,7 +189,7 @@ public void bundleWithDocumentSnapshots() { elements.get(1).getDocumentMetadata(), elements.get(2).getDocument(), DOCUMENT_NAME, - Lists.newArrayList(), + Lists.newArrayList(), UPDATED_SINGLE_FIELD_SNAPSHOT); } @@ -239,9 +239,7 @@ public void bundleWithQueryReturningNoResult() { FirestoreBundle.Builder bundleBuilder = new FirestoreBundle.Builder(TEST_BUNDLE_ID); QuerySnapshot snapshot = QuerySnapshot.withDocuments( - query, - SINGLE_FIELD_SNAPSHOT.getReadTime(), - Lists.newArrayList()); + query, SINGLE_FIELD_SNAPSHOT.getReadTime(), Lists.newArrayList()); bundleBuilder.add("test-query", snapshot); ByteBuffer bundleBuffer = bundleBuilder.build().toByteBuffer(); @@ -284,7 +282,7 @@ public void bundleBuiltMultipleTimes() { elements.get(1).getDocumentMetadata(), elements.get(2).getDocument(), DOCUMENT_NAME, - Lists.newArrayList(), + Lists.newArrayList(), SINGLE_FIELD_SNAPSHOT); bundleBuilder.add(UPDATED_SINGLE_FIELD_SNAPSHOT); @@ -303,7 +301,7 @@ public void bundleBuiltMultipleTimes() { elements.get(1).getDocumentMetadata(), elements.get(2).getDocument(), DOCUMENT_NAME, - Lists.newArrayList(), + Lists.newArrayList(), UPDATED_SINGLE_FIELD_SNAPSHOT); } diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreTest.java index 9deea1d745..c90692b4ba 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/FirestoreTest.java @@ -40,7 +40,6 @@ import com.google.firestore.v1.CommitRequest; import com.google.firestore.v1.CommitResponse; import com.google.firestore.v1.ListCollectionIdsRequest; -import com.google.firestore.v1.Value; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -58,7 +57,7 @@ public class FirestoreTest { @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder().setProjectId("test-project").build(), Mockito.mock(FirestoreRpc.class)); @@ -200,7 +199,7 @@ public void arrayUnionWithPojo() throws ExecutionException, InterruptedException CommitRequest expectedRequest = commit( - update(Collections.emptyMap(), new ArrayList()), + update(Collections.emptyMap(), new ArrayList<>()), transform("array", arrayUnion(SINGLE_FIELD_VALUE))); CommitRequest actualRequest = commitCapture.getValue(); assertEquals(expectedRequest, actualRequest); @@ -218,7 +217,7 @@ public void arrayRemoveWithPojo() throws ExecutionException, InterruptedExceptio CommitRequest expectedRequest = commit( - update(Collections.emptyMap(), new ArrayList()), + update(Collections.emptyMap(), new ArrayList<>()), transform("array", arrayRemove(SINGLE_FIELD_VALUE))); CommitRequest actualRequest = commitCapture.getValue(); assertEquals(expectedRequest, actualRequest); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ITBulkWriterTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ITBulkWriterTest.java index 0fb7ba5855..8d3d9a3e80 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ITBulkWriterTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/ITBulkWriterTest.java @@ -24,8 +24,6 @@ import com.google.api.core.ApiFuture; import com.google.cloud.Timestamp; -import com.google.cloud.firestore.BulkWriter.WriteErrorCallback; -import com.google.cloud.firestore.BulkWriter.WriteResultCallback; import com.google.common.base.Preconditions; import java.util.ArrayList; import java.util.Collections; @@ -70,8 +68,7 @@ public void bulkWriterCreate() throws Exception { firestore.bulkWriter(); BulkWriter writer = firestore.bulkWriter(); - ApiFuture result = - writer.create(docRef, Collections.singletonMap("foo", (Object) "bar")); + ApiFuture result = writer.create(docRef, Collections.singletonMap("foo", "bar")); writer.close(); assertNotNull(result.get().getUpdateTime()); @@ -82,11 +79,10 @@ public void bulkWriterCreate() throws Exception { @Test public void bulkWriterCreateAddsPrecondition() throws Exception { DocumentReference docRef = randomColl.document(); - docRef.set(Collections.singletonMap("foo", (Object) "bar")).get(); + docRef.set(Collections.singletonMap("foo", "bar")).get(); BulkWriter writer = firestore.bulkWriter(); - ApiFuture result = - writer.create(docRef, Collections.singletonMap("foo", (Object) "bar")); + ApiFuture result = writer.create(docRef, Collections.singletonMap("foo", "bar")); writer.close(); try { @@ -102,8 +98,7 @@ public void bulkWriterSet() throws Exception { DocumentReference docRef = randomColl.document(); BulkWriter writer = firestore.bulkWriter(); - ApiFuture result = - writer.set(docRef, Collections.singletonMap("foo", (Object) "bar")); + ApiFuture result = writer.set(docRef, Collections.singletonMap("foo", "bar")); writer.close(); assertNotNull(result.get().getUpdateTime()); @@ -170,11 +165,9 @@ public Thread newThread(Runnable r) { BulkWriter writer = firestore.bulkWriter(); writer.addWriteResultListener( executor, - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - operations.add("operation"); - assertTrue(Thread.currentThread().getName().contains("bulkWriterSuccess")); - } + (documentReference, result) -> { + operations.add("operation"); + assertTrue(Thread.currentThread().getName().contains("bulkWriterSuccess")); }); writer.set(randomDoc, Collections.singletonMap("foo", "bar")); writer.flush().get(); @@ -194,21 +187,14 @@ public Thread newThread(Runnable r) { BulkWriter writer = firestore.bulkWriter(); writer.addWriteErrorListener( executor, - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - operations.add("operation-error"); - assertTrue(Thread.currentThread().getName().contains("bulkWriterException")); - return false; - } + error -> { + operations.add("operation-error"); + assertTrue(Thread.currentThread().getName().contains("bulkWriterException")); + return false; }); writer.addWriteResultListener( - executor, - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - fail("The success listener shouldn't be called"); - } - }); + executor, (documentReference, result) -> fail("The success listener shouldn't be called")); writer.update(randomDoc, "foo", "bar"); writer.flush().get(); assertEquals("operation-error", operations.get(0)); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/LocalFirestoreHelper.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/LocalFirestoreHelper.java index d7b03b7eef..4cc8eda767 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/LocalFirestoreHelper.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/LocalFirestoreHelper.java @@ -80,7 +80,6 @@ import javax.annotation.Nullable; import org.mockito.ArgumentCaptor; import org.mockito.Matchers; -import org.mockito.invocation.InvocationOnMock; import org.mockito.stubbing.Answer; import org.mockito.stubbing.Stubber; import org.threeten.bp.Duration; @@ -315,19 +314,17 @@ public static Answer queryResponse( /** Returns a stream of responses followed by an optional exception. */ public static Answer streamingResponse( final T[] response, @Nullable final Throwable throwable) { - return new Answer() { - public T answer(InvocationOnMock invocation) { - Object[] args = invocation.getArguments(); - ApiStreamObserver observer = (ApiStreamObserver) args[1]; - for (T resp : response) { - observer.onNext(resp); - } - if (throwable != null) { - observer.onError(throwable); - } - observer.onCompleted(); - return null; + return invocation -> { + Object[] args = invocation.getArguments(); + ApiStreamObserver observer = (ApiStreamObserver) args[1]; + for (T resp : response) { + observer.onNext(resp); } + if (throwable != null) { + observer.onError(throwable); + } + observer.onCompleted(); + return null; }; } @@ -747,14 +744,7 @@ private static CommitRequest sortCommit(CommitRequest commit) { if (!writes.getUpdateTransformsList().isEmpty()) { ArrayList transformList = new ArrayList<>(writes.getUpdateTransformsList()); - Collections.sort( - transformList, - new Comparator() { - @Override - public int compare(FieldTransform t1, FieldTransform t2) { - return t1.getFieldPath().compareTo(t2.getFieldPath()); - } - }); + transformList.sort(Comparator.comparing(FieldTransform::getFieldPath)); writes.clearUpdateTransforms().addAllUpdateTransforms(transformList); } } @@ -779,7 +769,7 @@ public static class AllSupportedTypes { public String nullValue = null; public Blob bytesValue = BLOB; public GeoPoint geoPointValue = GEO_POINT; - public Map model = ImmutableMap.of("foo", (Object) SINGLE_FIELD_OBJECT.foo); + public Map model = ImmutableMap.of("foo", SINGLE_FIELD_OBJECT.foo); @Override public boolean equals(Object o) { @@ -825,7 +815,7 @@ public boolean equals(Object o) { GEO_POINT = new GeoPoint(50.1430847, -122.9477780); BLOB = Blob.fromBytes(new byte[] {1, 2, 3}); SINGLE_FLOAT_MAP = map("float", 0.1F); - SINGLE_FLOAT_PROTO = map("float", Value.newBuilder().setDoubleValue((Float) 0.1F).build()); + SINGLE_FLOAT_PROTO = map("float", Value.newBuilder().setDoubleValue(0.1F).build()); DATABASE_NAME = "projects/test-project/databases/(default)"; COLLECTION_ID = "coll"; @@ -836,8 +826,8 @@ public boolean equals(Object o) { EMPTY_MAP_PROTO = map("inner", Value.newBuilder().setMapValue(MapValue.getDefaultInstance()).build()); - SINGLE_FIELD_MAP = map("foo", (Object) "bar"); - SINGLE_FILED_MAP_WITH_DOT = map("c.d", (Object) "bar"); + SINGLE_FIELD_MAP = map("foo", "bar"); + SINGLE_FILED_MAP_WITH_DOT = map("c.d", "bar"); SINGLE_FIELD_OBJECT = new SingleField(); FOO_LIST.add(SINGLE_FIELD_OBJECT); FOO_MAP.put("customMap", SINGLE_FIELD_OBJECT); @@ -869,7 +859,7 @@ public boolean equals(Object o) { UPDATE_SINGLE_FIELD_OBJECT = new SingleField(); UPDATE_SINGLE_FIELD_OBJECT.foo = "foobar"; - UPDATED_FIELD_MAP = map("foo", (Object) "foobar"); + UPDATED_FIELD_MAP = map("foo", "foobar"); UPDATED_FIELD_PROTO = map("foo", Value.newBuilder().setStringValue("foobar").build()); UPDATED_SINGLE_FIELD_PROTO = ImmutableMap.builder() @@ -982,7 +972,7 @@ public boolean equals(Object o) { NESTED_CLASS_OBJECT = new NestedClass(); UPDATE_PRECONDITION = Precondition.newBuilder().setExists(true).build(); - UPDATED_POJO = map("model", (Object) UPDATE_SINGLE_FIELD_OBJECT); + UPDATED_POJO = map("model", UPDATE_SINGLE_FIELD_OBJECT); } public static String autoId() { @@ -1011,7 +1001,7 @@ public static Map fromSingleQuotedString(String json) { public static String fullPath(DocumentReference ref, FirestoreOptions options) { return ResourcePath.create( DatabaseRootName.of(options.getProjectId(), options.getDatabaseId()), - ImmutableList.copyOf(ref.getPath().split("/"))) + ImmutableList.copyOf(ref.getPath().split("/"))) .toString(); } @@ -1043,14 +1033,10 @@ void initializeStub( Stubber stubber = null; for (final RequestResponsePair entry : operationList) { Answer> answer = - new Answer>() { - @Override - public ApiFuture answer( - InvocationOnMock invocationOnMock) throws Throwable { - ++requestCount; - assertEquals(entry.request, invocationOnMock.getArguments()[0]); - return entry.response; - } + invocationOnMock -> { + ++requestCount; + assertEquals(entry.request, invocationOnMock.getArguments()[0]); + return entry.response; }; stubber = (stubber != null) ? stubber.doAnswer(answer) : doAnswer(answer); } diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/MapperTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/MapperTest.java index 76be4126de..e3725127e0 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/MapperTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/MapperTest.java @@ -45,7 +45,6 @@ import java.util.Objects; import java.util.Set; import org.junit.Test; -import org.junit.function.ThrowingRunnable; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.Spy; @@ -56,7 +55,7 @@ public class MapperTest { @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder().setProjectId("test-project").build(), Mockito.mock(FirestoreRpc.class)); @@ -1098,26 +1097,23 @@ public void primitiveDeserializeBigDecimal() { // Int BigDecimalBean beanInt = - deserialize(Collections.singletonMap("value", 1), BigDecimalBean.class); + deserialize(Collections.singletonMap("value", 1), BigDecimalBean.class); assertEquals(BigDecimal.valueOf(1), beanInt.value); // Long BigDecimalBean beanLong = - deserialize( - Collections.singletonMap("value", 1234567890123L), - BigDecimalBean.class); + deserialize(Collections.singletonMap("value", 1234567890123L), BigDecimalBean.class); assertEquals(BigDecimal.valueOf(1234567890123L), beanLong.value); // Double BigDecimalBean beanDouble = - deserialize(Collections.singletonMap("value", 1.1), BigDecimalBean.class); + deserialize(Collections.singletonMap("value", 1.1), BigDecimalBean.class); assertEquals(BigDecimal.valueOf(1.1), beanDouble.value); // BigDecimal BigDecimalBean beanBigDecimal = deserialize( - Collections.singletonMap("value", BigDecimal.valueOf(1.2)), - BigDecimalBean.class); + Collections.singletonMap("value", BigDecimal.valueOf(1.2)), BigDecimalBean.class); assertEquals(BigDecimal.valueOf(1.2), beanBigDecimal.value); // Boolean @@ -1141,13 +1137,11 @@ public void primitiveDeserializeFloat() { assertEquals(1.1, beanFloat.value, EPSILON); // Int - FloatBean beanInt = - deserialize(Collections.singletonMap("value", 1), FloatBean.class); + FloatBean beanInt = deserialize(Collections.singletonMap("value", 1), FloatBean.class); assertEquals(1, beanInt.value, EPSILON); // Long FloatBean beanLong = - deserialize( - Collections.singletonMap("value", 1234567890123L), FloatBean.class); + deserialize(Collections.singletonMap("value", 1234567890123L), FloatBean.class); assertEquals((float) 1234567890123L, beanLong.value, EPSILON); // Boolean @@ -1245,12 +1239,7 @@ public void primitiveDeserializeWrongTypeMap() { Throwable exception = assertThrows( RuntimeException.class, - new ThrowingRunnable() { - @Override - public void run() throws Throwable { - deserialize("{'value': {'foo': 'bar'}}", StringBean.class); - } - }); + () -> deserialize("{'value': {'foo': 'bar'}}", StringBean.class)); assertTrue(exception.getMessage().matches(expectedExceptionMessage)); } @@ -1259,12 +1248,7 @@ public void primitiveDeserializeWrongTypeList() { assertExceptionContains( "Failed to convert value of type java.util.ArrayList to String" + " (found in field 'value')", - new Runnable() { - @Override - public void run() { - deserialize("{'value': ['foo']}", StringBean.class); - } - }); + () -> deserialize("{'value': ['foo']}", StringBean.class)); } @Test @@ -1288,12 +1272,7 @@ public void packageFieldDeserialize() { assertExceptionContains( "No properties to serialize found on class " + "com.google.cloud.firestore.MapperTest$PackageFieldBean", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", PackageFieldBean.class); - } - }); + () -> deserialize("{'value': 'foo'}", PackageFieldBean.class)); } @Test @@ -1301,12 +1280,7 @@ public void privateFieldDeserialize() { assertExceptionContains( "No properties to serialize found on class " + "com.google.cloud.firestore.MapperTest$PrivateFieldBean", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", PrivateFieldBean.class); - } - }); + () -> deserialize("{'value': 'foo'}", PrivateFieldBean.class)); } @Test @@ -1336,12 +1310,8 @@ public void throwOnUnknownProperties() { assertExceptionContains( "No setter/field for unknown found on class " + "com.google.cloud.firestore.MapperTest$ThrowOnUnknownPropertiesBean", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo', 'unknown': 'bar'}", ThrowOnUnknownPropertiesBean.class); - } - }); + () -> + deserialize("{'value': 'foo', 'unknown': 'bar'}", ThrowOnUnknownPropertiesBean.class)); } @Test @@ -1349,12 +1319,7 @@ public void twoSetterBean() { assertExceptionContains( "Class com.google.cloud.firestore.MapperTest$TwoSetterBean has multiple setter " + "overloads", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", TwoSetterBean.class); - } - }); + () -> deserialize("{'value': 'foo'}", TwoSetterBean.class)); } @Test @@ -1429,12 +1394,7 @@ public void setterIsCaseSensitive1() { assertExceptionContains( "Class com.google.cloud.firestore.MapperTest$CaseSensitiveSetterBean1 has " + "multiple setter overloads", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", CaseSensitiveSetterBean1.class); - } - }); + () -> deserialize("{'value': 'foo'}", CaseSensitiveSetterBean1.class)); } @Test @@ -1442,12 +1402,7 @@ public void setterIsCaseSensitive2() { assertExceptionContains( "Class com.google.cloud.firestore.MapperTest$CaseSensitiveSetterBean2 has " + "multiple setter overloads", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", CaseSensitiveSetterBean2.class); - } - }); + () -> deserialize("{'value': 'foo'}", CaseSensitiveSetterBean2.class)); } @Test @@ -1473,12 +1428,7 @@ public void caseSensitiveSetterMustHaveSameCaseAsSetter() { assertExceptionContains( "Found setter on com.google.cloud.firestore.MapperTest$CaseSensitiveSetterBean6 " + "with invalid case-sensitive name: setVaLUE", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", CaseSensitiveSetterBean6.class); - } - }); + () -> deserialize("{'value': 'foo'}", CaseSensitiveSetterBean6.class)); } @Test @@ -1569,12 +1519,7 @@ public void beanMapsMustHaveStringKeys() { assertExceptionContains( "Only Maps with string keys are supported, but found Map with key type class " + "java.lang.Integer (found in field 'values')", - new Runnable() { - @Override - public void run() { - deserialize("{'values': {'1': 'bar'}}", IllegalKeyMapBean.class); - } - }); + () -> deserialize("{'values': {'1': 'bar'}}", IllegalKeyMapBean.class)); } @Test @@ -1654,12 +1599,7 @@ public void serializePrivateFieldBean() { assertExceptionContains( "No properties to serialize found on class " + "com.google.cloud.firestore.MapperTest$PrivateFieldBean", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -1669,12 +1609,7 @@ public void serializePackageFieldBean() { assertExceptionContains( "No properties to serialize found on class " + "com.google.cloud.firestore.MapperTest$PackageFieldBean", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -1702,13 +1637,7 @@ public void serializeGetterBeanWithNoBackingField() { @Test public void deserializeGetterBeanWithNoBackingFieldThrows() { assertExceptionContains( - "No setter/field", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", GetterBeanNoField.class); - } - }); + "No setter/field", () -> deserialize("{'value': 'foo'}", GetterBeanNoField.class)); } @Test @@ -1724,12 +1653,7 @@ public void getterAndPublicFieldsConflictOnCaseSensitivity() { bean.valueCase = "foo"; assertExceptionContains( "Found two getters or fields with conflicting case sensitivity for property: valuecase", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -1778,7 +1702,7 @@ public void serializingListsWorks() { @Test public void serializingMapsWorks() { MapBean bean = new MapBean(); - bean.values = new HashMap(); + bean.values = new HashMap<>(); bean.values.put("foo", "bar"); assertJson("{'values': {'foo': 'bar'}}", serialize(bean)); } @@ -1847,26 +1771,14 @@ public void beanMapsMustHaveStringKeysForSerializing() { assertExceptionContains( "Maps with non-string keys are not supported (found in field 'values')", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test public void twoGettersThrows() { final TwoGetterBean bean = new TwoGetterBean(); bean.value = "foo"; - assertExceptionContains( - "Found conflicting getters", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + assertExceptionContains("Found conflicting getters", () -> serialize(bean)); } @Test @@ -1939,12 +1851,7 @@ public void shortsCantBeSerialized() { bean.value = 1; assertExceptionContains( "Numbers of type Short are not supported, please use an int, long, float, double or BigDecimal (found in field 'value')", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -1953,12 +1860,7 @@ public void bytesCantBeSerialized() { bean.value = 1; assertExceptionContains( "Numbers of type Byte are not supported, please use an int, long, float, double or BigDecimal (found in field 'value')", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -1967,12 +1869,7 @@ public void charsCantBeSerialized() { bean.value = 1; assertExceptionContains( "Characters are not supported, please use Strings (found in field 'value')", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -1982,12 +1879,7 @@ public void intArraysCantBeSerialized() { assertExceptionContains( "Serializing Arrays is not supported, please use Lists instead " + "(found in field 'values')", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -1997,60 +1889,35 @@ public void objectArraysCantBeSerialized() { assertExceptionContains( "Serializing Arrays is not supported, please use Lists instead " + "(found in field 'values')", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test public void shortsCantBeDeserialized() { assertExceptionContains( "Deserializing values to short is not supported (found in field 'value')", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 1}", ShortBean.class); - } - }); + () -> deserialize("{'value': 1}", ShortBean.class)); } @Test public void bytesCantBeDeserialized() { assertExceptionContains( "Deserializing values to byte is not supported (found in field 'value')", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 1}", ByteBean.class); - } - }); + () -> deserialize("{'value': 1}", ByteBean.class)); } @Test public void charsCantBeDeserialized() { assertExceptionContains( "Deserializing values to char is not supported (found in field 'value')", - new Runnable() { - @Override - public void run() { - deserialize("{'value': '1'}", CharBean.class); - } - }); + () -> deserialize("{'value': '1'}", CharBean.class)); } @Test public void intArraysCantBeDeserialized() { assertExceptionContains( "Converting to Arrays is not supported, please use Lists instead (found in field 'values')", - new Runnable() { - @Override - public void run() { - deserialize("{'values': [1]}", IntArrayBean.class); - } - }); + () -> deserialize("{'values': [1]}", IntArrayBean.class)); } @Test @@ -2058,12 +1925,7 @@ public void objectArraysCantBeDeserialized() { assertExceptionContains( "Could not deserialize object. Converting to Arrays is not supported, please use Lists " + "instead (found in field 'values')", - new Runnable() { - @Override - public void run() { - deserialize("{'values': ['foo']}", StringArrayBean.class); - } - }); + () -> deserialize("{'values': ['foo']}", StringArrayBean.class)); } @Test @@ -2083,21 +1945,14 @@ public void argConstructorCantBeDeserialized() { assertExceptionContains( "Class com.google.cloud.firestore.MapperTest$ArgConstructorBean does not define " + "a no-argument constructor.", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", ArgConstructorBean.class); - } - }); + () -> deserialize("{'value': 'foo'}", ArgConstructorBean.class)); } @Test public void packageConstructorCanBeDeserialized() { Timestamp timestamp = Timestamp.now(); PackageConstructorBean bean = - deserialize( - Collections.singletonMap("value", timestamp), - PackageConstructorBean.class); + deserialize(Collections.singletonMap("value", timestamp), PackageConstructorBean.class); assertEquals(timestamp, bean.value); } @@ -2147,12 +2002,7 @@ public void passingInListTopLevelThrows() { assertExceptionContains( "Class java.util.List has generic type parameters, please use GenericTypeIndicator " + "instead", - new Runnable() { - @Override - public void run() { - convertToCustomClass(Collections.singletonList("foo"), List.class); - } - }); + () -> convertToCustomClass(Collections.singletonList("foo"), List.class)); } @Test @@ -2160,48 +2010,27 @@ public void passingInMapTopLevelThrows() { assertExceptionContains( "Class java.util.Map has generic type parameters, please use GenericTypeIndicator " + "instead", - new Runnable() { - @Override - public void run() { - convertToCustomClass(Collections.singletonMap("foo", "bar"), Map.class); - } - }); + () -> convertToCustomClass(Collections.singletonMap("foo", "bar"), Map.class)); } @Test public void passingInCharacterTopLevelThrows() { assertExceptionContains( "Deserializing values to Character is not supported", - new Runnable() { - @Override - public void run() { - convertToCustomClass('1', Character.class); - } - }); + () -> convertToCustomClass('1', Character.class)); } @Test public void passingInShortTopLevelThrows() { assertExceptionContains( "Deserializing values to Short is not supported", - new Runnable() { - @Override - public void run() { - convertToCustomClass(1, Short.class); - } - }); + () -> convertToCustomClass(1, Short.class)); } @Test public void passingInByteTopLevelThrows() { assertExceptionContains( - "Deserializing values to Byte is not supported", - new Runnable() { - @Override - public void run() { - convertToCustomClass(1, Byte.class); - } - }); + "Deserializing values to Byte is not supported", () -> convertToCustomClass(1, Byte.class)); } @Test @@ -2209,12 +2038,7 @@ public void passingInGenericBeanTopLevelThrows() { assertExceptionContains( "Class com.google.cloud.firestore.MapperTest$GenericBean has generic type " + "parameters, please use GenericTypeIndicator instead", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", GenericBean.class); - } - }); + () -> deserialize("{'value': 'foo'}", GenericBean.class)); } @Test @@ -2231,24 +2055,14 @@ public void collectionsCantBeSerializedWhenSet() { assertExceptionContains( "Serializing Collections is not supported, please use Lists instead " + "(found in field 'values')", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test public void collectionsCantBeDeserialized() { assertExceptionContains( "Collections are not supported, please use Lists instead (found in field 'values')", - new Runnable() { - @Override - public void run() { - deserialize("{'values': ['foo']}", CollectionBean.class); - } - }); + () -> deserialize("{'values': ['foo']}", CollectionBean.class)); } @Test @@ -2291,12 +2105,7 @@ public void serializingGenericBeansSupported() { public void deserializingWrongTypeThrows() { assertExceptionContains( "Failed to convert a value of type java.lang.String to int (found in field 'value')", - new Runnable() { - @Override - public void run() { - deserialize("{'value': 'foo'}", WrongTypeBean.class); - } - }); + () -> deserialize("{'value': 'foo'}", WrongTypeBean.class)); } @Test @@ -2320,7 +2129,7 @@ public void excludedFieldsAreNotParsed() { ExcludedBean.class); assertEquals("no-value", bean.excludedField); assertEquals("no-value", bean.excludedGetter); - assertEquals("foo", bean.includedGetter); + assertEquals("foo", bean.getIncludedGetter()); } @Test @@ -2415,12 +2224,7 @@ public void throwsOnUnmatchedEnums() { assertExceptionContains( "Could not find enum value of com.google.cloud.firestore.MapperTest$SimpleEnum for " + "value \"Unavailable\" (found in field 'enumField')", - new Runnable() { - @Override - public void run() { - deserialize(json, EnumBean.class); - } - }); + () -> deserialize(json, EnumBean.class)); } @Test @@ -2495,12 +2299,7 @@ public void settersFromSubclassConflictsWithBaseClass() { assertExceptionContains( "Found conflicting setters with name: setValue (conflicts with setValue defined on " + "com.google.cloud.firestore.MapperTest$ConflictingSetterSubBean)", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -2510,12 +2309,7 @@ public void settersFromSubclassConflictsWithBaseClass2() { assertExceptionContains( "Found conflicting setters with name: setValue (conflicts with setValue defined on " + "com.google.cloud.firestore.MapperTest$ConflictingSetterSubBean2)", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -2540,12 +2334,7 @@ public void genericSettersFromSubclassConflictsWithBaseClass() { assertExceptionContains( "Found conflicting setters with name: setValue (conflicts with setValue defined on " + "com.google.cloud.firestore.MapperTest$ConflictingGenericSetterSubBean)", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } // This should work, but generics and subclassing are tricky to get right. For now we will just @@ -2555,13 +2344,10 @@ public void settersCanOverrideGenericSettersParsingNot() { assertExceptionContains( "Class com.google.cloud.firestore.MapperTest$NonConflictingGenericSetterSubBean " + "has multiple setter overloads", - new Runnable() { - @Override - public void run() { - NonConflictingGenericSetterSubBean bean = - deserialize("{'value': 'value'}", NonConflictingGenericSetterSubBean.class); - assertEquals("subsetter:value", bean.value); - } + () -> { + NonConflictingGenericSetterSubBean bean = + deserialize("{'value': 'value'}", NonConflictingGenericSetterSubBean.class); + assertEquals("subsetter:value", bean.value); }); } @@ -2572,12 +2358,7 @@ public void serializingRecursiveBeanThrows() { // It's sufficient to verify it's a RuntimeException since StackOverflowException is not. assertExceptionContains( "Exceeded maximum depth of 500, which likely indicates there's an object cycle", - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + () -> serialize(bean)); } @Test @@ -2619,7 +2400,7 @@ private static class FieldWithDocumentIdOnWrongTypeBean { } private static class GetterWithDocumentIdOnWrongTypeBean { - private int intField = 100; + private final int intField = 100; @DocumentId public int getIntField() { @@ -2637,55 +2418,22 @@ private static class PropertyWithDocumentIdOnWrongTypeBean { public void documentIdAnnotateWrongTypeThrows() { final String expectedErrorMessage = "instead of String or DocumentReference"; assertExceptionContains( - expectedErrorMessage, - new Runnable() { - @Override - public void run() { - serialize(new FieldWithDocumentIdOnWrongTypeBean()); - } - }); + expectedErrorMessage, () -> serialize(new FieldWithDocumentIdOnWrongTypeBean())); assertExceptionContains( expectedErrorMessage, - new Runnable() { - @Override - public void run() { - deserialize("{'intField': 1}", FieldWithDocumentIdOnWrongTypeBean.class); - } - }); + () -> deserialize("{'intField': 1}", FieldWithDocumentIdOnWrongTypeBean.class)); assertExceptionContains( - expectedErrorMessage, - new Runnable() { - @Override - public void run() { - serialize(new GetterWithDocumentIdOnWrongTypeBean()); - } - }); + expectedErrorMessage, () -> serialize(new GetterWithDocumentIdOnWrongTypeBean())); assertExceptionContains( expectedErrorMessage, - new Runnable() { - @Override - public void run() { - deserialize("{'intField': 1}", GetterWithDocumentIdOnWrongTypeBean.class); - } - }); + () -> deserialize("{'intField': 1}", GetterWithDocumentIdOnWrongTypeBean.class)); assertExceptionContains( - expectedErrorMessage, - new Runnable() { - @Override - public void run() { - serialize(new PropertyWithDocumentIdOnWrongTypeBean()); - } - }); + expectedErrorMessage, () -> serialize(new PropertyWithDocumentIdOnWrongTypeBean())); assertExceptionContains( expectedErrorMessage, - new Runnable() { - @Override - public void run() { - deserialize("{'intField': 1}", PropertyWithDocumentIdOnWrongTypeBean.class); - } - }); + () -> deserialize("{'intField': 1}", PropertyWithDocumentIdOnWrongTypeBean.class)); } private static class GetterWithoutBackingFieldOnDocumentIdBean { @@ -2701,24 +2449,12 @@ public void documentIdAnnotateReadOnlyThrows() { // Serialization. final GetterWithoutBackingFieldOnDocumentIdBean bean = new GetterWithoutBackingFieldOnDocumentIdBean(); - assertExceptionContains( - expectedErrorMessage, - new Runnable() { - @Override - public void run() { - serialize(bean); - } - }); + assertExceptionContains(expectedErrorMessage, () -> serialize(bean)); // Deserialization. assertExceptionContains( expectedErrorMessage, - new Runnable() { - @Override - public void run() { - deserialize("{'docId': 'id'}", GetterWithoutBackingFieldOnDocumentIdBean.class); - } - }); + () -> deserialize("{'docId': 'id'}", GetterWithoutBackingFieldOnDocumentIdBean.class)); } private static class DocumentIdOnStringField { @@ -2779,10 +2515,7 @@ public void documentIdsDeserialize() { assertEquals( "doc123", - deserialize( - Collections.singletonMap("property", 100), - DocumentIdOnStringField.class, - ref) + deserialize(Collections.singletonMap("property", 100), DocumentIdOnStringField.class, ref) .docId); DocumentIdOnStringFieldAsProperty target = @@ -2847,35 +2580,22 @@ public void documentIdsDeserializeConflictThrows() { assertExceptionContains( expectedErrorMessage, - new Runnable() { - @Override - public void run() { - deserialize("{'docId': 'toBeOverwritten'}", DocumentIdOnStringField.class, ref); - } - }); + () -> deserialize("{'docId': 'toBeOverwritten'}", DocumentIdOnStringField.class, ref)); assertExceptionContains( expectedErrorMessage, - new Runnable() { - @Override - public void run() { + () -> deserialize( "{'docIdProperty': 'toBeOverwritten', 'anotherProperty': 100}", DocumentIdOnStringFieldAsProperty.class, - ref); - } - }); + ref)); assertExceptionContains( expectedErrorMessage, - new Runnable() { - @Override - public void run() { + () -> deserialize( "{'nestedDocIdHolder': {'docId': 'toBeOverwritten'}}", DocumentIdOnNestedObjects.class, - ref); - } - }); + ref)); } } diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/QueryTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/QueryTest.java index 5bea87dd5c..a1c4ff1788 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/QueryTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/QueryTest.java @@ -54,7 +54,6 @@ import com.google.firestore.v1.Value; import com.google.protobuf.InvalidProtocolBufferException; import io.grpc.Status; -import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.Arrays; @@ -70,7 +69,6 @@ import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.Spy; -import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; @@ -78,7 +76,7 @@ public class QueryTest { @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder().setProjectId("test-project").build(), Mockito.mock(FirestoreRpc.class)); @@ -312,9 +310,7 @@ public void inQueriesWithReferenceArray() throws Exception { Matchers.any()); query - .whereIn( - FieldPath.documentId(), - Arrays.asList("doc", firestoreMock.document("coll/doc"))) + .whereIn(FieldPath.documentId(), Arrays.asList("doc", firestoreMock.document("coll/doc"))) .get() .get(); @@ -377,7 +373,7 @@ public void validatesInQueries() { } try { - query.whereIn(FieldPath.documentId(), Arrays.asList()).get(); + query.whereIn(FieldPath.documentId(), Arrays.asList()).get(); fail(); } catch (IllegalArgumentException e) { assertEquals( @@ -396,8 +392,7 @@ public void notInQueriesWithReferenceArray() throws Exception { query .whereNotIn( - FieldPath.documentId(), - Arrays.asList("doc", firestoreMock.document("coll/doc"))) + FieldPath.documentId(), Arrays.asList("doc", firestoreMock.document("coll/doc"))) .get() .get(); @@ -427,7 +422,7 @@ public void validatesNotInQueries() { } try { - query.whereNotIn(FieldPath.documentId(), Arrays.asList()).get(); + query.whereNotIn(FieldPath.documentId(), Arrays.asList()).get(); fail(); } catch (IllegalArgumentException e) { assertEquals( @@ -933,21 +928,20 @@ public void retriesAfterRetryableError() throws Exception { final boolean[] returnError = new boolean[] {true}; doAnswer( - new Answer() { - public RunQueryResponse answer(InvocationOnMock invocation) throws Throwable { - if (returnError[0]) { - returnError[0] = false; - return queryResponse( - FirestoreException.forServerRejection( - Status.DEADLINE_EXCEEDED, "Simulated test failure"), - DOCUMENT_NAME + "1", - DOCUMENT_NAME + "2") - .answer(invocation); - } else { - return queryResponse(DOCUMENT_NAME + "3").answer(invocation); - } - } - }) + (Answer) + invocation -> { + if (returnError[0]) { + returnError[0] = false; + return queryResponse( + FirestoreException.forServerRejection( + Status.DEADLINE_EXCEEDED, "Simulated test failure"), + DOCUMENT_NAME + "1", + DOCUMENT_NAME + "2") + .answer(invocation); + } else { + return queryResponse(DOCUMENT_NAME + "3").answer(invocation); + } + }) .when(firestoreMock) .streamRequest( runQuery.capture(), @@ -1111,18 +1105,15 @@ public void ensureFromProtoWorksWithAProxy() throws InvalidProtocolBufferExcepti Proxy.newProxyInstance( QueryTest.class.getClassLoader(), new Class[] {Firestore.class, FirestoreRpcContext.class}, - new InvocationHandler() { - @Override - public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { - // use the reflection lookup of the method name so intellij will refactor it along - // with the method name if it ever happens. - Method getDatabaseNameMethod = - FirestoreRpcContext.class.getDeclaredMethod("getDatabaseName"); - if (method.equals(getDatabaseNameMethod)) { - return "projects/test-project/databases/(default)"; - } else { - return null; - } + (proxy, method, args) -> { + // use the reflection lookup of the method name so intellij will refactor it along + // with the method name if it ever happens. + Method getDatabaseNameMethod = + FirestoreRpcContext.class.getDeclaredMethod("getDatabaseName"); + if (method.equals(getDatabaseNameMethod)) { + return "projects/test-project/databases/(default)"; + } else { + return null; } }); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/RecursiveDeleteTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/RecursiveDeleteTest.java index a83842779b..5d8392a548 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/RecursiveDeleteTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/RecursiveDeleteTest.java @@ -47,8 +47,6 @@ import com.google.api.gax.rpc.ApiStreamObserver; import com.google.api.gax.rpc.ServerStreamingCallable; import com.google.api.gax.rpc.UnaryCallable; -import com.google.cloud.firestore.BulkWriter.WriteErrorCallback; -import com.google.cloud.firestore.BulkWriter.WriteResultCallback; import com.google.cloud.firestore.LocalFirestoreHelper.ResponseStubber; import com.google.cloud.firestore.spi.v1.FirestoreRpc; import com.google.common.util.concurrent.MoreExecutors; @@ -81,7 +79,6 @@ import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.Spy; -import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; @@ -266,12 +263,7 @@ public void getAllDescendantsDocument() throws Exception { Matchers.any()); // Include dummy response for the deleted fullDocumentPath reference. - doAnswer( - new Answer>() { - public ApiFuture answer(InvocationOnMock mock) { - return successResponse(1); - } - }) + doAnswer((Answer>) mock -> successResponse(1)) .when(firestoreMock) .sendRequest( batchWriteCapture.capture(), @@ -303,12 +295,7 @@ public void createsRetryQueryAfterStreamExceptionWithLastReceivedDoc() throws Ex streamObserverCapture.capture(), Matchers.any()); - doAnswer( - new Answer>() { - public ApiFuture answer(InvocationOnMock mock) { - return successResponse(1); - } - }) + doAnswer((Answer>) mock -> successResponse(1)) .when(firestoreMock) .sendRequest( batchWriteCapture.capture(), @@ -368,16 +355,15 @@ public void createsSecondQueryWithCorrectStartAfter() throws Exception { doAnswer(queryResponse(firstStream.toArray(new String[0]))) .doAnswer( - new Answer() { - public RunQueryResponse answer(InvocationOnMock invocation) throws Throwable { - secondQueryFuture.set(null); - Object[] args = invocation.getArguments(); - ApiStreamObserver observer = - (ApiStreamObserver) args[1]; - observer.onCompleted(); - return null; - } - }) + (Answer) + invocation -> { + secondQueryFuture.set(null); + Object[] args = invocation.getArguments(); + ApiStreamObserver observer = + (ApiStreamObserver) args[1]; + observer.onCompleted(); + return null; + }) .when(firestoreMock) .streamRequest( runQueryCapture.capture(), @@ -385,38 +371,32 @@ public RunQueryResponse answer(InvocationOnMock invocation) throws Throwable { Matchers.any()); doAnswer( - new Answer>() { - public ApiFuture answer(InvocationOnMock mock) throws Exception { - if (numDeletesBuffered[0] < cutoff) { - numDeletesBuffered[0] += batchWriteResponse.size(); - // By waiting for `bufferFuture` to complete, we can guarantee that the writes - // complete after all documents are streamed. Without this future, the test can - // race and complete the writes before the stream is finished, which is a - // different scenario this test is not for. - return ApiFutures.transformAsync( - bufferFuture, - new ApiAsyncFunction() { - public ApiFuture apply(Void unused) throws Exception { - return mergeResponses(batchWriteResponse.toArray(new ApiFuture[0])); - } - }, - MoreExecutors.directExecutor()); - } else { - // Once there are `cutoff` pending deletes, completing the future allows enough - // responses to be returned such that the number of pending deletes should be less - // than `minPendingOps`. This allows us to test that the second query is made. - bufferFuture.set(null); - return ApiFutures.transformAsync( - secondQueryFuture, - new ApiAsyncFunction() { - public ApiFuture apply(Void unused) throws Exception { - return mergeResponses(batchWriteResponse.toArray(new ApiFuture[0])); - } - }, - MoreExecutors.directExecutor()); - } - } - }) + (Answer>) + mock -> { + if (numDeletesBuffered[0] < cutoff) { + numDeletesBuffered[0] += batchWriteResponse.size(); + // By waiting for `bufferFuture` to complete, we can guarantee that the writes + // complete after all documents are streamed. Without this future, the test can + // race and complete the writes before the stream is finished, which is a + // different scenario this test is not for. + return ApiFutures.transformAsync( + bufferFuture, + (ApiAsyncFunction) + unused -> mergeResponses(batchWriteResponse.toArray(new ApiFuture[0])), + MoreExecutors.directExecutor()); + } else { + // Once there are `cutoff` pending deletes, completing the future allows enough + // responses to be returned such that the number of pending deletes should be + // less than `minPendingOps`. This allows us to test that the second query is + // made. + bufferFuture.set(null); + return ApiFutures.transformAsync( + secondQueryFuture, + (ApiAsyncFunction) + unused -> mergeResponses(batchWriteResponse.toArray(new ApiFuture[0])), + MoreExecutors.directExecutor()); + } + }) .when(firestoreMock) .sendRequest( batchWriteCapture.capture(), @@ -500,11 +480,8 @@ public void exceptionThrownIfBulkWriterSuccessHandlerFails() throws Exception { setupMocks(documents, "bob"); bulkWriter = firestoreMock.bulkWriter(); bulkWriter.addWriteResultListener( - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - throw new UnsupportedOperationException( - "Test code threw UnsupportedOperationException"); - } + (documentReference, result) -> { + throw new UnsupportedOperationException("Test code threw UnsupportedOperationException"); }); try { ApiFuture future = @@ -528,11 +505,9 @@ public void successHandlerProvidesCorrectReferencesAndResults() throws Exception final List references = new ArrayList<>(); bulkWriter = firestoreMock.bulkWriter(); bulkWriter.addWriteResultListener( - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - results.add((int) result.getUpdateTime().getSeconds()); - references.add(documentReference.getPath()); - } + (documentReference, result) -> { + results.add((int) result.getUpdateTime().getSeconds()); + references.add(documentReference.getPath()); }); ApiFuture future = firestoreMock.recursiveDelete( @@ -560,12 +535,10 @@ public void errorHandlerProvidesCorrectInformation() throws Exception { final List references = new ArrayList<>(); bulkWriter = firestoreMock.bulkWriter(); bulkWriter.addWriteErrorListener( - new WriteErrorCallback() { - public boolean onError(BulkWriterException error) { - codes.add(error.getStatus()); - references.add(error.getDocumentReference().getPath()); - return false; - } + error -> { + codes.add(error.getStatus()); + references.add(error.getDocumentReference().getPath()); + return false; }); ApiFuture future = firestoreMock.recursiveDelete( @@ -656,7 +629,7 @@ public void handlesSuccessfulStreamErrorRetries() throws Exception { firestoreMock.recursiveDelete(firestoreMock.collection(COLLECTION_ID)).get(); responseStubber.verifyAllRequestsSent(); - }; + } @Test public void handlesMultipleCallsToRecursiveDelete() throws Exception { @@ -704,12 +677,11 @@ public void usesSameBulkWriterInstanceAcrossCalls() throws Exception { final int[] callCount = {0}; final BulkWriter bulkWriter = firestoreMock.bulkWriter(); doAnswer( - new Answer() { - public BulkWriter answer(InvocationOnMock mock) throws Throwable { - callCount[0]++; - return bulkWriter; - } - }) + (Answer) + mock -> { + callCount[0]++; + return bulkWriter; + }) .when(firestoreMock) .bulkWriter(); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/TransactionTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/TransactionTest.java index 5638bcda00..9e35ee1b77 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/TransactionTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/TransactionTest.java @@ -56,7 +56,6 @@ import com.google.cloud.firestore.TransactionOptions.ReadWriteOptionsBuilder; import com.google.cloud.firestore.TransactionOptions.TransactionOptionsType; import com.google.cloud.firestore.spi.v1.FirestoreRpc; -import com.google.common.base.Function; import com.google.firestore.v1.BatchGetDocumentsRequest; import com.google.firestore.v1.DocumentMask; import com.google.firestore.v1.Write; @@ -69,9 +68,8 @@ import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; import java.util.concurrent.Executors; -import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; -import org.junit.Assert; +import java.util.function.Function; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -90,10 +88,10 @@ public class TransactionTest { new ApiException( new Exception("Test exception"), GrpcStatusCode.of(Status.Code.UNKNOWN), true)); - @Spy private FirestoreRpc firestoreRpc = mock(FirestoreRpc.class); + @Spy private final FirestoreRpc firestoreRpc = mock(FirestoreRpc.class); @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder() .setProjectId("test-project") @@ -117,13 +115,10 @@ public void before() { options = TransactionOptions.create( Executors.newSingleThreadExecutor( - new ThreadFactory() { - @Override - public Thread newThread(Runnable runnable) { - Thread thread = new Thread(runnable); - thread.setName("user_provided"); - return thread; - } + runnable -> { + Thread thread = new Thread(runnable); + thread.setName("user_provided"); + return thread; })); } @@ -136,12 +131,9 @@ public void returnsValue() throws Exception { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - Assert.assertEquals("user_provided", Thread.currentThread().getName()); - return "foo"; - } + t -> { + assertEquals("user_provided", Thread.currentThread().getName()); + return "foo"; }, options); @@ -163,12 +155,9 @@ public void returnsValueAsync() throws Exception { ApiFuture transaction = firestoreMock.runAsyncTransaction( - new Transaction.AsyncFunction() { - @Override - public ApiFuture updateCallback(Transaction transaction) { - Assert.assertEquals("user_provided", Thread.currentThread().getName()); - return ApiFutures.immediateFuture("foo"); - } + t -> { + assertEquals("user_provided", Thread.currentThread().getName()); + return ApiFutures.immediateFuture("foo"); }, options); @@ -188,15 +177,7 @@ public void canReturnNull() throws Exception { .when(firestoreMock) .sendRequest(requestCapture.capture(), Matchers.>any()); - ApiFuture transaction = - firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - return null; - } - }, - options); + ApiFuture transaction = firestoreMock.runTransaction(transaction1 -> null, options); assertNull(transaction.get()); } @@ -209,14 +190,7 @@ public void canReturnNullAsync() throws Exception { .sendRequest(requestCapture.capture(), Matchers.>any()); ApiFuture transaction = - firestoreMock.runAsyncTransaction( - new Transaction.AsyncFunction() { - @Override - public ApiFuture updateCallback(Transaction transaction) { - return ApiFutures.immediateFuture(null); - } - }, - options); + firestoreMock.runAsyncTransaction(t -> ApiFutures.immediateFuture(null), options); assertNull(transaction.get()); } @@ -230,11 +204,8 @@ public void rollbackOnCallbackError() { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) throws Exception { - throw new Exception("Expected exception"); - } + t -> { + throw new Exception("Expected exception"); }, options); @@ -261,13 +232,7 @@ public void rollbackOnCallbackApiFutureErrorAsync() { ApiFuture transaction = firestoreMock.runAsyncTransaction( - new Transaction.AsyncFunction() { - @Override - public ApiFuture updateCallback(Transaction transaction) { - return ApiFutures.immediateFailedFuture(new Exception("Expected exception")); - } - }, - options); + t -> ApiFutures.immediateFailedFuture(new Exception("Expected exception")), options); try { transaction.get(); @@ -291,12 +256,9 @@ public void noRollbackOnBeginFailure() { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - fail(); - return null; - } + t -> { + fail(); + return null; }, options); @@ -319,12 +281,9 @@ public void noRollbackOnBeginFailureAsync() { ApiFuture transaction = firestoreMock.runAsyncTransaction( - new Transaction.AsyncFunction() { - @Override - public ApiFuture updateCallback(Transaction transaction) { - fail(); - return null; - } + t -> { + fail(); + return null; }, options); @@ -348,11 +307,8 @@ public void noRollbackOnThrownExceptionAsync() { ApiFuture transaction = firestoreMock.runAsyncTransaction( - new Transaction.AsyncFunction() { - @Override - public ApiFuture updateCallback(Transaction transaction) { - throw new RuntimeException("User exception"); - } + t -> { + throw new RuntimeException("User exception"); }, options); @@ -393,12 +349,7 @@ public void limitsRetriesWithFailure() { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - return "foo" + retryCount.getAndIncrement(); - } - }, + t -> "foo" + retryCount.getAndIncrement(), TransactionOptions.create(options.getExecutor(), 5)); try { @@ -442,12 +393,7 @@ public void limitsRetriesWithSuccess() throws Exception { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - return "foo" + retryCount.getAndIncrement(); - } - }, + t -> "foo" + retryCount.getAndIncrement(), TransactionOptions.create(options.getExecutor(), 6)); assertEquals("foo6", transaction.get()); @@ -491,12 +437,9 @@ private void verifyRetries( ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public Void updateCallback(Transaction transaction) { - ++attempts[0]; - return null; - } + t -> { + ++attempts[0]; + return null; }); transaction.get(); @@ -511,12 +454,9 @@ public Void updateCallback(Transaction transaction) { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public Void updateCallback(Transaction transaction) { - ++attempts[0]; - return null; - } + t -> { + ++attempts[0]; + return null; }); try { @@ -534,32 +474,24 @@ public Void updateCallback(Transaction transaction) { @Test public void retriesCommitBasedOnErrorCode() throws Exception { verifyRetries( - /* expectedSequenceWithRetry= */ new Function() { - @Override - public ResponseStubber apply(final ApiException e) { - return new ResponseStubber() { + /* expectedSequenceWithRetry= */ e -> + new ResponseStubber() { { put(begin(), beginResponse("foo1")); - put(commit("foo1"), ApiFutures.immediateFailedFuture(e)); + put(commit("foo1"), ApiFutures.immediateFailedFuture(e)); put(rollback("foo1"), rollbackResponse()); put(begin("foo1"), beginResponse("foo2")); put(commit("foo2"), commitResponse(0, 0)); } - }; - } - }, - /* expectedSequenceWithoutRetry= */ new Function() { - @Override - public ResponseStubber apply(final ApiException e) { - return new ResponseStubber() { + }, + /* expectedSequenceWithoutRetry= */ e -> + new ResponseStubber() { { put(begin(), beginResponse("foo1")); - put(commit("foo1"), ApiFutures.immediateFailedFuture(e)); + put(commit("foo1"), ApiFutures.immediateFailedFuture(e)); put(rollback("foo1"), rollbackResponse()); } - }; - } - }); + }); } @Test @@ -567,41 +499,31 @@ public void retriesRollbackBasedOnErrorCode() throws Exception { final ApiException commitException = exception(Status.Code.ABORTED, true); verifyRetries( - /* expectedSequenceWithRetry= */ new Function() { - @Override - public ResponseStubber apply(final ApiException e) { - final ApiFuture rollbackException = - ApiFutures.immediateFailedFuture(e); - return new ResponseStubber() { - { - put(begin(), beginResponse("foo1")); - put( - commit("foo1"), - ApiFutures.immediateFailedFuture(commitException)); - put(rollback("foo1"), rollbackException); - put(rollback("foo1"), rollbackResponse()); - put(begin("foo1"), beginResponse("foo2")); - put(commit("foo2"), commitResponse(0, 0)); - } - }; - } + /* expectedSequenceWithRetry= */ e -> { + final ApiFuture rollbackException = + ApiFutures.immediateFailedFuture(e); + return new ResponseStubber() { + { + put(begin(), beginResponse("foo1")); + put(commit("foo1"), ApiFutures.immediateFailedFuture(commitException)); + put(rollback("foo1"), rollbackException); + put(rollback("foo1"), rollbackResponse()); + put(begin("foo1"), beginResponse("foo2")); + put(commit("foo2"), commitResponse(0, 0)); + } + }; }, - /* expectedSequenceWithoutRetry= */ new Function() { - @Override - public ResponseStubber apply(final ApiException e) { - final ApiFuture rollbackException = - ApiFutures.immediateFailedFuture(e); - return new ResponseStubber() { - { - put(begin(), beginResponse("foo1")); - put( - commit("foo1"), - ApiFutures.immediateFailedFuture(commitException)); - put(rollback("foo1"), rollbackException); - put(rollback("foo1"), rollbackResponse()); - } - }; - } + /* expectedSequenceWithoutRetry= */ e -> { + final ApiFuture rollbackException = + ApiFutures.immediateFailedFuture(e); + return new ResponseStubber() { + { + put(begin(), beginResponse("foo1")); + put(commit("foo1"), ApiFutures.immediateFailedFuture(commitException)); + put(rollback("foo1"), rollbackException); + put(rollback("foo1"), rollbackResponse()); + } + }; }); } @@ -614,21 +536,10 @@ public void getDocument() throws Exception { doAnswer(getAllResponse(SINGLE_FIELD_PROTO)) .when(firestoreMock) - .streamRequest( - requestCapture.capture(), - streamObserverCapture.capture(), - Matchers.>any()); + .streamRequest(requestCapture.capture(), streamObserverCapture.capture(), Matchers.any()); ApiFuture transaction = - firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public DocumentSnapshot updateCallback(Transaction transaction) - throws ExecutionException, InterruptedException { - return transaction.get(documentReference).get(); - } - }, - options); + firestoreMock.runTransaction(t -> t.get(documentReference).get(), options); assertEquals("doc", transaction.get().getId()); @@ -649,20 +560,10 @@ public void getDocumentAsync() throws Exception { doAnswer(getAllResponse(SINGLE_FIELD_PROTO)) .when(firestoreMock) - .streamRequest( - requestCapture.capture(), - streamObserverCapture.capture(), - Matchers.>any()); + .streamRequest(requestCapture.capture(), streamObserverCapture.capture(), Matchers.any()); ApiFuture transaction = - firestoreMock.runAsyncTransaction( - new Transaction.AsyncFunction() { - @Override - public ApiFuture updateCallback(Transaction transaction) { - return transaction.get(documentReference); - } - }, - options); + firestoreMock.runAsyncTransaction(t -> t.get(documentReference), options); assertEquals("doc", transaction.get().getId()); @@ -686,21 +587,10 @@ public void getMultipleDocuments() throws Exception { doAnswer(getAllResponse(SINGLE_FIELD_PROTO)) .when(firestoreMock) - .streamRequest( - requestCapture.capture(), - streamObserverCapture.capture(), - Matchers.>any()); + .streamRequest(requestCapture.capture(), streamObserverCapture.capture(), Matchers.any()); ApiFuture> transaction = - firestoreMock.runTransaction( - new Transaction.Function>() { - @Override - public List updateCallback(Transaction transaction) - throws ExecutionException, InterruptedException { - return transaction.getAll(doc1, doc2).get(); - } - }, - options); + firestoreMock.runTransaction(t -> t.getAll(doc1, doc2).get(), options); assertEquals(2, transaction.get().size()); @@ -734,14 +624,7 @@ public void getMultipleDocumentsWithFieldMask() throws Exception { ApiFuture> transaction = firestoreMock.runTransaction( - new Transaction.Function>() { - @Override - public List updateCallback(Transaction transaction) - throws ExecutionException, InterruptedException { - return transaction.getAll(new DocumentReference[] {doc1}, fieldMask).get(); - } - }, - options); + t -> t.getAll(new DocumentReference[] {doc1}, fieldMask).get(), options); transaction.get(); List requests = requestCapture.getAllValues(); @@ -768,21 +651,10 @@ public void getQuery() throws Exception { doAnswer(queryResponse()) .when(firestoreMock) - .streamRequest( - requestCapture.capture(), - streamObserverCapture.capture(), - Matchers.>any()); + .streamRequest(requestCapture.capture(), streamObserverCapture.capture(), Matchers.any()); ApiFuture transaction = - firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public QuerySnapshot updateCallback(Transaction transaction) - throws ExecutionException, InterruptedException { - return transaction.get(queryReference).get(); - } - }, - options); + firestoreMock.runTransaction(t -> t.get(queryReference).get(), options); assertEquals(1, transaction.get().size()); @@ -803,13 +675,10 @@ public void updateDocument() throws Exception { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - transaction.update(documentReference, LocalFirestoreHelper.SINGLE_FIELD_MAP); - transaction.update(documentReference, "foo", "bar"); - return "foo"; - } + t -> { + t.update(documentReference, LocalFirestoreHelper.SINGLE_FIELD_MAP); + t.update(documentReference, "foo", "bar"); + return "foo"; }, options); @@ -837,14 +706,10 @@ public void setDocument() throws Exception { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - transaction - .set(documentReference, LocalFirestoreHelper.SINGLE_FIELD_MAP) - .set(documentReference, LocalFirestoreHelper.SINGLE_FIELD_OBJECT); - return "foo"; - } + t -> { + t.set(documentReference, LocalFirestoreHelper.SINGLE_FIELD_MAP) + .set(documentReference, LocalFirestoreHelper.SINGLE_FIELD_OBJECT); + return "foo"; }, options); @@ -872,14 +737,10 @@ public void createDocument() throws Exception { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - transaction - .create(documentReference, LocalFirestoreHelper.SINGLE_FIELD_MAP) - .create(documentReference, LocalFirestoreHelper.SINGLE_FIELD_OBJECT); - return "foo"; - } + t -> { + t.create(documentReference, LocalFirestoreHelper.SINGLE_FIELD_MAP) + .create(documentReference, LocalFirestoreHelper.SINGLE_FIELD_OBJECT); + return "foo"; }, options); @@ -907,15 +768,11 @@ public void deleteDocument() throws Exception { ApiFuture transaction = firestoreMock.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) { - transaction.delete(documentReference); - transaction.delete( - documentReference, - Precondition.updatedAt(Timestamp.ofTimeSecondsAndNanos(1, 2))); - return "foo"; - } + t -> { + t.delete(documentReference); + t.delete( + documentReference, Precondition.updatedAt(Timestamp.ofTimeSecondsAndNanos(1, 2))); + return "foo"; }, options); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/WatchTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/WatchTest.java index 6b036e2f80..4d6f5d44a7 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/WatchTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/WatchTest.java @@ -78,7 +78,6 @@ import org.mockito.Matchers; import org.mockito.Mockito; import org.mockito.Spy; -import org.mockito.invocation.InvocationOnMock; import org.mockito.runners.MockitoJUnitRunner; import org.mockito.stubbing.Answer; @@ -93,10 +92,10 @@ public class WatchTest { /** A counter of all document sent. Used to generate a unique update time. */ private static int documentCount; - @Spy private FirestoreRpc firestoreRpc = Mockito.mock(FirestoreRpc.class); + @Spy private final FirestoreRpc firestoreRpc = Mockito.mock(FirestoreRpc.class); @Spy - private FirestoreImpl firestoreMock = + private final FirestoreImpl firestoreMock = new FirestoreImpl( FirestoreOptions.newBuilder() .setProjectId("test-project") @@ -116,11 +115,11 @@ public ScheduledFuture schedule(Runnable command, long delay, TimeUnit unit) } }; - private BlockingQueue requests = new LinkedBlockingDeque<>(); - private BlockingQueue exceptions = new LinkedBlockingDeque<>(); - private BlockingQueue documentSnapshots = new LinkedBlockingDeque<>(); - private BlockingQueue querySnapshots = new LinkedBlockingDeque<>(); - private Semaphore closes = new Semaphore(0); + private final BlockingQueue requests = new LinkedBlockingDeque<>(); + private final BlockingQueue exceptions = new LinkedBlockingDeque<>(); + private final BlockingQueue documentSnapshots = new LinkedBlockingDeque<>(); + private final BlockingQueue querySnapshots = new LinkedBlockingDeque<>(); + private final Semaphore closes = new Semaphore(0); private QuerySnapshot lastSnapshot = null; private ListenerRegistration listenerRegistration; @@ -175,15 +174,11 @@ private void addDocumentListener() { firestoreMock .document("coll/doc") .addSnapshotListener( - new EventListener() { - @Override - public void onEvent( - @Nullable DocumentSnapshot value, @Nullable FirestoreException error) { - if (value != null) { - documentSnapshots.add(value); - } else { - exceptions.add(error); - } + (value, error) -> { + if (value != null) { + documentSnapshots.add(value); + } else { + exceptions.add(error); } }); } @@ -194,15 +189,11 @@ private void addQueryListener() { firestoreMock .collection("coll") .addSnapshotListener( - new EventListener() { - @Override - public void onEvent( - @Nullable QuerySnapshot value, @Nullable FirestoreException error) { - if (value != null) { - querySnapshots.add(value); - } else { - exceptions.add(error); - } + (value, error) -> { + if (value != null) { + querySnapshots.add(value); + } else { + exceptions.add(error); } }); } @@ -461,14 +452,7 @@ public void queryWatchSortsDocuments() throws InterruptedException { .collection("coll") .orderBy("foo") .orderBy("bar", Direction.DESCENDING) - .addSnapshotListener( - new EventListener() { - @Override - public void onEvent( - @Nullable QuerySnapshot value, @Nullable FirestoreException error) { - querySnapshots.add(value); - } - }); + .addSnapshotListener((value, error) -> querySnapshots.add(value)); ListenResponse[] documents = new ListenResponse[] { @@ -1004,10 +988,8 @@ private void close() { /** Returns a new request observer that persists its input. */ private Answer newRequestObserver() { - return new Answer() { - @Override - public Object answer(InvocationOnMock invocationOnMock) { - return new ApiStreamObserver() { + return invocationOnMock -> + new ApiStreamObserver() { @Override public void onNext(ListenRequest listenRequest) { requests.add(listenRequest); @@ -1023,7 +1005,5 @@ public void onCompleted() { closes.release(); } }; - } - }; } } diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITQueryWatchTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITQueryWatchTest.java index c053af5101..d8557a640d 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITQueryWatchTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITQueryWatchTest.java @@ -38,10 +38,7 @@ import com.google.cloud.firestore.it.ITQueryWatchTest.QuerySnapshotEventListener.ListenerAssertions; import com.google.common.base.Joiner; import com.google.common.base.Joiner.MapJoiner; -import com.google.common.base.Optional; import com.google.common.base.Preconditions; -import com.google.common.base.Predicate; -import com.google.common.collect.FluentIterable; import com.google.common.collect.Range; import com.google.common.truth.Truth; import java.util.ArrayList; @@ -49,10 +46,12 @@ import java.util.EnumMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; import javax.annotation.Nullable; import org.junit.After; import org.junit.Before; @@ -488,7 +487,7 @@ private QuerySnapshotEventListener( int modifiedEventCount, int removedEventCount, int errorCount) { - this.receivedEvents = Collections.synchronizedList(new ArrayList()); + this.receivedEvents = Collections.synchronizedList(new ArrayList<>()); this.eventsCountDownLatch = new EventsCountDownLatch( initialCount, addedEventCount, modifiedEventCount, removedEventCount, errorCount); @@ -560,14 +559,14 @@ public QuerySnapshotEventListener build() { static final class ListenerAssertions { private static final MapJoiner MAP_JOINER = Joiner.on(",").withKeyValueSeparator("="); - private final FluentIterable events; private final List addedIds; private final List modifiedIds; private final List removedIds; + private final List receivedEvents; ListenerAssertions(List receivedEvents) { - events = FluentIterable.from(receivedEvents); - List querySnapshots = getQuerySnapshots(events); + this.receivedEvents = receivedEvents; + List querySnapshots = getQuerySnapshots(receivedEvents); addedIds = getIds(querySnapshots, DocumentChange.Type.ADDED); modifiedIds = getIds(querySnapshots, DocumentChange.Type.MODIFIED); removedIds = getIds(querySnapshots, DocumentChange.Type.REMOVED); @@ -575,47 +574,25 @@ static final class ListenerAssertions { private void noError() { final Optional anyError = - events.firstMatch( - new Predicate() { - @Override - public boolean apply(ListenerEvent input) { - return input.error != null; - } - }); - assertWithMessage("snapshotListener received an error").that(anyError).isAbsent(); + receivedEvents.stream().filter(input -> input.error != null).findFirst(); + assertWithMessage("snapshotListener received an error") + .that(anyError.isPresent()) + .isFalse(); } private void hasError() { final Optional anyError = - events.firstMatch( - new Predicate() { - @Override - public boolean apply(ListenerEvent input) { - return input.error != null; - } - }); + receivedEvents.stream().filter(input -> input.error != null).findFirst(); assertWithMessage("snapshotListener did not receive an expected error") - .that(anyError) - .isPresent(); + .that(anyError.isPresent()) + .isTrue(); } - private static List getQuerySnapshots(FluentIterable events) { - return events - .filter( - new Predicate() { - @Override - public boolean apply(ListenerEvent input) { - return input.value != null; - } - }) - .transform( - new com.google.common.base.Function() { - @Override - public QuerySnapshot apply(ListenerEvent input) { - return input.value; - } - }) - .toList(); + private static List getQuerySnapshots(List events) { + return events.stream() + .filter(input -> input.value != null) + .map(input -> input.value) + .collect(Collectors.toList()); } private static List getIds( @@ -657,13 +634,13 @@ void removedIdsIsAnyOf(List s1, List s2) { } void eventCountIsAnyOf(Range range) { - Truth.assertWithMessage(debugMessage()).that(events.size()).isIn(range); + Truth.assertWithMessage(debugMessage()).that((int) receivedEvents.size()).isIn(range); } private String debugMessage() { final StringBuilder builder = new StringBuilder(); builder.append("events[\n"); - for (ListenerEvent receivedEvent : events) { + for (ListenerEvent receivedEvent : receivedEvents) { builder.append("event{"); builder.append("error=").append(receivedEvent.error); builder.append(","); diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITShutdownTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITShutdownTest.java index b6e9e87d58..9cca1c9730 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITShutdownTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITShutdownTest.java @@ -19,19 +19,15 @@ import static org.junit.Assert.fail; import com.google.api.core.SettableApiFuture; -import com.google.cloud.firestore.EventListener; import com.google.cloud.firestore.Firestore; -import com.google.cloud.firestore.FirestoreException; import com.google.cloud.firestore.FirestoreOptions; import com.google.cloud.firestore.ListenerRegistration; import com.google.cloud.firestore.LocalFirestoreHelper; -import com.google.cloud.firestore.QuerySnapshot; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; -import javax.annotation.Nullable; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TestName; @@ -57,15 +53,12 @@ public void closeFailure_withoutListenerRemove() throws Exception { ExecutorService testExecutorService = Executors.newSingleThreadExecutor(); final SettableApiFuture result = SettableApiFuture.create(); testExecutorService.submit( - new Runnable() { - @Override - public void run() { - try { - fs.close(); - result.set(null); - } catch (Throwable throwable) { - result.setException(throwable); - } + () -> { + try { + fs.close(); + result.set(null); + } catch (Throwable throwable) { + result.setException(throwable); } }); @@ -108,14 +101,7 @@ private ListenerRegistration attachListener(Firestore fs) throws InterruptedExce fs.collection( String.format( "java-%s-%s", testName.getMethodName(), LocalFirestoreHelper.autoId())) - .addSnapshotListener( - new EventListener() { - @Override - public void onEvent( - @Nullable QuerySnapshot value, @Nullable FirestoreException error) { - cdl.countDown(); - } - }); + .addSnapshotListener((value, error) -> cdl.countDown()); cdl.await(); return listenerRegistration; } diff --git a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java index fd17dab445..c8d39fa898 100644 --- a/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java +++ b/google-cloud-firestore/src/test/java/com/google/cloud/firestore/it/ITSystemTest.java @@ -42,11 +42,9 @@ import com.google.api.gax.rpc.ApiStreamObserver; import com.google.cloud.Timestamp; import com.google.cloud.firestore.BulkWriter; -import com.google.cloud.firestore.BulkWriter.WriteResultCallback; import com.google.cloud.firestore.CollectionReference; import com.google.cloud.firestore.DocumentReference; import com.google.cloud.firestore.DocumentSnapshot; -import com.google.cloud.firestore.EventListener; import com.google.cloud.firestore.FieldMask; import com.google.cloud.firestore.FieldPath; import com.google.cloud.firestore.FieldValue; @@ -96,7 +94,6 @@ import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; -import javax.annotation.Nullable; import org.apache.commons.lang3.exception.ExceptionUtils; import org.junit.After; import org.junit.Before; @@ -257,13 +254,10 @@ public void setDocumentWithFloat() throws Exception { @Test public void setDocumentWithMerge() throws Exception { - Map originalMap = - LocalFirestoreHelper.map("a.b", "c", "nested", map("d", "e")); - Map updateMap = - LocalFirestoreHelper.map("f.g", "h", "nested", map("i", "j")); + Map originalMap = LocalFirestoreHelper.map("a.b", "c", "nested", map("d", "e")); + Map updateMap = LocalFirestoreHelper.map("f.g", "h", "nested", map("i", "j")); Map resultMap = - LocalFirestoreHelper.map( - "a.b", "c", "f.g", "h", "nested", map("d", "e", "i", "j")); + LocalFirestoreHelper.map("a.b", "c", "f.g", "h", "nested", map("d", "e", "i", "j")); randomDoc.set(originalMap).get(); randomDoc.set(updateMap, SetOptions.merge()).get(); DocumentSnapshot documentSnapshot = randomDoc.get().get(); @@ -281,7 +275,7 @@ public void setWithIncrementAndMerge() throws ExecutionException, InterruptedExc @Test public void mergeDocumentWithServerTimestamp() throws Exception { - Map originalMap = LocalFirestoreHelper.map("a", "b"); + Map originalMap = LocalFirestoreHelper.map("a", "b"); Map updateMap = map("c", FieldValue.serverTimestamp()); randomDoc.set(originalMap).get(); randomDoc.set(updateMap, SetOptions.merge()).get(); @@ -300,7 +294,7 @@ public void updateDocument() throws Exception { documentSnapshot = randomDoc.get().get(); expectedResult.foo = "updated"; assertEquals(expectedResult, documentSnapshot.toObject(AllSupportedTypes.class)); - expectedResult.model = ImmutableMap.of("foo", (Object) UPDATE_SINGLE_FIELD_OBJECT.foo); + expectedResult.model = ImmutableMap.of("foo", UPDATE_SINGLE_FIELD_OBJECT.foo); randomDoc.update("model", UPDATE_SINGLE_FIELD_OBJECT).get(); documentSnapshot = randomDoc.get().get(); assertEquals(expectedResult, documentSnapshot.toObject(AllSupportedTypes.class)); @@ -675,12 +669,10 @@ public void failedTransaction() { try { firestore .runTransaction( - new Function() { - @Override - public String updateCallback(Transaction transaction) { - throw new RuntimeException("User exception"); - } - }) + (Function) + transaction -> { + throw new RuntimeException("User exception"); + }) .get(); fail(); } catch (Exception e) { @@ -693,12 +685,10 @@ public void asyncTxFailsWithUserError() throws Exception { try { firestore .runAsyncTransaction( - new Transaction.AsyncFunction() { - @Override - public ApiFuture updateCallback(Transaction transaction) { - throw new RuntimeException("User exception"); - } - }) + (Transaction.AsyncFunction) + transaction -> { + throw new RuntimeException("User exception"); + }) .get(); fail(); } catch (Exception e) { @@ -714,13 +704,10 @@ public void doesNotRetryTransactionsWithFailedPreconditions() { ApiFuture firstTransaction = firestore.runTransaction( - new Transaction.Function() { - @Override - public Void updateCallback(Transaction transaction) { - attempts.incrementAndGet(); - transaction.update(documentReference, "foo", "bar"); - return null; - } + transaction -> { + attempts.incrementAndGet(); + transaction.update(documentReference, "foo", "bar"); + return null; }); try { @@ -745,35 +732,27 @@ public void successfulTransactionWithContention() throws Exception { // same document, which they then modify. ApiFuture firstTransaction = firestore.runTransaction( - new Transaction.Function() { - @Override - public String updateCallback(Transaction transaction) - throws ExecutionException, InterruptedException { - attempts.incrementAndGet(); - DocumentSnapshot documentSnapshot = transaction.get(documentReference).get(); - latch.countDown(); - latch.await(); - transaction.update( - documentReference, "counter", documentSnapshot.getLong("counter") + 1); - return "foo"; - } + transaction -> { + attempts.incrementAndGet(); + DocumentSnapshot documentSnapshot = transaction.get(documentReference).get(); + latch.countDown(); + latch.await(); + transaction.update( + documentReference, "counter", documentSnapshot.getLong("counter") + 1); + return "foo"; }); ApiFuture secondTransaction = firestore.runTransaction( - new Function() { - @Override - public String updateCallback(Transaction transaction) - throws ExecutionException, InterruptedException { - attempts.incrementAndGet(); - List documentSnapshots = - transaction.getAll(documentReference).get(); - latch.countDown(); - latch.await(); - transaction.update( - documentReference, "counter", documentSnapshots.get(0).getLong("counter") + 1); - return "bar"; - } + transaction -> { + attempts.incrementAndGet(); + List documentSnapshots = + transaction.getAll(documentReference).get(); + latch.countDown(); + latch.await(); + transaction.update( + documentReference, "counter", documentSnapshots.get(0).getLong("counter") + 1); + return "bar"; }); assertEquals("foo", firstTransaction.get()); @@ -881,7 +860,7 @@ public void listDocumentsListsMissingDocument() throws Exception { public void addAndRemoveFields() throws ExecutionException, InterruptedException { Map expected = new HashMap<>(); - randomDoc.create(Collections.emptyMap()).get(); + randomDoc.create(Collections.emptyMap()).get(); assertEquals(expected, getData()); randomDoc.delete().get(); @@ -891,7 +870,7 @@ public void addAndRemoveFields() throws ExecutionException, InterruptedException expected.put("a", map("b", "c")); assertEquals(expected, getData()); - randomDoc.set(Collections.emptyMap()).get(); + randomDoc.set(Collections.emptyMap()).get(); expected = map(); assertEquals(expected, getData()); @@ -904,24 +883,18 @@ public void addAndRemoveFields() throws ExecutionException, InterruptedException assertEquals(expected, getData()); randomDoc - .set( - LocalFirestoreHelper.map("a", map("d", FieldValue.delete())), - SetOptions.merge()) + .set(LocalFirestoreHelper.map("a", map("d", FieldValue.delete())), SetOptions.merge()) .get(); getNestedMap(expected, "a").remove("d"); assertEquals(expected, getData()); randomDoc - .set( - LocalFirestoreHelper.map("a", map("b", FieldValue.delete())), - SetOptions.merge()) + .set(LocalFirestoreHelper.map("a", map("b", FieldValue.delete())), SetOptions.merge()) .get(); getNestedMap(expected, "a").remove("b"); assertEquals(expected, getData()); - randomDoc - .set(LocalFirestoreHelper.map("a", map("e", "foo")), SetOptions.merge()) - .get(); + randomDoc.set(LocalFirestoreHelper.map("a", map("e", "foo")), SetOptions.merge()).get(); getNestedMap(expected, "a").put("e", "foo"); assertEquals(expected, getData()); @@ -929,9 +902,7 @@ public void addAndRemoveFields() throws ExecutionException, InterruptedException expected.put("f", "foo"); assertEquals(expected, getData()); - randomDoc - .set(LocalFirestoreHelper.map("f", map("g", "foo")), SetOptions.merge()) - .get(); + randomDoc.set(LocalFirestoreHelper.map("f", map("g", "foo")), SetOptions.merge()).get(); expected.put("f", map("g", "foo")); assertEquals(expected, getData()); @@ -1054,37 +1025,33 @@ public void documentWatch() throws Exception { try { registration = documentReference.addSnapshotListener( - new EventListener() { - @Override - public void onEvent( - @Nullable DocumentSnapshot value, @Nullable FirestoreException error) { - try { - switch (semaphore.availablePermits()) { - case 0: - assertFalse(value.exists()); - documentReference.set(map("foo", "foo")); - break; - case 1: - assertTrue(value.exists()); - DocumentSnapshot documentSnapshot = documentReference.get().get(); - assertEquals("foo", documentSnapshot.getString("foo")); - documentReference.set(map("foo", "bar")); - break; - case 2: - assertTrue(value.exists()); - documentSnapshot = documentReference.get().get(); - assertEquals("bar", documentSnapshot.getString("foo")); - documentReference.delete(); - break; - case 3: - assertFalse(value.exists()); - break; - } - } catch (Exception e) { - fail(e.getMessage()); + (value, error) -> { + try { + switch (semaphore.availablePermits()) { + case 0: + assertFalse(value.exists()); + documentReference.set(map("foo", "foo")); + break; + case 1: + assertTrue(value.exists()); + DocumentSnapshot documentSnapshot = documentReference.get().get(); + assertEquals("foo", documentSnapshot.getString("foo")); + documentReference.set(map("foo", "bar")); + break; + case 2: + assertTrue(value.exists()); + documentSnapshot = documentReference.get().get(); + assertEquals("bar", documentSnapshot.getString("foo")); + documentReference.delete(); + break; + case 3: + assertFalse(value.exists()); + break; } - semaphore.release(); + } catch (Exception e) { + fail(e.getMessage()); } + semaphore.release(); }); semaphore.acquire(4); @@ -1343,10 +1310,7 @@ public void inQueriesWithDocumentId() throws Exception { setDocument("c", map("count", 3)); QuerySnapshot querySnapshot = - randomColl - .whereIn(FieldPath.documentId(), Arrays.asList(doc1.getId(), doc2)) - .get() - .get(); + randomColl.whereIn(FieldPath.documentId(), Arrays.asList(doc1.getId(), doc2)).get().get(); assertEquals(asList("a", "b"), querySnapshotToIds(querySnapshot)); } @@ -1381,7 +1345,7 @@ public void notInQueriesWithDocumentId() throws Exception { QuerySnapshot querySnapshot = randomColl - .whereNotIn(FieldPath.documentId(), Arrays.asList(doc1.getId(), doc2)) + .whereNotIn(FieldPath.documentId(), Arrays.asList(doc1.getId(), doc2)) .get() .get(); @@ -1462,7 +1426,7 @@ public void testInstanceReturnedByGetServiceCanBeUsedToDeserializeAQuery() throw @Test public void deleteNestedFieldUsingFieldPath() throws Exception { DocumentReference documentReference = randomColl.document("doc1"); - documentReference.set(map("a.b", (Object) SINGLE_FILED_MAP_WITH_DOT)).get(); + documentReference.set(map("a.b", SINGLE_FILED_MAP_WITH_DOT)).get(); DocumentSnapshot documentSnapshots = documentReference.get().get(); assertEquals(SINGLE_FILED_MAP_WITH_DOT, documentSnapshots.getData().get("a.b")); @@ -1481,14 +1445,11 @@ public void readOnlyTransaction_successfulGet() final ApiFuture runTransaction = firestore.runTransaction( - new Function() { - @Override - public Void updateCallback(Transaction transaction) throws Exception { - final DocumentSnapshot snapshot = - transaction.get(documentReference).get(5, TimeUnit.SECONDS); - ref.compareAndSet(null, snapshot); - return null; - } + transaction -> { + final DocumentSnapshot snapshot = + transaction.get(documentReference).get(5, TimeUnit.SECONDS); + ref.compareAndSet(null, snapshot); + return null; }, TransactionOptions.createReadOnlyOptionsBuilder().build()); @@ -1503,12 +1464,9 @@ public void readOnlyTransaction_failureWhenAttemptingWrite() final DocumentReference documentReference = randomColl.document("tx/ro/writeShouldFail"); final ApiFuture runTransaction = firestore.runTransaction( - new Function() { - @Override - public Void updateCallback(Transaction transaction) { - transaction.set(documentReference, SINGLE_FIELD_MAP); - return null; - } + transaction -> { + transaction.set(documentReference, SINGLE_FIELD_MAP); + return null; }, TransactionOptions.createReadOnlyOptionsBuilder().build()); @@ -1538,12 +1496,9 @@ public void readOnlyTransaction_failureWhenAttemptReadOlderThan60Seconds() final ApiFuture runTransaction = firestore.runTransaction( - new Function() { - @Override - public Void updateCallback(Transaction transaction) throws Exception { - transaction.get(documentReference).get(5, TimeUnit.SECONDS); - return null; - } + transaction -> { + transaction.get(documentReference).get(5, TimeUnit.SECONDS); + return null; }, options); @@ -1589,7 +1544,7 @@ public void deserializeCustomMap() throws Exception { /** Wrapper around ApiStreamObserver that returns the results in a list. */ private static class StreamConsumer implements ApiStreamObserver { SettableApiFuture> done = SettableApiFuture.create(); - List results = Collections.synchronizedList(new ArrayList()); + List results = Collections.synchronizedList(new ArrayList<>()); @Override public void onNext(T element) { @@ -1800,12 +1755,7 @@ public void testRecursiveDeleteWithCustomBulkWriterInstance() throws Exception { BulkWriter bulkWriter = firestore.bulkWriter(); final int[] callbackCount = {0}; - bulkWriter.addWriteResultListener( - new WriteResultCallback() { - public void onResult(DocumentReference documentReference, WriteResult result) { - callbackCount[0]++; - } - }); + bulkWriter.addWriteResultListener((documentReference, result) -> callbackCount[0]++); firestore.recursiveDelete(randomColl, bulkWriter).get(); assertEquals(0, countCollectionChildren(randomColl)); From 4e11844b0d75287985c46bb008608be7b28980c7 Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Mon, 16 Aug 2021 06:47:09 -0700 Subject: [PATCH 05/11] build(java): use ENABLE_FLAKYBOT env variable (#733) Kokoro job config now supports both environment variables during this migration period. Source-Author: Jeff Ching Source-Date: Thu Aug 12 10:10:27 2021 -0700 Source-Repo: googleapis/synthtool Source-Sha: ff01716e16d2c6e87eaf87197b753ac9fcbbed5d Source-Link: https://github.com/googleapis/synthtool/commit/ff01716e16d2c6e87eaf87197b753ac9fcbbed5d --- .kokoro/build.sh | 2 +- synth.metadata | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index c3d2c7f945..60db15da15 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -115,7 +115,7 @@ fi # fix output location of logs bash .kokoro/coerce_logs.sh -if [[ "${ENABLE_BUILD_COP}" == "true" ]] +if [[ "${ENABLE_FLAKYBOT}" == "true" ]] then chmod +x ${KOKORO_GFILE_DIR}/linux_amd64/flakybot ${KOKORO_GFILE_DIR}/linux_amd64/flakybot -repo=googleapis/java-firestore diff --git a/synth.metadata b/synth.metadata index c0be14079d..11779bc108 100644 --- a/synth.metadata +++ b/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-firestore.git", - "sha": "a27dd9cb0e2681a15eae754c97255d0d8c86bcae" + "sha": "e48f2f9d2404a054c6c9b6a946108999cea65dca" } }, { @@ -19,7 +19,7 @@ "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "1a2878d6909dd10ca4e3c1b5943d6622e996054e" + "sha": "ff01716e16d2c6e87eaf87197b753ac9fcbbed5d" } } ], From d71de050d71f84be1fb7fdd33100c4b85d8260d7 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 19 Aug 2021 02:20:22 +0200 Subject: [PATCH 06/11] build(deps): update dependency com.google.cloud:google-cloud-shared-config to v1.0.1 (#736) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-shared-config](https://togithub.com/googleapis/java-shared-config) | `1.0.0` -> `1.0.1` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-config/1.0.1/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-config/1.0.1/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-config/1.0.1/compatibility-slim/1.0.0)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-config/1.0.1/confidence-slim/1.0.0)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-shared-config ### [`v1.0.1`](https://togithub.com/googleapis/java-shared-config/blob/master/CHANGELOG.md#​101-httpswwwgithubcomgoogleapisjava-shared-configcomparev100v101-2021-08-18) [Compare Source](https://togithub.com/googleapis/java-shared-config/compare/v1.0.0...v1.0.1)
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-firestore). --- google-cloud-firestore-bom/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/google-cloud-firestore-bom/pom.xml b/google-cloud-firestore-bom/pom.xml index 77bf11b4d1..66e50d5faa 100644 --- a/google-cloud-firestore-bom/pom.xml +++ b/google-cloud-firestore-bom/pom.xml @@ -8,7 +8,7 @@ com.google.cloud google-cloud-shared-config - 1.0.0 + 1.0.1 Google Cloud Firestore BOM diff --git a/pom.xml b/pom.xml index 01d9cb7446..406b4f324f 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ com.google.cloud google-cloud-shared-config - 1.0.0 + 1.0.1 From 677ecae455143882442d6a7bc14b7879a9ece73d Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Wed, 18 Aug 2021 17:38:13 -0700 Subject: [PATCH 07/11] chore: regenerate README (#737) This PR was generated using Autosynth. :rainbow:
Log from Synthtool ``` 2021-08-19 00:22:40,641 synthtool [DEBUG] > Executing /root/.cache/synthtool/java-firestore/.github/readme/synth.py. On branch autosynth-readme nothing to commit, working tree clean 2021-08-19 00:22:41,756 synthtool [DEBUG] > Wrote metadata to .github/readme/synth.metadata/synth.metadata. ```
Full log will be available here: https://source.cloud.google.com/results/invocations/d112d78b-4662-4988-ad8b-3eaec22a1c2e/targets - [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.) --- .github/readme/synth.metadata/synth.metadata | 4 ++-- README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/readme/synth.metadata/synth.metadata b/.github/readme/synth.metadata/synth.metadata index 092311ecc0..8ff9075a5b 100644 --- a/.github/readme/synth.metadata/synth.metadata +++ b/.github/readme/synth.metadata/synth.metadata @@ -4,14 +4,14 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-firestore.git", - "sha": "00a2f28e04a399c12e8009349cad8c5f3a421a50" + "sha": "d71de050d71f84be1fb7fdd33100c4b85d8260d7" } }, { "git": { "name": "synthtool", "remote": "https://github.com/googleapis/synthtool.git", - "sha": "7e1f6da50524b5d98eb67adbf6dd0805df54233d" + "sha": "484b7ec7bdef3909589a83e3d763e7588cb8c37c" } } ] diff --git a/README.md b/README.md index ffcec69ae1..988077e4ea 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ If you are using Maven without BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies ```Groovy -implementation platform('com.google.cloud:libraries-bom:20.9.0') +implementation platform('com.google.cloud:libraries-bom:21.0.0') compile 'com.google.cloud:google-cloud-firestore' ``` From 71ecfece4144f2c1b9065c45643304509814aa35 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Thu, 19 Aug 2021 19:48:56 +0200 Subject: [PATCH 08/11] chore(deps): update dependency com.google.cloud:libraries-bom to v21 (#734) --- samples/snippets/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml index 1b57ea71ec..2f444573f3 100644 --- a/samples/snippets/pom.xml +++ b/samples/snippets/pom.xml @@ -33,7 +33,7 @@ com.google.cloud libraries-bom - 20.9.0 + 21.0.0 pom import From 514f4f2a7bd4993d47774be7f4322bde0b7ca4bd Mon Sep 17 00:00:00 2001 From: Yoshi Automation Bot Date: Thu, 19 Aug 2021 10:58:20 -0700 Subject: [PATCH 09/11] chore: regenerate README (#738) This PR was generated using Autosynth. :rainbow:
Log from Synthtool ``` 2021-08-19 17:51:08,918 synthtool [DEBUG] > Executing /root/.cache/synthtool/java-firestore/.github/readme/synth.py. On branch autosynth-readme nothing to commit, working tree clean 2021-08-19 17:51:10,105 synthtool [DEBUG] > Wrote metadata to .github/readme/synth.metadata/synth.metadata. ```
Full log will be available here: https://source.cloud.google.com/results/invocations/2f9be49b-6ea3-43e1-b39b-900cf624eda6/targets - [ ] To automatically regenerate this PR, check this box. (May take up to 24 hours.) --- .github/readme/synth.metadata/synth.metadata | 2 +- README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/readme/synth.metadata/synth.metadata b/.github/readme/synth.metadata/synth.metadata index 8ff9075a5b..811eba3a39 100644 --- a/.github/readme/synth.metadata/synth.metadata +++ b/.github/readme/synth.metadata/synth.metadata @@ -4,7 +4,7 @@ "git": { "name": ".", "remote": "https://github.com/googleapis/java-firestore.git", - "sha": "d71de050d71f84be1fb7fdd33100c4b85d8260d7" + "sha": "71ecfece4144f2c1b9065c45643304509814aa35" } }, { diff --git a/README.md b/README.md index 988077e4ea..06c8ebad74 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ If you are using Maven with [BOM][libraries-bom], add this to your pom.xml file com.google.cloud libraries-bom - 20.9.0 + 21.0.0 pom import From 99b5820f28c36ac83c44c6547764c7e41e4a8031 Mon Sep 17 00:00:00 2001 From: WhiteSource Renovate Date: Mon, 23 Aug 2021 22:50:39 +0200 Subject: [PATCH 10/11] deps: update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 (#739) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit [![WhiteSource Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [com.google.cloud:google-cloud-shared-dependencies](https://togithub.com/googleapis/java-shared-dependencies) | `2.0.1` -> `2.1.0` | [![age](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-dependencies/2.1.0/age-slim)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-dependencies/2.1.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-dependencies/2.1.0/compatibility-slim/2.0.1)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://badges.renovateapi.com/packages/maven/com.google.cloud:google-cloud-shared-dependencies/2.1.0/confidence-slim/2.0.1)](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes
googleapis/java-shared-dependencies ### [`v2.1.0`](https://togithub.com/googleapis/java-shared-dependencies/blob/master/CHANGELOG.md#​210-httpswwwgithubcomgoogleapisjava-shared-dependenciescompare201v210-2021-08-23) [Compare Source](https://togithub.com/googleapis/java-shared-dependencies/compare/v2.0.1...v2.1.0) ##### Dependencies - update dependency com.google.auth:google-auth-library-bom to v1.1.0 ([#​439](https://www.togithub.com/googleapis/java-shared-dependencies/issues/439)) ([ca52bd9](https://www.github.com/googleapis/java-shared-dependencies/commit/ca52bd9c099c96bf7b5a57aa85d39b58a610c875)) - update dependency com.google.cloud:google-cloud-core-bom to v2.1.0 ([#​444](https://www.togithub.com/googleapis/java-shared-dependencies/issues/444)) ([ff914c6](https://www.github.com/googleapis/java-shared-dependencies/commit/ff914c6de9e3e7fa6ba75591d3d5077c5421827d)) - update dependency com.google.code.gson:gson to v2.8.8 ([#​442](https://www.togithub.com/googleapis/java-shared-dependencies/issues/442)) ([79a093f](https://www.github.com/googleapis/java-shared-dependencies/commit/79a093f9ccea4d47cf8b678570a1c9699029a8b2)) - update dependency com.google.errorprone:error_prone_annotations to v2.9.0 ([#​441](https://www.togithub.com/googleapis/java-shared-dependencies/issues/441)) ([e644a4b](https://www.github.com/googleapis/java-shared-dependencies/commit/e644a4b504ab8aa5771f9be36861d1730ea9bcc9)) - update dependency io.grpc:grpc-bom to v1.40.0 ([#​438](https://www.togithub.com/googleapis/java-shared-dependencies/issues/438)) ([c3f8fb4](https://www.github.com/googleapis/java-shared-dependencies/commit/c3f8fb4408f5dc6c7f7dc0e14f0c24fa755433a5)) - update gax.version to v2.3.0 ([#​437](https://www.togithub.com/googleapis/java-shared-dependencies/issues/437)) ([e59aaad](https://www.github.com/googleapis/java-shared-dependencies/commit/e59aaadd76e40ab5ea31c3e812686a4ba0471a49)) ##### [2.0.1](https://www.github.com/googleapis/java-shared-dependencies/compare/2.0.0...v2.0.1) (2021-08-11) ##### Dependencies - update dependency com.google.api:api-common to v2.0.1 ([#​431](https://www.togithub.com/googleapis/java-shared-dependencies/issues/431)) ([b1a52c8](https://www.github.com/googleapis/java-shared-dependencies/commit/b1a52c83e19be7be80086f2010e928171b046f62)) - update gax.version to v2.1.0 ([#​432](https://www.togithub.com/googleapis/java-shared-dependencies/issues/432)) ([7f53006](https://www.github.com/googleapis/java-shared-dependencies/commit/7f53006d021e839f52325a87d7c4715eff88818d)) - update google.core.version to v2.0.4 ([#​430](https://www.togithub.com/googleapis/java-shared-dependencies/issues/430)) ([d0465ad](https://www.github.com/googleapis/java-shared-dependencies/commit/d0465ad3a79993d4e854078ea992e53ab9add07f)) - update google.core.version to v2.0.5 ([#​434](https://www.togithub.com/googleapis/java-shared-dependencies/issues/434)) ([af00753](https://www.github.com/googleapis/java-shared-dependencies/commit/af0075390034cba5cefede8260ab03f728d525a8))
--- ### Configuration 📅 **Schedule**: At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] If you want to rebase/retry this PR, check this box. --- This PR has been generated by [WhiteSource Renovate](https://renovate.whitesourcesoftware.com). View repository job log [here](https://app.renovatebot.com/dashboard#github/googleapis/java-firestore). --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 406b4f324f..d983efab86 100644 --- a/pom.xml +++ b/pom.xml @@ -176,7 +176,7 @@ com.google.cloud google-cloud-shared-dependencies - 2.0.1 + 2.1.0 pom import From 3eaeb8c31d1c441aa59204e1f497042fc7115a10 Mon Sep 17 00:00:00 2001 From: "release-please[bot]" <55107282+release-please[bot]@users.noreply.github.com> Date: Mon, 23 Aug 2021 21:20:32 +0000 Subject: [PATCH 11/11] chore: release 3.0.2 (#740) :robot: I have created a release \*beep\* \*boop\* --- ### [3.0.2](https://www.github.com/googleapis/java-firestore/compare/v3.0.1...v3.0.2) (2021-08-23) ### Dependencies * update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 ([#739](https://www.github.com/googleapis/java-firestore/issues/739)) ([99b5820](https://www.github.com/googleapis/java-firestore/commit/99b5820f28c36ac83c44c6547764c7e41e4a8031)) --- This PR was generated with [Release Please](https://github.com/googleapis/release-please). See [documentation](https://github.com/googleapis/release-please#release-please). --- CHANGELOG.md | 7 +++++++ google-cloud-firestore-admin/pom.xml | 4 ++-- google-cloud-firestore-bom/pom.xml | 16 ++++++++-------- google-cloud-firestore/pom.xml | 4 ++-- grpc-google-cloud-firestore-admin-v1/pom.xml | 4 ++-- grpc-google-cloud-firestore-v1/pom.xml | 4 ++-- pom.xml | 12 ++++++------ proto-google-cloud-firestore-admin-v1/pom.xml | 4 ++-- proto-google-cloud-firestore-bundle-v1/pom.xml | 4 ++-- proto-google-cloud-firestore-v1/pom.xml | 4 ++-- versions.txt | 16 ++++++++-------- 11 files changed, 43 insertions(+), 36 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbd5a47802..6a85834cb3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +### [3.0.2](https://www.github.com/googleapis/java-firestore/compare/v3.0.1...v3.0.2) (2021-08-23) + + +### Dependencies + +* update dependency com.google.cloud:google-cloud-shared-dependencies to v2.1.0 ([#739](https://www.github.com/googleapis/java-firestore/issues/739)) ([99b5820](https://www.github.com/googleapis/java-firestore/commit/99b5820f28c36ac83c44c6547764c7e41e4a8031)) + ### [3.0.1](https://www.github.com/googleapis/java-firestore/compare/v3.0.0...v3.0.1) (2021-08-11) diff --git a/google-cloud-firestore-admin/pom.xml b/google-cloud-firestore-admin/pom.xml index feee2470b1..a242a8696d 100644 --- a/google-cloud-firestore-admin/pom.xml +++ b/google-cloud-firestore-admin/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 google-cloud-firestore-admin - 3.0.2-SNAPSHOT + 3.0.2 jar Google Cloud Firestore Admin Client https://github.com/googleapis/java-firestore @@ -14,7 +14,7 @@ com.google.cloud google-cloud-firestore-parent - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/google-cloud-firestore-bom/pom.xml b/google-cloud-firestore-bom/pom.xml index 66e50d5faa..e12d3a1e52 100644 --- a/google-cloud-firestore-bom/pom.xml +++ b/google-cloud-firestore-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.cloud google-cloud-firestore-bom - 3.0.2-SNAPSHOT + 3.0.2 pom com.google.cloud @@ -52,37 +52,37 @@ com.google.cloud google-cloud-firestore - 3.0.2-SNAPSHOT + 3.0.2 com.google.api.grpc proto-google-cloud-firestore-admin-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.cloud proto-google-cloud-firestore-bundle-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.api.grpc proto-google-cloud-firestore-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.api.grpc grpc-google-cloud-firestore-admin-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.api.grpc grpc-google-cloud-firestore-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.cloud google-cloud-firestore-admin - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/google-cloud-firestore/pom.xml b/google-cloud-firestore/pom.xml index 4e33dc4657..48d24b6058 100644 --- a/google-cloud-firestore/pom.xml +++ b/google-cloud-firestore/pom.xml @@ -4,7 +4,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 google-cloud-firestore - 3.0.2-SNAPSHOT + 3.0.2 jar Google Cloud Firestore https://github.com/googleapis/java-firestore @@ -14,7 +14,7 @@ com.google.cloud google-cloud-firestore-parent - 3.0.2-SNAPSHOT + 3.0.2 google-cloud-firestore diff --git a/grpc-google-cloud-firestore-admin-v1/pom.xml b/grpc-google-cloud-firestore-admin-v1/pom.xml index 272953a86b..a7a52ed6a3 100644 --- a/grpc-google-cloud-firestore-admin-v1/pom.xml +++ b/grpc-google-cloud-firestore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-firestore-admin-v1 - 3.0.2-SNAPSHOT + 3.0.2 grpc-google-cloud-firestore-admin-v1 GRPC library for grpc-google-cloud-firestore-admin-v1 com.google.cloud google-cloud-firestore-parent - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/grpc-google-cloud-firestore-v1/pom.xml b/grpc-google-cloud-firestore-v1/pom.xml index c2913a49d0..3a7c9e7a2c 100644 --- a/grpc-google-cloud-firestore-v1/pom.xml +++ b/grpc-google-cloud-firestore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc grpc-google-cloud-firestore-v1 - 3.0.2-SNAPSHOT + 3.0.2 grpc-google-cloud-firestore-v1 GRPC library for grpc-google-cloud-firestore-v1 com.google.cloud google-cloud-firestore-parent - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/pom.xml b/pom.xml index d983efab86..13c7c107fc 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ com.google.cloud google-cloud-firestore-parent pom - 3.0.2-SNAPSHOT + 3.0.2 Google Cloud Firestore Parent https://github.com/googleapis/java-firestore @@ -150,27 +150,27 @@ com.google.api.grpc proto-google-cloud-firestore-admin-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.cloud proto-google-cloud-firestore-bundle-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.api.grpc proto-google-cloud-firestore-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.api.grpc grpc-google-cloud-firestore-admin-v1 - 3.0.2-SNAPSHOT + 3.0.2 com.google.api.grpc grpc-google-cloud-firestore-v1 - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/proto-google-cloud-firestore-admin-v1/pom.xml b/proto-google-cloud-firestore-admin-v1/pom.xml index 875536481e..856d960c2f 100644 --- a/proto-google-cloud-firestore-admin-v1/pom.xml +++ b/proto-google-cloud-firestore-admin-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-firestore-admin-v1 - 3.0.2-SNAPSHOT + 3.0.2 proto-google-cloud-firestore-admin-v1 PROTO library for proto-google-cloud-firestore-admin-v1 com.google.cloud google-cloud-firestore-parent - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/proto-google-cloud-firestore-bundle-v1/pom.xml b/proto-google-cloud-firestore-bundle-v1/pom.xml index f5814e66b3..c38a935acf 100644 --- a/proto-google-cloud-firestore-bundle-v1/pom.xml +++ b/proto-google-cloud-firestore-bundle-v1/pom.xml @@ -5,14 +5,14 @@ 4.0.0 proto-google-cloud-firestore-bundle-v1 - 3.0.2-SNAPSHOT + 3.0.2 proto-google-cloud-firestore-bundle-v1 PROTO library for proto-google-cloud-firestore-bundle-v1 com.google.cloud google-cloud-firestore-parent - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/proto-google-cloud-firestore-v1/pom.xml b/proto-google-cloud-firestore-v1/pom.xml index 82b61e5eca..0bff757efc 100644 --- a/proto-google-cloud-firestore-v1/pom.xml +++ b/proto-google-cloud-firestore-v1/pom.xml @@ -4,13 +4,13 @@ 4.0.0 com.google.api.grpc proto-google-cloud-firestore-v1 - 3.0.2-SNAPSHOT + 3.0.2 proto-google-cloud-firestore-v1 PROTO library for proto-google-cloud-firestore-v1 com.google.cloud google-cloud-firestore-parent - 3.0.2-SNAPSHOT + 3.0.2 diff --git a/versions.txt b/versions.txt index 4a5c481479..2589542daa 100644 --- a/versions.txt +++ b/versions.txt @@ -1,11 +1,11 @@ # Format: # module:released-version:current-version -google-cloud-firestore:3.0.1:3.0.2-SNAPSHOT -google-cloud-firestore-admin:3.0.1:3.0.2-SNAPSHOT -google-cloud-firestore-bom:3.0.1:3.0.2-SNAPSHOT -google-cloud-firestore-parent:3.0.1:3.0.2-SNAPSHOT -grpc-google-cloud-firestore-admin-v1:3.0.1:3.0.2-SNAPSHOT -grpc-google-cloud-firestore-v1:3.0.1:3.0.2-SNAPSHOT -proto-google-cloud-firestore-admin-v1:3.0.1:3.0.2-SNAPSHOT -proto-google-cloud-firestore-v1:3.0.1:3.0.2-SNAPSHOT +google-cloud-firestore:3.0.2:3.0.2 +google-cloud-firestore-admin:3.0.2:3.0.2 +google-cloud-firestore-bom:3.0.2:3.0.2 +google-cloud-firestore-parent:3.0.2:3.0.2 +grpc-google-cloud-firestore-admin-v1:3.0.2:3.0.2 +grpc-google-cloud-firestore-v1:3.0.2:3.0.2 +proto-google-cloud-firestore-admin-v1:3.0.2:3.0.2 +proto-google-cloud-firestore-v1:3.0.2:3.0.2