Skip to content

Commit 0024383

Browse files
javier-godoypaodb
authored andcommitted
fix: extract Jackson type mapping to helper class
1 parent 8f36bc9 commit 0024383

File tree

2 files changed

+49
-24
lines changed

2 files changed

+49
-24
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.flowingcode.vaadin.jsonmigration;
2+
3+
import elemental.json.JsonArray;
4+
import elemental.json.JsonBoolean;
5+
import elemental.json.JsonNumber;
6+
import elemental.json.JsonObject;
7+
import elemental.json.JsonString;
8+
import elemental.json.JsonValue;
9+
import org.objectweb.asm.Type;
10+
import tools.jackson.databind.JsonNode;
11+
import tools.jackson.databind.node.ArrayNode;
12+
import tools.jackson.databind.node.BooleanNode;
13+
import tools.jackson.databind.node.DoubleNode;
14+
import tools.jackson.databind.node.ObjectNode;
15+
import tools.jackson.databind.node.StringNode;
16+
17+
class ClassInstrumentationJacksonHelper {
18+
19+
public static String getConvertedTypeDescriptor(Class<?> type) {
20+
if (type == JsonObject.class) {
21+
return Type.getDescriptor(ObjectNode.class);
22+
} else if (type == JsonArray.class) {
23+
return Type.getDescriptor(ArrayNode.class);
24+
} else if (type == JsonBoolean.class) {
25+
return Type.getDescriptor(BooleanNode.class);
26+
} else if (type == JsonNumber.class) {
27+
return Type.getDescriptor(DoubleNode.class);
28+
} else if (type == JsonString.class) {
29+
return Type.getDescriptor(StringNode.class);
30+
} else if (JsonValue.class.isAssignableFrom(type)) {
31+
return Type.getDescriptor(JsonNode.class);
32+
}
33+
return Type.getDescriptor(type);
34+
}
35+
36+
}

src/main/java/com/flowingcode/vaadin/jsonmigration/ClassInstrumentationUtil.java

Lines changed: 13 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,10 @@
2121

2222
import com.vaadin.flow.component.ClientCallable;
2323
import com.vaadin.flow.component.Component;
24-
import elemental.json.JsonArray;
25-
import elemental.json.JsonBoolean;
26-
import elemental.json.JsonNumber;
27-
import elemental.json.JsonObject;
28-
import elemental.json.JsonString;
2924
import elemental.json.JsonValue;
25+
import java.lang.invoke.MethodHandle;
26+
import java.lang.invoke.MethodHandles;
27+
import java.lang.invoke.MethodType;
3028
import java.lang.reflect.Constructor;
3129
import java.lang.reflect.Method;
3230
import java.lang.reflect.Modifier;
@@ -36,16 +34,11 @@
3634
import java.util.concurrent.ConcurrentHashMap;
3735
import java.util.stream.Collectors;
3836
import java.util.stream.Stream;
37+
import lombok.SneakyThrows;
3938
import org.objectweb.asm.ClassWriter;
4039
import org.objectweb.asm.MethodVisitor;
4140
import org.objectweb.asm.Opcodes;
4241
import org.objectweb.asm.Type;
43-
import tools.jackson.databind.JsonNode;
44-
import tools.jackson.databind.node.ArrayNode;
45-
import tools.jackson.databind.node.BooleanNode;
46-
import tools.jackson.databind.node.DoubleNode;
47-
import tools.jackson.databind.node.ObjectNode;
48-
import tools.jackson.databind.node.StringNode;
4942

5043
/**
5144
* Utility class for instrumenting classes at runtime.
@@ -377,21 +370,17 @@ private String getMethodDescriptor(Method method, boolean convertJsonValueParams
377370
return sb.toString();
378371
}
379372

373+
private MethodHandle getConvertedTypeDescriptor;
374+
375+
@SneakyThrows
380376
private String getConvertedTypeDescriptor(Class<?> type) {
381-
if (type == JsonObject.class) {
382-
return Type.getDescriptor(ObjectNode.class);
383-
} else if (type == JsonArray.class) {
384-
return Type.getDescriptor(ArrayNode.class);
385-
} else if (type == JsonBoolean.class) {
386-
return Type.getDescriptor(BooleanNode.class);
387-
} else if (type == JsonNumber.class) {
388-
return Type.getDescriptor(DoubleNode.class);
389-
} else if (type == JsonString.class) {
390-
return Type.getDescriptor(StringNode.class);
391-
} else if (JsonValue.class.isAssignableFrom(type)) {
392-
return Type.getDescriptor(JsonNode.class);
377+
if (getConvertedTypeDescriptor == null) {
378+
Class<?> helper = Class.forName("com.flowingcode.vaadin.jsonmigration.ClassInstrumentationJacksonHelper");
379+
MethodHandles.Lookup lookup = MethodHandles.lookup();
380+
MethodType methodType = MethodType.methodType(String.class, Class.class);
381+
getConvertedTypeDescriptor = lookup.findStatic(helper, "getConvertedTypeDescriptor", methodType);
393382
}
394-
return Type.getDescriptor(type);
383+
return (String) getConvertedTypeDescriptor.invokeExact(type);
395384
}
396385

397386
private String[] getExceptionInternalNames(Class<?>[] exceptionTypes) {

0 commit comments

Comments
 (0)