-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathYarnStringMapper.template.java
More file actions
96 lines (87 loc) · 3.08 KB
/
YarnStringMapper.template.java
File metadata and controls
96 lines (87 loc) · 3.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.cubicpulse.yarn;
//#{yarnmappings:imports}
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.HashMap;
import java.util.Map;
public class YarnStringMapper {
private static final Map<Class<?>, YarnStringMapperEntry> a = new HashMap<Class<?>, YarnStringMapperEntry>();
static {
//#{yarnmappings:indent=8}
}
public static String toString(Object obj) {
return toString(obj, "");
}
public static String toString(Object obj, String indent) {
if (obj == null) {
return null;
}
if(obj instanceof String) {
return "\"" + obj + "\"";
}
if(obj instanceof List) {
return createStringForList((List<?>) obj, indent);
}
if(obj instanceof Map) {
return createStringForMap((Map<?, ?>) obj, indent);
}
if(obj instanceof Object[]) {
return createStringForList(Arrays.asList((Object[]) obj), indent);
}
YarnStringMapperEntry entry = a.get(obj.getClass());
if (entry == null) {
return obj.toString();
}
if(obj.getClass().isEnum()) {
return entry.className() + "." + obj;
}
var map = entry.map();
StringBuilder sb = new StringBuilder();
sb.append(entry.className()).append(" {");
int fieldCount = 0;
for (Field field : obj.getClass().getDeclaredFields()) {
if (Modifier.isStatic(field.getModifiers())) {
continue;
}
field.setAccessible(true);
String name = field.getName();
String value = map.get(name);
if (value == null) {
value = name;
}
if (fieldCount == 0) {
sb.append("\n");
}
try {
sb.append(indent).append(value).append(" = ").append(toString(field.get(obj), indent + " ")).append("\n");
} catch (Exception e) {
throw new RuntimeException(e);
}
fieldCount++;
}
if(fieldCount > 0)
sb.append(indent);
sb.append("}");
return sb.toString();
}
private static String createStringForList(List<?> list, String indent) {
StringBuilder sb = new StringBuilder();
sb.append("[\n");
for (Object obj : list) {
sb.append(indent).append(" ").append(toString(obj, indent + " ")).append("\n");
}
sb.append(indent).append("]");
return sb.toString();
}
private static String createStringForMap(Map<?, ?> map, String indent) {
StringBuilder sb = new StringBuilder();
sb.append("{\n");
for (Map.Entry<?, ?> entry : map.entrySet()) {
sb.append(indent).append(" ").append(toString(entry.getKey(), indent + " ")).append(" = ").append(toString(entry.getValue(), indent + " ")).append("\n");
}
sb.append(indent).append("}");
return sb.toString();
}
public record YarnStringMapperEntry(String className, Map<String, String> map) {
}
}