Skip to content

Commit c6b9d88

Browse files
Merge branch 'master' into mrschmidt/rewritefieldvalue
2 parents d644fd6 + 1548002 commit c6b9d88

File tree

107 files changed

+2335
-424
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+2335
-424
lines changed

encoders/firebase-encoders-json/api.txt

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
package com.google.firebase.encoders {
33

44
public interface DataEncoder {
5-
method public void encode(@NonNull Object, @NonNull java.io.Writer) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
6-
method @NonNull public String encode(@NonNull Object) throws com.google.firebase.encoders.EncodingException;
5+
method public void encode(@NonNull Object, @NonNull java.io.Writer) throws java.io.IOException;
6+
method @NonNull public String encode(@NonNull Object);
77
}
88

9-
public final class EncodingException extends java.lang.Exception {
9+
public final class EncodingException extends java.lang.RuntimeException {
1010
ctor public EncodingException(@NonNull String);
1111
ctor public EncodingException(@NonNull String, @NonNull Exception);
1212
}
@@ -15,25 +15,25 @@ package com.google.firebase.encoders {
1515
}
1616

1717
public interface ObjectEncoderContext {
18-
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, @Nullable Object) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
19-
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, double) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
20-
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, int) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
21-
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, long) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
22-
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, boolean) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
23-
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext inline(@Nullable Object) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
18+
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, @Nullable Object) throws java.io.IOException;
19+
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, double) throws java.io.IOException;
20+
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, int) throws java.io.IOException;
21+
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, long) throws java.io.IOException;
22+
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext add(@NonNull String, boolean) throws java.io.IOException;
23+
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext inline(@Nullable Object) throws java.io.IOException;
2424
method @NonNull public com.google.firebase.encoders.ObjectEncoderContext nested(@NonNull String) throws java.io.IOException;
2525
}
2626

2727
public interface ValueEncoder<T> {
2828
}
2929

3030
public interface ValueEncoderContext {
31-
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(@Nullable String) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
32-
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(double) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
33-
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(int) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
34-
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(long) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
35-
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(boolean) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
36-
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(@NonNull byte[]) throws com.google.firebase.encoders.EncodingException, java.io.IOException;
31+
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(@Nullable String) throws java.io.IOException;
32+
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(double) throws java.io.IOException;
33+
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(int) throws java.io.IOException;
34+
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(long) throws java.io.IOException;
35+
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(boolean) throws java.io.IOException;
36+
method @NonNull public com.google.firebase.encoders.ValueEncoderContext add(@NonNull byte[]) throws java.io.IOException;
3737
}
3838

3939
}
@@ -72,6 +72,7 @@ package com.google.firebase.encoders.json {
7272
ctor public JsonDataEncoderBuilder();
7373
method @NonNull public com.google.firebase.encoders.DataEncoder build();
7474
method @NonNull public com.google.firebase.encoders.json.JsonDataEncoderBuilder configureWith(@NonNull com.google.firebase.encoders.config.Configurator);
75+
method @NonNull public com.google.firebase.encoders.json.JsonDataEncoderBuilder ignoreNullValues(boolean);
7576
method @NonNull public <T> com.google.firebase.encoders.json.JsonDataEncoderBuilder registerEncoder(@NonNull Class<T>, @NonNull com.google.firebase.encoders.ObjectEncoder<? super T>);
7677
method @NonNull public <T> com.google.firebase.encoders.json.JsonDataEncoderBuilder registerEncoder(@NonNull Class<T>, @NonNull com.google.firebase.encoders.ValueEncoder<? super T>);
7778
method @NonNull public com.google.firebase.encoders.json.JsonDataEncoderBuilder registerFallbackEncoder(@NonNull com.google.firebase.encoders.ObjectEncoder<java.lang.Object>);

encoders/firebase-encoders-json/gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,4 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
version=16.0.0
15+
version=16.1.0

encoders/firebase-encoders-json/src/json/java/com/google/firebase/encoders/json/JsonDataEncoderBuilder.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535

3636
public final class JsonDataEncoderBuilder implements EncoderConfig<JsonDataEncoderBuilder> {
3737

38-
private final ObjectEncoder<Object> DEFAULT_FALLBACK_ENCODER =
38+
private static final ObjectEncoder<Object> DEFAULT_FALLBACK_ENCODER =
3939
(o, ctx) -> {
4040
throw new EncodingException(
4141
"Couldn't find encoder for type " + o.getClass().getCanonicalName());
@@ -44,6 +44,7 @@ public final class JsonDataEncoderBuilder implements EncoderConfig<JsonDataEncod
4444
private final Map<Class<?>, ObjectEncoder<?>> objectEncoders = new HashMap<>();
4545
private final Map<Class<?>, ValueEncoder<?>> valueEncoders = new HashMap<>();
4646
private ObjectEncoder<Object> fallbackEncoder = DEFAULT_FALLBACK_ENCODER;
47+
private boolean ignoreNullValues = false;
4748

4849
private static final class TimestampEncoder implements ValueEncoder<Date> {
4950
private static final DateFormat rfc339;
@@ -54,8 +55,7 @@ private static final class TimestampEncoder implements ValueEncoder<Date> {
5455
}
5556

5657
@Override
57-
public void encode(@NonNull Date o, @NonNull ValueEncoderContext ctx)
58-
throws EncodingException, IOException {
58+
public void encode(@NonNull Date o, @NonNull ValueEncoderContext ctx) throws IOException {
5959
ctx.add(rfc339.format(o));
6060
}
6161
}
@@ -104,21 +104,26 @@ public JsonDataEncoderBuilder configureWith(@NonNull Configurator config) {
104104
return this;
105105
}
106106

107+
@NonNull
108+
public JsonDataEncoderBuilder ignoreNullValues(boolean ignore) {
109+
this.ignoreNullValues = ignore;
110+
return this;
111+
}
112+
107113
@NonNull
108114
public DataEncoder build() {
109115
return new DataEncoder() {
110116
@Override
111-
public void encode(@NonNull Object o, @NonNull Writer writer)
112-
throws IOException, EncodingException {
117+
public void encode(@NonNull Object o, @NonNull Writer writer) throws IOException {
113118
JsonValueObjectEncoderContext encoderContext =
114119
new JsonValueObjectEncoderContext(
115-
writer, objectEncoders, valueEncoders, fallbackEncoder);
120+
writer, objectEncoders, valueEncoders, fallbackEncoder, ignoreNullValues);
116121
encoderContext.add(o, false);
117122
encoderContext.close();
118123
}
119124

120125
@Override
121-
public String encode(@NonNull Object o) throws EncodingException {
126+
public String encode(@NonNull Object o) {
122127
StringWriter stringWriter = new StringWriter();
123128
try {
124129
encode(o, stringWriter);

encoders/firebase-encoders-json/src/json/java/com/google/firebase/encoders/json/JsonValueObjectEncoderContext.java

Lines changed: 43 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -37,77 +37,74 @@ final class JsonValueObjectEncoderContext implements ObjectEncoderContext, Value
3737
private final Map<Class<?>, ObjectEncoder<?>> objectEncoders;
3838
private final Map<Class<?>, ValueEncoder<?>> valueEncoders;
3939
private final ObjectEncoder<Object> fallbackEncoder;
40+
private final boolean ignoreNullValues;
4041

4142
JsonValueObjectEncoderContext(
4243
@NonNull Writer writer,
4344
@NonNull Map<Class<?>, ObjectEncoder<?>> objectEncoders,
4445
@NonNull Map<Class<?>, ValueEncoder<?>> valueEncoders,
45-
ObjectEncoder<Object> fallbackEncoder) {
46+
ObjectEncoder<Object> fallbackEncoder,
47+
boolean ignoreNullValues) {
4648
this.jsonWriter = new JsonWriter(writer);
4749
this.objectEncoders = objectEncoders;
4850
this.valueEncoders = valueEncoders;
4951
this.fallbackEncoder = fallbackEncoder;
52+
this.ignoreNullValues = ignoreNullValues;
5053
}
5154

5255
private JsonValueObjectEncoderContext(JsonValueObjectEncoderContext anotherContext) {
5356
this.jsonWriter = anotherContext.jsonWriter;
5457
this.objectEncoders = anotherContext.objectEncoders;
5558
this.valueEncoders = anotherContext.valueEncoders;
5659
this.fallbackEncoder = anotherContext.fallbackEncoder;
60+
this.ignoreNullValues = anotherContext.ignoreNullValues;
5761
}
5862

5963
@NonNull
6064
@Override
6165
public JsonValueObjectEncoderContext add(@NonNull String name, @Nullable Object o)
62-
throws IOException, EncodingException {
63-
maybeUnNest();
64-
jsonWriter.name(name);
65-
if (o == null) {
66-
jsonWriter.nullValue();
67-
return this;
66+
throws IOException {
67+
if (ignoreNullValues) {
68+
return internalAddIgnoreNullValues(name, o);
6869
}
69-
return add(o, false);
70+
return internalAdd(name, o);
7071
}
7172

7273
@NonNull
7374
@Override
74-
public JsonValueObjectEncoderContext add(@NonNull String name, double value)
75-
throws IOException, EncodingException {
75+
public JsonValueObjectEncoderContext add(@NonNull String name, double value) throws IOException {
7676
maybeUnNest();
7777
jsonWriter.name(name);
7878
return add(value);
7979
}
8080

8181
@NonNull
8282
@Override
83-
public JsonValueObjectEncoderContext add(@NonNull String name, int value)
84-
throws IOException, EncodingException {
83+
public JsonValueObjectEncoderContext add(@NonNull String name, int value) throws IOException {
8584
maybeUnNest();
8685
jsonWriter.name(name);
8786
return add(value);
8887
}
8988

9089
@NonNull
9190
@Override
92-
public JsonValueObjectEncoderContext add(@NonNull String name, long value)
93-
throws IOException, EncodingException {
91+
public JsonValueObjectEncoderContext add(@NonNull String name, long value) throws IOException {
9492
maybeUnNest();
9593
jsonWriter.name(name);
9694
return add(value);
9795
}
9896

9997
@NonNull
10098
@Override
101-
public JsonValueObjectEncoderContext add(@NonNull String name, boolean value)
102-
throws IOException, EncodingException {
99+
public JsonValueObjectEncoderContext add(@NonNull String name, boolean value) throws IOException {
103100
maybeUnNest();
104101
jsonWriter.name(name);
105102
return add(value);
106103
}
107104

108105
@NonNull
109106
@Override
110-
public ObjectEncoderContext inline(@Nullable Object value) throws IOException, EncodingException {
107+
public ObjectEncoderContext inline(@Nullable Object value) throws IOException {
111108
return add(value, true);
112109
}
113110

@@ -123,49 +120,47 @@ public ObjectEncoderContext nested(@NonNull String name) throws IOException {
123120

124121
@NonNull
125122
@Override
126-
public JsonValueObjectEncoderContext add(@Nullable String value)
127-
throws IOException, EncodingException {
123+
public JsonValueObjectEncoderContext add(@Nullable String value) throws IOException {
128124
maybeUnNest();
129125
jsonWriter.value(value);
130126
return this;
131127
}
132128

133129
@NonNull
134130
@Override
135-
public JsonValueObjectEncoderContext add(double value) throws IOException, EncodingException {
131+
public JsonValueObjectEncoderContext add(double value) throws IOException {
136132
maybeUnNest();
137133
jsonWriter.value(value);
138134
return this;
139135
}
140136

141137
@NonNull
142138
@Override
143-
public JsonValueObjectEncoderContext add(int value) throws IOException, EncodingException {
139+
public JsonValueObjectEncoderContext add(int value) throws IOException {
144140
maybeUnNest();
145141
jsonWriter.value(value);
146142
return this;
147143
}
148144

149145
@NonNull
150146
@Override
151-
public JsonValueObjectEncoderContext add(long value) throws IOException, EncodingException {
147+
public JsonValueObjectEncoderContext add(long value) throws IOException {
152148
maybeUnNest();
153149
jsonWriter.value(value);
154150
return this;
155151
}
156152

157153
@NonNull
158154
@Override
159-
public JsonValueObjectEncoderContext add(boolean value) throws IOException, EncodingException {
155+
public JsonValueObjectEncoderContext add(boolean value) throws IOException {
160156
maybeUnNest();
161157
jsonWriter.value(value);
162158
return this;
163159
}
164160

165161
@NonNull
166162
@Override
167-
public JsonValueObjectEncoderContext add(@Nullable byte[] bytes)
168-
throws IOException, EncodingException {
163+
public JsonValueObjectEncoderContext add(@Nullable byte[] bytes) throws IOException {
169164
maybeUnNest();
170165
if (bytes == null) {
171166
jsonWriter.nullValue();
@@ -176,8 +171,7 @@ public JsonValueObjectEncoderContext add(@Nullable byte[] bytes)
176171
}
177172

178173
@NonNull
179-
JsonValueObjectEncoderContext add(@Nullable Object o, boolean inline)
180-
throws IOException, EncodingException {
174+
JsonValueObjectEncoderContext add(@Nullable Object o, boolean inline) throws IOException {
181175
if (inline && cannotBeInline(o)) {
182176
throw new EncodingException(
183177
String.format("%s cannot be encoded inline", o == null ? null : o.getClass()));
@@ -278,7 +272,7 @@ JsonValueObjectEncoderContext add(@Nullable Object o, boolean inline)
278272
}
279273

280274
JsonValueObjectEncoderContext doEncode(ObjectEncoder<Object> encoder, Object o, boolean inline)
281-
throws IOException, EncodingException {
275+
throws IOException {
282276
if (!inline) jsonWriter.beginObject();
283277
encoder.encode(o, this);
284278
if (!inline) jsonWriter.endObject();
@@ -311,4 +305,25 @@ private void maybeUnNest() throws IOException {
311305
jsonWriter.endObject();
312306
}
313307
}
308+
309+
private JsonValueObjectEncoderContext internalAdd(@NonNull String name, @Nullable Object o)
310+
throws IOException, EncodingException {
311+
maybeUnNest();
312+
jsonWriter.name(name);
313+
if (o == null) {
314+
jsonWriter.nullValue();
315+
return this;
316+
}
317+
return add(o, false);
318+
}
319+
320+
private JsonValueObjectEncoderContext internalAddIgnoreNullValues(
321+
@NonNull String name, @Nullable Object o) throws IOException, EncodingException {
322+
if (o == null) {
323+
return this;
324+
}
325+
maybeUnNest();
326+
jsonWriter.name(name);
327+
return add(o, false);
328+
}
314329
}

encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/DataEncoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@
2828
public interface DataEncoder {
2929

3030
/** Encodes {@code obj} into {@code writer}. */
31-
void encode(@NonNull Object obj, @NonNull Writer writer) throws IOException, EncodingException;
31+
void encode(@NonNull Object obj, @NonNull Writer writer) throws IOException;
3232

3333
/** Returns the string-encoded representation of {@code obj}. */
3434
@NonNull
35-
String encode(@NonNull Object obj) throws EncodingException;
35+
String encode(@NonNull Object obj);
3636
}

encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/Encoder.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,5 @@
2525
interface Encoder<TValue, TContext> {
2626

2727
/** Encode {@code obj} using {@code TContext}. */
28-
void encode(@NonNull TValue obj, @NonNull TContext context) throws EncodingException, IOException;
28+
void encode(@NonNull TValue obj, @NonNull TContext context) throws IOException;
2929
}

encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/EncodingException.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
* An exception thrown when an {@code Encoder} ends up in an invalid state, or if the provided
2121
* object is in an state that cannot be encoded.
2222
*/
23-
public final class EncodingException extends Exception {
23+
public final class EncodingException extends RuntimeException {
2424

2525
/** Creates a {@code EncodingException} with the given message. */
2626
public EncodingException(@NonNull String message) {

encoders/firebase-encoders-json/src/main/java/com/google/firebase/encoders/ObjectEncoderContext.java

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,26 +48,23 @@ public interface ObjectEncoderContext {
4848
* by the encoders will be propagated.
4949
*/
5050
@NonNull
51-
ObjectEncoderContext add(@NonNull String name, @Nullable Object obj)
52-
throws IOException, EncodingException;
51+
ObjectEncoderContext add(@NonNull String name, @Nullable Object obj) throws IOException;
5352

5453
/** Add an entry with {@code name} mapped to the encoded primitive type of {@code value}. */
5554
@NonNull
56-
ObjectEncoderContext add(@NonNull String name, double value)
57-
throws IOException, EncodingException;
55+
ObjectEncoderContext add(@NonNull String name, double value) throws IOException;
5856

5957
/** Add an entry with {@code name} mapped to the encoded primitive type of {@code value}. */
6058
@NonNull
61-
ObjectEncoderContext add(@NonNull String name, int value) throws IOException, EncodingException;
59+
ObjectEncoderContext add(@NonNull String name, int value) throws IOException;
6260

6361
/** Add an entry with {@code name} mapped to the encoded primitive type of {@code value}. */
6462
@NonNull
65-
ObjectEncoderContext add(@NonNull String name, long value) throws IOException, EncodingException;
63+
ObjectEncoderContext add(@NonNull String name, long value) throws IOException;
6664

6765
/** Add an entry with {@code name} mapped to the encoded primitive type of {@code value}. */
6866
@NonNull
69-
ObjectEncoderContext add(@NonNull String name, boolean value)
70-
throws IOException, EncodingException;
67+
ObjectEncoderContext add(@NonNull String name, boolean value) throws IOException;
7168

7269
/**
7370
* Encodes a given object inline in current context.
@@ -87,7 +84,7 @@ ObjectEncoderContext add(@NonNull String name, boolean value)
8784
* }</pre>
8885
*/
8986
@NonNull
90-
ObjectEncoderContext inline(@Nullable Object value) throws IOException, EncodingException;
87+
ObjectEncoderContext inline(@Nullable Object value) throws IOException;
9188

9289
/**
9390
* Begin a nested JSON object.

0 commit comments

Comments
 (0)