Skip to content

Commit 0a92499

Browse files
committed
feat: jna over static jni
- chore: switch to jna snapshot - chore: add new jna graalvm artifact - chore: opt-in to static jna feature - chore: cleanup superfluous configs Adopts java-native-access/jna#1608 Signed-off-by: Sam Gammon <[email protected]>
1 parent 9b3d37f commit 0a92499

File tree

10 files changed

+13
-391
lines changed

10 files changed

+13
-391
lines changed

gradle/elide.versions.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ jimfs = "1.3.0"
110110
jline = "3.26.1"
111111
jmh-lib = "1.37"
112112
jmh-plugin = "0.7.2"
113-
jna = "5.14.0"
113+
jna = "5.15.0-SNAPSHOT"
114114
jprofiler = "14.0.1"
115115
json = "20240303"
116116
jsoup = "1.17.2"
@@ -557,6 +557,7 @@ jline-terminal-jna = { module = "org.jline:jline-terminal-jna", version.ref = "j
557557
jline-terminal-jni = { module = "org.jline:jline-terminal-jni", version.ref = "jline" }
558558
jna = { group = "net.java.dev.jna", name = "jna", version.ref = "jna" }
559559
jna-jpms = { group = "net.java.dev.jna", name = "jna-jpms", version.ref = "jna" }
560+
jna-graalvm = { group = "net.java.dev.jna", name = "jna-graalvm", version.ref = "jna" }
560561
json = { group = "org.json", name = "json", version.ref = "json" }
561562
jsoup = { group = "org.jsoup", name = "jsoup", version.ref = "jsoup" }
562563
junit = "junit:junit:4.13.2"

packages/cli/src/main/resources/META-INF/native-image/jni-config.json

Lines changed: 1 addition & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -19,64 +19,6 @@
1919
"name":"com.apple.eawt._AppMenuBarHandler",
2020
"methods":[{"name":"initMenuStates","parameterTypes":["boolean","boolean","boolean","boolean"] }]
2121
},
22-
{
23-
"name":"com.sun.jna.Callback"
24-
},
25-
{
26-
"name":"com.sun.jna.CallbackReference",
27-
"methods":[{"name":"getCallback","parameterTypes":["java.lang.Class","com.sun.jna.Pointer","boolean"] }, {"name":"getFunctionPointer","parameterTypes":["com.sun.jna.Callback","boolean"] }, {"name":"getNativeString","parameterTypes":["java.lang.Object","boolean"] }, {"name":"initializeThread","parameterTypes":["com.sun.jna.Callback","com.sun.jna.CallbackReference$AttachOptions"] }]
28-
},
29-
{
30-
"name":"com.sun.jna.CallbackReference$AttachOptions"
31-
},
32-
{
33-
"name":"com.sun.jna.FromNativeConverter",
34-
"methods":[{"name":"nativeType","parameterTypes":[] }]
35-
},
36-
{
37-
"name":"com.sun.jna.IntegerType",
38-
"fields":[{"name":"value"}]
39-
},
40-
{
41-
"name":"com.sun.jna.JNIEnv"
42-
},
43-
{
44-
"name":"com.sun.jna.Native",
45-
"methods":[{"name":"dispose","parameterTypes":[] }, {"name":"fromNative","parameterTypes":["com.sun.jna.FromNativeConverter","java.lang.Object","java.lang.reflect.Method"] }, {"name":"fromNative","parameterTypes":["java.lang.Class","java.lang.Object"] }, {"name":"fromNative","parameterTypes":["java.lang.reflect.Method","java.lang.Object"] }, {"name":"nativeType","parameterTypes":["java.lang.Class"] }, {"name":"toNative","parameterTypes":["com.sun.jna.ToNativeConverter","java.lang.Object"] }]
46-
},
47-
{
48-
"name":"com.sun.jna.Native$ffi_callback",
49-
"methods":[{"name":"invoke","parameterTypes":["long","long","long"] }]
50-
},
51-
{
52-
"name":"com.sun.jna.NativeMapped",
53-
"methods":[{"name":"toNative","parameterTypes":[] }]
54-
},
55-
{
56-
"name":"com.sun.jna.Pointer",
57-
"fields":[{"name":"peer"}],
58-
"methods":[{"name":"<init>","parameterTypes":["long"] }]
59-
},
60-
{
61-
"name":"com.sun.jna.PointerType",
62-
"fields":[{"name":"pointer"}]
63-
},
64-
{
65-
"name":"com.sun.jna.Structure",
66-
"fields":[{"name":"memory"}, {"name":"typeInfo"}],
67-
"methods":[{"name":"autoRead","parameterTypes":[] }, {"name":"autoWrite","parameterTypes":[] }, {"name":"getTypeInfo","parameterTypes":[] }, {"name":"newInstance","parameterTypes":["java.lang.Class","long"] }]
68-
},
69-
{
70-
"name":"com.sun.jna.Structure$ByValue"
71-
},
72-
{
73-
"name":"com.sun.jna.Structure$FFIType$FFITypes",
74-
"fields":[{"name":"ffi_type_double"}, {"name":"ffi_type_float"}, {"name":"ffi_type_longdouble"}, {"name":"ffi_type_pointer"}, {"name":"ffi_type_sint16"}, {"name":"ffi_type_sint32"}, {"name":"ffi_type_sint64"}, {"name":"ffi_type_sint8"}, {"name":"ffi_type_uint16"}, {"name":"ffi_type_uint32"}, {"name":"ffi_type_uint64"}, {"name":"ffi_type_uint8"}, {"name":"ffi_type_void"}]
75-
},
76-
{
77-
"name":"com.sun.jna.WString",
78-
"methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
79-
},
8022
{
8123
"name":"com.sun.management.internal.DiagnosticCommandArgumentInfo",
8224
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","java.lang.String","java.lang.String","boolean","boolean","boolean","int"] }]
@@ -503,4 +445,4 @@
503445
"name":"sun.nio.ch.FileChannelImpl",
504446
"fields":[{"name":"fd"}]
505447
}
506-
]
448+
]
Lines changed: 1 addition & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,5 @@
11
[
2-
{
3-
"interfaces":["com.github.ajalt.mordant.internal.jna.MacosLibC"]
4-
},
5-
{
6-
"interfaces":["com.sun.jna.platform.mac.CoreFoundation"]
7-
},
8-
{
9-
"interfaces":["com.sun.jna.platform.mac.IOKit"]
10-
},
11-
{
12-
"interfaces":["com.sun.jna.platform.mac.SystemB"]
13-
},
142
{
153
"interfaces":["kotlin.jvm.functions.Function2"]
16-
},
17-
{
18-
"interfaces":["oshi.jna.platform.mac.SystemB"]
194
}
20-
]
5+
]

packages/cli/src/main/resources/META-INF/native-image/reflect-config.json

Lines changed: 1 addition & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -345,58 +345,6 @@
345345
"name":"com.sun.crypto.provider.TlsPrfGenerator$V12",
346346
"methods":[{"name":"<init>","parameterTypes":[] }]
347347
},
348-
{
349-
"name":"com.sun.jna.CallbackProxy",
350-
"methods":[{"name":"callback","parameterTypes":["java.lang.Object[]"] }]
351-
},
352-
{
353-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFAllocatorRef",
354-
"methods":[{"name":"<init>","parameterTypes":[] }]
355-
},
356-
{
357-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFDataRef",
358-
"methods":[{"name":"<init>","parameterTypes":[] }]
359-
},
360-
{
361-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFIndex",
362-
"methods":[{"name":"<init>","parameterTypes":[] }]
363-
},
364-
{
365-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFMutableDictionaryRef",
366-
"methods":[{"name":"<init>","parameterTypes":[] }]
367-
},
368-
{
369-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFStringRef",
370-
"methods":[{"name":"<init>","parameterTypes":[] }]
371-
},
372-
{
373-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFTypeID",
374-
"methods":[{"name":"<init>","parameterTypes":[] }]
375-
},
376-
{
377-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFTypeRef",
378-
"methods":[{"name":"<init>","parameterTypes":[] }]
379-
},
380-
{
381-
"name":"com.sun.jna.platform.mac.IOKit$IOIterator",
382-
"methods":[{"name":"<init>","parameterTypes":[] }]
383-
},
384-
{
385-
"name":"com.sun.jna.platform.mac.IOKit$IORegistryEntry",
386-
"methods":[{"name":"<init>","parameterTypes":[] }]
387-
},
388-
{
389-
"name":"com.sun.jna.platform.unix.LibCAPI$size_t",
390-
"methods":[{"name":"<init>","parameterTypes":[] }]
391-
},
392-
{
393-
"name":"com.sun.jna.ptr.IntByReference",
394-
"methods":[{"name":"<init>","parameterTypes":[] }]
395-
},
396-
{
397-
"name":"com.sun.jna.ptr.PointerByReference",
398-
"methods":[{"name":"<init>","parameterTypes":[] }]
399-
},
400348
{
401349
"name":"com.sun.management.GarbageCollectorMXBean",
402350
"queryAllPublicMethods":true
@@ -10937,4 +10885,4 @@
1093710885
"name":"sun.security.x509.SubjectKeyIdentifierExtension",
1093810886
"methods":[{"name":"<init>","parameterTypes":["java.lang.Boolean","java.lang.Object"] }]
1093910887
}
10940-
]
10888+
]
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1 @@
1-
[
2-
3-
]
1+
[]

packages/runtime/build.gradle.kts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ val enablePgoSampling = false
134134
val enablePgoInstrumentation = false
135135
val enablePgoReport = true
136136
val enableJna = true
137+
val enableJnaStatic = true
137138
val enableSbom = oracleGvm
138139
val enableSbomStrict = false
139140
val glibcTarget = "glibc"
@@ -441,6 +442,9 @@ dependencies {
441442
jvmOnly(libs.jna.jpms)
442443
} else {
443444
implementation(libs.jna.jpms)
445+
if (enableJnaStatic) {
446+
implementation(libs.jna.graalvm)
447+
}
444448
}
445449

446450
// Tests
@@ -610,6 +614,7 @@ val deprecatedNativeArgs = listOf(
610614
)
611615

612616
val enabledFeatures = listOfNotNull(
617+
"com.sun.jna.SubstrateStaticJNA",
613618
"elide.tool.feature.ToolingUmbrellaFeature",
614619
onlyIf(enableSqlite, "elide.runtime.feature.engine.NativeSQLiteFeature"),
615620
)

packages/runtime/src/main/resources/META-INF/native-image/jni-config.json

Lines changed: 0 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -20,162 +20,6 @@
2020
{
2121
"name":"[[J"
2222
},
23-
{
24-
"name":"com.sun.jna.Callback",
25-
"allDeclaredMethods":true,
26-
"allPublicMethods":true,
27-
"allDeclaredConstructors":true,
28-
"allPublicConstructors":true
29-
},
30-
{
31-
"name":"com.sun.jna.CallbackReference",
32-
"allDeclaredMethods":true,
33-
"allPublicMethods":true,
34-
"allDeclaredConstructors":true,
35-
"allPublicConstructors":true,
36-
"methods":[{"name":"getCallback","parameterTypes":["java.lang.Class","com.sun.jna.Pointer","boolean"] }, {"name":"getFunctionPointer","parameterTypes":["com.sun.jna.Callback","boolean"] }, {"name":"getNativeString","parameterTypes":["java.lang.Object","boolean"] }, {"name":"initializeThread","parameterTypes":["com.sun.jna.Callback","com.sun.jna.CallbackReference$AttachOptions"] }]
37-
},
38-
{
39-
"name":"com.sun.jna.CallbackReference$AttachOptions",
40-
"allDeclaredMethods":true,
41-
"allPublicMethods":true,
42-
"allDeclaredConstructors":true,
43-
"allPublicConstructors":true
44-
},
45-
{
46-
"name":"com.sun.jna.FromNativeConverter",
47-
"allDeclaredMethods":true,
48-
"allPublicMethods":true,
49-
"allDeclaredConstructors":true,
50-
"allPublicConstructors":true,
51-
"methods":[{"name":"nativeType","parameterTypes":[] }]
52-
},
53-
{
54-
"name":"com.sun.jna.IntegerType",
55-
"allDeclaredMethods":true,
56-
"allPublicMethods":true,
57-
"allDeclaredConstructors":true,
58-
"allPublicConstructors":true,
59-
"fields":[{"name":"value", "allowWrite":true}]
60-
},
61-
{
62-
"name":"com.sun.jna.JNIEnv",
63-
"allDeclaredMethods":true,
64-
"allPublicMethods":true,
65-
"allDeclaredConstructors":true,
66-
"allPublicConstructors":true
67-
},
68-
{
69-
"name":"com.sun.jna.Native",
70-
"allDeclaredMethods":true,
71-
"allPublicMethods":true,
72-
"allDeclaredConstructors":true,
73-
"allPublicConstructors":true,
74-
"methods":[
75-
{"name":"dispose","parameterTypes":[] },
76-
{"name":"fromNative","parameterTypes":["com.sun.jna.FromNativeConverter","java.lang.Object","java.lang.reflect.Method"] },
77-
{"name":"fromNative","parameterTypes":["java.lang.Class","java.lang.Object"] },
78-
{"name":"fromNative","parameterTypes":["java.lang.reflect.Method","java.lang.Object"] },
79-
{"name":"nativeType","parameterTypes":["java.lang.Class"] },
80-
{"name":"toNative","parameterTypes":["com.sun.jna.ToNativeConverter","java.lang.Object"]},
81-
{"name":"open","parameterTypes":["java.lang.String","java.lang.Integer"]},
82-
{"name":"close","parameterTypes":["java.lang.Long"]},
83-
{"name":"findSymbol","parameterTypes":["java.lang.Long","java.lang.String"]}
84-
]
85-
},
86-
{
87-
"name":"com.sun.jna.Native$ffi_callback",
88-
"allDeclaredMethods":true,
89-
"allPublicMethods":true,
90-
"allDeclaredConstructors":true,
91-
"allPublicConstructors":true,
92-
"methods":[{"name":"invoke","parameterTypes":["long","long","long"] }]
93-
},
94-
{
95-
"name":"com.sun.jna.NativeLong",
96-
"allDeclaredMethods":true,
97-
"allPublicMethods":true,
98-
"allDeclaredConstructors":true,
99-
"allPublicConstructors":true
100-
},
101-
{
102-
"name":"com.sun.jna.NativeMapped",
103-
"allDeclaredMethods":true,
104-
"allPublicMethods":true,
105-
"allDeclaredConstructors":true,
106-
"allPublicConstructors":true,
107-
"methods":[{"name":"toNative","parameterTypes":[] }]
108-
},
109-
{
110-
"name":"com.sun.jna.Pointer",
111-
"allDeclaredMethods":true,
112-
"allPublicMethods":true,
113-
"allDeclaredConstructors":true,
114-
"allPublicConstructors":true,
115-
"fields":[{"name":"peer", "allowWrite":true}],
116-
"methods":[{"name":"<init>","parameterTypes":["long"] }]
117-
},
118-
{
119-
"name":"com.sun.jna.PointerType",
120-
"allDeclaredMethods":true,
121-
"allPublicMethods":true,
122-
"allDeclaredConstructors":true,
123-
"allPublicConstructors":true,
124-
"fields":[{"name":"pointer", "allowWrite":true}]
125-
},
126-
{
127-
"name":"com.sun.jna.Structure",
128-
"allDeclaredMethods":true,
129-
"allPublicMethods":true,
130-
"allDeclaredConstructors":true,
131-
"allPublicConstructors":true,
132-
"fields":[{"name":"memory", "allowWrite":true}, {"name":"typeInfo", "allowWrite":true}],
133-
"methods":[{"name":"autoRead","parameterTypes":[] }, {"name":"autoWrite","parameterTypes":[] }, {"name":"getTypeInfo","parameterTypes":[] }, {"name":"getTypeInfo","parameterTypes":["java.lang.Object"] }, {"name":"newInstance","parameterTypes":["java.lang.Class"] }, {"name":"newInstance","parameterTypes":["java.lang.Class","long"] }, {"name":"newInstance","parameterTypes":["java.lang.Class","com.sun.jna.Pointer"] }]
134-
},
135-
{
136-
"name":"com.sun.jna.Structure$ByValue",
137-
"allDeclaredMethods":true,
138-
"allPublicMethods":true,
139-
"allDeclaredConstructors":true,
140-
"allPublicConstructors":true
141-
},
142-
{
143-
"name":"com.sun.jna.Structure$FFIType",
144-
"allDeclaredMethods":true,
145-
"allPublicMethods":true,
146-
"allDeclaredConstructors":true,
147-
"allPublicConstructors":true
148-
},
149-
{
150-
"name":"com.sun.jna.Structure$FFIType$FFITypes",
151-
"allDeclaredMethods":true,
152-
"allPublicMethods":true,
153-
"allDeclaredConstructors":true,
154-
"allPublicConstructors":true,
155-
"fields":[{"name":"ffi_type_double", "allowWrite":true}, {"name":"ffi_type_float", "allowWrite":true}, {"name":"ffi_type_longdouble", "allowWrite":true}, {"name":"ffi_type_pointer", "allowWrite":true}, {"name":"ffi_type_sint16", "allowWrite":true}, {"name":"ffi_type_sint32", "allowWrite":true}, {"name":"ffi_type_sint64", "allowWrite":true}, {"name":"ffi_type_sint8", "allowWrite":true}, {"name":"ffi_type_uint16", "allowWrite":true}, {"name":"ffi_type_uint32", "allowWrite":true}, {"name":"ffi_type_uint64", "allowWrite":true}, {"name":"ffi_type_uint8", "allowWrite":true}, {"name":"ffi_type_void", "allowWrite":true}]
156-
},
157-
{
158-
"name":"com.sun.jna.WString",
159-
"allDeclaredMethods":true,
160-
"allPublicMethods":true,
161-
"allDeclaredConstructors":true,
162-
"allPublicConstructors":true,
163-
"methods":[{"name":"<init>","parameterTypes":["java.lang.String"] }]
164-
},
165-
{
166-
"name":"com.sun.jna.ptr.PointerByReference",
167-
"allDeclaredMethods":true,
168-
"allPublicMethods":true,
169-
"allDeclaredConstructors":true,
170-
"allPublicConstructors":true
171-
},
172-
{
173-
"name":"com.sun.jna.platform.mac.CoreFoundation$CFStringRef",
174-
"allDeclaredMethods":true,
175-
"allPublicMethods":true,
176-
"allDeclaredConstructors":true,
177-
"allPublicConstructors":true
178-
},
17923
{
18024
"name":"com.sun.management.internal.DiagnosticCommandArgumentInfo",
18125
"methods":[{"name":"<init>","parameterTypes":["java.lang.String","java.lang.String","java.lang.String","java.lang.String","boolean","boolean","boolean","int"] }]

0 commit comments

Comments
 (0)