From eea02ebf0260f47215a0f767adffb14665893352 Mon Sep 17 00:00:00 2001 From: Sebastian Schmidt Date: Fri, 20 Apr 2018 14:31:38 +0100 Subject: [PATCH] Allowing non-POJO Firestore classes to be subclassed for mocking. --- .../com/google/cloud/firestore/CollectionReference.java | 8 ++++++-- .../com/google/cloud/firestore/DocumentReference.java | 6 +++++- .../java/com/google/cloud/firestore/DocumentSnapshot.java | 4 ++++ .../com/google/cloud/firestore/QueryDocumentSnapshot.java | 6 +++++- 4 files changed, 20 insertions(+), 4 deletions(-) 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 cf36d9c51571..fd41c86851c9 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 @@ -26,9 +26,13 @@ /** * A CollectionReference can be used for adding documents, getting document references, and querying - * for documents (using the methods inherited from Query) + * for documents (using the methods inherited from Query). + * + *

Subclassing Note: Firestore classes are not meant to be subclassed except for use in + * test mocks. Subclassing is not supported in production code and new SDK releases may break code + * that does so. */ -public final class CollectionReference extends Query { +public class CollectionReference extends Query { /** * Creates a CollectionReference from a complete collection path. 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 db57a9a024cb..152cef0e7571 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 @@ -36,8 +36,12 @@ * write, read, or listen to the location. There may or may not exist a document at the referenced * location. A DocumentReference can also be used to create a CollectionReference to a * subcollection. + * + *

Subclassing Note: Firestore classes are not meant to be subclassed except for use in + * test mocks. Subclassing is not supported in production code and new SDK releases may break code + * that does so. */ -public final class DocumentReference { +public class DocumentReference { private final ResourcePath path; private final FirestoreImpl firestore; diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java index a66f4466a0c0..6382464fa65d 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/DocumentSnapshot.java @@ -41,6 +41,10 @@ *

If the DocumentSnapshot points to a non-existing document, getData() and its corresponding * methods will return null. You can always explicitly check for a document's existence by calling * {@link #exists()}. + * + *

Subclassing Note: Firestore classes are not meant to be subclassed except for use in + * test mocks. Subclassing is not supported in production code and new SDK releases may break code + * that does so. */ public class DocumentSnapshot { diff --git a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/QueryDocumentSnapshot.java b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/QueryDocumentSnapshot.java index 2b6955da0db8..3b2809fb275b 100644 --- a/google-cloud-firestore/src/main/java/com/google/cloud/firestore/QueryDocumentSnapshot.java +++ b/google-cloud-firestore/src/main/java/com/google/cloud/firestore/QueryDocumentSnapshot.java @@ -32,8 +32,12 @@ *

QueryDocumentSnapshot offers the same API surface as {@link DocumentSnapshot}. Since query * results contain only existing documents, the {@link #exists()} method will always return true and * {@code getData()} will never be null. + * + *

Subclassing Note: Firestore classes are not meant to be subclassed except for use in + * test mocks. Subclassing is not supported in production code and new SDK releases may break code + * that does so. */ -public final class QueryDocumentSnapshot extends DocumentSnapshot { +public class QueryDocumentSnapshot extends DocumentSnapshot { private QueryDocumentSnapshot( FirestoreImpl firestore, DocumentReference docRef,