diff --git a/.github/workflows/e2e.yml b/.github/workflows/e2e.yml
index 4939dad9..6d42112f 100644
--- a/.github/workflows/e2e.yml
+++ b/.github/workflows/e2e.yml
@@ -19,7 +19,7 @@ jobs:
- nickname: linux
os: ubuntu-latest
graal: 22.0.0.2
- name: CI Native ${{ matrix.nickname }}
+ name: E2E ${{ matrix.nickname }}
steps:
- uses: actions/checkout@v2
- uses: actions/setup-java@v2
@@ -39,6 +39,14 @@ jobs:
node-version: '14'
- run: |
./mvnw clean package -Pnative
+ - uses: actions/upload-artifact@v2
+ with:
+ name: spring-shell-samples-${{ matrix.nickname }}
+ retention-days: 1
+ path: |
+ spring-shell-samples/target/*.jar
+ spring-shell-samples/target/spring-shell-samples
+ spring-shell-samples/target/spring-shell-samples.exe
- name: compile e2e module
working-directory: e2e/spring-shell-e2e
run: |
diff --git a/e2e/spring-shell-e2e-tests/src/utils.ts b/e2e/spring-shell-e2e-tests/src/utils.ts
index da9807b5..e7af2160 100644
--- a/e2e/spring-shell-e2e-tests/src/utils.ts
+++ b/e2e/spring-shell-e2e-tests/src/utils.ts
@@ -13,9 +13,9 @@ export const cliPath = path.resolve(cliPathRelative);
export const jarPath = path.resolve(jarPathRelative);
export const nativeDesc = 'native';
export const jarDesc = 'jar';
-export const jarCommand = 'java';
+export const jarCommand = isWindows ? 'java.exe' : 'java';
export const nativeCommand = cliPath;
export const jarOptions = ['-jar', jarPath];
-export const waitForExpectDefaultTimeout = 10000;
-export const waitForExpectDefaultInterval = 100;
-export const testTimeout = 20000;
+export const waitForExpectDefaultTimeout = 30000;
+export const waitForExpectDefaultInterval = 2000;
+export const testTimeout = 100000;
diff --git a/spring-shell-samples/pom.xml b/spring-shell-samples/pom.xml
index 67cab079..e0acb72e 100644
--- a/spring-shell-samples/pom.xml
+++ b/spring-shell-samples/pom.xml
@@ -14,6 +14,10 @@
Examples of using Spring Shell 2
+
+ 0.11.1
+
+
@@ -37,7 +41,13 @@
org.springframework.shell
- spring-shell-starter
+ spring-shell-starter-jna
+
+
+ org.springframework.experimental
+ spring-aot
+ ${spring-native.version}
+ true
@@ -45,9 +55,6 @@
native
-
- 0.11.1
-
org.springframework.experimental
diff --git a/spring-shell-samples/src/main/java/org/springframework/shell/samples/config/SpringShellNativeConfiguration.java b/spring-shell-samples/src/main/java/org/springframework/shell/samples/config/SpringShellNativeConfiguration.java
new file mode 100644
index 00000000..de40ab94
--- /dev/null
+++ b/spring-shell-samples/src/main/java/org/springframework/shell/samples/config/SpringShellNativeConfiguration.java
@@ -0,0 +1,189 @@
+/*
+ * Copyright 2022 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.shell.samples.config;
+
+import com.sun.jna.CallbackReference;
+import com.sun.jna.Native;
+import com.sun.jna.NativeLong;
+import com.sun.jna.Pointer;
+import com.sun.jna.Structure;
+import com.sun.jna.ptr.IntByReference;
+import com.sun.jna.ptr.PointerByReference;
+
+import org.springframework.nativex.hint.FieldHint;
+import org.springframework.nativex.hint.JdkProxyHint;
+import org.springframework.nativex.hint.MethodHint;
+import org.springframework.nativex.hint.NativeHint;
+import org.springframework.nativex.hint.ResourceHint;
+import org.springframework.nativex.hint.TypeAccess;
+import org.springframework.nativex.hint.TypeHint;
+import org.springframework.nativex.type.NativeConfiguration;
+
+@NativeHint(
+ resources = {
+ @ResourceHint(
+ patterns = {
+ "completion/.*",
+ "template/.*.st",
+ "org/springframework/shell/component/.*.stg",
+ "com/sun/jna/win32-x86-64/jnidispatch.dll"
+ }
+ ),
+ },
+ types = {
+ @TypeHint(
+ types = {
+ CallbackReference.class, Native.class, NativeLong.class, PointerByReference.class, IntByReference.class
+ },
+ typeNames = { "com.sun.jna.Klass" },
+ access = {
+ TypeAccess.PUBLIC_CLASSES, TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.PUBLIC_FIELDS,
+ TypeAccess.PUBLIC_METHODS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ types = Structure.class,
+ fields = {
+ @FieldHint( name = "memory", allowWrite = true),
+ @FieldHint( name = "typeInfo")
+ },
+ methods = {
+ @MethodHint( name = "newInstance", parameterTypes = { Class.class, Pointer.class }),
+ @MethodHint( name = "newInstance", parameterTypes = { Class.class, long.class }),
+ @MethodHint( name = "newInstance", parameterTypes = { Class.class })
+ },
+ access = {
+ TypeAccess.PUBLIC_CLASSES, TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.PUBLIC_FIELDS,
+ TypeAccess.PUBLIC_METHODS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "com.sun.jna.Structure$FFIType",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "com.sun.jna.Structure$FFIType$size_t",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$CHAR_INFO",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$CONSOLE_CURSOR_INFO",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$CONSOLE_SCREEN_BUFFER_INFO",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$COORD",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$INPUT_RECORD",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$INPUT_RECORD$EventUnion",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$KEY_EVENT_RECORD",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$MOUSE_EVENT_RECORD",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$WINDOW_BUFFER_SIZE_RECORD",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$MENU_EVENT_RECORD",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$FOCUS_EVENT_RECORD",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$SMALL_RECT",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ ),
+ @TypeHint(
+ typeNames = "org.jline.terminal.impl.jna.win.Kernel32$UnionChar",
+ access = {
+ TypeAccess.PUBLIC_CONSTRUCTORS, TypeAccess.DECLARED_CLASSES, TypeAccess.DECLARED_CONSTRUCTORS,
+ TypeAccess.DECLARED_FIELDS, TypeAccess.DECLARED_METHODS
+ }
+ )
+ },
+ jdkProxies = {
+ @JdkProxyHint( typeNames = { "com.sun.jna.Library" }),
+ @JdkProxyHint( typeNames = { "com.sun.jna.Callback" }),
+ @JdkProxyHint( typeNames = { "org.jline.terminal.impl.jna.win.Kernel32" }),
+ @JdkProxyHint( typeNames = { "org.jline.terminal.impl.jna.linux.CLibrary" })
+ }
+)
+public class SpringShellNativeConfiguration implements NativeConfiguration {
+}
diff --git a/spring-shell-samples/src/main/resources/META-INF/native-image/jni-config.json b/spring-shell-samples/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 00000000..6e16c854
--- /dev/null
+++ b/spring-shell-samples/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,512 @@
+[
+ {
+ "name" : "com.sun.jna.Native",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.lang.Class",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.lang.reflect.Method",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.lang.String",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.Buffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.ByteBuffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.CharBuffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.ShortBuffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.IntBuffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.LongBuffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.FloatBuffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.nio.DoubleBuffer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "java.lang.Void",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Boolean",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Byte",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Character",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Short",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Integer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Long",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Float",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "java.lang.Double",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true },
+ { "name" : "TYPE" }
+ ]
+ },
+ {
+ "name" : "com.sun.jna.Pointer",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "peer", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "com.sun.jna.Structure$ByValue",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.WString",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.NativeMapped",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.IntegerType",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.PointerType",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.JNIEnv",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.Native$ffi_callback",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.FromNativeConverter",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.Structure",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "memory", "allowWrite" : true },
+ { "name" : "typeInfo", "allowWrite" : true }
+ ],
+ "methods" : [
+ { "name" : "newInstance", "parameterTypes" : ["java.lang.Class","com.sun.jna.Pointer"] },
+ { "name" : "newInstance", "parameterTypes" : ["java.lang.Class", "long"] },
+ { "name" : "newInstance", "parameterTypes" : ["java.lang.Class"] },
+ { "name" : "getTypeInfo", "parameterTypes": ["java.lang.Object"] }
+ ]
+ },
+ {
+ "name" : "com.sun.jna.Callback",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.CallbackReference$AttachOptions",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.CallbackReference",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.IntegerType",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "value", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "com.sun.jna.PointerType",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "pointer", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "com.sun.jna.Structure$FFIType",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.Structure$FFIType$size_t",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.Structure$FFIType$FFITypes",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "ffi_type_void", "allowWrite" : true },
+ { "name" : "ffi_type_float", "allowWrite" : true },
+ { "name" : "ffi_type_double", "allowWrite" : true },
+ { "name" : "ffi_type_longdouble", "allowWrite" : true },
+ { "name" : "ffi_type_uint8", "allowWrite" : true },
+ { "name" : "ffi_type_sint8", "allowWrite" : true },
+ { "name" : "ffi_type_uint16", "allowWrite" : true },
+ { "name" : "ffi_type_sint16", "allowWrite" : true },
+ { "name" : "ffi_type_uint32", "allowWrite" : true },
+ { "name" : "ffi_type_sint32", "allowWrite" : true },
+ { "name" : "ffi_type_uint64", "allowWrite" : true },
+ { "name" : "ffi_type_sint64", "allowWrite" : true },
+ { "name" : "ffi_type_pointer", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "com.sun.jna.NativeLong",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "com.sun.jna.ptr.PointerByReference",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$CHAR_INFO",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "uChar", "allowWrite" : true },
+ { "name" : "Attributes", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$CONSOLE_CURSOR_INFO",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "dwSize", "allowWrite" : true },
+ { "name" : "bVisible", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$CONSOLE_SCREEN_BUFFER_INFO",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "dwSize", "allowWrite" : true },
+ { "name" : "dwCursorPosition", "allowWrite" : true },
+ { "name" : "wAttributes", "allowWrite" : true },
+ { "name" : "srWindow", "allowWrite" : true },
+ { "name" : "dwMaximumWindowSize", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$COORD",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "X", "allowWrite" : true },
+ { "name" : "Y", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$INPUT_RECORD",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "EventType", "allowWrite" : true },
+ { "name" : "Event", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$INPUT_RECORD$EventUnion",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "KeyEvent", "allowWrite" : true },
+ { "name" : "MouseEvent", "allowWrite" : true },
+ { "name" : "WindowBufferSizeEvent", "allowWrite" : true },
+ { "name" : "MenuEvent", "allowWrite" : true },
+ { "name" : "FocusEvent", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$KEY_EVENT_RECORD",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "bKeyDown", "allowWrite" : true },
+ { "name" : "wRepeatCount", "allowWrite" : true },
+ { "name" : "wVirtualKeyCode", "allowWrite" : true },
+ { "name" : "wVirtualScanCode", "allowWrite" : true },
+ { "name" : "uChar", "allowWrite" : true },
+ { "name" : "dwControlKeyState", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$MOUSE_EVENT_RECORD",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "dwMousePosition", "allowWrite" : true },
+ { "name" : "dwButtonState", "allowWrite" : true },
+ { "name" : "dwControlKeyState", "allowWrite" : true },
+ { "name" : "dwEventFlags", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$WINDOW_BUFFER_SIZE_RECORD",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "dwSize", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$MENU_EVENT_RECORD",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "dwCommandId", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$FOCUS_EVENT_RECORD",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "bSetFocus", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$SMALL_RECT",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "Left", "allowWrite" : true },
+ { "name" : "Top", "allowWrite" : true },
+ { "name" : "Right", "allowWrite" : true },
+ { "name" : "Bottom", "allowWrite" : true }
+ ]
+ },
+ {
+ "name" : "org.jline.terminal.impl.jna.win.Kernel32$UnionChar",
+ "allDeclaredConstructors" : true,
+ "allPublicConstructors" : true,
+ "allDeclaredMethods" : true,
+ "allPublicMethods" : true,
+ "fields" : [
+ { "name" : "UnicodeChar", "allowWrite" : true },
+ { "name" : "AsciiChar", "allowWrite" : true }
+ ]
+ }
+]
diff --git a/spring-shell-samples/src/main/resources/META-INF/native-image/reflect-config.json b/spring-shell-samples/src/main/resources/META-INF/native-image/reflect-config.json
deleted file mode 100644
index 3ac7faeb..00000000
--- a/spring-shell-samples/src/main/resources/META-INF/native-image/reflect-config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-[
- {
- "name":"org.springframework.shell.samples.jcommander.Args",
- "allDeclaredFields":true,
- "queryAllDeclaredMethods":true,
- "queryAllDeclaredConstructors":true,
- "methods":[{"name":"","parameterTypes":[] }]
- }
-]
diff --git a/spring-shell-samples/src/main/resources/META-INF/spring.factories b/spring-shell-samples/src/main/resources/META-INF/spring.factories
new file mode 100644
index 00000000..dfa413b7
--- /dev/null
+++ b/spring-shell-samples/src/main/resources/META-INF/spring.factories
@@ -0,0 +1,2 @@
+org.springframework.nativex.type.NativeConfiguration=\
+org.springframework.shell.samples.config.SpringShellNativeConfiguration