From fc8b1a9fbea60f50bb6225de7f0e5222eb627510 Mon Sep 17 00:00:00 2001 From: Michael Pfaff Date: Mon, 25 Dec 2023 17:13:31 -0500 Subject: [PATCH] Add a module-info.java, use unfettered in MemoryUtilSun --- Tinsel.lua | 6 +++- src/java/org/lwjgl/MemoryUtilSun.java | 40 ++------------------------ src/module/module-info.java | 41 +++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 38 deletions(-) create mode 100644 src/module/module-info.java diff --git a/Tinsel.lua b/Tinsel.lua index 19e44659..0336e4e2 100644 --- a/Tinsel.lua +++ b/Tinsel.lua @@ -252,6 +252,7 @@ compile_java = export(task("compile_java", function(env) local p = path.path.value return not p:startswith(ignore_a, ignore_b, ignore_c, ignore_d) end) + table.insert(srcs, rootedpath(path("src/module"), path("src/module") .. "module-info.java")) push_all(srcs, generate().java) table.freeze(srcs) @@ -261,7 +262,10 @@ compile_java = export(task("compile_java", function(env) libs .. "unfettered.jar", libs .. "jinput.jar", libs .. "AppleJavaExtensions.jar", - }) + }), + extra_args = { + "--add-reads", "lwjgl=ALL-UNNAMED", + }, }) end)) diff --git a/src/java/org/lwjgl/MemoryUtilSun.java b/src/java/org/lwjgl/MemoryUtilSun.java index f5829c78..b4cf9b17 100644 --- a/src/java/org/lwjgl/MemoryUtilSun.java +++ b/src/java/org/lwjgl/MemoryUtilSun.java @@ -38,7 +38,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.nio.Buffer; -import sun.misc.Unsafe; +import dev.pfaff.unfettered.UnsafeWrapper; /** * MemoryUtil.Accessor implementations that depend on sun.misc. @@ -55,53 +55,19 @@ final class MemoryUtilSun { /** Implementation using sun.misc.Unsafe. */ private static class AccessorUnsafe implements MemoryUtil.Accessor { - private final Unsafe unsafe; private final long address; AccessorUnsafe() { try { - unsafe = getUnsafeInstance(); - address = unsafe.objectFieldOffset(MemoryUtil.getAddressField()); + address = UnsafeWrapper.objectFieldOffset(MemoryUtil.getAddressField()); } catch (Exception e) { throw new UnsupportedOperationException(e); } } public long getAddress(final Buffer buffer) { - return unsafe.getLong(buffer, address); + return UnsafeWrapper.getLong(buffer, address); } - - private static Unsafe getUnsafeInstance() { - final Field[] fields = Unsafe.class.getDeclaredFields(); - - /* - Different runtimes use different names for the Unsafe singleton, - so we cannot use .getDeclaredField and we scan instead. For example: - - Oracle: theUnsafe - PERC : m_unsafe_instance - Android: THE_ONE - */ - for ( Field field : fields ) { - if ( !field.getType().equals(Unsafe.class) ) - continue; - - final int modifiers = field.getModifiers(); - if ( !(Modifier.isStatic(modifiers) && Modifier.isFinal(modifiers)) ) - continue; - - field.setAccessible(true); - try { - return (Unsafe)field.get(null); - } catch (IllegalAccessException e) { - // ignore - } - break; - } - - throw new UnsupportedOperationException(); - } - } /** Implementation using {@link java.lang.MethodHandle}s on ByteBuffer. Reflection is used to acquire the handle. */ diff --git a/src/module/module-info.java b/src/module/module-info.java new file mode 100644 index 00000000..1fa91a89 --- /dev/null +++ b/src/module/module-info.java @@ -0,0 +1,41 @@ +module org.lwjgl { + requires java.desktop; + requires dev.pfaff.unfettered; + requires static jinput; + + exports org.lwjgl; + exports org.lwjgl.examples; + exports org.lwjgl.examples.spaceinvaders; + exports org.lwjgl.input; + exports org.lwjgl.openal; + exports org.lwjgl.opencl; + exports org.lwjgl.opencl.api; + exports org.lwjgl.opengl; + exports org.lwjgl.opengles; + /*exports org.lwjgl.test; + exports org.lwjgl.test.glu; + exports org.lwjgl.test.glu.tessellation; + exports org.lwjgl.test.input; + exports org.lwjgl.test.mapped; + exports org.lwjgl.test.openal; + exports org.lwjgl.test.opencl; + exports org.lwjgl.test.opencl.gl; + exports org.lwjgl.test.opengl; + exports org.lwjgl.test.opengl.multithread; + exports org.lwjgl.test.opengl.pbuffers; + exports org.lwjgl.test.opengl.shaders; + exports org.lwjgl.test.opengl.sprites; + exports org.lwjgl.test.opengles; + exports org.lwjgl.test.opengles.util;*/ + exports org.lwjgl.util; + /*exports org.lwjgl.util.generator; + exports org.lwjgl.util.generator.openal; + exports org.lwjgl.util.generator.opencl; + exports org.lwjgl.util.generator.opengl;*/ + exports org.lwjgl.util.glu; + exports org.lwjgl.util.glu.tessellation; + exports org.lwjgl.util.input; + exports org.lwjgl.util.jinput; + //exports org.lwjgl.util.mapped; + exports org.lwjgl.util.vector; +}