From c6a8e1c65c13a64b2202225ce4c1f262deffc76b Mon Sep 17 00:00:00 2001 From: Janne Valkealahti Date: Sun, 8 May 2022 14:18:47 +0100 Subject: [PATCH] Update e2e tests - Fix native configs for win in sample app. - Integrate spring-native with samples app. - Tweak e2e workflow to upload artifacts and some other generic changes. - Relates #401 --- .github/workflows/e2e.yml | 10 +- e2e/spring-shell-e2e-tests/src/utils.ts | 8 +- spring-shell-samples/pom.xml | 15 +- .../SpringShellNativeConfiguration.java | 189 +++++++ .../META-INF/native-image/jni-config.json | 512 ++++++++++++++++++ .../META-INF/native-image/reflect-config.json | 9 - .../main/resources/META-INF/spring.factories | 2 + 7 files changed, 727 insertions(+), 18 deletions(-) create mode 100644 spring-shell-samples/src/main/java/org/springframework/shell/samples/config/SpringShellNativeConfiguration.java create mode 100644 spring-shell-samples/src/main/resources/META-INF/native-image/jni-config.json delete mode 100644 spring-shell-samples/src/main/resources/META-INF/native-image/reflect-config.json create mode 100644 spring-shell-samples/src/main/resources/META-INF/spring.factories 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