diff --git a/lib/build.gradle b/lib/build.gradle index bb013a4..d8c94c1 100644 --- a/lib/build.gradle +++ b/lib/build.gradle @@ -25,21 +25,21 @@ dependencies { java { toolchain { - languageVersion = JavaLanguageVersion.of(21) + languageVersion = JavaLanguageVersion.of(22) } } tasks.withType(JavaCompile).configureEach { - options.compilerArgs.add('--enable-preview') + //options.compilerArgs.add('--enable-preview') } tasks.withType(Test).configureEach { - jvmArgs += '--enable-preview' + //jvmArgs += '--enable-preview' jvmArgs += '--enable-native-access=ALL-UNNAMED' } compileTestGroovy { - options.compilerArgs.add('--enable-preview') + //options.compilerArgs.add('--enable-preview') options.compilerArgs.add('--enable-native-access=ALL-UNNAMED') } @@ -47,7 +47,8 @@ test { useJUnitPlatform() // TODO - support non-Linux lib names systemProperty "buoy.test.lib.path", new File(parent.projectDir.absoluteFile, "native/build/lib/main/debug/").toPath().toString() - jvmArgs(['--enable-preview', '--enable-native-access=ALL-UNNAMED']) + jvmArgs(['--enable-native-access=ALL-UNNAMED']) + //jvmArgs(['--enable-preview', '--enable-native-access=ALL-UNNAMED']) } publishing { diff --git a/lib/src/main/java/com/myworldvw/buoy/mapping/FieldHandler.java b/lib/src/main/java/com/myworldvw/buoy/mapping/FieldHandler.java index 1a0cfc7..61cbfe3 100644 --- a/lib/src/main/java/com/myworldvw/buoy/mapping/FieldHandler.java +++ b/lib/src/main/java/com/myworldvw/buoy/mapping/FieldHandler.java @@ -25,6 +25,7 @@ import java.lang.foreign.MemorySegment; import java.lang.foreign.ValueLayout; import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; import java.lang.invoke.VarHandle; import java.lang.reflect.Field; @@ -43,7 +44,8 @@ public FieldHandler(FieldDef model, Field field){ // TODO - this doesn't work if this field references a struct value, since structs // are not value layouts in Panama and the VarHandle can only access a value layout. public VarHandle getHandle(MemoryLayout layout){ - return layout.varHandle(MemoryLayout.PathElement.groupElement(model.name())); + var handle = layout.varHandle(MemoryLayout.PathElement.groupElement(model.name())); + return MethodHandles.insertCoordinates(handle, 1, 0L); } public MethodHandle getAccessor(MemoryLayout layout, VarHandle.AccessMode mode){