diff options
author | nea <nea@nea.moe> | 2023-11-01 14:02:59 +0100 |
---|---|---|
committer | nea <nea@nea.moe> | 2023-11-01 14:02:59 +0100 |
commit | d5253dc5c3ae7b2cc1fcb96780e43b929a449eb4 (patch) | |
tree | 478973510c9d7eda999b8321a07f34691ba56e8b /src/main/java/moe/nea/modernjava/launch/util/ReflectionUtils.java | |
download | ModernJavaLauncher-d5253dc5c3ae7b2cc1fcb96780e43b929a449eb4.tar.gz ModernJavaLauncher-d5253dc5c3ae7b2cc1fcb96780e43b929a449eb4.tar.bz2 ModernJavaLauncher-d5253dc5c3ae7b2cc1fcb96780e43b929a449eb4.zip |
Initial commit
Diffstat (limited to 'src/main/java/moe/nea/modernjava/launch/util/ReflectionUtils.java')
-rw-r--r-- | src/main/java/moe/nea/modernjava/launch/util/ReflectionUtils.java | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/java/moe/nea/modernjava/launch/util/ReflectionUtils.java b/src/main/java/moe/nea/modernjava/launch/util/ReflectionUtils.java new file mode 100644 index 0000000..abc2364 --- /dev/null +++ b/src/main/java/moe/nea/modernjava/launch/util/ReflectionUtils.java @@ -0,0 +1,33 @@ +package moe.nea.modernjava.launch.util; + +import sun.misc.Unsafe; + +import java.lang.reflect.Field; + +public class ReflectionUtils { + private static Unsafe unsafe; + + static { + try { + final Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe"); + unsafeField.setAccessible(true); + unsafe = (Unsafe) unsafeField.get(null); + } catch (Exception ex) { + ex.printStackTrace(); + } + } + + public static void makeFieldWritable(Field f) { + String s = "Doing nothing. We will use unsafe to set the value instead, if possible"; + } + + public static void doFieldWrite(Field field, Object object) throws IllegalAccessException { + if (unsafe == null) { + field.set(null, object); + } else { + Object o = unsafe.staticFieldBase(field); + long l = unsafe.staticFieldOffset(field); + unsafe.putObject(o, l, object); + } + } +} |