| 28 | import org.jetbrains.annotations.Nullable; |
| 29 | |
| 30 | public class Reflect { |
| 31 | public static final boolean inDebugMode = !"true".equalsIgnoreCase(System.getProperty("noDebugMode")) && |
| 32 | ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0; |
| 33 | public static final @NotNull MethodHandles.Lookup lookup = MethodHandles.lookup(); |
| 34 | public static final @NotNull StackWalker stackWalker = StackWalker.getInstance(StackWalker.Option.RETAIN_CLASS_REFERENCE); |
| 35 | public static final @NotNull MethodHandle supplierMH; |
| 36 | private static final HashMap<Class<?>, String> stableNameMap = new HashMap<>(32); |
| 37 | private static final HashMap<Class<?>, Class<?>> boxClassMap = new HashMap<>(16); |
| 38 | |
| 39 | static { |
| 40 | try { |
| 41 | supplierMH = lookup.findVirtual(Supplier.class, "get", MethodType.methodType(Object.class)); |
| 42 | } catch (ReflectiveOperationException e) { |
| 43 | throw new ExceptionInInitializerError(e); |
| 44 | } |
| 45 | |
| 46 | stableNameMap.put(boolean.class, "bool"); |
| 47 | stableNameMap.put(Boolean.class, "bool"); |
| 48 | stableNameMap.put(byte.class, "byte"); |
| 49 | stableNameMap.put(Byte.class, "byte"); |
| 50 | stableNameMap.put(short.class, "short"); |
| 51 | stableNameMap.put(Short.class, "short"); |
| 52 | stableNameMap.put(int.class, "int"); |
| 53 | stableNameMap.put(Integer.class, "int"); |
| 54 | stableNameMap.put(long.class, "long"); |
| 55 | stableNameMap.put(Long.class, "long"); |
| 56 | stableNameMap.put(float.class, "float"); |
| 57 | stableNameMap.put(Float.class, "float"); |
| 58 | stableNameMap.put(double.class, "double"); |
| 59 | stableNameMap.put(Double.class, "double"); |
| 60 | stableNameMap.put(Binary.class, "binary"); |
| 61 | stableNameMap.put(String.class, "string"); |
| 62 | stableNameMap.put(char.class, "char"); |
| 63 | stableNameMap.put(Character.class, "char"); |
| 64 | stableNameMap.put(Vector2.class, "vector2"); |
| 65 | stableNameMap.put(Vector3.class, "vector3"); |
| 66 | stableNameMap.put(Vector4.class, "vector4"); |
| 67 | stableNameMap.put(Quaternion.class, "quaternion"); |
| 68 | stableNameMap.put(Vector2Int.class, "vector2int"); |
| 69 | stableNameMap.put(Vector3Int.class, "vector3int"); |
| 70 | |
| 71 | stableNameMap.put(BigDecimal.class, "decimal"); |
| 72 | |
| 73 | boxClassMap.put(void.class, Void.class); |
| 74 | boxClassMap.put(boolean.class, Boolean.class); |
| 75 | boxClassMap.put(char.class, Character.class); |
| 76 | boxClassMap.put(byte.class, Byte.class); |
| 77 | boxClassMap.put(short.class, Short.class); |
| 78 | boxClassMap.put(int.class, Integer.class); |
| 79 | boxClassMap.put(long.class, Long.class); |
| 80 | boxClassMap.put(float.class, Float.class); |
| 81 | boxClassMap.put(double.class, Double.class); |
| 82 | } |
| 83 | |
| 84 | private final HashMap<String, Method> methods = new HashMap<>(); |
| 85 | |
| 86 | public Reflect(@NotNull Class<?> cls) { |
| 87 | for (var c = cls; c != null; c = c.getSuperclass()) { |
nothing calls this directly
no test coverage detected