diff --git a/.github/workflows/pull-request-check.yml b/.github/workflows/pull-request-check.yml
index 68be751b7..59f6d651c 100644
--- a/.github/workflows/pull-request-check.yml
+++ b/.github/workflows/pull-request-check.yml
@@ -67,23 +67,21 @@ jobs:
java --version
export MAVEN_OPTS="-Xmx4096m"
export JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
- mvn -B -pl '!org.eclipse.esmf:samm-cli' clean install -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
- cd tools/samm-cli
- unset JAVA_TOOL_OPTIONS
- mvn -B clean verify -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ mvn -B -pl '!org.eclipse.esmf:samm-cli' clean install -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
shell: bash
- name: Build native image
if: matrix.os != 'macos-13'
run: |
export MAVEN_OPTS="-Xmx4096m"
- cd tools/samm-cli
- mvn -B package -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ mvn -B -pl tools/samm-cli clean verify -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
shell: bash
- name: Build native image (Mac)
if: matrix.os == 'macos-13'
run: |
+ export MAVEN_OPTS="-Xmx4096m"
+ mvn -B -pl tools/samm-cli clean verify -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
bundle="samm-bundle-DEV-SNAPSHOT-$(date +%s)"
mkdir ${bundle}
curl -Lo jre.tar.gz https://github.com/adoptium/temurin21-binaries/releases/download/jdk-21.0.3%2B9/OpenJDK21U-jre_x64_mac_hotspot_21.0.3_9.tar.gz
diff --git a/.github/workflows/release-workflow.yml b/.github/workflows/release-workflow.yml
index f929b50a7..15e35fc18 100644
--- a/.github/workflows/release-workflow.yml
+++ b/.github/workflows/release-workflow.yml
@@ -66,7 +66,7 @@ jobs:
- name: Setup JDK
uses: graalvm/setup-graalvm@2f25c0caae5b220866f732832d5e3e29ff493338 # v1.2.1
with:
- java-version: '17.0.8'
+ java-version: '17.0.10'
distribution: 'graalvm'
components: 'native-image,js'
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -99,13 +99,10 @@ jobs:
release_version=${{ github.event.inputs.release_version }}
# Actual build of core SDK
- mvn -B -pl '!org.eclipse.esmf:samm-cli' clean deploy -Dmaven.wagon.httpconnectionManager.ttlSeconds=60 -DaltDeploymentRepository=local::default::file://nexus-staging -Psign
+ mvn -B -pl '!org.eclipse.esmf:samm-cli' clean deploy -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60 -DaltDeploymentRepository=local::default::file://nexus-staging -Psign
# Build of CLI
- pushd tools/samm-cli
unset JAVA_TOOL_OPTIONS
- mvn -B clean verify -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
- mvn -B verify -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
- popd
+ mvn -B -pl tools/samm-cli clean verify -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
# Create .tar.gz of samm-cli
pushd tools/samm-cli/target
@@ -152,7 +149,7 @@ jobs:
- name: Setup JDK
uses: graalvm/setup-graalvm@2f25c0caae5b220866f732832d5e3e29ff493338 # v1.2.1
with:
- java-version: '17.0.8'
+ java-version: '17.0.10'
distribution: 'graalvm'
components: 'native-image,js'
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -174,11 +171,10 @@ jobs:
mvn versions:set -DnewVersion=${{ github.event.inputs.release_version }}
mvn versions:commit
# Actual build of core SDK
- mvn -B -pl '!org.eclipse.esmf:samm-cli' clean install -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ mvn -B -pl '!org.eclipse.esmf:samm-cli' clean install -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
# Build of CLI
- cd tools/samm-cli
unset JAVA_TOOL_OPTIONS
- mvn -B clean verify -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ mvn -B -pl tools/samm-cli clean verify -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
shell: bash
- name: Build native executable
@@ -226,7 +222,7 @@ jobs:
- name: Setup JDK
uses: graalvm/setup-graalvm@2f25c0caae5b220866f732832d5e3e29ff493338 # v1.2.1
with:
- java-version: '17.0.8'
+ java-version: '17.0.10'
distribution: 'graalvm'
components: 'native-image,js'
github-token: ${{ secrets.GITHUB_TOKEN }}
@@ -261,12 +257,10 @@ jobs:
mvn versions:commit
# Actual build of core SDK
- mvn -B -pl '!org.eclipse.esmf:samm-cli' clean install -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ mvn -B -pl '!org.eclipse.esmf:samm-cli' clean install -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
# Build of CLI
- cd tools/samm-cli
unset JAVA_TOOL_OPTIONS
- mvn -B clean verify -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
- mvn -B verify -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
+ mvn -B -pl tools/samm-cli clean verify -Pnative -Dmaven.wagon.httpconnectionManager.ttlSeconds=60
shell: bash
- name: Upload Windows binary
diff --git a/core/esmf-aspect-meta-model-java/pom.xml b/core/esmf-aspect-meta-model-java/pom.xml
index 94deff6a7..0a92a620d 100644
--- a/core/esmf-aspect-meta-model-java/pom.xml
+++ b/core/esmf-aspect-meta-model-java/pom.xml
@@ -28,11 +28,6 @@
ESMF Aspect Meta Model Java
jar
-
- ${project.basedir}/src-gen
- ${project.basedir}/src-buildtime
-
-
org.eclipse.esmf
diff --git a/core/esmf-native-support/pom.xml b/core/esmf-native-support/pom.xml
new file mode 100644
index 000000000..37591c628
--- /dev/null
+++ b/core/esmf-native-support/pom.xml
@@ -0,0 +1,172 @@
+
+
+
+
+ 4.0.0
+
+
+ org.eclipse.esmf
+ esmf-sdk-parent
+ DEV-SNAPSHOT
+ ../../pom.xml
+
+
+ esmf-native-support
+ ESMF Native Support
+
+
+ false
+
+
+
+
+ org.eclipse.esmf
+ esmf-aspect-model-starter
+
+
+ ch.qos.logback
+ logback-classic
+
+
+ org.graalvm.nativeimage
+ svm
+ provided
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ test
+
+
+ org.assertj
+ assertj-core
+ test
+
+
+
+
+
+
+ maven-resources-plugin
+
+
+ copy-resources
+
+ prepare-package
+
+ copy-resources
+
+
+ ${project.build.outputDirectory}/META-INF
+
+
+ ${generated-sources}/main/resources/META-INF
+ false
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ -Aproject=${project.groupId}/${project.artifactId}
+ --add-exports
+ java.desktop/sun.awt=ALL-UNNAMED
+ --add-exports
+ java.desktop/sun.font=ALL-UNNAMED
+ --add-exports
+ org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED
+
+ false
+ false
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+
+ org.eclipse.esmf.substitution,org.eclipse.esmf.buildtime
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 1
+ false
+ --add-exports org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+
+
+
+ generate-admin-shell-reflection-config
+ process-classes
+
+ java
+
+
+
+ org.eclipse.esmf.buildtime.Aas4jClassSetup
+
+ ${project.build.outputDirectory}
+ false
+
+
+
+
+ customize-resource-config
+ process-classes
+
+ java
+
+
+
+ org.eclipse.esmf.buildtime.CustomizeGraalVmConfigs
+
+ ${native-config-path}
+ false
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+
+
+
+ org/eclipse/esmf/buildtime/**
+
+
+
+
+
+
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/buildtime/Aas4jClassSetup.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/Aas4jClassSetup.java
similarity index 89%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/buildtime/Aas4jClassSetup.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/Aas4jClassSetup.java
index 7e61845e9..4cf4da11f 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/buildtime/Aas4jClassSetup.java
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/Aas4jClassSetup.java
@@ -20,17 +20,17 @@
import static org.eclipse.digitaltwin.aas4j.v3.dataformat.core.internal.util.ReflectionHelper.MODEL_PACKAGE_NAME;
import static org.eclipse.digitaltwin.aas4j.v3.dataformat.core.internal.util.ReflectionHelper.MODEL_TYPE_SUPERCLASSES;
import static org.eclipse.digitaltwin.aas4j.v3.dataformat.core.internal.util.ReflectionHelper.XML_MIXINS_PACKAGE_NAME;
+import static org.eclipse.esmf.nativefeatures.AssetAdministrationShellFeature.ADMINSHELL_PROPERTIES;
-import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.Properties;
import java.util.Set;
import java.util.stream.Collectors;
@@ -70,14 +70,22 @@ public Aas4jClassSetup() {
config.interfaces = scanAasInterfaces();
config.enums = modelScan.getAllEnums().loadClasses( Enum.class );
config.interfacesWithoutDefaultImplementation = getInterfacesWithoutDefaultImplementation( modelScan );
+ config.classesInModelPackage = classesInPackage( MODEL_PACKAGE_NAME );
+ config.classesInDefaultImplementationPackage = classesInPackage( DEFAULT_IMPLEMENTATION_PACKAGE_NAME );
+ config.classesInJsonMixinsPackage = classesInPackage( JSON_MIXINS_PACKAGE_NAME );
+ config.classesInXmlMixinsPackage = classesInPackage( XML_MIXINS_PACKAGE_NAME );
}
public static void main( final String[] args ) throws IOException {
- final AdminShellConfig config = new Aas4jClassSetup().config;
- final Properties p = config.toProperties();
- final File out = new File( args[0] );
- final FileOutputStream outputStream = new FileOutputStream( out );
- p.store( outputStream, null );
+ try ( final FileOutputStream outputStream = new FileOutputStream( Path.of( args[0] ).resolve( ADMINSHELL_PROPERTIES ).toFile() ) ) {
+ new Aas4jClassSetup().config.toProperties().store( outputStream, null );
+ }
+ }
+
+ private Set> classesInPackage( final String packageName ) {
+ try ( final ScanResult scanResult = new ClassGraph().enableAllInfo().acceptPackages( packageName ).scan() ) {
+ return new HashSet<>( scanResult.getAllClasses().loadClasses() );
+ }
}
/**
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/buildtime/CustomizeGraalVmConfigs.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/CustomizeGraalVmConfigs.java
similarity index 52%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/buildtime/CustomizeGraalVmConfigs.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/CustomizeGraalVmConfigs.java
index ac91f1744..a53f7e6ad 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/buildtime/CustomizeGraalVmConfigs.java
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/CustomizeGraalVmConfigs.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
*
* See the AUTHORS file(s) distributed with this work for additional
* information regarding authorship.
@@ -24,10 +24,11 @@
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Streams;
/**
- * This class runs at build time, after the executable jar for samm-cli has been executed with the GraalVM native image agent,
- * but before the native image compiler is started. It will adjust the configs that were created by the native image agent,
+ * This class runs at build time. It will adjust the configs that were created by the native image agent,
* which sometimes create configurations which lead to failures during either compilation or runtime.
*/
public class CustomizeGraalVmConfigs {
@@ -36,7 +37,7 @@ public static void main( final String[] args ) throws IOException {
final File configsDirectory = new File( args[0] );
if ( !configsDirectory.exists() || !configsDirectory.isDirectory() ) {
System.err.println( "Warning: Native resource config directory " + configsDirectory + " not found, skipping customizing" );
- System.exit( 0 );
+ return;
}
final Path configsPath = configsDirectory.toPath();
adjustResourceConfig( configsPath.resolve( "resource-config.json" ).toFile() );
@@ -75,28 +76,94 @@ private static void adjustResourceConfig( final File resourceConfig ) throws IOE
}
}
+ private static Class> instantiateParameterType( final String typeName ) {
+ for ( final Class> simpleType : List.of(
+ boolean.class, byte.class, int.class, long.class, float.class, double.class,
+ boolean[].class, byte[].class, int[].class, long[].class, float[].class, double[].class
+ ) ) {
+ if ( typeName.equals( simpleType.getSimpleName() ) ) {
+ return simpleType;
+ }
+ }
+
+ try {
+ return Class.forName( typeName, false, CustomizeGraalVmConfigs.class.getClassLoader() );
+ } catch ( final ClassNotFoundException e ) {
+ return null;
+ }
+ }
+
+ private static void removeNonExistingtMethods( final JsonNode entry, final Class> clazz ) {
+ final JsonNode methods = entry.get( "methods" );
+ if ( methods == null ) {
+ return;
+ }
+ for ( final Iterator it = methods.elements(); it.hasNext(); ) {
+ final JsonNode method = it.next();
+ try {
+ final String methodName = method.get( "name" ).asText();
+ final Class>[] parameterTypes = Streams.stream( method.get( "parameterTypes" ).elements() )
+ .map( param -> instantiateParameterType( param.asText() ) )
+ .toArray( Class>[]::new );
+ if ( !methodName.equals( "" ) ) {
+ clazz.getMethod( methodName, parameterTypes );
+ }
+ } catch ( final Throwable t ) {
+ // The method can not be found via reflection, so it can be considered a spurious entry. Remove it.
+ it.remove();
+ }
+ }
+ if ( !methods.elements().hasNext() ) {
+ ( (ObjectNode) entry ).remove( "methods" );
+ }
+ }
+
+ private static boolean shouldEntryBeRemovedFromReflectConfig( final JsonNode entry ) {
+ final String className = entry.get( "name" ).asText();
+ for ( final String nonReflectionClass : List.of(
+ // These three reflection entries are added by the native image agent, but cause the native compilation to fail
+ "jdk.internal.loader.BuiltinClassLoader",
+ "jdk.internal.loader.ClassLoaders$AppClassLoader",
+ "jdk.internal.loader.ClassLoaders$PlatformClassLoader",
+ // The remaining exludes are generated by the native-image agent during test runs and are explicitly not
+ // needed at native-image compile time
+ "org.eclipse.esmf.test.",
+ "test.test.test",
+ "org.junit.",
+ "com.sun.tools.javac"
+ ) ) {
+ if ( className.contains( nonReflectionClass ) ) {
+ return true;
+ }
+ }
+
+ if ( className.matches( "org\\.eclipse\\.esmf\\.*Test" ) ) {
+ return true;
+ }
+
+ try {
+ final Class> clazz = Class.forName( className, false, CustomizeGraalVmConfigs.class.getClassLoader() );
+ removeNonExistingtMethods( entry, clazz );
+ return false;
+ } catch ( final ClassNotFoundException e ) {
+ // If the class can not be instantiated, it's also a spurious entry added by the native-image agent; remove it.
+ return true;
+ }
+ }
+
private static void adjustReflectConfig( final File reflectConfig ) throws IOException {
if ( !reflectConfig.exists() ) {
System.err.println( "Warning: Native resource config " + reflectConfig + " not found, skipping customizing" );
return;
}
- final List> reflectEntriesToDelete = List.of(
- // These three reflection entries are added by the native image agent, but cause the native compilation to fail
- includeNode -> includeNode.asText().contains( "jdk.internal.loader.BuiltinClassLoader" ),
- includeNode -> includeNode.asText().contains( "jdk.internal.loader.ClassLoaders$AppClassLoader" ),
- includeNode -> includeNode.asText().contains( "jdk.internal.loader.ClassLoaders$PlatformClassLoader" )
- );
final String content = Files.readString( reflectConfig.toPath() );
final ObjectMapper mapper = new ObjectMapper();
final JsonNode root = mapper.readTree( content );
- for ( final Iterator i = root.elements(); i.hasNext(); ) {
- final JsonNode include = i.next();
- for ( final Predicate decideIfNodeShouldBeDeleted : reflectEntriesToDelete ) {
- final JsonNode name = include.get( "name" );
- if ( name != null && decideIfNodeShouldBeDeleted.test( include.get( "name" ) ) ) {
- i.remove();
- }
+ for ( final Iterator it = root.elements(); it.hasNext(); ) {
+ final JsonNode entry = it.next();
+ if ( shouldEntryBeRemovedFromReflectConfig( entry ) ) {
+ it.remove();
}
}
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/package-info.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/package-info.java
new file mode 100644
index 000000000..c361aefe5
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/buildtime/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+/**
+ * The org.eclipse.esmf.buildtime package contains classes that are exclusively used (compiled & executed) during the build.
+ * Classes in the package are self-contained programs (with a main() method) that create or modify files, e.g., resources.
+ * The classes from this package are explicitly excluded from the jar of the module. Execution of the classes and configuration of command
+ * line arguments is done in pom.xml.
+ */
+package org.eclipse.esmf.buildtime;
\ No newline at end of file
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/AssetAdministrationShellFeature.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/AssetAdministrationShellFeature.java
new file mode 100644
index 000000000..b3b0df7ae
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/AssetAdministrationShellFeature.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Properties;
+
+import org.eclipse.esmf.buildtime.Aas4jClassSetup;
+import org.eclipse.esmf.substitution.AdminShellConfig;
+
+import org.eclipse.digitaltwin.aas4j.v3.model.LangStringTextType;
+import org.graalvm.nativeimage.Platform;
+import org.graalvm.nativeimage.Platforms;
+import org.graalvm.nativeimage.hosted.Feature;
+
+/**
+ * Registers all classes in the AAS model and default implementation packages for reflection in native image builds.
+ */
+@Platforms( Platform.HOSTED_ONLY.class )
+public class AssetAdministrationShellFeature implements Feature {
+ /**
+ * The properties file that provides information about AAS features that can otherwise only be retrieved using reflection.
+ * See {@link AdminShellConfig} for more information.
+ */
+ public static final String ADMINSHELL_PROPERTIES = "adminshell.properties";
+
+ @Override
+ public void beforeAnalysis( final BeforeAnalysisAccess access ) {
+ final Properties adminShellProperties = new Properties();
+ final InputStream propertiesResource = AssetAdministrationShellFeature.class.getClassLoader()
+ .getResourceAsStream( ADMINSHELL_PROPERTIES );
+ try {
+ adminShellProperties.load( propertiesResource );
+ } catch ( final IOException exception ) {
+ throw new RuntimeException( "Failed to load " + ADMINSHELL_PROPERTIES );
+ }
+ final AdminShellConfig adminShellConfig = AdminShellConfig.fromProperties( adminShellProperties );
+
+ /*
+ * The following commands register AAS4J model classes for reflection. Note that this is done using the pre-calculated
+ * list of classes that we load from adminshell.properties: This prevents the dependency on the classgraph-library at
+ * native image compile time.
+ */
+ adminShellConfig.classesInModelPackage.forEach( cls -> Native.forClass( cls ).registerEverythingForReflection() );
+ adminShellConfig.classesInDefaultImplementationPackage.forEach( cls -> Native.forClass( cls ).registerEverythingForReflection() );
+ adminShellConfig.classesInJsonMixinsPackage.forEach( cls -> Native.forClass( cls ).registerEverythingForReflection() );
+ adminShellConfig.classesInXmlMixinsPackage.forEach( cls -> Native.forClass( cls ).registerEverythingForReflection() );
+
+ Native.forClass( LangStringTextType[].class )
+ .registerEverythingForReflection();
+ }
+}
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/DiagramFeature.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/DiagramFeature.java
new file mode 100644
index 000000000..75ca407cd
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/DiagramFeature.java
@@ -0,0 +1,407 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import static org.eclipse.esmf.nativefeatures.Native.clazz;
+import static org.eclipse.esmf.nativefeatures.Native.isLinux;
+import static org.eclipse.esmf.nativefeatures.Native.isWindows;
+
+import org.eclipse.esmf.aspectmodel.generator.diagram.AspectModelDiagramGenerator;
+
+import org.graalvm.nativeimage.Platform;
+import org.graalvm.nativeimage.Platforms;
+import org.graalvm.nativeimage.hosted.Feature;
+
+/**
+ * This feature configures AWT, JDK font classes etc. for reflection and JNI access, as is required by the
+ * {@link AspectModelDiagramGenerator}.
+ */
+@Platforms( Platform.HOSTED_ONLY.class )
+public class DiagramFeature implements Feature {
+ @Override
+ public void beforeAnalysis( final Feature.BeforeAnalysisAccess access ) {
+ setupAwt();
+ setupFontConfiguration();
+ setupJava2d();
+ setupBatikConfiguration();
+ setupGraphSupportConfiguration();
+ }
+
+ private void setupJava2d() {
+ if ( isWindows() ) {
+ Native.forClass( "sun.java2d.d3d.D3DGraphicsDevice" )
+ .registerEverythingForReflection()
+ .registerEverythingForJni();
+ Native.forClass( "sun.java2d.d3d.D3DGraphicsDevice$1" )
+ .registerMethodForJni( "run" );
+ Native.forClass( "sun.java2d.d3d.D3DRenderQueue$1" )
+ .registerMethodForJni( "run" );
+ Native.forClass( "sun.java2d.windows.WindowsFlags" )
+ .registerFieldsForJni( "d3dEnabled", "d3dSet", "offscreenSharingEnabled", "setHighDPIAware" );
+ } else if ( isLinux() ) {
+ Native.forClass( "sun.java2d.xr.XRSurfaceData" )
+ .registerEverythingForReflection()
+ .registerFieldsForJni( "picture", "xid" );
+ }
+
+ Native.forClass( "sun.java2d.marlin.DMarlinRenderingEngine" )
+ .registerConstructorForReflection();
+
+ Native.forClass( "sun.java2d.loops.GraphicsPrimitive" )
+ .initializeAtBuildTime()
+ .registerFieldsForJni( "pNativePrim" );
+ Native.forArrayClass( "sun.java2d.loops.GraphicsPrimitive" )
+ .registerEverythingForJni();
+ Native.forClass( "sun.java2d.Disposer" )
+ .registerMethodForJni( "addRecord", java.lang.Object.class, long.class, long.class );
+ Native.forClass( "sun.java2d.InvalidPipeException" )
+ .registerEverythingForJni();
+ Native.forClass( "sun.java2d.NullSurfaceData" )
+ .registerEverythingForJni();
+ Native.forClass( "sun.java2d.SunGraphics2D" )
+ .registerFieldsForJni( "clipRegion", "composite", "eargb", "lcdTextContrast", "pixel", "strokeHint" );
+ Native.forClass( "sun.java2d.SunGraphicsEnvironment" )
+ .registerMethodForJni( "isDisplayLocal" );
+ Native.forClass( "sun.java2d.SurfaceData" )
+ .registerFieldsForJni( "pData", "valid" );
+ Native.forClass( "sun.java2d.loops.SurfaceType" )
+ .initializeAtBuildTime();
+ Native.forClass( "sun.java2d.loops.CompositeType" )
+ .initializeAtBuildTime();
+ Native.forClass( "sun.java2d.loops.Blit" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.BlitBg" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.CompositeType" )
+ .registerFieldsForJni( "AnyAlpha", "Src", "SrcNoEa", "SrcOver", "SrcOverNoEa", "Xor" );
+ Native.forClass( "sun.java2d.loops.DrawGlyphList" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.DrawGlyphListAA" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.DrawGlyphListLCD" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.DrawLine" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.DrawParallelogram" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.DrawPath" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.DrawPolygons" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.DrawRect" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.FillParallelogram" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.FillPath" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.FillRect" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.FillSpans" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.GraphicsPrimitiveMgr" )
+ .registerMethodForJni( "register", clazz( "sun.java2d.loops.GraphicsPrimitive" ).arrayType() );
+ Native.forClass( "sun.java2d.loops.MaskBlit" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.MaskFill" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.ScaledBlit" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.SurfaceType" )
+ .registerFieldsForJni( "Any3Byte", "Any4Byte", "AnyByte", "AnyColor", "AnyInt", "AnyShort", "ByteBinary1Bit", "ByteBinary2Bit",
+ "ByteBinary4Bit", "ByteGray", "ByteIndexed", "ByteIndexedBm", "FourByteAbgr", "FourByteAbgrPre", "Index12Gray",
+ "Index8Gray", "IntArgb", "IntArgbBm", "IntArgbPre", "IntBgr", "IntRgb", "IntRgbx", "OpaqueColor", "ThreeByteBgr",
+ "Ushort4444Argb", "Ushort555Rgb", "Ushort555Rgbx", "Ushort565Rgb", "UshortGray", "UshortIndexed" );
+ Native.forClass( "sun.java2d.loops.TransformHelper" )
+ .registerConstructorForJni( long.class, clazz( "sun.java2d.loops.SurfaceType" ),
+ clazz( "sun.java2d.loops.CompositeType" ), clazz( "sun.java2d.loops.SurfaceType" ) );
+ Native.forClass( "sun.java2d.loops.XORComposite" )
+ .registerFieldsForJni( "alphaMask", "xorColor", "xorPixel" );
+ Native.forClass( "sun.java2d.pipe.Region" )
+ .registerFieldsForJni( "bands", "endIndex", "hix", "hiy", "lox", "loy" );
+ Native.forClass( "sun.java2d.pipe.RegionIterator" )
+ .registerFieldsForJni( "curIndex", "numXbands", "region" );
+ Native.forClass( "sun.java2d.pipe.ShapeSpanIterator" )
+ .registerFieldsForJni( "pData" );
+ }
+
+ private void setupAwt() {
+ if ( isLinux() ) {
+ Native.forClass( "sun.awt.X11.XToolkit" )
+ .registerEverythingForReflection()
+ .registerEverythingForJni();
+ Native.forClass( "sun.awt.X11.XErrorHandlerUtil" )
+ .registerMethodForJni( "init", long.class );
+ Native.forClass( "sun.awt.X11GraphicsConfig" )
+ .registerFieldsForJni( "aData", "bitsPerPixel" );
+ Native.forClass( "sun.awt.X11GraphicsDevice" )
+ .registerMethodForJni( "addDoubleBufferVisual", int.class );
+ } else if ( isWindows() ) {
+ Native.forClass( "sun.awt.Win32GraphicsDevice" )
+ .registerEverythingForReflection();
+ Native.forClass( "sun.awt.Win32FontManager" )
+ .registerAllConstructorsForReflection();
+ Native.forClass( "sun.awt.Win32GraphicsDevice" )
+ .registerEverythingForJni();
+ Native.forClass( "sun.awt.Win32GraphicsConfig" )
+ .registerFieldsForJni( "visual" );
+ Native.forClass( "sun.awt.Win32GraphicsEnvironment" )
+ .registerMethodForJni( "dwmCompositionChanged", boolean.class );
+ Native.forClass( "sun.awt.windows.WComponentPeer" )
+ .registerFieldsForJni( "hwnd", "winGraphicsConfig" )
+ .registerMethodForJni( "disposeLater" )
+ .registerMethodForJni( "replaceSurfaceData" )
+ .registerMethodForJni( "replaceSurfaceDataLater" );
+ Native.forClass( "sun.awt.windows.WDesktopPeer" )
+ .registerMethodForJni( "systemSleepCallback", boolean.class )
+ .registerMethodForJni( "userSessionCallback", boolean.class, java.awt.desktop.UserSessionEvent.Reason.class );
+ Native.forClass( "sun.awt.windows.WObjectPeer" )
+ .registerFieldsForJni( "createError", "destroyed", "pData", "target" )
+ .registerMethodForJni( "getPeerForTarget", java.lang.Object.class );
+ Native.forClass( "sun.awt.windows.WToolkit" )
+ .registerMethodForJni( "displayChanged" )
+ .registerMethodForJni( "paletteChanged" )
+ .registerMethodForJni( "windowsSettingChange" );
+ }
+
+ Native.forClass( java.awt.Color.class )
+ .registerAllFieldsForReflection()
+ .registerAllMethodsForReflection();
+ Native.forClass( java.awt.Insets.class )
+ .registerAllFieldsForReflection()
+ .registerAllMethodsForReflection();
+ Native.forClass( java.awt.event.InputEvent.class )
+ .registerEverythingForReflection();
+ Native.forClass( java.awt.AWTEvent.class )
+ .registerEverythingForReflection();
+ Native.forClass( java.awt.Component.class )
+ .registerEverythingForReflection();
+ Native.forClass( java.awt.Font.class )
+ .registerConstructorForReflection( String.class, int.class, int.class );
+ Native.forClass( java.awt.Canvas.class )
+ .registerConstructorForReflection();
+ Native.forClass( java.awt.FontMetrics.class )
+ .registerMethodForReflection( "getHeight" )
+ .registerMethodForReflection( "stringWidth", String.class );
+
+ Native.forClass( java.awt.Cursor.class )
+ .registerFieldsForJni( "pData", "type" )
+ .registerMethodForJni( "setPData", long.class );
+ Native.forClass( java.awt.Dimension.class )
+ .registerFieldsForJni( "height", "width" );
+ Native.forClass( java.awt.Font.class )
+ .registerFieldsForJni( "name", "pData", "size", "style" )
+ .registerMethodForJni( "getFont", String.class )
+ .registerMethodForJni( "getFontPeer" );
+ Native.forClass( java.awt.Point.class )
+ .registerFieldsForJni( "x", "y" );
+ Native.forClass( java.awt.Toolkit.class )
+ .registerMethodForJni( "getDefaultToolkit" )
+ .registerMethodForJni( "getFontMetrics", java.awt.Font.class );
+ Native.forClass( java.awt.desktop.UserSessionEvent.Reason.class )
+ .registerFieldsForJni( "CONSOLE", "LOCK", "REMOTE", "UNSPECIFIED" );
+ Native.forClass( java.awt.Color.class )
+ .registerAllFieldsForJni()
+ .registerAllMethodsForJni();
+ Native.forClass( java.awt.Insets.class )
+ .registerAllFieldsForJni()
+ .registerAllMethodsForJni();
+ Native.forClass( java.awt.event.InputEvent.class )
+ .registerEverythingForJni();
+ Native.forClass( java.awt.image.BufferedImage.class )
+ .registerFieldsForJni( "colorModel", "imageType", "raster" )
+ .registerMethodForJni( "getRGB", int.class, int.class, int.class, int.class, int[].class, int.class, int.class )
+ .registerMethodForJni( "setRGB", int.class, int.class, int.class, int.class, int[].class, int.class, int.class );
+ Native.forClass( java.awt.image.Raster.class )
+ .registerFieldsForJni( "dataBuffer", "height", "minX", "minY", "numBands", "numDataElements", "sampleModel",
+ "sampleModelTranslateX", "sampleModelTranslateY", "width" );
+ Native.forClass( java.awt.image.SampleModel.class )
+ .registerFieldsForJni( "height", "width" )
+ .registerMethodForJni( "getPixels", int.class, int.class, int.class, int.class, int[].class, java.awt.image.DataBuffer.class )
+ .registerMethodForJni( "setPixels", int.class, int.class, int.class, int.class, int[].class, java.awt.image.DataBuffer.class );
+ Native.forClass( java.awt.image.SinglePixelPackedSampleModel.class )
+ .registerFieldsForJni( "bitMasks", "bitOffsets", "bitSizes", "maxBitSize" );
+ Native.forClass( java.awt.AWTEvent.class )
+ .registerEverythingForJni();
+ Native.forClass( java.awt.AlphaComposite.class )
+ .registerFieldsForJni( "extraAlpha", "rule" );
+ Native.forClass( java.awt.Component.class )
+ .registerEverythingForJni();
+ Native.forClass( java.awt.GraphicsEnvironment.class )
+ .registerMethodForJni( "getLocalGraphicsEnvironment" )
+ .registerMethodForJni( "isHeadless" );
+ Native.forClass( java.awt.event.KeyEvent.class )
+ .registerFieldsForJni( "isProxyActive" );
+ Native.forClass( java.awt.geom.AffineTransform.class )
+ .registerFieldsForJni( "m00", "m01", "m02", "m10", "m11", "m12" );
+ Native.forClass( java.awt.geom.GeneralPath.class )
+ .registerConstructorForJni()
+ .registerConstructorForJni( int.class, byte[].class, int.class, float[].class, int.class );
+ Native.forClass( java.awt.geom.Path2D.class )
+ .registerFieldsForJni( "numTypes", "pointTypes", "windingRule" );
+ Native.forClass( java.awt.geom.Path2D.Float.class )
+ .registerFieldsForJni( "floatCoords" );
+ Native.forClass( java.awt.geom.Point2D.Float.class )
+ .registerFieldsForJni( "x", "y" )
+ .registerConstructorForJni( float.class, float.class );
+ Native.forClass( java.awt.geom.Rectangle2D.Float.class )
+ .registerFieldsForJni( "height", "width", "x", "y" )
+ .registerConstructorForJni()
+ .registerConstructorForJni( float.class, float.class, float.class, float.class );
+ Native.forClass( java.awt.image.ColorModel.class )
+ .registerFieldsForJni( "colorSpace", "colorSpaceType", "isAlphaPremultiplied", "is_sRGB", "nBits", "numComponents", "pData",
+ "supportsAlpha", "transparency" )
+ .registerMethodForJni( "getRGBdefault" );
+ Native.forClass( java.awt.image.IndexColorModel.class )
+ .registerFieldsForJni( "allgrayopaque", "map_size", "rgb", "transparent_index", "colorData" );
+ Native.forClass( "sun.awt.AWTAutoShutdown" )
+ .registerMethodForJni( "notifyToolkitThreadBusy" )
+ .registerMethodForJni( "notifyToolkitThreadFree" );
+ Native.forClass( "sun.awt.SunHints" )
+ .registerFieldsForJni( "INTVAL_STROKE_PURE" );
+ Native.forClass( "sun.awt.SunToolkit" )
+ .registerMethodForJni( "awtLock" )
+ .registerMethodForJni( "awtLockNotify" )
+ .registerMethodForJni( "awtLockNotifyAll" )
+ .registerMethodForJni( "awtLockWait", long.class )
+ .registerMethodForJni( "awtUnlock" )
+ .registerMethodForJni( "isTouchKeyboardAutoShowEnabled" );
+ Native.forClass( "sun.awt.image.ByteComponentRaster" )
+ .registerFieldsForJni( "data", "dataOffsets", "pixelStride", "scanlineStride", "type" );
+ Native.forClass( "sun.awt.image.GifImageDecoder" )
+ .registerFieldsForJni( "outCode", "prefix", "suffix" )
+ .registerMethodForJni( "readBytes", byte[].class, int.class, int.class )
+ .registerMethodForJni( "sendPixels", int.class, int.class, int.class, int.class, byte[].class,
+ java.awt.image.ColorModel.class );
+ Native.forClass( "sun.awt.image.BufImgSurfaceData$ICMColorData" )
+ .registerFieldsForJni( "pData" )
+ .registerConstructorForJni( long.class );
+ Native.forClass( "sun.awt.image.ImageRepresentation" )
+ .registerFieldsForJni( "numSrcLUT", "srcLUTtransIndex" );
+ Native.forClass( "sun.awt.image.IntegerComponentRaster" )
+ .registerFieldsForJni( "data", "dataOffsets", "pixelStride", "scanlineStride", "type" );
+ Native.forClass( "sun.awt.image.SunVolatileImage" )
+ .registerFieldsForJni( "volSurfaceManager" );
+ Native.forClass( "sun.awt.image.VolatileSurfaceManager" )
+ .registerFieldsForJni( "sdCurrent" );
+
+ Native.addClassBasedResourceBundle( "sun.awt.resources.awt", "sun.awt.resources.awt" );
+ }
+
+ private void setupBatikConfiguration() {
+ Native.forClass( "com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl" )
+ .registerConstructorForReflection();
+ Native.forClass( "org.apache.batik.bridge.RhinoInterpreterFactory" )
+ .registerConstructorForReflection();
+ Native.forClass( "org.apache.batik.css.parser.Parser" )
+ .registerEverythingForReflection();
+ Native.forClass( "org.apache.batik.ext.awt.image.codec.png.PNGTranscoderInternalCodecWriteAdapter" )
+ .registerEverythingForReflection();
+
+ Native.addResource( "org/apache/batik/anim/dom/resources/UserAgentStyleSheet.css" );
+ Native.addResource( "org/apache/batik/bridge/resources/help.gif" );
+ Native.addResourcesPattern( "org/apache/batik.*\\.properties" );
+ }
+
+ private void setupGraphSupportConfiguration() {
+ Native.forArrayClass( "org.graphper.layout.dot.DNode" )
+ .registerClassForReflection();
+ Native.forClass( "org.graphper.api.LineAttrs" )
+ .registerAllFieldsForReflection();
+ Native.forClass( "org.graphper.api.NodeAttrs" )
+ .registerAllFieldsForReflection();
+
+ Native.addResource( "META-INF/services/org.graphper.draw.CustomizeShapeRender" );
+ Native.addResource( "META-INF/services/org.graphper.layout.MeasureText" );
+ }
+
+ private void setupFontConfiguration() {
+ if ( isLinux() ) {
+ Native.forClass( "sun.font.FontConfigManager" )
+ .registerAllFieldsForReflection()
+ .registerAllFieldsForJni()
+ .registerAllMethodsForJni();
+ Native.forClass( "sun.font.FontConfigManager$FontConfigInfo" )
+ .registerAllFieldsForReflection()
+ .registerAllFieldsForJni()
+ .registerAllMethodsForJni();
+ Native.forClass( "sun.font.FontConfigManager$FcCompFont" )
+ .registerAllFieldsForReflection()
+ .registerAllFieldsForJni()
+ .registerAllMethodsForJni();
+ Native.forClass( "sun.font.FontConfigManager$FontConfigFont" )
+ .registerEverythingForReflection()
+ .registerEverythingForJni();
+ }
+ Native.forClass( "sun.font.CompositeFontDescriptor" )
+ .registerEverythingForReflection();
+ Native.forClass( "sun.font.FontDesignMetrics" )
+ .registerEverythingForReflection()
+ .registerEverythingForJni();
+ Native.forClass( java.awt.FontMetrics.class )
+ .registerFieldsForJni( "font" )
+ .registerMethodForJni( "getHeight" );
+ Native.forClass( "sun.font.CharToGlyphMapper" )
+ .registerMethodForJni( "charToGlyph", int.class );
+ Native.forClass( "sun.font.Font2D" )
+ .registerMethodForJni( "canDisplay", char.class )
+ .registerMethodForJni( "charToGlyph", int.class )
+ .registerMethodForJni( "charToVariationGlyph", int.class, int.class )
+ .registerMethodForJni( "getMapper" )
+ .registerMethodForJni( "getTableBytes", int.class );
+ Native.forClass( "sun.font.FontStrike" )
+ .registerMethodForJni( "getGlyphMetrics", int.class );
+ Native.forClass( "sun.font.FreetypeFontScaler" )
+ .registerMethodForJni( "invalidateScaler" );
+ Native.forClass( "sun.font.GlyphList" )
+ .registerFieldsForJni( "gposx", "gposy", "images", "lcdRGBOrder", "lcdSubPixPos", "len", "positions", "usePositions" );
+ Native.forClass( "sun.font.GlyphLayout$GVData" )
+ .registerFieldsForJni( "_count", "_flags", "_glyphs", "_indices", "_positions" )
+ .registerMethodForJni( "grow" );
+ Native.forClass( "sun.font.PhysicalStrike" )
+ .registerFieldsForJni( "pScalerContext" )
+ .registerMethodForJni( "adjustPoint", java.awt.geom.Point2D.Float.class )
+ .registerMethodForJni( "getGlyphPoint", int.class, int.class );
+ Native.forClass( "sun.font.StrikeMetrics" )
+ .registerConstructorForJni( float.class, float.class, float.class, float.class, float.class, float.class, float.class,
+ float.class, float.class, float.class );
+ Native.forClass( "sun.font.TrueTypeFont" )
+ .registerMethodForJni( "readBlock", java.nio.ByteBuffer.class, int.class, int.class )
+ .registerMethodForJni( "readBytes", int.class, int.class );
+ Native.forClass( "sun.font.Type1Font" )
+ .registerMethodForJni( "readFile", java.nio.ByteBuffer.class );
+
+ if ( isWindows() ) {
+ Native.forClass( "sun.awt.FontConfiguration" )
+ .registerEverythingForReflection();
+ Native.addResource( "fontconfig.bfc" );
+ }
+ }
+}
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/EsmfFeature.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/EsmfFeature.java
new file mode 100644
index 000000000..3d8d85937
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/EsmfFeature.java
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import java.util.List;
+
+import org.eclipse.esmf.aspectmodel.java.JavaCodeGenerationConfig;
+
+import org.graalvm.nativeimage.hosted.Feature;
+
+/**
+ * Build time initialization for esmf-sdk in native-image context
+ */
+public class EsmfFeature implements Feature {
+ @Override
+ public void beforeAnalysis( final BeforeAnalysisAccess access ) {
+ Native.forClass( com.google.common.collect.Range.class )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.tools.javac.file.BaseFileManager" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.tools.javac.file.JavacFileManager" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.tools.javac.file.Locations" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.tools.javac.util.Context" )
+ .initializeAtBuildTime();
+ Native.forClass( "jdk.internal.net.http.HttpClientImpl" )
+ .initializeAtBuildTime();
+ Native.forClass( "jdk.internal.net.http.HttpClientImpl$SelectorManager" )
+ .initializeAtBuildTime();
+ Native.forClass( "jdk.internal.net.http.common.Utils" )
+ .initializeAtBuildTime();
+
+ Native.addResourceBundle( "com.sun.tools.javac.resources.compiler" );
+ Native.addResourceBundle( "com.sun.tools.javac.resources.javac" );
+
+ Native.forClass( "sun.util.resources.LocaleData$LocaleDataStrategy" )
+ .registerEverythingForReflection();
+ Native.forClass( "sun.util.resources.LocaleData" )
+ .registerEverythingForReflection();
+
+ Native.forClass( java.util.concurrent.atomic.AtomicBoolean.class )
+ .registerFieldsForReflection( "value" );
+ Native.forClass( org.eclipse.esmf.metamodel.impl.DefaultScalarValue.class )
+ .registerEverythingForReflection();
+ Native.forClass( org.eclipse.esmf.metamodel.impl.DefaultProperty.class )
+ .registerEverythingForReflection();
+ Native.forClass( org.eclipse.esmf.aspectmodel.loader.DefaultPropertyWrapper.class )
+ .registerEverythingForReflection();
+ Native.forClass( JavaCodeGenerationConfig.class )
+ .registerEverythingForReflection();
+
+ Native.forClass( java.lang.Thread.class )
+ .registerEverythingForReflection()
+ .registerEverythingForJni();
+ Native.forClass( java.lang.Boolean.class )
+ .registerMethodForReflection( "getBoolean", String.class );
+ Native.forClass( java.lang.System.class )
+ .registerMethodForReflection( "load", String.class )
+ .registerMethodForReflection( "setProperty", String.class, String.class );
+ Native.forClass( java.lang.String.class )
+ .registerMethodForReflection( "toLowerCase", java.util.Locale.class );
+ Native.forClass( java.util.ArrayList.class )
+ .registerConstructorForReflection( int.class )
+ .registerMethodForReflection( "add", Object.class );
+ Native.forClass( java.util.HashMap.class )
+ .registerMethodForReflection( "containsKey", Object.class )
+ .registerMethodForReflection( "put", Object.class, Object.class );
+
+ // JDK and GraalVM config
+ Native.addResourcesPattern( "java.base:\\Qjdk/internal/icu/impl/data/icudt67b/ubidi.icu\\E" );
+ Native.addResource( "META-INF/services/com.oracle.truffle.api.TruffleLanguage$Provider" );
+ Native.addResource( "META-INF/services/com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider" );
+ Native.addResource( "META-INF/services/javax.script.ScriptEngineFactory" );
+ Native.addResource( "com/oracle/truffle/nfi/impl/NFILanguageImpl.class" );
+
+ // ESMF artifacts generation config
+ Native.addResource( "openapi/*.json" );
+ Native.addResource( "docu/static/*.*" );
+ Native.addResource( "docu/styles/*.*" );
+ Native.addResource( "docu/aspect-model.properties" );
+
+ // SAMM artifacts
+ Native.addResourcesPattern( "samm/[^/]*/([^/]*/)?[a-zA-Z0-9-]+\\.(ttl|js)" );
+ }
+
+ @Override
+ public List> getRequiredFeatures() {
+ return List.of(
+ AssetAdministrationShellFeature.class,
+ LogbackFeature.class,
+ ShaclJsFeature.class,
+ JenaFeature.class,
+ DiagramFeature.class
+ );
+ }
+}
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/JenaFeature.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/JenaFeature.java
new file mode 100644
index 000000000..381efddae
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/JenaFeature.java
@@ -0,0 +1,102 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import org.graalvm.nativeimage.hosted.Feature;
+
+/**
+ * Configuration of eagerly initialized Jena classes
+ */
+public class JenaFeature implements Feature {
+ @Override
+ public void beforeAnalysis( final Feature.BeforeAnalysisAccess access ) {
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.Constants" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLEntityManager" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLEntityManager$EncodingInfo" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLEntityScanner" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLScanner" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.XMLVersionDetector" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDProcessor" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.dtd.XMLNSDTDValidator" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.util.FeatureState" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.util.PropertyState" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.util.XMLChar" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.util.XMLSymbols" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.org.apache.xerces.internal.xni.NamespaceContext" )
+ .initializeAtBuildTime();
+ Native.forClass( "com.sun.xml.internal.stream.util.ThreadLocalBufferAllocator" )
+ .initializeAtBuildTime();
+ Native.forClass( "javax.xml.parsers.FactoryFinder" )
+ .initializeAtBuildTime();
+ Native.forClass( "jdk.xml.internal.JdkXmlUtils" )
+ .initializeAtBuildTime();
+ Native.forClass( "jdk.xml.internal.SecuritySupport" )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.impl.dv.xs.AnyURIDV.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.impl.dv.xs.BaseSchemaDVFactory.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.impl.dv.xs.ExtendedSchemaDVFactoryImpl.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.impl.dv.xs.QNameDV.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.impl.dv.xs.SchemaDVFactoryImpl.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.impl.dv.xs.XSSimpleTypeDecl.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.impl.dv.xs.XSSimpleTypeDecl.class )
+ .initializeAtBuildTime();
+ Native.forClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$CharToken" )
+ .initializeAtBuildTime();
+ Native.forClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$ClosureToken" )
+ .initializeAtBuildTime();
+ Native.forClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$ParenToken" )
+ .initializeAtBuildTime();
+ Native.forClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$UnionToken" )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.jena.ext.xerces.util.XercesXMLChar.class )
+ .initializeAtBuildTime();
+
+ Native.addResource( "META-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle" );
+ Native.addResource( "org/apache/jena/arq/arq-properties.xml" );
+ Native.addResource( "org/apache/jena/jena-properties.xml" );
+
+ Native.addResourceBundle( "org.apache.jena.ext.xerces.impl.xpath.regex.message" );
+ Native.addResourceBundle( "org.apache.jena.ext.xerces.impl.msg.XMLSchemaMessages" );
+ }
+}
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/LogbackFeature.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/LogbackFeature.java
new file mode 100644
index 000000000..b10936713
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/LogbackFeature.java
@@ -0,0 +1,179 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import org.graalvm.nativeimage.hosted.Feature;
+
+/**
+ * Configuration of eagerly initialized SLF4J and Logback classes for native image builds
+ */
+public class LogbackFeature implements Feature {
+ @Override
+ public void beforeAnalysis( final Feature.BeforeAnalysisAccess access ) {
+ Native.forClass( ch.qos.logback.classic.Level.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.Logger.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.PatternLayout.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.CoreConstants.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.parser.Parser.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.spi.AppenderAttachableImpl.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.status.InfoStatus.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.status.StatusBase.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.util.Loader.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.util.StatusPrinter.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.util.StatusPrinter2.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+
+ Native.forClass( org.apache.logging.log4j.spi.Provider.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.util.ProviderUtil.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.util.Strings.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.util.Constants.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.spi.AbstractLogger.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.message.ReusableMessageFactory.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.util.OsgiServiceLocator.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.status.StatusLogger.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.Level.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.util.PropertiesUtil.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.util.LoaderUtil.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.util.PropertySource.Util.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.spi.StandardLevel.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.spi.LoggerRegistry.class )
+ .initializeAtBuildTime();
+ Native.forClass( org.apache.logging.log4j.simple.SimpleLogger.class )
+ .initializeAtBuildTime();
+
+ Native.forClass( org.slf4j.LoggerFactory.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+ Native.forClass( org.slf4j.helpers.Reporter.class )
+ .initializeAtBuildTime()
+ .registerEverythingForReflection();
+
+ Native.forClass( ch.qos.logback.classic.pattern.ClassOfCallerConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.ClassOfCallerConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.ContextNameConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.DateConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.FileOfCallerConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.LevelConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.LineOfCallerConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.LineSeparatorConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.LocalSequenceNumberConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.LoggerConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.MDCConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.MarkerConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.MessageConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.MethodOfCallerConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.NopThrowableInformationConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.PropertyConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.RelativeTimeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.ThreadConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.ThrowableProxyConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.IdentityCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.ReplacingCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BlackCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BoldBlueCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BoldCyanCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BoldMagentaCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BoldRedCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BoldWhiteCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.CyanCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.GrayCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.GreenCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.MagentaCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.RedCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.WhiteCompositeConverter.class )
+ .registerEverythingForReflection();
+ Native.forClass( ch.qos.logback.core.pattern.color.YellowCompositeConverter.class )
+ .registerEverythingForReflection();
+
+ Native.addResource( "org/slf4j/impl/StaticLoggerBinder.class" );
+ }
+}
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/Native.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/Native.java
new file mode 100644
index 000000000..0b7299225
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/Native.java
@@ -0,0 +1,446 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import static org.graalvm.nativeimage.impl.ConfigurationCondition.alwaysTrue;
+
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Executable;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Locale;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+import javax.annotation.Nonnull;
+
+import org.eclipse.esmf.substitution.IsLinux;
+import org.eclipse.esmf.substitution.IsWindows;
+
+import com.oracle.svm.core.configure.ResourcesRegistry;
+import org.graalvm.nativeimage.ImageInfo;
+import org.graalvm.nativeimage.ImageSingletons;
+import org.graalvm.nativeimage.impl.ConfigurationCondition;
+import org.graalvm.nativeimage.impl.RuntimeClassInitializationSupport;
+import org.graalvm.nativeimage.impl.RuntimeJNIAccessSupport;
+import org.graalvm.nativeimage.impl.RuntimeReflectionSupport;
+
+/**
+ * Helper class for registration of resources, classes etc. for GraalVM native image compilation.
+ */
+public class Native {
+ private final Class> clazz;
+ private static final Supplier RESOURCES_REGISTRY;
+ private static final Supplier RUNTIME_CLASS_INITIALIZATION_SUPPORT;
+ private static final Supplier RUNTIME_REFLECTION_SUPPORT;
+ private static final Supplier RUNTIME_JNI_ACCESS_SUPPORT;
+
+ static {
+ /*
+ If the class runs in regular Java context (i.e., outside native-image compilation) the native runtime access
+ is replaced with dummy implementations. This turns all native setup calls into NOP calls instead of throwing
+ exceptions, which allows testing class instantiation from the Feature classes.
+ */
+ if ( ImageInfo.inImageBuildtimeCode() ) {
+ RESOURCES_REGISTRY = () -> ImageSingletons.lookup( ResourcesRegistry.class );
+ RUNTIME_CLASS_INITIALIZATION_SUPPORT = () -> ImageSingletons.lookup( RuntimeClassInitializationSupport.class );
+ RUNTIME_REFLECTION_SUPPORT = () -> ImageSingletons.lookup( RuntimeReflectionSupport.class );
+ RUNTIME_JNI_ACCESS_SUPPORT = () -> ImageSingletons.lookup( RuntimeJNIAccessSupport.class );
+ } else {
+ RESOURCES_REGISTRY = DummyResourcesRegistry::new;
+ RUNTIME_CLASS_INITIALIZATION_SUPPORT = DummyRuntimeClassInitializationSupport::new;
+ RUNTIME_REFLECTION_SUPPORT = DummyRuntimeReflectionSupport::new;
+ RUNTIME_JNI_ACCESS_SUPPORT = DummyRuntimeJniAccessSupport::new;
+ }
+ }
+
+ private Native( final Class> clazz ) {
+ this.clazz = clazz;
+ }
+
+ public static Native forClass( final Class> clazz ) {
+ return new Native( clazz );
+ }
+
+ public static Native forArrayClass( final String fullyQualifiedJavaClass ) {
+ return forClass( "[L" + fullyQualifiedJavaClass + ";" );
+ }
+
+ public static Native forClass( final String fullyQualifiedJavaClass ) {
+ final Class> clazz;
+ try {
+ clazz = Class.forName( fullyQualifiedJavaClass, false, Native.class.getClassLoader() );
+ } catch ( final ClassNotFoundException exception ) {
+ throw new RuntimeException( exception );
+ }
+ return forClass( clazz );
+ }
+
+ public Native initializeAtBuildTime() {
+ final StackTraceElement[] stacktrace = Thread.currentThread().getStackTrace();
+ final String unqualifiedName = clazz.getTypeName().substring( clazz.getTypeName().lastIndexOf( '.' ) + 1 );
+ final String caller = stacktrace[1].getClassName() + "." + stacktrace[1].getMethodName();
+ final String reason = "from feature %s with '%s.class'".formatted( caller, unqualifiedName );
+ RUNTIME_CLASS_INITIALIZATION_SUPPORT.get().initializeAtBuildTime( clazz, reason );
+ return this;
+ }
+
+ public Native registerEverythingForReflection() {
+ return registerClassForReflection()
+ .registerAllFieldsForReflection()
+ .registerAllConstructorsForReflection()
+ .registerAllMethodsForReflection();
+ }
+
+ public Native registerClassForReflection() {
+ RUNTIME_REFLECTION_SUPPORT.get().register( alwaysTrue(), clazz );
+ return this;
+ }
+
+ public Native registerAllFieldsForReflection() {
+ RUNTIME_REFLECTION_SUPPORT.get().register( alwaysTrue(), false, clazz.getDeclaredFields() );
+ return this;
+ }
+
+ public Native registerFieldsForReflection( @Nonnull final String... fieldNames ) {
+ for ( final Field field : clazz.getDeclaredFields() ) {
+ for ( final String targetField : fieldNames ) {
+ if ( field.getName().equals( targetField ) ) {
+ RUNTIME_REFLECTION_SUPPORT.get().register( alwaysTrue(), false, field );
+ }
+ }
+ }
+ return this;
+ }
+
+ public Native registerAllConstructorsForReflection() {
+ RUNTIME_REFLECTION_SUPPORT.get().register( alwaysTrue(), false, clazz.getDeclaredConstructors() );
+ return this;
+ }
+
+ public Native registerConstructorForReflection( @Nonnull final Class>... args ) {
+ try {
+ RUNTIME_REFLECTION_SUPPORT.get().register( alwaysTrue(), false, clazz.getDeclaredConstructor( args ) );
+ } catch ( final NoSuchMethodException exception ) {
+ throw new RuntimeException( "Could not find constructor in " + clazz + " with args "
+ + Arrays.stream( args ).map( Class::toString ).collect( Collectors.joining( ",", "[", "]" ) ) );
+ }
+ return this;
+ }
+
+ public Native registerAllMethodsForReflection() {
+ RUNTIME_REFLECTION_SUPPORT.get().register( alwaysTrue(), false, clazz.getDeclaredMethods() );
+ return this;
+ }
+
+ public Native registerMethodForReflection( final String name, @Nonnull final Class>... args ) {
+ try {
+ RUNTIME_REFLECTION_SUPPORT.get().register( alwaysTrue(), false, clazz.getDeclaredMethod( name, args ) );
+ } catch ( final NoSuchMethodException exception ) {
+ throw new RuntimeException( "Could not find method " + name + " in " + clazz + " with args "
+ + Arrays.stream( args ).map( Class::toString ).collect( Collectors.joining( ",", "[", "]" ) ) );
+ }
+ return this;
+ }
+
+ public Native registerEverythingForJni() {
+ return registerClassForJni()
+ .registerAllFieldsForJni()
+ .registerAllConstructorsForJni()
+ .registerAllMethodsForJni();
+ }
+
+ public Native registerClassForJni() {
+ RUNTIME_JNI_ACCESS_SUPPORT.get().register( alwaysTrue(), clazz );
+ return this;
+ }
+
+ public Native registerAllFieldsForJni() {
+ for ( final Field field : clazz.getDeclaredFields() ) {
+ RUNTIME_JNI_ACCESS_SUPPORT.get().register( alwaysTrue(), false, field );
+ }
+ return this;
+ }
+
+ public Native registerFieldsForJni( @Nonnull final String... fieldNames ) {
+ for ( final Field field : clazz.getDeclaredFields() ) {
+ for ( final String targetField : fieldNames ) {
+ if ( field.getName().equals( targetField ) ) {
+ RUNTIME_JNI_ACCESS_SUPPORT.get().register( alwaysTrue(), false, field );
+ }
+ }
+ }
+ return this;
+ }
+
+ public Native registerAllConstructorsForJni() {
+ for ( final Constructor> constructor : clazz.getDeclaredConstructors() ) {
+ RUNTIME_JNI_ACCESS_SUPPORT.get().register( alwaysTrue(), false, constructor );
+ }
+ return this;
+ }
+
+ public Native registerConstructorForJni( @Nonnull final Class>... args ) {
+ try {
+ RUNTIME_JNI_ACCESS_SUPPORT.get().register( alwaysTrue(), false, clazz.getDeclaredConstructor( args ) );
+ } catch ( final NoSuchMethodException exception ) {
+ throw new RuntimeException( "Could not find constructor in " + clazz + " with args "
+ + Arrays.stream( args ).map( Class::toString ).collect( Collectors.joining( ",", "[", "]" ) ) );
+ }
+ return this;
+ }
+
+ public Native registerAllMethodsForJni() {
+ for ( final Method method : clazz.getDeclaredMethods() ) {
+ RUNTIME_JNI_ACCESS_SUPPORT.get().register( alwaysTrue(), false, method );
+ }
+ return this;
+ }
+
+ public Native registerMethodForJni( final String name, @Nonnull final Class>... args ) {
+ try {
+ RUNTIME_JNI_ACCESS_SUPPORT.get().register( alwaysTrue(), false, clazz.getDeclaredMethod( name, args ) );
+ } catch ( final NoSuchMethodException exception ) {
+ throw new RuntimeException( "Could not find method " + name + " in " + clazz + " with args "
+ + Arrays.stream( args ).map( Class::toString ).collect( Collectors.joining( ",", "[", "]" ) ) );
+ }
+ return this;
+ }
+
+ public static void addResource( final String resource ) {
+ RESOURCES_REGISTRY.get().addResources( alwaysTrue(), "\\Q" + resource + "\\E" );
+ }
+
+ public static void addResourcesPattern( final String pattern ) {
+ RESOURCES_REGISTRY.get().addResources( alwaysTrue(), pattern );
+ }
+
+ public static void addResourceBundle( final String name ) {
+ RESOURCES_REGISTRY.get().addResourceBundles( alwaysTrue(), name );
+ }
+
+ public static void addClassBasedResourceBundle( final String name, final String className ) {
+ RESOURCES_REGISTRY.get().addClassBasedResourceBundle( alwaysTrue(), name, className );
+ }
+
+ /**
+ * Returns the class for the given class name.
+ *
+ * @param className the class name
+ * @return the class
+ */
+ public static Class> clazz( final String className ) {
+ try {
+ return Class.forName( className );
+ } catch ( final ClassNotFoundException exception ) {
+ throw new RuntimeException( "Could not access for reflection registry", exception );
+ }
+ }
+
+ protected static boolean isLinux() {
+ return new IsLinux().getAsBoolean();
+ }
+
+ protected static boolean isWindows() {
+ return new IsWindows().getAsBoolean();
+ }
+
+ private static class DummyResourcesRegistry implements ResourcesRegistry {
+ @Override
+ public void addClassBasedResourceBundle( final ConfigurationCondition condition, final String basename, final String className ) {
+ // nothing
+ }
+
+ @Override
+ public void addResources( final ConfigurationCondition condition, final String pattern ) {
+ // nothing
+ }
+
+ @Override
+ public void injectResource( final Module module, final String resourcePath, final byte[] resourceContent ) {
+ // nothing
+ }
+
+ @Override
+ public void ignoreResources( final ConfigurationCondition condition, final String pattern ) {
+ // nothing
+ }
+
+ @Override
+ public void addResourceBundles( final ConfigurationCondition condition, final String name ) {
+ // nothing
+ }
+
+ @Override
+ public void addResourceBundles( final ConfigurationCondition condition, final String basename, final Collection locales ) {
+ // nothing
+ }
+ }
+
+ private static class DummyRuntimeClassInitializationSupport implements RuntimeClassInitializationSupport {
+ @Override
+ public void initializeAtRunTime( final String name, final String reason ) {
+ // nothing
+ }
+
+ @Override
+ public void initializeAtBuildTime( final String name, final String reason ) {
+ // nothing
+ }
+
+ @Override
+ public void rerunInitialization( final String name, final String reason ) {
+ // nothing
+ }
+
+ @Override
+ public void initializeAtRunTime( final Class> clazz, final String reason ) {
+ // nothing
+ }
+
+ @Override
+ public void rerunInitialization( final Class> clazz, final String reason ) {
+ // nothing
+ }
+
+ @Override
+ public void initializeAtBuildTime( final Class> clazz, final String reason ) {
+ // nothing
+ }
+ }
+
+ private static class DummyRuntimeJniAccessSupport implements RuntimeJNIAccessSupport {
+ @Override
+ public void register( final ConfigurationCondition condition, final boolean unsafeAllocated, final Class> clazz ) {
+ // nothing
+ }
+
+ @Override
+ public void register( final ConfigurationCondition condition, final boolean queriedOnly, final Executable... methods ) {
+ // nothing
+ }
+
+ @Override
+ public void register( final ConfigurationCondition condition, final boolean finalIsWritable, final Field... fields ) {
+ // nothing
+ }
+ }
+
+ private static class DummyRuntimeReflectionSupport implements RuntimeReflectionSupport {
+ @Override
+ public void registerAllMethodsQuery( final ConfigurationCondition condition, final boolean queriedOnly, final Class> clazz ) {
+ // nothing
+ }
+
+ @Override
+ public void registerAllDeclaredMethodsQuery( final ConfigurationCondition condition, final boolean queriedOnly,
+ final Class> clazz ) {
+ // nothing
+ }
+
+ @Override
+ public void registerAllFieldsQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllDeclaredFieldsQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllConstructorsQuery( final ConfigurationCondition condition, final boolean queriedOnly, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllDeclaredConstructorsQuery( final ConfigurationCondition condition, final boolean queriedOnly,
+ final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllClassesQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllDeclaredClassesQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllRecordComponentsQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllPermittedSubclassesQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllNestMembersQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerAllSignersQuery( final ConfigurationCondition condition, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void registerClassLookupException( final ConfigurationCondition condition, final String typeName, final Throwable t ) {
+ //nothing
+ }
+
+ @Override
+ public void registerClassLookup( final ConfigurationCondition condition, final String typeName ) {
+ //nothing
+ }
+
+ @Override
+ public void registerFieldLookup( final ConfigurationCondition condition, final Class> declaringClass, final String fieldName ) {
+ //nothing
+ }
+
+ @Override
+ public void registerMethodLookup( final ConfigurationCondition condition, final Class> declaringClass, final String methodName,
+ final Class>... parameterTypes ) {
+ //nothing
+ }
+
+ @Override
+ public void registerConstructorLookup( final ConfigurationCondition condition, final Class> declaringClass,
+ final Class>... parameterTypes ) {
+ //nothing
+ }
+
+ @Override
+ public void register( final ConfigurationCondition condition, final boolean unsafeAllocated, final Class> clazz ) {
+ //nothing
+ }
+
+ @Override
+ public void register( final ConfigurationCondition condition, final boolean queriedOnly, final Executable... methods ) {
+ //nothing
+ }
+
+ @Override
+ public void register( final ConfigurationCondition condition, final boolean finalIsWritable, final Field... fields ) {
+ //nothing
+ }
+ }
+}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/ShaclJsFeature.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/ShaclJsFeature.java
similarity index 50%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/ShaclJsFeature.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/ShaclJsFeature.java
index cf7ffa506..fef0af92c 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/ShaclJsFeature.java
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/nativefeatures/ShaclJsFeature.java
@@ -22,17 +22,31 @@
import org.eclipse.esmf.aspectmodel.shacl.constraint.js.JsTriple;
import org.eclipse.esmf.aspectmodel.shacl.constraint.js.TermFactory;
-public class ShaclJsFeature extends AbstractSammCliFeature {
+import org.graalvm.nativeimage.hosted.Feature;
+
+/**
+ * Sets up classes for native image compilation that are required for evaluation of SHACL JS Constraints in the Aspect Model Validator.
+ */
+public class ShaclJsFeature implements Feature {
@Override
public void beforeAnalysis( final BeforeAnalysisAccess access ) {
- register( JsBlankNode.class );
- register( JsFactory.class );
- register( JsGraph.class );
- register( JsGraph.JsTripleIterator.class );
- register( JsLiteral.class );
- register( JsNamedNode.class );
- register( JsTerm.class );
- register( JsTriple.class );
- register( TermFactory.class );
+ Native.forClass( JsBlankNode.class )
+ .registerEverythingForReflection();
+ Native.forClass( JsFactory.class )
+ .registerEverythingForReflection();
+ Native.forClass( JsGraph.class )
+ .registerEverythingForReflection();
+ Native.forClass( JsGraph.JsTripleIterator.class )
+ .registerEverythingForReflection();
+ Native.forClass( JsLiteral.class )
+ .registerEverythingForReflection();
+ Native.forClass( JsNamedNode.class )
+ .registerEverythingForReflection();
+ Native.forClass( JsTerm.class )
+ .registerEverythingForReflection();
+ Native.forClass( JsTriple.class )
+ .registerEverythingForReflection();
+ Native.forClass( TermFactory.class )
+ .registerEverythingForReflection();
}
}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/AdminShellConfig.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/AdminShellConfig.java
similarity index 80%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/AdminShellConfig.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/AdminShellConfig.java
index 1ef4ff01f..ff10267c0 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/AdminShellConfig.java
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/AdminShellConfig.java
@@ -42,6 +42,10 @@ public class AdminShellConfig {
public Set interfaces;
public List> enums;
public Set> interfacesWithoutDefaultImplementation;
+ public Set> classesInModelPackage;
+ public Set> classesInDefaultImplementationPackage;
+ public Set> classesInJsonMixinsPackage;
+ public Set> classesInXmlMixinsPackage;
private static final String PREFIX = AdminShellConfig.class.getPackageName() + ".adminshell.";
private static final String TYPES_WITH_MODEL_TYPE = PREFIX + "typesWithModelTypes";
@@ -52,13 +56,17 @@ public class AdminShellConfig {
private static final String INTERFACES = PREFIX + "interfaces";
private static final String ENUMS = PREFIX + "enums";
private static final String INTERFACES_WITHOUT_DEFAULT_IMPLEMENTATION = PREFIX + "interfacesWithoutDefaultImplementation";
+ private static final String CLASSES_IN_MODEL_PACKAGE = PREFIX + "classesInModelPackage";
+ private static final String CLASSES_IN_DEFAULT_IMPLEMENTATIONP_PACKAGE = PREFIX + "classesInDefaultImplementationPackage";
+ private static final String CLASSES_IN_JSON_MIXINS_PACKAGE = PREFIX + "classesInJsonMixinsPackage";
+ private static final String CLASSES_IN_XML_MIXINS_PACKAGE = PREFIX + "classesInXmlMixinsPackage";
private String serialize( final Class> clazz ) {
return clazz.getName();
}
private > String serialize( final C collection, final Function mapper ) {
- return collection.stream().map( mapper::apply ).collect( Collectors.joining( "," ) );
+ return collection.stream().map( mapper ).collect( Collectors.joining( "," ) );
}
private String serialize( final Map map, final Function keyMapper, final Function valueMapper ) {
@@ -82,6 +90,11 @@ public Properties toProperties() {
properties.setProperty( ENUMS, serialize( enums, this::serialize ) );
properties.setProperty( INTERFACES_WITHOUT_DEFAULT_IMPLEMENTATION,
serialize( interfacesWithoutDefaultImplementation, this::serialize ) );
+ properties.setProperty( CLASSES_IN_MODEL_PACKAGE, serialize( classesInModelPackage, this::serialize ) );
+ properties.setProperty( CLASSES_IN_DEFAULT_IMPLEMENTATIONP_PACKAGE,
+ serialize( classesInDefaultImplementationPackage, this::serialize ) );
+ properties.setProperty( CLASSES_IN_JSON_MIXINS_PACKAGE, serialize( classesInJsonMixinsPackage, this::serialize ) );
+ properties.setProperty( CLASSES_IN_XML_MIXINS_PACKAGE, serialize( classesInXmlMixinsPackage, this::serialize ) );
return properties;
}
@@ -138,6 +151,14 @@ public static AdminShellConfig fromProperties( final Properties properties ) {
config.interfacesWithoutDefaultImplementation = deserializeCollection(
properties.getProperty( INTERFACES_WITHOUT_DEFAULT_IMPLEMENTATION ),
AdminShellConfig::deserializeClass, Collectors.toSet() );
+ config.classesInModelPackage = deserializeCollection( properties.getProperty( CLASSES_IN_MODEL_PACKAGE ),
+ AdminShellConfig::deserializeClass, Collectors.toSet() );
+ config.classesInDefaultImplementationPackage = deserializeCollection(
+ properties.getProperty( CLASSES_IN_DEFAULT_IMPLEMENTATIONP_PACKAGE ), AdminShellConfig::deserializeClass, Collectors.toSet() );
+ config.classesInJsonMixinsPackage = deserializeCollection(
+ properties.getProperty( CLASSES_IN_JSON_MIXINS_PACKAGE ), AdminShellConfig::deserializeClass, Collectors.toSet() );
+ config.classesInXmlMixinsPackage = deserializeCollection(
+ properties.getProperty( CLASSES_IN_XML_MIXINS_PACKAGE ), AdminShellConfig::deserializeClass, Collectors.toSet() );
return config;
}
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/DummyLogger.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/DummyLogger.java
new file mode 100644
index 000000000..40e993d0a
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/DummyLogger.java
@@ -0,0 +1,2010 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.substitution;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.message.EntryMessage;
+import org.apache.logging.log4j.message.FlowMessageFactory;
+import org.apache.logging.log4j.message.Message;
+import org.apache.logging.log4j.message.MessageFactory;
+import org.apache.logging.log4j.util.MessageSupplier;
+import org.apache.logging.log4j.util.Supplier;
+
+public class DummyLogger implements Logger {
+ @Override
+ public void catching( final Level level, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void catching( final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final Message message ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final Object message ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Message message ) {
+
+ }
+
+ @Override
+ public void debug( final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void debug( final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final CharSequence message ) {
+
+ }
+
+ @Override
+ public void debug( final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Object message ) {
+
+ }
+
+ @Override
+ public void debug( final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final String message ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void debug( final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6,
+ final Object p7 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8 ) {
+
+ }
+
+ @Override
+ public void debug( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8 ) {
+
+ }
+
+ @Override
+ public void debug( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8,
+ final Object p9 ) {
+
+ }
+
+ @Override
+ public void entry() {
+
+ }
+
+ @Override
+ public void entry( final Object... params ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final Message message ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final Object message ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Message message ) {
+
+ }
+
+ @Override
+ public void error( final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void error( final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final CharSequence message ) {
+
+ }
+
+ @Override
+ public void error( final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Object message ) {
+
+ }
+
+ @Override
+ public void error( final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final String message ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void error( final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6,
+ final Object p7 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8 ) {
+
+ }
+
+ @Override
+ public void error( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8 ) {
+
+ }
+
+ @Override
+ public void error( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8,
+ final Object p9 ) {
+
+ }
+
+ @Override
+ public void exit() {
+
+ }
+
+ @Override
+ public R exit( final R result ) {
+ return null;
+ }
+
+ @Override
+ public void fatal( final Marker marker, final Message message ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final Object message ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Message message ) {
+
+ }
+
+ @Override
+ public void fatal( final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void fatal( final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final CharSequence message ) {
+
+ }
+
+ @Override
+ public void fatal( final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Object message ) {
+
+ }
+
+ @Override
+ public void fatal( final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final String message ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void fatal( final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6,
+ final Object p7 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8 ) {
+
+ }
+
+ @Override
+ public void fatal( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8 ) {
+
+ }
+
+ @Override
+ public void fatal( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8,
+ final Object p9 ) {
+
+ }
+
+ @Override
+ public Level getLevel() {
+ return null;
+ }
+
+ @Override
+ public M getMessageFactory() {
+ return null;
+ }
+
+ @Override
+ public FlowMessageFactory getFlowMessageFactory() {
+ return null;
+ }
+
+ @Override
+ public String getName() {
+ return "";
+ }
+
+ @Override
+ public void info( final Marker marker, final Message message ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final Object message ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Message message ) {
+
+ }
+
+ @Override
+ public void info( final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void info( final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final CharSequence message ) {
+
+ }
+
+ @Override
+ public void info( final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Object message ) {
+
+ }
+
+ @Override
+ public void info( final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final String message ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void info( final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6,
+ final Object p7 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8 ) {
+
+ }
+
+ @Override
+ public void info( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8 ) {
+
+ }
+
+ @Override
+ public void info( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8,
+ final Object p9 ) {
+
+ }
+
+ @Override
+ public boolean isDebugEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isDebugEnabled( final Marker marker ) {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled( final Level level ) {
+ return false;
+ }
+
+ @Override
+ public boolean isEnabled( final Level level, final Marker marker ) {
+ return false;
+ }
+
+ @Override
+ public boolean isErrorEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isErrorEnabled( final Marker marker ) {
+ return false;
+ }
+
+ @Override
+ public boolean isFatalEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isFatalEnabled( final Marker marker ) {
+ return false;
+ }
+
+ @Override
+ public boolean isInfoEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isInfoEnabled( final Marker marker ) {
+ return false;
+ }
+
+ @Override
+ public boolean isTraceEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isTraceEnabled( final Marker marker ) {
+ return false;
+ }
+
+ @Override
+ public boolean isWarnEnabled() {
+ return false;
+ }
+
+ @Override
+ public boolean isWarnEnabled( final Marker marker ) {
+ return false;
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final Message message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final Object message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Message message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Object message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
+ final Object p3 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
+ final Object p3, final Object p4 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
+ final Object p3, final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
+ final Object p3, final Object p4, final Object p5,
+ final Object p6 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
+ final Object p3, final Object p4, final Object p5, final Object p6,
+ final Object p7 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
+ final Object p3, final Object p4, final Object p5, final Object p6,
+ final Object p7, final Object p8 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final Marker marker, final String message, final Object p0, final Object p1, final Object p2,
+ final Object p3, final Object p4, final Object p5, final Object p6,
+ final Object p7, final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8 ) {
+
+ }
+
+ @Override
+ public void log( final Level level, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void printf( final Level level, final Marker marker, final String format, final Object... params ) {
+
+ }
+
+ @Override
+ public void printf( final Level level, final String format, final Object... params ) {
+
+ }
+
+ @Override
+ public T throwing( final Level level, final T throwable ) {
+ return null;
+ }
+
+ @Override
+ public T throwing( final T throwable ) {
+ return null;
+ }
+
+ @Override
+ public void trace( final Marker marker, final Message message ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final Object message ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Message message ) {
+
+ }
+
+ @Override
+ public void trace( final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void trace( final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final CharSequence message ) {
+
+ }
+
+ @Override
+ public void trace( final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Object message ) {
+
+ }
+
+ @Override
+ public void trace( final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final String message ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void trace( final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6,
+ final Object p7 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8 ) {
+
+ }
+
+ @Override
+ public void trace( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8 ) {
+
+ }
+
+ @Override
+ public void trace( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8,
+ final Object p9 ) {
+
+ }
+
+ @Override
+ public EntryMessage traceEntry() {
+ return null;
+ }
+
+ @Override
+ public EntryMessage traceEntry( final String format, final Object... params ) {
+ return null;
+ }
+
+ @Override
+ public EntryMessage traceEntry( final Supplier>... paramSuppliers ) {
+ return null;
+ }
+
+ @Override
+ public EntryMessage traceEntry( final String format, final Supplier>... paramSuppliers ) {
+ return null;
+ }
+
+ @Override
+ public EntryMessage traceEntry( final Message message ) {
+ return null;
+ }
+
+ @Override
+ public void traceExit() {
+
+ }
+
+ @Override
+ public R traceExit( final R result ) {
+ return null;
+ }
+
+ @Override
+ public R traceExit( final String format, final R result ) {
+ return null;
+ }
+
+ @Override
+ public void traceExit( final EntryMessage message ) {
+
+ }
+
+ @Override
+ public R traceExit( final EntryMessage message, final R result ) {
+ return null;
+ }
+
+ @Override
+ public R traceExit( final Message message, final R result ) {
+ return null;
+ }
+
+ @Override
+ public void warn( final Marker marker, final Message message ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final CharSequence message ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final Object message ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Message message ) {
+
+ }
+
+ @Override
+ public void warn( final Message message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final MessageSupplier messageSupplier ) {
+
+ }
+
+ @Override
+ public void warn( final MessageSupplier messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final CharSequence message ) {
+
+ }
+
+ @Override
+ public void warn( final CharSequence message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Object message ) {
+
+ }
+
+ @Override
+ public void warn( final Object message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final String message ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object... params ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Supplier>... paramSuppliers ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Supplier> messageSupplier ) {
+
+ }
+
+ @Override
+ public void warn( final Supplier> messageSupplier, final Throwable throwable ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6,
+ final Object p7 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8 ) {
+
+ }
+
+ @Override
+ public void warn( final Marker marker, final String message, final Object p0, final Object p1, final Object p2, final Object p3,
+ final Object p4, final Object p5, final Object p6, final Object p7,
+ final Object p8, final Object p9 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2, final Object p3 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8 ) {
+
+ }
+
+ @Override
+ public void warn( final String message, final Object p0, final Object p1, final Object p2, final Object p3, final Object p4,
+ final Object p5, final Object p6, final Object p7, final Object p8,
+ final Object p9 ) {
+
+ }
+}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/DummyLoggerContextFactory.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/DummyLoggerContextFactory.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/DummyLoggerContextFactory.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/DummyLoggerContextFactory.java
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/ImplementationInfo.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/ImplementationInfo.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/ImplementationInfo.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/ImplementationInfo.java
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/IsLinux.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/IsLinux.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/IsLinux.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/IsLinux.java
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/IsWindows.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/IsWindows.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/IsWindows.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/IsWindows.java
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_LogManager.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_LogManager.java
similarity index 77%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_LogManager.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_LogManager.java
index 9acf7e3e9..2ae970ae5 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_LogManager.java
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_LogManager.java
@@ -17,7 +17,9 @@
import com.oracle.svm.core.annotate.RecomputeFieldValue;
import com.oracle.svm.core.annotate.TargetClass;
import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.spi.LoggerContextFactory;
+import org.graalvm.nativeimage.hosted.FieldValueTransformer;
/**
* This is a GraalVM substitution class
@@ -36,4 +38,15 @@ public final class Target_org_apache_logging_log4j_LogManager {
@Alias
@RecomputeFieldValue( kind = RecomputeFieldValue.Kind.FromAlias )
private static LoggerContextFactory factory = new DummyLoggerContextFactory();
+
+ @Alias
+ @RecomputeFieldValue( kind = RecomputeFieldValue.Kind.Custom, declClass = StatusLoggerInjector.class )
+ private static Logger LOGGER;
+
+ public static final class StatusLoggerInjector implements FieldValueTransformer {
+ @Override
+ public Object transform( final Object receiver, final Object originalValue ) {
+ return new DummyLogger();
+ }
+ }
}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_util_ServiceLoaderUtil.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_util_ServiceLoaderUtil.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_util_ServiceLoaderUtil.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_logging_log4j_util_ServiceLoaderUtil.java
diff --git a/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_poi_openxml4j_opc_OPCPackage.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_poi_openxml4j_opc_OPCPackage.java
new file mode 100644
index 000000000..b0e511318
--- /dev/null
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_poi_openxml4j_opc_OPCPackage.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.substitution;
+
+import com.oracle.svm.core.annotate.Alias;
+import com.oracle.svm.core.annotate.RecomputeFieldValue;
+import com.oracle.svm.core.annotate.TargetClass;
+import org.apache.logging.log4j.Logger;
+import org.apache.poi.openxml4j.opc.OPCPackage;
+
+/**
+ * This is a GraalVM substitution class
+ * for {@link OPCPackage}.
+ * Reason: The hard reference to a Log4J logger is not resolveable/instantiatable at runtime, so it is replaced with
+ * a dummy logger.
+ */
+@TargetClass( OPCPackage.class )
+@SuppressWarnings( {
+ "unused",
+ "squid:S00101", // Class name uses GraalVM substitution class naming schema, see
+ // https://github.com/oracle/graal/tree/master/substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/jdk
+ "checkstyle:TypeName",
+ "checkstyle:AbbreviationAsWordInName",
+ "NewClassNamingConvention" } )
+public final class Target_org_apache_poi_openxml4j_opc_OPCPackage {
+ @SuppressWarnings( { "NonConstantLogger", "NonConstantFieldWithUpperCaseName" } )
+ @Alias
+ @RecomputeFieldValue( kind = RecomputeFieldValue.Kind.FromAlias )
+ private static Logger LOG = new DummyLogger();
+}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_velocity_runtime_parser_node_ASTMethod.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_velocity_runtime_parser_node_ASTMethod.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_velocity_runtime_parser_node_ASTMethod.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_apache_velocity_runtime_parser_node_ASTMethod.java
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_internal_util_ReflectionHelper.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_internal_util_ReflectionHelper.java
similarity index 98%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_internal_util_ReflectionHelper.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_internal_util_ReflectionHelper.java
index 6cd1020be..14b26962d 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_internal_util_ReflectionHelper.java
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_internal_util_ReflectionHelper.java
@@ -13,6 +13,8 @@
package org.eclipse.esmf.substitution;
+import static org.eclipse.esmf.nativefeatures.AssetAdministrationShellFeature.ADMINSHELL_PROPERTIES;
+
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
@@ -138,7 +140,7 @@ public final class Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_inter
static {
try ( final InputStream input =
Target_org_eclipse_digitaltwin_aas4j_v3_dataformat_core_internal_util_ReflectionHelper.class.getResourceAsStream(
- "/adminshell.properties" ) ) {
+ "/" + ADMINSHELL_PROPERTIES ) ) {
final Properties properties = new Properties();
properties.load( input );
final AdminShellConfig config = AdminShellConfig.fromProperties( properties );
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_slf4j_LoggerFactory.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_slf4j_LoggerFactory.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_org_slf4j_LoggerFactory.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_org_slf4j_LoggerFactory.java
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_FontConfiguration.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_FontConfiguration.java
similarity index 89%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_FontConfiguration.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_FontConfiguration.java
index 09e2670c8..e8c804723 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_FontConfiguration.java
+++ b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_FontConfiguration.java
@@ -17,7 +17,7 @@
import java.io.IOException;
import java.io.InputStream;
-import org.eclipse.esmf.SammCli;
+import org.eclipse.esmf.nativefeatures.Native;
import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.Substitute;
@@ -42,10 +42,10 @@
public final class Target_sun_awt_FontConfiguration {
@Substitute
private void readFontConfigFile( final File f ) {
- try ( final InputStream inputStream = SammCli.class.getResourceAsStream( "/fontconfig.bfc" ) ) {
+ try ( final InputStream inputStream = Native.class.getResourceAsStream( "/fontconfig.bfc" ) ) {
loadBinary( inputStream );
- } catch ( final IOException e ) {
- throw new RuntimeException( e );
+ } catch ( final IOException exception ) {
+ throw new RuntimeException( exception );
}
}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_X11FontManager.java b/core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_X11FontManager.java
similarity index 100%
rename from tools/samm-cli/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_X11FontManager.java
rename to core/esmf-native-support/src/main/java/org/eclipse/esmf/substitution/Target_sun_awt_X11FontManager.java
diff --git a/core/esmf-native-support/src/test/java/org/eclipse/esmf/nativefeatures/EsmfFeatureTest.java b/core/esmf-native-support/src/test/java/org/eclipse/esmf/nativefeatures/EsmfFeatureTest.java
new file mode 100644
index 000000000..aea443ca7
--- /dev/null
+++ b/core/esmf-native-support/src/test/java/org/eclipse/esmf/nativefeatures/EsmfFeatureTest.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.graalvm.nativeimage.hosted.Feature;
+import org.junit.jupiter.api.Test;
+
+public class EsmfFeatureTest {
+ /**
+ * This method can not test if registration of classes/methods/resources succeeds at native compilation time, but it can make sure
+ * that all classes that are instantiated from features at runtime using Class.forName, as well as fields, do in fact exist.
+ */
+ @Test
+ void testClassInstantiation() throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
+ final Feature esmf = new EsmfFeature();
+ esmf.beforeAnalysis( null );
+ for ( final Class extends Feature> feature : esmf.getRequiredFeatures() ) {
+ feature.getDeclaredConstructor().newInstance().beforeAnalysis( null );
+ }
+ }
+}
diff --git a/documentation/developer-guide/modules/ROOT/partials/esmf-native-support-artifact.adoc b/documentation/developer-guide/modules/ROOT/partials/esmf-native-support-artifact.adoc
new file mode 100644
index 000000000..06152c3ef
--- /dev/null
+++ b/documentation/developer-guide/modules/ROOT/partials/esmf-native-support-artifact.adoc
@@ -0,0 +1,31 @@
+[tabs]
+====
+Maven::
++
+--
+[source,maven,subs=attributes+]
+----
+
+ org.eclipse.esmf
+ esmf-native-support
+ {esmf-sdk-version}
+
+----
+--
+Gradle Groovy DSL::
++
+--
+[source,gradle,subs=attributes+]
+----
+implementation 'org.eclipse.esmf:esmf-native-support:{esmf-sdk-version}'
+----
+--
+Gradle Kotlin DSL::
++
+--
+[source,gradle,subs=attributes+]
+----
+implementation("org.eclipse.esmf:esmf-native-support:{esmf-sdk-version}")
+----
+--
+====
diff --git a/documentation/developer-guide/modules/tooling-guide/pages/java-aspect-tooling.adoc b/documentation/developer-guide/modules/tooling-guide/pages/java-aspect-tooling.adoc
index 8855e032c..47cb7a134 100644
--- a/documentation/developer-guide/modules/tooling-guide/pages/java-aspect-tooling.adoc
+++ b/documentation/developer-guide/modules/tooling-guide/pages/java-aspect-tooling.adoc
@@ -51,6 +51,15 @@ Aspect Model validation component require embedded JavaScript execution:
building the native image; for more information see
https://www.graalvm.org/22.3/reference-manual/polyglot-programming/[polyglot programming].
+[TIP]
+=====
+When using esmf-sdk with a GraalVM JDK and you target `native-image` compilation, add a
+dependency to the `esmf-native-support` module. This will add the necessary configuration for
+esmf-sdk resources, reflection and initialization that is required by the compiler:
+
+include::esmf-developer-guide:ROOT:partial$esmf-aspect-model-starter-artifact.adoc[]
+=====
+
[[parsing-aspect-model-urns]]
== Parsing Aspect Model URNs
diff --git a/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc b/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc
index 16dafe3b9..bb1eaf760 100644
--- a/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc
+++ b/documentation/developer-guide/modules/tooling-guide/pages/samm-cli.adoc
@@ -105,7 +105,7 @@ of model resolution] for more information.
| _--language, -l_ : the language from the model for which the diagram should be
generated (default: en) |
| _--custom-resolver_ : use an external resolver for the resolution of the model elements | `samm aspect AspectModel.ttl to svg --custom-resolver "java -jar resolver.jar"`
-.10+| [[asepct-to-java]] aspect to java | Generate Java classes from an Aspect Model | `samm aspect AspectModel.ttl to java`
+.10+| [[aspect-to-java]] aspect to java | Generate Java classes from an Aspect Model | `samm aspect AspectModel.ttl to java`
| _--output-directory, -d_ : output directory to write files to (default:
current directory) |
| _--package-name, -pn_ : package to use for generated Java classes | `samm aspect AspectModel.ttl to java -pn org.company.product`
diff --git a/pom.xml b/pom.xml
index 372c29a3b..50a85624a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -63,6 +63,7 @@
core/esmf-aspect-model-urn
core/esmf-aspect-model-validator
core/esmf-aspect-static-meta-model-java
+ core/esmf-native-support
core/esmf-test-aspect-models
core/esmf-test-resources
tools/esmf-aspect-model-maven-plugin
@@ -73,9 +74,15 @@
true
+ ${project.basedir}/src-buildtime
+ ${project.basedir}/src-gen
+ core/esmf-native-support/src-gen/main/resources/META-INF/native-image/${project.groupId}/esmf-native-support
+
+ ${project.basedir}/../../${relative-native-config-path}
2.22.1
+ 1.0
@@ -151,6 +158,11 @@
esmf-aspect-static-meta-model-java
${project.version}
+
+ org.eclipse.esmf
+ esmf-native-support
+ ${project.version}
+
org.eclipse.esmf
esmf-test-aspect-models
@@ -252,6 +264,59 @@
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ false
+ -agentlib:native-image-agent=config-merge-dir=${native-config-path}
+
+
+
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+ false
+
+
+
+ ${relative-native-config-path}
+
+
+
+
+
+
+
+ native
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ false
+ -agentlib:native-image-agent=config-merge-dir=${native-config-path}
+
+
+
+
+ org.apache.maven.plugins
+ maven-clean-plugin
+ false
+
+
+
+ ${relative-native-config-path}
+
+
+
+
+
+
+
+
diff --git a/tools/esmf-aspect-model-maven-plugin/pom.xml b/tools/esmf-aspect-model-maven-plugin/pom.xml
index 69d880115..5f8c33def 100644
--- a/tools/esmf-aspect-model-maven-plugin/pom.xml
+++ b/tools/esmf-aspect-model-maven-plugin/pom.xml
@@ -100,6 +100,16 @@
true
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ false
+
+
+
+
diff --git a/tools/samm-cli/pom.xml b/tools/samm-cli/pom.xml
index 9470b5150..1db0763e8 100644
--- a/tools/samm-cli/pom.xml
+++ b/tools/samm-cli/pom.xml
@@ -31,11 +31,11 @@
jar
org.eclipse.esmf.SammCli
samm
- ${project.build.directory}/classes/META-INF/native-image/${project.groupId}/${project.artifactId}
${project.artifactId}-${project.version}-for-native
false
+ true
false
false
@@ -53,6 +53,10 @@
org.eclipse.esmf
esmf-aspect-model-github-resolver
+
+ org.eclipse.esmf
+ esmf-native-support
+
com.fasterxml.jackson.core
jackson-databind
@@ -85,12 +89,6 @@
org.fusesource.jansi
jansi
-
-
- org.graalvm.nativeimage
- svm
- provided
-
org.graalvm.sdk
graal-sdk
@@ -144,10 +142,6 @@
true
**/*.properties
- **/*.html
- **/*.js
- **/*.txt
- **/*.xml
**/*.json
@@ -164,8 +158,7 @@
${main-class}
--no-fallback
- -cp ${project.build.directory}/${project.artifactId}-${project.version}.jar
-
+ -cp ${project.build.directory}/${project.artifactId}-${project.version}.jar
-Djava.awt.headless=true
@@ -182,10 +175,8 @@
${packaging-type}
- ${project.build.directory}/${project.artifactId}-${project.version}.jar
-
+ ${project.build.directory}/${project.artifactId}-${project.version}.jar
${project.build.directory}/${binary-name}
- ${graalvm-config-path}
1
false
@@ -223,44 +214,6 @@
-
-
- org.codehaus.mojo
- exec-maven-plugin
-
-
-
- generate-admin-shell-reflection-config
- process-classes
-
- java
-
-
-
- org.eclipse.esmf.buildtime.Aas4jClassSetup
-
- ${project.build.outputDirectory}/adminshell.properties
- false
-
-
-
-
- customize-resource-config
- prepare-package
-
- java
-
-
-
- org.eclipse.esmf.buildtime.CustomizeGraalVmConfigs
-
- ${project.build.outputDirectory}/META-INF/native-image/${project.groupId}/${project.artifactId}
- false
-
-
-
-
-
org.apache.maven.plugins
@@ -495,9 +448,7 @@
esmf-test-aspect-models
jar
true
-
- ${project.build.outputDirectory}
-
+ ${project.build.outputDirectory}
**/*.ttl
@@ -517,16 +468,8 @@
${picocli-version}
-
- -Aproject=${project.groupId}/${project.artifactId}
- --add-exports
- java.desktop/sun.awt=ALL-UNNAMED
- --add-exports
- java.desktop/sun.font=ALL-UNNAMED
- --add-exports
- org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED
-
- true
+ true
+ false
@@ -544,12 +487,12 @@
+ ${skip.maven.failsafe}
${packaging-type}
${project.build.directory}/${project.artifactId}-${project.version}.jar
${project.build.directory}/${binary-name}
- ${graalvm-config-path}
1
true
-Xmx4096m
@@ -583,14 +526,6 @@
-
-
- org.apache.maven.plugins
- maven-javadoc-plugin
-
- org.eclipse.esmf.substitution
-
-
@@ -608,7 +543,7 @@
org.codehaus.mojo
wagon-maven-plugin
- 1.0
+ ${wagon-maven-plugin-version}
copy-fontconfig-bfc
@@ -633,6 +568,7 @@
native
true
+ false
true
true
@@ -662,12 +598,8 @@
--enable-https
--no-fallback
--report-unsupported-elements-at-runtime
- --features=org.eclipse.esmf.nativefeatures.SammCliFeatures
+ --features=org.eclipse.esmf.nativefeatures.SammCliFeature
--language:js
- -H:JNIConfigurationFiles=src/main/resources/META-INF/native-image/${project.groupId}/${project.artifactId}/jni-config.json
- -H:DynamicProxyConfigurationFiles=src/main/resources/META-INF/native-image/${project.groupId}/${project.artifactId}/proxy-config.json
- -H:ReflectionConfigurationFiles=src/main/resources/META-INF/native-image/${project.groupId}/${project.artifactId}/reflect-config.json
- -H:ResourceConfigurationFiles=src/main/resources/META-INF/native-image/${project.groupId}/${project.artifactId}/resource-config.json
-H:-DeadlockWatchdogExitOnTimeout
-H:DeadlockWatchdogInterval=0
-H:+AddAllCharsets
@@ -679,6 +611,8 @@
-J--add-exports=java.desktop/sun.font=ALL-UNNAMED
-J--add-exports=org.graalvm.sdk/org.graalvm.nativeimage.impl=ALL-UNNAMED
-J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.configure=ALL-UNNAMED
+ -J--add-exports=org.graalvm.nativeimage.builder/com.oracle.svm.core.jni=ALL-UNNAMED
+ --initialize-at-build-time=org.eclipse.esmf.nativefeatures.Native
true
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/FileInputHandler.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/FileInputHandler.java
index 1fd3196a1..b0e7668d6 100644
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/FileInputHandler.java
+++ b/tools/samm-cli/src/main/java/org/eclipse/esmf/FileInputHandler.java
@@ -76,7 +76,7 @@ public static boolean appliesToInput( final String input ) {
try {
return absoluteFile( new File( input ) ).exists();
} catch ( final Exception exception ) {
- // This could file with e.g. a InvalidPathException or with platform-specific exceptions when the input is indeed not a valid file
+ // This could fail with e.g. a InvalidPathException or with platform-specific exceptions when the input is indeed not a valid file
return false;
}
}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/AasReflection.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/AasReflection.java
deleted file mode 100644
index 2d2a16f9e..000000000
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/AasReflection.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.nativefeatures;
-
-import static org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtBuildTime;
-
-import java.util.List;
-
-import org.eclipse.digitaltwin.aas4j.v3.dataformat.core.internal.util.ReflectionHelper;
-import org.eclipse.digitaltwin.aas4j.v3.model.LangStringTextType;
-import org.graalvm.nativeimage.Platform;
-import org.graalvm.nativeimage.Platforms;
-import org.graalvm.nativeimage.hosted.Feature;
-
-/**
- * Registers all classes in the AAS model and default implementation packages for reflection in native image builds.
- */
-@Platforms( Platform.HOSTED_ONLY.class )
-public class AasReflection extends AbstractSammCliFeature {
- @Override
- public void beforeAnalysis( final BeforeAnalysisAccess access ) {
- initializeAtBuildTime( org.eclipse.esmf.substitution.AdminShellConfig.class );
-
- registerClassesInPackage( ReflectionHelper.MODEL_PACKAGE_NAME );
- registerClassesInPackage( ReflectionHelper.DEFAULT_IMPLEMENTATION_PACKAGE_NAME );
- registerClassesInPackage( ReflectionHelper.JSON_MIXINS_PACKAGE_NAME );
- registerClassesInPackage( ReflectionHelper.XML_MIXINS_PACKAGE_NAME );
-
- register( LangStringTextType[].class );
- }
-
- @Override
- public List> getRequiredFeatures() {
- return List.of( ClassGraphFeature.class );
- }
-}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/AbstractSammCliFeature.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/AbstractSammCliFeature.java
deleted file mode 100644
index 90766eaf7..000000000
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/AbstractSammCliFeature.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.nativefeatures;
-
-import io.github.classgraph.ClassGraph;
-import io.github.classgraph.ScanResult;
-import org.graalvm.nativeimage.hosted.Feature;
-import org.graalvm.nativeimage.hosted.RuntimeReflection;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Base class for native compilation features
- */
-public abstract class AbstractSammCliFeature implements Feature {
- private static final Logger LOG = LoggerFactory.getLogger( AbstractSammCliFeature.class );
-
- /**
- * Registers all classes in the given package for reflection.
- *
- * @param packageName the package name
- */
- protected void registerClassesInPackage( final String packageName ) {
- try ( final ScanResult scanResult = new ClassGraph().enableAllInfo().acceptPackages( packageName ).scan() ) {
- scanResult.getAllClasses().loadClasses().forEach( this::register );
- }
- }
-
- /**
- * Registers the given class for reflection.
- *
- * @param cls the class
- */
- protected void register( final Class> cls ) {
- LOG.debug( "Registering {} for reflection", cls );
- RuntimeReflection.register( cls );
- RuntimeReflection.register( cls.getDeclaredConstructors() );
- RuntimeReflection.register( cls.getDeclaredMethods() );
- RuntimeReflection.register( cls.getDeclaredFields() );
- }
-
- /**
- * Returns the class for the given class name.
- *
- * @param className the class name
- * @return the class
- */
- protected Class> getClass( final String className ) {
- try {
- return Class.forName( className );
- } catch ( final ClassNotFoundException exception ) {
- throw new RuntimeException( "Could not access class for reflection registry", exception );
- }
- }
-}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/ClassGraphFeature.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/ClassGraphFeature.java
deleted file mode 100644
index d0b90f366..000000000
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/ClassGraphFeature.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.nativefeatures;
-
-import static org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtBuildTime;
-
-/**
- * Makes ClassGraph available at build time
- */
-public class ClassGraphFeature extends AbstractSammCliFeature {
- @Override
- public void beforeAnalysis( final BeforeAnalysisAccess access ) {
- initializeAtBuildTime( io.github.classgraph.AnnotationInfoList.class );
- initializeAtBuildTime( io.github.classgraph.AnnotationParameterValueList.class );
- initializeAtBuildTime( io.github.classgraph.ClassGraph.class );
- initializeAtBuildTime( io.github.classgraph.ClassInfo.class );
- initializeAtBuildTime( getClass( "io.github.classgraph.ClassInfo$2" ) );
- initializeAtBuildTime( io.github.classgraph.ClassInfoList.class );
- initializeAtBuildTime( io.github.classgraph.FieldInfoList.class );
- initializeAtBuildTime( io.github.classgraph.MethodInfoList.class );
- initializeAtBuildTime( io.github.classgraph.ModulePathInfo.class );
- initializeAtBuildTime( io.github.classgraph.ScanResult.class );
- initializeAtBuildTime( nonapi.io.github.classgraph.classloaderhandler.ClassLoaderHandlerRegistry.class );
- initializeAtBuildTime( nonapi.io.github.classgraph.classpath.ClasspathOrder.class );
- initializeAtBuildTime( nonapi.io.github.classgraph.classpath.SystemJarFinder.class );
- initializeAtBuildTime( getClass( "nonapi.io.github.classgraph.classpath.SystemJarFinder$1" ) );
- initializeAtBuildTime( nonapi.io.github.classgraph.fastzipfilereader.LogicalZipFile.class );
- initializeAtBuildTime( getClass( "nonapi.io.github.classgraph.reflection.StandardReflectionDriver" ) );
- initializeAtBuildTime( nonapi.io.github.classgraph.utils.FastPathResolver.class );
- initializeAtBuildTime( nonapi.io.github.classgraph.utils.JarUtils.class );
- initializeAtBuildTime( nonapi.io.github.classgraph.utils.VersionFinder.class );
- }
-}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/JenaFeature.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/JenaFeature.java
deleted file mode 100644
index 41d21e0a6..000000000
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/JenaFeature.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.nativefeatures;
-
-import static org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtBuildTime;
-
-/**
- * Configuration of eagerly initialized Jena classes
- */
-public class JenaFeature extends AbstractSammCliFeature {
- @Override
- public void beforeAnalysis( final BeforeAnalysisAccess access ) {
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.Constants" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLDTDScannerImpl" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLEntityManager" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLEntityManager$EncodingInfo" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLEntityScanner" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLScanner" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.XMLVersionDetector" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDProcessor" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.dtd.XMLNSDTDValidator" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.impl.dv.dtd.DTDDVFactoryImpl" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.util.FeatureState" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.util.PropertyState" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.util.XMLChar" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.util.XMLSymbols" ) );
- initializeAtBuildTime( getClass( "com.sun.org.apache.xerces.internal.xni.NamespaceContext" ) );
- initializeAtBuildTime( getClass( "com.sun.xml.internal.stream.util.ThreadLocalBufferAllocator" ) );
- initializeAtBuildTime( getClass( "javax.xml.parsers.FactoryFinder" ) );
- initializeAtBuildTime( getClass( "jdk.xml.internal.JdkXmlUtils" ) );
- initializeAtBuildTime( getClass( "jdk.xml.internal.SecuritySupport" ) );
- initializeAtBuildTime( org.apache.jena.ext.xerces.impl.dv.xs.AnyURIDV.class );
- initializeAtBuildTime( org.apache.jena.ext.xerces.impl.dv.xs.BaseSchemaDVFactory.class );
- initializeAtBuildTime( org.apache.jena.ext.xerces.impl.dv.xs.ExtendedSchemaDVFactoryImpl.class );
- initializeAtBuildTime( org.apache.jena.ext.xerces.impl.dv.xs.QNameDV.class );
- initializeAtBuildTime( org.apache.jena.ext.xerces.impl.dv.xs.SchemaDVFactoryImpl.class );
- initializeAtBuildTime( org.apache.jena.ext.xerces.impl.dv.xs.XSSimpleTypeDecl.class );
- initializeAtBuildTime( org.apache.jena.ext.xerces.impl.dv.xs.XSSimpleTypeDecl.class );
- initializeAtBuildTime( getClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$CharToken" ) );
- initializeAtBuildTime( getClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$ClosureToken" ) );
- initializeAtBuildTime( getClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$ParenToken" ) );
- initializeAtBuildTime( getClass( "org.apache.jena.ext.xerces.impl.xpath.regex.Token$UnionToken" ) );
- initializeAtBuildTime( org.apache.jena.ext.xerces.util.XercesXMLChar.class );
- }
-}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/LogbackFeature.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/LogbackFeature.java
deleted file mode 100644
index bfac76952..000000000
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/LogbackFeature.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.nativefeatures;
-
-import static org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtBuildTime;
-
-/**
- * Configuration of eagerly initialized SLF4J and Logback classes for native image builds
- */
-public class LogbackFeature extends AbstractSammCliFeature {
- @Override
- public void beforeAnalysis( final BeforeAnalysisAccess access ) {
- initializeAtBuildTime( ch.qos.logback.classic.Level.class );
- initializeAtBuildTime( ch.qos.logback.classic.Logger.class );
- initializeAtBuildTime( ch.qos.logback.classic.PatternLayout.class );
- initializeAtBuildTime( ch.qos.logback.core.CoreConstants.class );
- initializeAtBuildTime( ch.qos.logback.core.pattern.parser.Parser.class );
- initializeAtBuildTime( ch.qos.logback.core.spi.AppenderAttachableImpl.class );
- initializeAtBuildTime( ch.qos.logback.core.status.InfoStatus.class );
- initializeAtBuildTime( ch.qos.logback.core.status.StatusBase.class );
- initializeAtBuildTime( ch.qos.logback.core.util.Loader.class );
- initializeAtBuildTime( ch.qos.logback.core.util.StatusPrinter.class );
- initializeAtBuildTime( ch.qos.logback.core.util.StatusPrinter2.class );
-
- initializeAtBuildTime( org.slf4j.LoggerFactory.class );
- initializeAtBuildTime( org.slf4j.helpers.Reporter.class );
- }
-}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/SammCliFeature.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/SammCliFeature.java
new file mode 100644
index 000000000..fc7c4bed1
--- /dev/null
+++ b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/SammCliFeature.java
@@ -0,0 +1,98 @@
+/*
+ * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
+ *
+ * See the AUTHORS file(s) distributed with this work for additional
+ * information regarding authorship.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/.
+ *
+ * SPDX-License-Identifier: MPL-2.0
+ */
+
+package org.eclipse.esmf.nativefeatures;
+
+import static org.eclipse.esmf.nativefeatures.AssetAdministrationShellFeature.ADMINSHELL_PROPERTIES;
+
+import java.util.List;
+
+import org.eclipse.esmf.SammCli;
+import org.eclipse.esmf.aas.AasCommand;
+import org.eclipse.esmf.aas.AasListSubmodelsCommand;
+import org.eclipse.esmf.aas.AasToCommand;
+import org.eclipse.esmf.aas.to.AasToAspectCommand;
+import org.eclipse.esmf.aspect.AspectCommand;
+import org.eclipse.esmf.aspect.AspectEditCommand;
+import org.eclipse.esmf.aspect.AspectPrettyPrintCommand;
+import org.eclipse.esmf.aspect.AspectToCommand;
+import org.eclipse.esmf.aspect.AspectUsageCommand;
+import org.eclipse.esmf.aspect.AspectValidateCommand;
+import org.eclipse.esmf.aspect.edit.AspectEditNewVersionCommand;
+import org.eclipse.esmf.aspect.to.AspectToAasCommand;
+import org.eclipse.esmf.aspect.to.AspectToAsyncapiCommand;
+import org.eclipse.esmf.aspect.to.AspectToHtmlCommand;
+import org.eclipse.esmf.aspect.to.AspectToJavaCommand;
+import org.eclipse.esmf.aspect.to.AspectToJsonCommand;
+import org.eclipse.esmf.aspect.to.AspectToJsonLdCommand;
+import org.eclipse.esmf.aspect.to.AspectToJsonSchemaCommand;
+import org.eclipse.esmf.aspect.to.AspectToOpenapiCommand;
+import org.eclipse.esmf.aspect.to.AspectToPngCommand;
+import org.eclipse.esmf.aspect.to.AspectToSqlCommand;
+import org.eclipse.esmf.aspect.to.AspectToSvgCommand;
+import org.eclipse.esmf.exception.CommandException;
+import org.eclipse.esmf.exception.SubCommandException;
+import org.eclipse.esmf.substitution.AdminShellConfig;
+
+import org.graalvm.nativeimage.hosted.Feature;
+
+public class SammCliFeature implements Feature {
+ @Override
+ public void beforeAnalysis( final BeforeAnalysisAccess access ) {
+ Native.forClass( AdminShellConfig.class ).initializeAtBuildTime();
+
+ Native.forClass( SammCli.class ).registerEverythingForReflection();
+
+ Native.forClass( AasCommand.class ).registerEverythingForReflection();
+ Native.forClass( AasListSubmodelsCommand.class ).registerEverythingForReflection();
+ Native.forClass( AasToCommand.class ).registerEverythingForReflection();
+
+ Native.forClass( AasToAspectCommand.class ).registerEverythingForReflection();
+
+ Native.forClass( AspectCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectEditCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectPrettyPrintCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectUsageCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectValidateCommand.class ).registerEverythingForReflection();
+
+ Native.forClass( AspectEditCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectEditNewVersionCommand.class ).registerEverythingForReflection();
+
+ Native.forClass( AspectToAasCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToAsyncapiCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToHtmlCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToJavaCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToJsonCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToJsonLdCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToJsonSchemaCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToOpenapiCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToPngCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToSqlCommand.class ).registerEverythingForReflection();
+ Native.forClass( AspectToSvgCommand.class ).registerEverythingForReflection();
+
+ Native.forClass( CommandException.class ).registerEverythingForReflection();
+ Native.forClass( SubCommandException.class ).registerEverythingForReflection();
+
+ Native.addResource( "application.properties" );
+ Native.addResource( "git.properties" );
+ Native.addResource( "pom.properties" );
+ Native.addResource( "logback.xml" );
+ Native.addResource( ADMINSHELL_PROPERTIES );
+ }
+
+ @Override
+ public List> getRequiredFeatures() {
+ return List.of( EsmfFeature.class );
+ }
+}
diff --git a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/SammCliFeatures.java b/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/SammCliFeatures.java
deleted file mode 100644
index ab2c540b9..000000000
--- a/tools/samm-cli/src/main/java/org/eclipse/esmf/nativefeatures/SammCliFeatures.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (c) 2024 Robert Bosch Manufacturing Solutions GmbH
- *
- * See the AUTHORS file(s) distributed with this work for additional
- * information regarding authorship.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at https://mozilla.org/MPL/2.0/.
- *
- * SPDX-License-Identifier: MPL-2.0
- */
-
-package org.eclipse.esmf.nativefeatures;
-
-import static org.graalvm.nativeimage.hosted.RuntimeClassInitialization.initializeAtBuildTime;
-import static org.graalvm.nativeimage.impl.ConfigurationCondition.alwaysTrue;
-
-import java.util.List;
-
-import com.oracle.svm.core.configure.ResourcesRegistry;
-import org.graalvm.nativeimage.ImageSingletons;
-import org.graalvm.nativeimage.hosted.Feature;
-
-/**
- * Build time initialization for samm-cli
- */
-public class SammCliFeatures extends AbstractSammCliFeature {
- @Override
- public void beforeAnalysis( final BeforeAnalysisAccess access ) {
- initializeAtBuildTime( com.google.common.collect.Range.class );
- initializeAtBuildTime( getClass( "com.sun.tools.javac.file.BaseFileManager" ) );
- initializeAtBuildTime( getClass( "com.sun.tools.javac.file.JavacFileManager" ) );
- initializeAtBuildTime( getClass( "com.sun.tools.javac.file.Locations" ) );
- initializeAtBuildTime( getClass( "com.sun.tools.javac.util.Context" ) );
- initializeAtBuildTime( getClass( "jdk.internal.net.http.HttpClientImpl" ) );
- initializeAtBuildTime( getClass( "jdk.internal.net.http.HttpClientImpl$SelectorManager" ) );
- initializeAtBuildTime( getClass( "jdk.internal.net.http.common.Utils" ) );
-
- final ResourcesRegistry resourcesRegistry = ImageSingletons.lookup( ResourcesRegistry.class );
- resourcesRegistry.addResourceBundles( alwaysTrue(), "com.sun.tools.javac.resources.compiler" );
- resourcesRegistry.addResourceBundles( alwaysTrue(), "com.sun.tools.javac.resources.javac" );
- }
-
- @Override
- public List> getRequiredFeatures() {
- return List.of(
- AasReflection.class,
- LogbackFeature.class,
- ShaclJsFeature.class,
- ClassGraphFeature.class,
- JenaFeature.class
- );
- }
-}
diff --git a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/jni-config.json b/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/jni-config.json
deleted file mode 100644
index 496416a7f..000000000
--- a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/jni-config.json
+++ /dev/null
@@ -1,467 +0,0 @@
-[
-{
- "name":"sun.awt.X11.XToolkit",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.awt.Win32GraphicsDevice",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.java2d.d3d.D3DGraphicsDevice",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.font.FontConfigManager",
- "allDeclaredFields":true,
- "allDeclaredMethods":true
-},
-{
- "name":"sun.font.FontConfigManager$FontConfigInfo",
- "allDeclaredFields":true,
- "allDeclaredMethods":true
-},
-{
- "name":"sun.font.FontConfigManager$FcCompFont",
- "allDeclaredFields":true,
- "allDeclaredMethods":true
-},
-{
- "name":"sun.font.FontConfigManager$FontConfigFont",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"java.awt.Cursor",
- "fields":[{"name":"pData"}, {"name":"type"}],
- "methods":[{"name":"setPData","parameterTypes":["long"] }]
-},
-{
- "name":"java.awt.Dimension",
- "fields":[{"name":"height"}, {"name":"width"}]
-},
-{
- "name":"java.awt.Font",
- "fields":[{"name":"name"}, {"name":"pData"}, {"name":"size"}, {"name":"style"}],
- "methods":[{"name":"getFont","parameterTypes":["java.lang.String"] }, {"name":"getFontPeer","parameterTypes":[] }]
-},
-{
- "name":"java.awt.FontMetrics",
- "fields":[{"name":"font"}],
- "methods":[{"name":"getHeight","parameterTypes":[] }]
-},
-{
- "name":"java.awt.Point",
- "fields":[{"name":"x"}, {"name":"y"}]
-},
-{
- "name":"java.awt.Toolkit",
- "methods":[{"name":"getDefaultToolkit","parameterTypes":[] }, {"name":"getFontMetrics","parameterTypes":["java.awt.Font"] }]
-},
-{
- "name":"java.awt.desktop.UserSessionEvent$Reason",
- "fields":[{"name":"CONSOLE"}, {"name":"LOCK"}, {"name":"REMOTE"}, {"name":"UNSPECIFIED"}]
-},
-{
- "name":"java.lang.Thread",
- "methods":[{"name":"yield","parameterTypes":[] }]
-},
-{
- "name":"java.awt.Color",
- "allDeclaredFields":true,
- "allDeclaredMethods":true
-},
-{
- "name": "java.awt.Insets",
- "allDeclaredFields": true,
- "allDeclaredMethods": true
-},
-{
- "name": "java.awt.event.InputEvent",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name":"java.awt.image.BufferedImage",
- "fields":[{"name":"colorModel"}, {"name":"imageType"}, {"name":"raster"}],
- "methods":[{"name":"getRGB","parameterTypes":["int","int","int","int","int[]","int","int"] }, {"name":"setRGB","parameterTypes":["int","int","int","int","int[]","int","int"] }]
-},
-{
- "name":"java.awt.image.Raster",
- "fields":[{"name":"dataBuffer"}, {"name":"height"}, {"name":"minX"}, {"name":"minY"}, {"name":"numBands"}, {"name":"numDataElements"}, {"name":"sampleModel"}, {"name":"sampleModelTranslateX"}, {"name":"sampleModelTranslateY"}, {"name":"width"}]
-},
-{
- "name":"java.awt.image.SampleModel",
- "fields":[{"name":"height"}, {"name":"width"}],
- "methods":[{"name":"getPixels","parameterTypes":["int","int","int","int","int[]","java.awt.image.DataBuffer"] }, {"name":"setPixels","parameterTypes":["int","int","int","int","int[]","java.awt.image.DataBuffer"] }]
-},
-{
- "name":"java.awt.image.SinglePixelPackedSampleModel",
- "fields":[{"name":"bitMasks"}, {"name":"bitOffsets"}, {"name":"bitSizes"}, {"name":"maxBitSize"}]
-},
-{
- "name": "java.awt.AWTEvent",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name":"[Lsun.java2d.loops.GraphicsPrimitive;"
-},
-{
- "name":"java.awt.AlphaComposite",
- "fields":[{"name":"extraAlpha"}, {"name":"rule"}]
-},
-{
- "name":"java.awt.Component",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.font.FontDesignMetrics",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name":"java.awt.GraphicsEnvironment",
- "methods":[{"name":"getLocalGraphicsEnvironment","parameterTypes":[] }, {"name":"isHeadless","parameterTypes":[] }]
-},
-{
- "name":"java.awt.event.KeyEvent",
- "fields":[{"name":"isProxyActive"}]
-},
-{
- "name":"java.awt.geom.AffineTransform",
- "fields":[{"name":"m00"}, {"name":"m01"}, {"name":"m02"}, {"name":"m10"}, {"name":"m11"}, {"name":"m12"}]
-},
-{
- "name":"java.awt.geom.GeneralPath",
- "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["int","byte[]","int","float[]","int"] }]
-},
-{
- "name":"java.awt.geom.Path2D",
- "fields":[{"name":"numTypes"}, {"name":"pointTypes"}, {"name":"windingRule"}]
-},
-{
- "name":"java.awt.geom.Path2D$Float",
- "fields":[{"name":"floatCoords"}]
-},
-{
- "name":"java.awt.geom.Point2D$Float",
- "fields":[{"name":"x"}, {"name":"y"}],
- "methods":[{"name":"","parameterTypes":["float","float"] }]
-},
-{
- "name":"java.awt.geom.Rectangle2D$Float",
- "fields":[{"name":"height"}, {"name":"width"}, {"name":"x"}, {"name":"y"}],
- "methods":[{"name":"","parameterTypes":[] }, {"name":"","parameterTypes":["float","float","float","float"] }]
-},
-{
- "name":"java.awt.image.ColorModel",
- "fields":[{"name":"colorSpace"}, {"name":"colorSpaceType"}, {"name":"isAlphaPremultiplied"}, {"name":"is_sRGB"}, {"name":"nBits"}, {"name":"numComponents"}, {"name":"pData"}, {"name":"supportsAlpha"}, {"name":"transparency"}],
- "methods":[{"name":"getRGBdefault","parameterTypes":[] }]
-},
-{
- "name":"java.awt.image.IndexColorModel",
- "fields":[{"name":"allgrayopaque"}, {"name":"map_size"}, {"name":"rgb"}, {"name":"transparent_index"}]
-},
-{
- "name":"java.lang.Boolean",
- "methods":[{"name":"getBoolean","parameterTypes":["java.lang.String"] }]
-},
-{
- "name":"java.lang.System",
- "methods":[{"name":"load","parameterTypes":["java.lang.String"] }, {"name":"setProperty","parameterTypes":["java.lang.String","java.lang.String"] }]
-},
-{
- "name":"java.lang.String",
- "methods":[{"name":"toLowerCase","parameterTypes":["java.util.Locale"] }]
-},
-{
- "name":"java.util.ArrayList",
- "methods":[{"name":"","parameterTypes":["int"] }, {"name":"add","parameterTypes":["java.lang.Object"] }]
-},
-{
- "name":"java.util.HashMap",
- "methods":[{"name":"containsKey","parameterTypes":["java.lang.Object"] }, {"name":"put","parameterTypes":["java.lang.Object","java.lang.Object"] }]
-},
-{
- "name":"sun.awt.AWTAutoShutdown",
- "methods":[{"name":"notifyToolkitThreadBusy","parameterTypes":[] }, {"name":"notifyToolkitThreadFree","parameterTypes":[] }]
-},
-{
- "name":"sun.awt.SunHints",
- "fields":[{"name":"INTVAL_STROKE_PURE"}]
-},
-{
- "name":"sun.awt.SunToolkit",
- "methods":[{"name":"awtLock","parameterTypes":[] }, {"name":"awtLockNotify","parameterTypes":[] }, {"name":"awtLockNotifyAll","parameterTypes":[] }, {"name":"awtLockWait","parameterTypes":["long"] }, {"name":"awtUnlock","parameterTypes":[] },{"name":"isTouchKeyboardAutoShowEnabled","parameterTypes":[] }]
-},
-{
- "name":"sun.awt.Win32GraphicsConfig",
- "fields":[{"name":"visual"}]
-},
-{
- "name":"sun.awt.Win32GraphicsDevice",
- "fields":[{"name":"dynamicColorModel"}]
-},
-{
- "name":"sun.awt.Win32GraphicsEnvironment",
- "methods":[{"name":"dwmCompositionChanged","parameterTypes":["boolean"] }]
-},
-{
- "name":"sun.awt.image.ByteComponentRaster",
- "fields":[{"name":"data"}, {"name":"dataOffsets"}, {"name":"pixelStride"}, {"name":"scanlineStride"}, {"name":"type"}]
-},
-{
- "name":"sun.awt.image.GifImageDecoder",
- "fields":[{"name":"outCode"}, {"name":"prefix"}, {"name":"suffix"}],
- "methods":[{"name":"readBytes","parameterTypes":["byte[]","int","int"] }, {"name":"sendPixels","parameterTypes":["int","int","int","int","byte[]","java.awt.image.ColorModel"] }]
-},
-{
- "name":"sun.awt.image.BufImgSurfaceData$ICMColorData",
- "fields":[{"name":"pData"}],
- "methods":[{"name":"","parameterTypes":["long"] }]
-},
-{
- "name":"sun.awt.image.ImageRepresentation",
- "fields":[{"name":"numSrcLUT"}, {"name":"srcLUTtransIndex"}]
-},
-{
- "name":"sun.awt.image.IntegerComponentRaster",
- "fields":[{"name":"data"}, {"name":"dataOffsets"}, {"name":"pixelStride"}, {"name":"scanlineStride"}, {"name":"type"}]
-},
-{
- "name":"sun.awt.image.SunVolatileImage",
- "fields":[{"name":"volSurfaceManager"}]
-},
-{
- "name":"sun.awt.image.VolatileSurfaceManager",
- "fields":[{"name":"sdCurrent"}]
-},
-{
- "name":"sun.awt.windows.WComponentPeer",
- "fields":[{"name":"hwnd"}, {"name":"winGraphicsConfig"}],
- "methods":[{"name":"disposeLater","parameterTypes":[] }, {"name":"replaceSurfaceData","parameterTypes":[] }, {"name":"replaceSurfaceDataLater","parameterTypes":[] }]
-},
-{
- "name":"sun.awt.windows.WDesktopPeer",
- "methods":[{"name":"systemSleepCallback","parameterTypes":["boolean"] }, {"name":"userSessionCallback","parameterTypes":["boolean","java.awt.desktop.UserSessionEvent$Reason"] }]
-},
-{
- "name":"sun.awt.windows.WObjectPeer",
- "fields":[{"name":"createError"}, {"name":"destroyed"}, {"name":"pData"}, {"name":"target"}],
- "methods":[{"name":"getPeerForTarget","parameterTypes":["java.lang.Object"] }]
-},
-{
- "name":"sun.awt.windows.WToolkit",
- "methods":[{"name":"displayChanged","parameterTypes":[] }, {"name":"paletteChanged","parameterTypes":[] }, {"name":"windowsSettingChange","parameterTypes":[] }]
-},
-{
- "name":"sun.awt.X11.XErrorHandlerUtil",
- "methods":[{"name":"init","parameterTypes":["long"] }]
-},
-{
- "name":"sun.awt.X11GraphicsConfig",
- "fields":[{"name":"aData"}, {"name":"bitsPerPixel"}]
-},
-{
- "name":"sun.awt.X11GraphicsDevice",
- "methods":[{"name":"addDoubleBufferVisual","parameterTypes":["int"] }]
-},
-{
- "name":"sun.font.CharToGlyphMapper",
- "methods":[{"name":"charToGlyph","parameterTypes":["int"] }]
-},
-{
- "name":"sun.font.Font2D",
- "methods":[{"name":"canDisplay","parameterTypes":["char"] }, {"name":"charToGlyph","parameterTypes":["int"] }, {"name":"charToVariationGlyph","parameterTypes":["int","int"] }, {"name":"getMapper","parameterTypes":[] }, {"name":"getTableBytes","parameterTypes":["int"] }]
-},
-{
- "name":"sun.font.FontStrike",
- "methods":[{"name":"getGlyphMetrics","parameterTypes":["int"] }]
-},
-{
- "name":"sun.font.FreetypeFontScaler",
- "methods":[{"name":"invalidateScaler","parameterTypes":[] }]
-},
-{
- "name":"sun.font.GlyphList",
- "fields":[{"name":"gposx"}, {"name":"gposy"}, {"name":"images"}, {"name":"lcdRGBOrder"}, {"name":"lcdSubPixPos"}, {"name":"len"}, {"name":"positions"}, {"name":"usePositions"}]
-},
-{
- "name":"sun.font.GlyphLayout$GVData",
- "fields":[{"name":"_count"}, {"name":"_flags"}, {"name":"_glyphs"}, {"name":"_indices"}, {"name":"_positions"}],
- "methods":[{"name":"grow","parameterTypes":[] }]
-},
-{
- "name":"sun.font.PhysicalStrike",
- "fields":[{"name":"pScalerContext"}],
- "methods":[{"name":"adjustPoint","parameterTypes":["java.awt.geom.Point2D$Float"] }, {"name":"getGlyphPoint","parameterTypes":["int","int"] }]
-},
-{
- "name":"sun.font.StrikeMetrics",
- "methods":[{"name":"","parameterTypes":["float","float","float","float","float","float","float","float","float","float"] }]
-},
-{
- "name":"sun.font.TrueTypeFont",
- "methods":[{"name":"readBlock","parameterTypes":["java.nio.ByteBuffer","int","int"] }, {"name":"readBytes","parameterTypes":["int","int"] }]
-},
-{
- "name":"sun.font.Type1Font",
- "methods":[{"name":"readFile","parameterTypes":["java.nio.ByteBuffer"] }]
-},
-{
- "name":"sun.java2d.Disposer",
- "methods":[{"name":"addRecord","parameterTypes":["java.lang.Object","long","long"] }]
-},
-{
- "name":"sun.java2d.InvalidPipeException"
-},
-{
- "name":"sun.java2d.NullSurfaceData"
-},
-{
- "name":"sun.java2d.SunGraphics2D",
- "fields":[{"name":"clipRegion"}, {"name":"composite"}, {"name":"eargb"}, {"name":"lcdTextContrast"}, {"name":"pixel"}, {"name":"strokeHint"}]
-},
-{
- "name":"sun.java2d.SunGraphicsEnvironment",
- "methods":[{"name":"isDisplayLocal","parameterTypes":[] }]
-},
-{
- "name":"sun.java2d.SurfaceData",
- "fields":[{"name":"pData"}, {"name":"valid"}]
-},
-{
- "name":"sun.java2d.d3d.D3DGraphicsDevice$1",
- "methods":[{"name":"run","parameterTypes":[] }]
-},
-{
- "name":"sun.java2d.d3d.D3DRenderQueue$1",
- "methods":[{"name":"run","parameterTypes":[] }]
-},
-{
- "name":"sun.java2d.loops.Blit",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.BlitBg",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.CompositeType",
- "fields":[{"name":"AnyAlpha"}, {"name":"Src"}, {"name":"SrcNoEa"}, {"name":"SrcOver"}, {"name":"SrcOverNoEa"}, {"name":"Xor"}]
-},
-{
- "name":"sun.java2d.loops.DrawGlyphList",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.DrawGlyphListAA",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.DrawGlyphListLCD",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.DrawLine",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.DrawParallelogram",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.DrawPath",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.DrawPolygons",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.DrawRect",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.FillParallelogram",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.FillPath",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.FillRect",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.FillSpans",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.GraphicsPrimitive",
- "fields":[{"name":"pNativePrim"}]
-},
-{
- "name":"sun.java2d.loops.GraphicsPrimitiveMgr",
- "methods":[{"name":"register","parameterTypes":["sun.java2d.loops.GraphicsPrimitive[]"] }]
-},
-{
- "name":"sun.java2d.loops.MaskBlit",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.MaskFill",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.ScaledBlit",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.SurfaceType",
- "fields":[{"name":"Any3Byte"}, {"name":"Any4Byte"}, {"name":"AnyByte"}, {"name":"AnyColor"}, {"name":"AnyInt"}, {"name":"AnyShort"}, {"name":"ByteBinary1Bit"}, {"name":"ByteBinary2Bit"}, {"name":"ByteBinary4Bit"}, {"name":"ByteGray"}, {"name":"ByteIndexed"}, {"name":"ByteIndexedBm"}, {"name":"FourByteAbgr"}, {"name":"FourByteAbgrPre"}, {"name":"Index12Gray"}, {"name":"Index8Gray"}, {"name":"IntArgb"}, {"name":"IntArgbBm"}, {"name":"IntArgbPre"}, {"name":"IntBgr"}, {"name":"IntRgb"}, {"name":"IntRgbx"}, {"name":"OpaqueColor"}, {"name":"ThreeByteBgr"}, {"name":"Ushort4444Argb"}, {"name":"Ushort555Rgb"}, {"name":"Ushort555Rgbx"}, {"name":"Ushort565Rgb"}, {"name":"UshortGray"}, {"name":"UshortIndexed"}]
-},
-{
- "name":"sun.java2d.loops.TransformHelper",
- "methods":[{"name":"","parameterTypes":["long","sun.java2d.loops.SurfaceType","sun.java2d.loops.CompositeType","sun.java2d.loops.SurfaceType"] }]
-},
-{
- "name":"sun.java2d.loops.XORComposite",
- "fields":[{"name":"alphaMask"}, {"name":"xorColor"}, {"name":"xorPixel"}]
-},
-{
- "name":"sun.java2d.pipe.Region",
- "fields":[{"name":"bands"}, {"name":"endIndex"}, {"name":"hix"}, {"name":"hiy"}, {"name":"lox"}, {"name":"loy"}]
-},
-{
- "name":"sun.java2d.pipe.RegionIterator",
- "fields":[{"name":"curIndex"}, {"name":"numXbands"}, {"name":"region"}]
-},
-{
- "name":"sun.java2d.pipe.ShapeSpanIterator",
- "fields":[{"name":"pData"}]
-},
-{
- "name":"sun.java2d.xr.XRSurfaceData",
- "fields":[{"name":"picture"}, {"name":"xid"}]
-},
-{
- "name":"sun.java2d.windows.WindowsFlags",
- "fields":[{"name":"d3dEnabled"}, {"name":"d3dSet"}, {"name":"offscreenSharingEnabled"}, {"name":"setHighDPIAware"}]
-}
-
-]
diff --git a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/predefined-classes-config.json b/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/predefined-classes-config.json
deleted file mode 100644
index fe51488c7..000000000
--- a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/predefined-classes-config.json
+++ /dev/null
@@ -1 +0,0 @@
-[]
diff --git a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/proxy-config.json b/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/proxy-config.json
deleted file mode 100644
index 0d4f101c7..000000000
--- a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/proxy-config.json
+++ /dev/null
@@ -1,2 +0,0 @@
-[
-]
diff --git a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/reflect-config.json b/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/reflect-config.json
deleted file mode 100644
index 57356acca..000000000
--- a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/reflect-config.json
+++ /dev/null
@@ -1,329 +0,0 @@
-[
-{
- "name": "org.eclipse.esmf.metamodel.impl.DefaultScalarValue",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name": "org.eclipse.esmf.metamodel.impl.DefaultProperty",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"org.eclipse.esmf.metamodel.loader.DefaultPropertyWrapper",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.awt.X11.XToolkit",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.awt.Win32GraphicsDevice",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.java2d.d3d.D3DGraphicsDevice",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"org.eclipse.esmf.SammCli",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.util.resources.LocaleData$LocaleDataStrategy",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.util.resources.LocaleData",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"sun.font.FontConfigManager$FontConfigInfo",
- "allDeclaredFields":true,
- "allDeclaredMethods":true
-},
-{
- "name":"sun.font.FontConfigManager$FcCompFont",
- "allDeclaredFields":true,
- "allDeclaredMethods":true
-},
-{
- "name":"sun.font.FontConfigManager$FontConfigFont",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name":"[Lorg.graphper.layout.dot.DNode;"
-},
-{
- "name":"com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl",
- "methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "name":"java.awt.Canvas",
- "methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "name": "java.awt.Color",
- "allDeclaredFields": true,
- "allDeclaredMethods": true
-},
-{
- "name": "java.awt.Insets",
- "allDeclaredFields": true,
- "allDeclaredMethods": true
-},
-{
- "name": "java.awt.event.InputEvent",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name": "java.awt.AWTEvent",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name":"java.awt.Component",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name":"java.awt.Font",
- "methods":[{"name":"","parameterTypes":["java.lang.String","int","int"] }]
-},
-{
- "name":"java.awt.FontMetrics",
- "methods":[{"name":"getHeight","parameterTypes":[] }, {"name":"stringWidth","parameterTypes":["java.lang.String"] }]
-},
-{
- "name":"sun.font.FontDesignMetrics",
- "allDeclaredFields": true,
- "allDeclaredMethods": true,
- "allDeclaredConstructors":true
-},
-{
- "name":"java.util.concurrent.atomic.AtomicBoolean",
- "fields":[{"name":"value"}]
-},
-{
- "name":"org.apache.batik.bridge.RhinoInterpreterFactory",
- "methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "name":"org.apache.batik.css.parser.Parser",
- "methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "name":"org.apache.batik.ext.awt.image.codec.png.PNGTranscoderInternalCodecWriteAdapter",
- "methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "name":"org.graphper.api.LineAttrs",
- "allDeclaredFields":true
-},
-{
- "name":"org.graphper.api.NodeAttrs",
- "allDeclaredFields":true
-},
-{
- "name":"sun.awt.Win32FontManager",
- "methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "name":"sun.java2d.marlin.DMarlinRenderingEngine",
- "methods":[{"name":"","parameterTypes":[] }]
-},
-{
- "name":"sun.font.CompositeFontDescriptor",
- "allDeclaredFields":true,
- "allDeclaredMethods":true,
- "allDeclaredConstructors":true
-},
-{
- "name": "ch.qos.logback.classic.pattern.DateConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.MessageConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.ThrowableProxyConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.NopThrowableInformationConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.ContextNameConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BoldYellowCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.LoggerConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.ReplacingCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BoldBlueCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.CyanCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.RedCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.WhiteCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.PropertyConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.RootCauseFirstThrowableProxyConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.MethodOfCallerConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.LevelConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.IdentityCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BoldWhiteCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.MarkerConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BoldCyanCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BoldMagentaCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.RelativeTimeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.MagentaCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.ClassOfCallerConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.LineOfCallerConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.FileOfCallerConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BoldGreenCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.LocalSequenceNumberConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.YellowCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.ExtendedThrowableProxyConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.color.HighlightingCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.GrayCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.MDCConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.ClassOfCallerConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BoldRedCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.GreenCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.core.pattern.color.BlackCompositeConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.ThreadConverter",
- "allDeclaredConstructors": true
-},
-{
- "name": "ch.qos.logback.classic.pattern.LineSeparatorConverter",
- "allDeclaredConstructors": true
-},
-{
- "name":"org.eclipse.esmf.aspectmodel.java.JavaCodeGenerationConfig",
- "allDeclaredConstructors": true,
- "allDeclaredFields":true,
- "allDeclaredMethods": true
-}
-]
diff --git a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/resource-config.json b/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/resource-config.json
deleted file mode 100644
index 41b329c48..000000000
--- a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/resource-config.json
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "resources":[
- {"pattern":"java.base:\\Qjdk/internal/icu/impl/data/icudt67b/ubidi.icu\\E"},
- {"pattern":"\\Qapplication.properties\\E"},
- {"pattern":"\\Qgit.properties\\E"},
- {"pattern":"\\Qadminshell.properties\\E"},
- {"pattern":"\\Qpom.properties\\E"},
- {"pattern":"\\QMETA-INF/services/com.oracle.truffle.api.TruffleLanguage$Provider\\E"},
- {"pattern":"\\QMETA-INF/services/com.oracle.truffle.api.instrumentation.TruffleInstrument$Provider\\E"},
- {"pattern":"\\QMETA-INF/services/javax.script.ScriptEngineFactory\\E"},
- {"pattern":"\\QMETA-INF/services/org.apache.jena.sys.JenaSubsystemLifecycle\\E"},
- {"pattern":"\\QMETA-INF/services/org.graphper.draw.CustomizeShapeRender\\E"},
- {"pattern":"\\QMETA-INF/services/org.graphper.layout.MeasureText\\E"},
- {"pattern":"samm/[^/]*/([^/]*/)?[a-zA-Z0-9-]+\\.(ttl|js)"},
- {"pattern":"\\Qlogback.xml\\E"},
- {"pattern":"\\Qcom/oracle/truffle/nfi/impl/NFILanguageImpl.class\\E"},
- {"pattern":"\\Qorg/apache/jena/arq/arq-properties.xml\\E"},
- {"pattern":"\\Qorg/apache/jena/jena-properties.xml\\E"},
- {"pattern":"\\Qorg/apache/batik/anim/dom/resources/UserAgentStyleSheet.css\\E"},
- {"pattern":"\\Qorg/apache/batik/bridge/resources/help.gif\\E"},
- {"pattern":"\\Qorg/apache/batik/util/resources/XMLResourceDescriptor.properties\\E"},
- {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"},
- {"pattern":"\\Qfontconfig.bfc\\E"},
- {"pattern":"\\Qopenapi/*.json\\E"},
- {"pattern":"\\Qdocu/static/*.*\\E"},
- {"pattern":"\\Qdocu/styles/*.*\\E"},
- {"pattern":"\\Qdocu/aspect-model.properties\\E"}
- ],
- "bundles":[
- {"name":"org.apache.jena.ext.xerces.impl.xpath.regex.message"},
- {"name":"org.apache.jena.ext.xerces.impl.msg.XMLSchemaMessages"},
- {"name":"sun.awt.resources.awt","classNames":["sun.awt.resources.awt"]}
- ]
-}
diff --git a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/serialization-config.json b/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/serialization-config.json
deleted file mode 100644
index f3d7e06e3..000000000
--- a/tools/samm-cli/src/main/resources/META-INF/native-image/org.eclipse.esmf/samm-cli/serialization-config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "types":[
- ],
- "lambdaCapturingTypes":[
- ],
- "proxies":[
- ]
-}
diff --git a/tools/samm-cli/src/test/java/org/eclipse/esmf/ExecutableJarLauncher.java b/tools/samm-cli/src/test/java/org/eclipse/esmf/ExecutableJarLauncher.java
index 035acf4bb..733c73038 100644
--- a/tools/samm-cli/src/test/java/org/eclipse/esmf/ExecutableJarLauncher.java
+++ b/tools/samm-cli/src/test/java/org/eclipse/esmf/ExecutableJarLauncher.java
@@ -27,10 +27,7 @@
/**
* A {@link ProcessLauncher} that executes an executable jar. The absolute path of the jar must be set using the system property
- * "executableJar". Additionally, if GraalVM's native-binary tool is found on the PATH and the system property "graalVmConfigPath" is set,
- * the execution of the executable jar will use GraalVM's Tracing Agent
- * and write corresponding config files to the directory given in graalVmConfigPath.
+ * "executableJar".
*/
public class ExecutableJarLauncher extends OsProcessLauncher {
public ExecutableJarLauncher() {
@@ -45,22 +42,9 @@ private static List buildCommand() {
final List commandWithArguments = new ArrayList<>();
commandWithArguments.add( ProcessHandle.current().info().command().orElse( "java" ) );
- String configPath = System.getProperty( "graalVmConfigPath" );
- if ( isNativeImageBinaryOnPath() && configPath != null ) {
- if ( SystemUtils.OS_NAME.startsWith( "Windows" ) ) {
- configPath = configPath.replace( "/", "\\" );
- }
- commandWithArguments.add( "-agentlib:native-image-agent=config-merge-dir=" + configPath );
- }
commandWithArguments.add( "-Djava.awt.headless=true" );
commandWithArguments.add( "-jar" );
commandWithArguments.add( jarFile );
return commandWithArguments;
}
-
- private static boolean isNativeImageBinaryOnPath() {
- return Stream.of( System.getenv( "PATH" ).split( Pattern.quote( File.pathSeparator ) ) )
- .map( Paths::get )
- .anyMatch( path -> Files.exists( path.resolve( "native-image" ) ) || Files.exists( path.resolve( "native-image.cmd" ) ) );
- }
}