Skip to content

Commit 5ac2eae

Browse files
authored
Merge pull request #365 from SentryMan/default-instance
return default instance on unchanged builder
2 parents 20e2004 + e09d3d7 commit 5ac2eae

File tree

2 files changed

+68
-14
lines changed

2 files changed

+68
-14
lines changed

jsonb/src/main/java/io/avaje/jsonb/core/DJsonb.java

+45-14
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,38 @@
11
package io.avaje.jsonb.core;
22

3-
import io.avaje.json.JsonAdapter;
4-
import io.avaje.json.JsonReader;
5-
import io.avaje.json.JsonWriter;
6-
import io.avaje.json.PropertyNames;
7-
import io.avaje.json.stream.*;
8-
import io.avaje.jsonb.*;
9-
import io.avaje.jsonb.AdapterFactory;
10-
import io.avaje.jsonb.spi.*;
3+
import static io.avaje.json.stream.BufferRecycleStrategy.HYBRID_POOL;
4+
import static io.avaje.jsonb.core.Util.canonicalize;
5+
import static io.avaje.jsonb.core.Util.canonicalizeClass;
6+
import static io.avaje.jsonb.core.Util.removeSubtypeWildcard;
7+
import static java.util.Objects.requireNonNull;
118

129
import java.io.InputStream;
1310
import java.io.OutputStream;
1411
import java.io.Reader;
1512
import java.io.Writer;
1613
import java.lang.reflect.Type;
17-
import java.util.*;
14+
import java.util.ArrayList;
15+
import java.util.List;
16+
import java.util.Map;
17+
import java.util.Objects;
1818
import java.util.concurrent.ConcurrentHashMap;
1919
import java.util.function.Supplier;
2020

21-
import static io.avaje.jsonb.core.Util.*;
22-
import static java.util.Objects.requireNonNull;
21+
import io.avaje.json.JsonAdapter;
22+
import io.avaje.json.JsonReader;
23+
import io.avaje.json.JsonWriter;
24+
import io.avaje.json.PropertyNames;
25+
import io.avaje.json.stream.BufferRecycleStrategy;
26+
import io.avaje.json.stream.BufferedJsonWriter;
27+
import io.avaje.json.stream.BytesJsonWriter;
28+
import io.avaje.json.stream.JsonOutput;
29+
import io.avaje.json.stream.JsonStream;
30+
import io.avaje.jsonb.AdapterFactory;
31+
import io.avaje.jsonb.JsonType;
32+
import io.avaje.jsonb.JsonView;
33+
import io.avaje.jsonb.Jsonb;
34+
import io.avaje.jsonb.spi.GeneratedComponent;
35+
import io.avaje.jsonb.spi.JsonbComponent;
2336

2437
/**
2538
* Default implementation of Jsonb.
@@ -245,6 +258,8 @@ public int hashCode() {
245258
*/
246259
static final class DBuilder implements Jsonb.Builder {
247260

261+
private static final Jsonb DEFAULT = Jsonb.builder().build();
262+
248263
private final List<AdapterFactory> factories = new ArrayList<>();
249264
private boolean failOnUnknown;
250265
private boolean failOnNullPrimitives;
@@ -253,7 +268,7 @@ static final class DBuilder implements Jsonb.Builder {
253268
private boolean serializeNulls;
254269
private boolean serializeEmpty = true;
255270
private JsonStream adapter;
256-
private BufferRecycleStrategy strategy = BufferRecycleStrategy.HYBRID_POOL;
271+
private BufferRecycleStrategy strategy = HYBRID_POOL;
257272

258273
@Override
259274
public Builder serializeNulls(boolean serializeNulls) {
@@ -341,12 +356,28 @@ private void registerComponents() {
341356
}
342357

343358
@Override
344-
public DJsonb build() {
359+
public Jsonb build() {
360+
if (!hasCustomizations()) {
361+
return DEFAULT;
362+
}
345363
registerComponents();
346364
return new DJsonb(adapter, factories, serializeNulls, serializeEmpty, failOnUnknown, failOnNullPrimitives, mathTypesAsString, calendarAsString, strategy);
347365
}
348366

349-
static <T> AdapterFactory newAdapterFactory(Type type, JsonAdapter<T> jsonAdapter) {
367+
private boolean hasCustomizations() {
368+
return DEFAULT == null
369+
|| adapter != null
370+
|| !factories.isEmpty()
371+
|| failOnUnknown
372+
|| failOnNullPrimitives
373+
|| mathTypesAsString
374+
|| calendarAsString
375+
|| serializeNulls
376+
|| !serializeEmpty
377+
|| HYBRID_POOL != strategy;
378+
}
379+
380+
static <T> AdapterFactory newAdapterFactory(Type type, JsonAdapter<T> jsonAdapter) {
350381
requireNonNull(type);
351382
requireNonNull(jsonAdapter);
352383
return (targetType, jsonb) -> simpleMatch(type, targetType) ? jsonAdapter : null;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package io.avaje.jsonb.core;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import org.junit.jupiter.api.Test;
6+
7+
import io.avaje.jsonb.Jsonb;
8+
9+
class TestBuilder {
10+
11+
@Test
12+
void defaultBuilderReturnSameInstance() {
13+
14+
assertThat(Jsonb.builder().build()).isSameAs(Jsonb.builder().build());
15+
}
16+
17+
@Test
18+
void changedBuilderNotSame() {
19+
20+
assertThat(Jsonb.builder().mathTypesAsString(true).build())
21+
.isNotSameAs(Jsonb.builder().build());
22+
}
23+
}

0 commit comments

Comments
 (0)