Skip to content

Commit 2bebe7a

Browse files
committed
move indention_step/encoding_mode/decoding_mode into config
1 parent 7a09d0c commit 2bebe7a

20 files changed

Lines changed: 605 additions & 566 deletions

src/main/java/com/jsoniter/Codegen.java

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,6 @@ class Codegen {
1515
// only read/write when generating code with synchronized protection
1616
private final static Set<String> generatedClassNames = new HashSet<String>();
1717
static CodegenAccess.StaticCodegenTarget isDoingStaticCodegen = null;
18-
static DecodingMode mode = DecodingMode.REFLECTION_MODE;
19-
static {
20-
String envMode = System.getenv("JSONITER_DECODING_MODE");
21-
if (envMode != null) {
22-
mode = DecodingMode.valueOf(envMode);
23-
}
24-
}
25-
26-
public static void setMode(DecodingMode mode) {
27-
Codegen.mode = mode;
28-
}
2918

3019
static Decoder getDecoder(String cacheKey, Type type) {
3120
Decoder decoder = JsoniterSpi.getDecoder(cacheKey);
@@ -58,6 +47,8 @@ private synchronized static Decoder gen(String cacheKey, Type type) {
5847
return decoder;
5948
}
6049
addPlaceholderDecoderToSupportRecursiveStructure(cacheKey);
50+
Config currentConfig = JsoniterSpi.getCurrentConfig();
51+
DecodingMode mode = currentConfig.decodingMode();
6152
if (mode == DecodingMode.REFLECTION_MODE) {
6253
decoder = ReflectionDecoderFactory.create(classInfo);
6354
JsoniterSpi.addNewDecoder(cacheKey, decoder);
@@ -74,7 +65,7 @@ private synchronized static Decoder gen(String cacheKey, Type type) {
7465
}
7566
}
7667
}
77-
String source = genSource(classInfo);
68+
String source = genSource(mode, classInfo);
7869
source = "public static java.lang.Object decode_(com.jsoniter.JsonIterator iter) throws java.io.IOException { "
7970
+ source + "}";
8071
if ("true".equals(System.getenv("JSONITER_DEBUG"))) {
@@ -210,7 +201,7 @@ private static void createDir(String cacheKey) {
210201
}
211202
}
212203

213-
private static String genSource(ClassInfo classInfo) {
204+
private static String genSource(DecodingMode mode, ClassInfo classInfo) {
214205
if (classInfo.clazz.isArray()) {
215206
return CodegenImplArray.genArray(classInfo);
216207
}
@@ -224,14 +215,14 @@ private static String genSource(ClassInfo classInfo) {
224215
return CodegenImplEnum.genEnum(classInfo);
225216
}
226217
ClassDescriptor desc = ClassDescriptor.getDecodingClassDescriptor(classInfo, false);
227-
if (shouldUseStrictMode(desc)) {
218+
if (shouldUseStrictMode(mode, desc)) {
228219
return CodegenImplObjectStrict.genObjectUsingStrict(desc);
229220
} else {
230221
return CodegenImplObjectHash.genObjectUsingHash(desc);
231222
}
232223
}
233224

234-
private static boolean shouldUseStrictMode(ClassDescriptor desc) {
225+
private static boolean shouldUseStrictMode(DecodingMode mode, ClassDescriptor desc) {
235226
if (mode == DecodingMode.DYNAMIC_MODE_AND_MATCH_FIELD_STRICTLY) {
236227
return true;
237228
}

src/main/java/com/jsoniter/JsonIterator.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -499,7 +499,9 @@ private static int findLastNotSpacePos(byte[] input) {
499499
}
500500

501501
public static void setMode(DecodingMode mode) {
502-
Codegen.setMode(mode);
502+
Config newConfig = JsoniterSpi.getDefaultConfig().copyBuilder().decodingMode(mode).build();
503+
JsoniterSpi.setDefaultConfig(newConfig);
504+
JsoniterSpi.setCurrentConfig(newConfig);
503505
}
504506

505507
public static void enableStreamingSupport() {

src/main/java/com/jsoniter/JsonIteratorPool.java

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,10 @@
11
package com.jsoniter;
22

3-
import com.jsoniter.spi.Config;
4-
import com.jsoniter.spi.ConfigListener;
5-
import com.jsoniter.spi.JsoniterSpi;
6-
73
public class JsonIteratorPool {
84

95
private static ThreadLocal<JsonIterator> slot1 = new ThreadLocal<JsonIterator>();
106
private static ThreadLocal<JsonIterator> slot2 = new ThreadLocal<JsonIterator>();
117

12-
static {
13-
JsoniterSpi.registerConfigListener(new ConfigListener() {
14-
15-
@Override
16-
public void onCurrentConfigChanged(Config newConfig) {
17-
JsonIterator iter = slot1.get();
18-
if (iter != null) {
19-
iter.configCache = newConfig;
20-
}
21-
iter = slot2.get();
22-
if (iter != null) {
23-
iter.configCache = newConfig;
24-
}
25-
}
26-
});
27-
}
28-
298
public static JsonIterator borrowJsonIterator() {
309
JsonIterator iter = slot1.get();
3110
if (iter != null) {
@@ -41,6 +20,7 @@ public static JsonIterator borrowJsonIterator() {
4120
}
4221

4322
public static void returnJsonIterator(JsonIterator iter) {
23+
iter.configCache = null;
4424
if (slot1.get() == null) {
4525
slot1.set(iter);
4626
return;

0 commit comments

Comments
 (0)