Skip to content

SubstrateVM should be able to analyze Spring functional bean definitions #905

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
sdeleuze opened this issue Jan 10, 2019 · 9 comments
Closed

Comments

@sdeleuze
Copy link
Collaborator

Here is a simple Spring application with beans defined in a programmatic way.

public class App {

    public static void main(String[] args) {
        GenericApplicationContext context = new GenericApplicationContext();
        context.registerBean(Foo.class);
        context.registerBean(Bar.class);
        context.refresh();
        context.getBean(Foo.class);
        context.getBean(Bar.class);
    }
}

This currently requires the following reflection configuration:

[
  {
    "name": "com.sample.Foo",
    "allDeclaredConstructors" : true,
    "allDeclaredMethods": true
  },
  {
    "name": "com.sample.Bar",
    "allDeclaredConstructors" : true,
    "allDeclaredMethods": true
  }
]

SubstrateVM should be able to analyze this kind of programmatic DI to allow running such Spring Framework application without advanced configuration.

Currently during compilation, we get

error: Error encountered while parsing com.oracle.svm.reflect.ClassLoader_findLoadedClass_e808259a373ab881b63621d947f9331965ab1a9e.invoke(java.lang.Object, java.lang.Object[]) 
Parsing context:
        parsing java.lang.reflect.Method.invoke(Method.java:498)
        parsing org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
        parsing org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:622)
        parsing org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:607)
        parsing org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1288)
        parsing org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1127)
        parsing org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getSingletonFactoryBeanForTypeCheck(AbstractAutowireCapableBeanFactory.java:974)
        parsing org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryBean(AbstractAutowireCapableBeanFactory.java:848)
        parsing org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:574)
        parsing org.springframework.beans.factory.support.AbstractBeanFactory.isTypeMatch(AbstractBeanFactory.java:602)
        parsing org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:838)
        parsing org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
        parsing com.sample.App.main(App.java:12)
        parsing com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:164)
        parsing com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Original error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Unsupported method java.lang.ClassLoader.findLoadedClass(String) is reachable: The declaring class of this element has been substituted, but this element is not present in the substitution class

And when running the app without reflection config:

        at java.lang.Throwable.<init>(Throwable.java:265)
        at java.lang.Exception.<init>(Exception.java:66)
        at java.lang.RuntimeException.<init>(RuntimeException.java:62)
        at org.springframework.core.NestedRuntimeException.<init>(NestedRuntimeException.java:56)
        at org.springframework.beans.BeansException.<init>(BeansException.java:40)
        at org.springframework.beans.FatalBeanException.<init>(FatalBeanException.java:35)
        at org.springframework.beans.factory.BeanCreationException.<init>(BeanCreationException.java:98)
        at org.springframework.beans.factory.BeanCreationException.<init>(BeanCreationException.java:114)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1270)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1164)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:538)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:498)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:320)
        at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$2c40051508af481f3e2b011afbd5800cdeae9fd3.getObject(Unknown Source)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:318)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:846)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:863)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546)
        at com.sample.App.main(App.java:12)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:164)
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.sample.Foo]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.sample.Foo.<init>()

A repro project is available at https://github.com/sdeleuze/graal-issues/tree/master/functional-bean-definition.

@SergejIsbrecht
Copy link

SergejIsbrecht commented Jan 11, 2019

@sdeleuze, kind of interesting result. If I run your classes in gradle with native-image I do get another result with RC10 on Linux sergej-P50 4.18.0-13-generic #14-Ubuntu SMP Wed Dec 5 09:04:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


> Task :oracleIssue:nativeImage
Executing [
/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/bin/java \
-XX:+UnlockExperimentalVMOptions \
-XX:+EnableJVMCI \
-XX:-UseJVMCICompiler \
-Dtruffle.TrustAllTruffleRuntimeProviders=true \
-d64 \
-noverify \
-XX:-UseJVMCIClassLoader \
-Xss10m \
-Xms1g \
-Xmx12931425888 \
-Duser.country=US \
-Duser.language=en \
-Dgraalvm.version=1.0.0-rc10 \
-Dorg.graalvm.version=1.0.0-rc10 \
-Dcom.oracle.graalvm.isaot=true \
-Djvmci.class.path.append=/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/graal.jar \
-Xbootclasspath/a:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/boot/graal-sdk.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/boot/graaljs-scriptengine.jar \
-cp \
/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/builder/objectfile.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/builder/pointsto.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/builder/svm.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/jvmci-hotspot.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/graal.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/graal-management.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/jvmci-api.jar \
com.oracle.svm.hosted.NativeImageGeneratorRunner \
-watchpid \
28121 \
-H:Name=hello-world \
-H:+ReportUnsupportedElementsAtRuntime \
-H:DelayClassInitialization=org.springframework.core.io.VfsUtils \
-H:+AllowIncompleteClasspath \
-H:CLibraryPath=/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/clibraries/linux-amd64 \
-H:Path=/home/sergej/Development/GitHub/GraalVMTest/oracleIssue/build/graal \
-H:Class=App \
-imagecp \
/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/boot/graal-sdk.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/boot/graaljs-scriptengine.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/builder/objectfile.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/builder/pointsto.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/builder/svm.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/jvmci-hotspot.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/graal.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/graal-management.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/jvmci/jvmci-api.jar:/home/sergej/.gradle/caches/com.palantir.graal/1.0.0-rc10/graalvm-ce-1.0.0-rc10/jre/lib/svm/library-support.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.graalvm.compiler/compiler/1.0.0-rc10/348252f37a155aba52e3ee9da9fbe483589d5d6e/compiler-1.0.0-rc10.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/com.oracle.substratevm/svm/1.0.0-rc10/58e31195b7330226169b4b9ede13d1314171a4f0/svm-1.0.0-rc10.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.graalvm.sdk/graal-sdk/1.0.0-rc10/12900d233d14f6382dd15c6481763777c56bf183/graal-sdk-1.0.0-rc10.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.springframework/spring-context/5.1.4.RELEASE/2be9e8da66d32fb4eaf29a46bdcdbfe155f1f87a/spring-context-5.1.4.RELEASE.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-core/2.11.1/592a48674c926b01a9a747c7831bcd82a9e6d6e4/log4j-core-2.11.1.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.springframework/spring-aop/5.1.4.RELEASE/57a8c4ab2ff3233095da24c58c30aa75a7a82069/spring-aop-5.1.4.RELEASE.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.springframework/spring-beans/5.1.4.RELEASE/507c9391e0b786704929453e7fd3a74cfba46534/spring-beans-5.1.4.RELEASE.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.springframework/spring-expression/5.1.4.RELEASE/1abbfd04a7d472811582bb3780ea4d871442d49c/spring-expression-5.1.4.RELEASE.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.springframework/spring-core/5.1.4.RELEASE/e7d2ad03a50ebff117a6efe2e0e3f15946d0768a/spring-core-5.1.4.RELEASE.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.apache.logging.log4j/log4j-api/2.11.1/268f0fe4df3eefe052b57c87ec48517d64fb2a10/log4j-api-2.11.1.jar:/home/sergej/.gradle/caches/modules-2/files-2.1/org.springframework/spring-jcl/5.1.4.RELEASE/f5a25caae583905203959abf35fdd1ab7a8f2c37/spring-jcl-5.1.4.RELEASE.jar:/home/sergej/Development/GitHub/GraalVMTest/oracleIssue/build/libs/oracleIssue.jar
]
[hello-world:28125]    classlist:   2,086.58 ms
[hello-world:28125]        (cap):   1,163.30 ms
[hello-world:28125]        setup:   2,384.48 ms
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.GraalJSEngineFactory could not be instantiated
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.GraalJSEngineFactory could not be instantiated
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.GraalJSEngineFactory could not be instantiated
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.oracle.truffle.js.scriptengine.GraalJSEngineFactory could not be instantiated
Warning: class initialization of class org.apache.logging.log4j.core.pattern.JAnsiTextRenderer failed with exception java.lang.NoSuchFieldError: WHITE. This class will be initialized at run time because either option --report-unsupported-elements-at-runtime or option --allow-incomplete-classpath is used for image building. Use the option --delay-class-initialization-to-runtime=org.apache.logging.log4j.core.pattern.JAnsiTextRenderer to explicitly request delayed initialization of this class.
[hello-world:28125]     analysis:  43,817.67 ms
error: unsupported features in 16 methods
Detailed message:
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandle.asType(MethodType)
Trace: 
        at parsing java.lang.invoke.CallSite.makeUninitializedCallSite(CallSite.java:241)
Call path from entry point to java.lang.invoke.CallSite.makeUninitializedCallSite(MethodType): 
        at java.lang.invoke.CallSite.makeUninitializedCallSite(CallSite.java:238)
        at java.lang.invoke.CallSite.<init>(CallSite.java:105)
        at java.lang.invoke.MutableCallSite.<init>(MutableCallSite.java:100)
        at jdk.internal.dynalink.support.AbstractRelinkableCallSite.<init>(AbstractRelinkableCallSite.java:104)
        at jdk.internal.dynalink.ChainedCallSite.<init>(ChainedCallSite.java:135)
        at jdk.nashorn.internal.runtime.linker.LinkerCallSite.<init>(LinkerCallSite.java:72)
        at jdk.nashorn.internal.runtime.linker.LinkerCallSite.newLinkerCallSite(LinkerCallSite.java:124)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.bootstrap(Bootstrap.java:208)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:371)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:345)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:403)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:400)
        at jdk.nashorn.internal.objects.Global.getLazilyCreatedValue(Global.java:1379)
        at jdk.nashorn.internal.objects.Global.getDynamicInvoker(Global.java:1409)
        at jdk.nashorn.internal.runtime.ListAdapter.getDynamicInvoker(ListAdapter.java:409)
        at jdk.nashorn.internal.runtime.ListAdapter.invokePop(ListAdapter.java:288)
        at jdk.nashorn.internal.runtime.ListAdapter.remove(ListAdapter.java:269)
        at sun.nio.ch.SharedFileLockTable.removeAll(FileLockTable.java:212)
        at sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:119)
        at java.nio.channels.spi.AbstractInterruptibleChannel$1.interrupt(AbstractInterruptibleChannel.java:165)
        at java.lang.Thread.interrupt(Thread.java:922)
        at java.io.PrintStream.newLine(PrintStream.java:552)
        at java.io.PrintStream.println(PrintStream.java:807)
        at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:751)
        at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandle.bindArgumentL(int, Object)
Trace: 
        at parsing java.lang.invoke.CallSite.makeDynamicInvoker(CallSite.java:214)
Call path from entry point to java.lang.invoke.CallSite.makeDynamicInvoker(): 
        at java.lang.invoke.CallSite.makeDynamicInvoker(CallSite.java:214)
        at java.lang.invoke.MutableCallSite.dynamicInvoker(MutableCallSite.java:162)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:371)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:345)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:403)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:400)
        at jdk.nashorn.internal.objects.Global.getLazilyCreatedValue(Global.java:1379)
        at jdk.nashorn.internal.objects.Global.getDynamicInvoker(Global.java:1409)
        at jdk.nashorn.internal.runtime.ListAdapter.getDynamicInvoker(ListAdapter.java:409)
        at jdk.nashorn.internal.runtime.ListAdapter.invokePop(ListAdapter.java:288)
        at jdk.nashorn.internal.runtime.ListAdapter.remove(ListAdapter.java:269)
        at sun.nio.ch.SharedFileLockTable.removeAll(FileLockTable.java:212)
        at sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:119)
        at java.nio.channels.spi.AbstractInterruptibleChannel$1.interrupt(AbstractInterruptibleChannel.java:165)
        at java.lang.Thread.interrupt(Thread.java:922)
        at java.io.PrintStream.newLine(PrintStream.java:552)
        at java.io.PrintStream.println(PrintStream.java:807)
        at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:751)
        at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandle.bindTo(Object)
Trace: 
        at parsing java.lang.invoke.MethodHandleImpl.makePairwiseConvertByEditor(MethodHandleImpl.java:221)
Call path from entry point to java.lang.invoke.MethodHandleImpl.makePairwiseConvertByEditor(MethodHandle, MethodType, boolean, boolean): 
        at java.lang.invoke.MethodHandleImpl.makePairwiseConvertByEditor(MethodHandleImpl.java:207)
        at java.lang.invoke.MethodHandleImpl.makePairwiseConvert(MethodHandleImpl.java:194)
        at java.lang.invoke.MethodHandleImpl.makePairwiseConvert(MethodHandleImpl.java:380)
        at java.lang.invoke.MethodHandle.asTypeUncached(MethodHandle.java:776)
        at java.lang.invoke.MethodHandle.asType(MethodHandle.java:761)
        at jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.asType(MethodHandleFactory.java:419)
        at jdk.nashorn.internal.runtime.AccessorProperty.initGetterSetter(AccessorProperty.java:271)
        at jdk.nashorn.internal.runtime.AccessorProperty.<init>(AccessorProperty.java:255)
        at jdk.nashorn.internal.runtime.ScriptObject.addSpillProperty(ScriptObject.java:2509)
        at jdk.nashorn.internal.runtime.ScriptObject.setObject(ScriptObject.java:3056)
        at jdk.nashorn.internal.runtime.ScriptObject.set(ScriptObject.java:3229)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:270)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:268)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.inGlobal(ScriptObjectMirror.java:858)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.toString(ScriptObjectMirror.java:94)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandleImpl$BindCaller.prepareForInvoker(MethodHandle)
Trace: 
        at parsing java.lang.invoke.MethodHandleImpl$BindCaller.makeInjectedInvoker(MethodHandleImpl.java:1166)
Call path from entry point to java.lang.invoke.MethodHandleImpl$BindCaller.makeInjectedInvoker(Class): 
        at java.lang.invoke.MethodHandleImpl$BindCaller.makeInjectedInvoker(MethodHandleImpl.java:1141)
        at java.lang.invoke.MethodHandleImpl$BindCaller.access$300(MethodHandleImpl.java:1122)
        at java.lang.invoke.MethodHandleImpl$BindCaller$1.computeValue(MethodHandleImpl.java:1175)
        at java.lang.invoke.MethodHandleImpl$BindCaller$1.computeValue(MethodHandleImpl.java:1173)
        at com.oracle.svm.core.jdk.Target_java_lang_ClassValue.get(JavaLangSubstitutions.java:515)
        at jdk.nashorn.internal.runtime.linker.NashornBeansLinker.getFunctionalInterfaceMethodName(NashornBeansLinker.java:211)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.isFunctionalInterfaceObject(Bootstrap.java:194)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.isCallable(Bootstrap.java:145)
        at jdk.nashorn.internal.objects.Global.getDefaultValue(Global.java:1219)
        at jdk.nashorn.internal.runtime.ScriptObject.getDefaultValue(ScriptObject.java:1429)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$35.call(ScriptObjectMirror.java:904)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.inGlobal(ScriptObjectMirror.java:858)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.toString(ScriptObjectMirror.java:94)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandleImpl.buildVarargsArray(MethodHandle, MethodHandle, int)
Trace: 
        at parsing java.lang.invoke.MethodHandleImpl.varargsArray(MethodHandleImpl.java:1634)
Call path from entry point to java.lang.invoke.MethodHandleImpl.varargsArray(Class, int): 
        at java.lang.invoke.MethodHandleImpl.varargsArray(MethodHandleImpl.java:1611)
        at java.lang.invoke.MethodHandleImpl$IntrinsicMethodHandle.asCollector(MethodHandleImpl.java:1363)
        at java.lang.invoke.MethodHandleImpl$AsVarargsCollector.asTypeUncached(MethodHandleImpl.java:502)
        at java.lang.invoke.MethodHandle.asType(MethodHandle.java:761)
        at jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.asType(MethodHandleFactory.java:419)
        at jdk.nashorn.internal.runtime.AccessorProperty.initGetterSetter(AccessorProperty.java:271)
        at jdk.nashorn.internal.runtime.AccessorProperty.<init>(AccessorProperty.java:255)
        at jdk.nashorn.internal.runtime.ScriptObject.addSpillProperty(ScriptObject.java:2509)
        at jdk.nashorn.internal.runtime.ScriptObject.setObject(ScriptObject.java:3056)
        at jdk.nashorn.internal.runtime.ScriptObject.set(ScriptObject.java:3229)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:270)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:268)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.inGlobal(ScriptObjectMirror.java:858)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.toString(ScriptObjectMirror.java:94)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandles.insertArguments(MethodHandle, int, Object[])
Trace: 
        at parsing jdk.internal.dynalink.DynamicLinker.createRelinkAndInvokeMethod(DynamicLinker.java:224)
Call path from entry point to jdk.internal.dynalink.DynamicLinker.createRelinkAndInvokeMethod(RelinkableCallSite, int): 
        at jdk.internal.dynalink.DynamicLinker.createRelinkAndInvokeMethod(DynamicLinker.java:224)
        at jdk.internal.dynalink.DynamicLinker.link(DynamicLinker.java:201)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.bootstrap(Bootstrap.java:208)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:371)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:345)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:403)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:400)
        at jdk.nashorn.internal.objects.Global.getLazilyCreatedValue(Global.java:1379)
        at jdk.nashorn.internal.objects.Global.getDynamicInvoker(Global.java:1409)
        at jdk.nashorn.internal.runtime.ListAdapter.getDynamicInvoker(ListAdapter.java:409)
        at jdk.nashorn.internal.runtime.ListAdapter.invokePop(ListAdapter.java:288)
        at jdk.nashorn.internal.runtime.ListAdapter.remove(ListAdapter.java:269)
        at sun.nio.ch.SharedFileLockTable.removeAll(FileLockTable.java:212)
        at sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:119)
        at java.nio.channels.spi.AbstractInterruptibleChannel$1.interrupt(AbstractInterruptibleChannel.java:165)
        at java.lang.Thread.interrupt(Thread.java:922)
        at java.io.PrintStream.newLine(PrintStream.java:552)
        at java.io.PrintStream.println(PrintStream.java:807)
        at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:751)
        at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MethodHandles.insertArguments(MethodHandle, int, Object[])
Trace: 
        at parsing jdk.nashorn.internal.lookup.MethodHandleFactory.addDebugPrintout(MethodHandleFactory.java:287)
Call path from entry point to jdk.nashorn.internal.lookup.MethodHandleFactory.addDebugPrintout(DebugLogger, Level, MethodHandle, int, boolean, Object): 
        at jdk.nashorn.internal.lookup.MethodHandleFactory.addDebugPrintout(MethodHandleFactory.java:277)
        at jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.debug(MethodHandleFactory.java:376)
        at jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.insertArguments(MethodHandleFactory.java:402)
        at jdk.nashorn.internal.runtime.AccessorProperty.initGetterSetter(AccessorProperty.java:271)
        at jdk.nashorn.internal.runtime.AccessorProperty.<init>(AccessorProperty.java:255)
        at jdk.nashorn.internal.runtime.ScriptObject.addSpillProperty(ScriptObject.java:2509)
        at jdk.nashorn.internal.runtime.ScriptObject.setObject(ScriptObject.java:3056)
        at jdk.nashorn.internal.runtime.ScriptObject.set(ScriptObject.java:3229)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:270)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:268)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.inGlobal(ScriptObjectMirror.java:858)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.toString(ScriptObjectMirror.java:94)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: java.lang.invoke.MutableCallSite.<init>(MethodHandle)
Trace: 
        at parsing java.lang.invoke.SwitchPoint.<init>(SwitchPoint.java:124)
Call path from entry point to java.lang.invoke.SwitchPoint.<init>(): 
        at java.lang.invoke.SwitchPoint.<init>(SwitchPoint.java:123)
        at jdk.nashorn.internal.runtime.CompiledFunction$OptimismInfo.newOptimisticAssumptions(CompiledFunction.java:919)
        at jdk.nashorn.internal.runtime.CompiledFunction$OptimismInfo.<init>(CompiledFunction.java:915)
        at jdk.nashorn.internal.runtime.CompiledFunction.<init>(CompiledFunction.java:128)
        at jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.addCode(RecompilableScriptFunctionData.java:830)
        at jdk.nashorn.internal.runtime.RecompilableScriptFunctionData.initializeCode(RecompilableScriptFunctionData.java:825)
        at jdk.nashorn.internal.runtime.StoredScript.installScript(StoredScript.java:138)
        at jdk.nashorn.internal.runtime.Context.compile(Context.java:1325)
        at jdk.nashorn.internal.runtime.Context.compileScript(Context.java:651)
        at jdk.nashorn.api.scripting.NashornScriptEngine.asCompiledScript(NashornScriptEngine.java:493)
        at jdk.nashorn.api.scripting.NashornScriptEngine.compile(NashornScriptEngine.java:182)
        at org.apache.logging.log4j.core.script.ScriptManager$MainScriptRunner$1.run(ScriptManager.java:207)
        at org.apache.logging.log4j.core.script.ScriptManager$MainScriptRunner$1.run(ScriptManager.java:203)
        at com.oracle.svm.core.jdk.Target_java_security_AccessController.doPrivileged(SecuritySubstitutions.java:62)
        at java.io.PrintWriter.<init>(PrintWriter.java:116)
        at java.io.PrintWriter.<init>(PrintWriter.java:148)
        at javax.xml.transform.TransformerException.printStackTrace(TransformerException.java:282)
        at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:753)
        at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.bindTo(MethodHandle, Object)
Trace: 
        at parsing jdk.nashorn.internal.runtime.linker.LinkerCallSite$ProfilingLinkerCallSite.setTarget(LinkerCallSite.java:243)
Call path from entry point to jdk.nashorn.internal.runtime.linker.LinkerCallSite$ProfilingLinkerCallSite.setTarget(MethodHandle): 
        at jdk.nashorn.internal.runtime.linker.LinkerCallSite$ProfilingLinkerCallSite.setTarget(LinkerCallSite.java:239)
        at jdk.internal.dynalink.support.AbstractRelinkableCallSite.initialize(AbstractRelinkableCallSite.java:115)
        at jdk.internal.dynalink.DynamicLinker.link(DynamicLinker.java:201)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.bootstrap(Bootstrap.java:208)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:371)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:345)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:403)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:400)
        at jdk.nashorn.internal.objects.Global.getLazilyCreatedValue(Global.java:1379)
        at jdk.nashorn.internal.objects.Global.getDynamicInvoker(Global.java:1409)
        at jdk.nashorn.internal.runtime.ListAdapter.getDynamicInvoker(ListAdapter.java:409)
        at jdk.nashorn.internal.runtime.ListAdapter.invokePop(ListAdapter.java:288)
        at jdk.nashorn.internal.runtime.ListAdapter.remove(ListAdapter.java:269)
        at sun.nio.ch.SharedFileLockTable.removeAll(FileLockTable.java:212)
        at sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:119)
        at java.nio.channels.spi.AbstractInterruptibleChannel$1.interrupt(AbstractInterruptibleChannel.java:165)
        at java.lang.Thread.interrupt(Thread.java:922)
        at java.io.PrintStream.newLine(PrintStream.java:552)
        at java.io.PrintStream.println(PrintStream.java:807)
        at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:751)
        at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.insertArguments(MethodHandle, int, Object[])
Trace: 
        at parsing jdk.nashorn.internal.codegen.ObjectClassGenerator.createGetterInner(ObjectClassGenerator.java:566)
Call path from entry point to jdk.nashorn.internal.codegen.ObjectClassGenerator.createGetterInner(Class, Class, MethodHandle, MethodHandle, List, int): 
        at jdk.nashorn.internal.codegen.ObjectClassGenerator.createGetterInner(ObjectClassGenerator.java:548)
        at jdk.nashorn.internal.codegen.ObjectClassGenerator.createGetter(ObjectClassGenerator.java:682)
        at jdk.nashorn.internal.runtime.AccessorProperty.getGetter(AccessorProperty.java:516)
        at jdk.nashorn.internal.runtime.AccessorProperty.getObjectValue(AccessorProperty.java:415)
        at jdk.nashorn.internal.runtime.FindProperty.getObjectValue(FindProperty.java:229)
        at jdk.nashorn.internal.runtime.ScriptObject.get(ScriptObject.java:2842)
        at jdk.nashorn.internal.runtime.ScriptObject.get(ScriptObject.java:2877)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$3.call(ScriptObjectMirror.java:223)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.inGlobal(ScriptObjectMirror.java:858)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.toString(ScriptObjectMirror.java:94)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.insertArguments(MethodHandle, int, Object[])
Trace: 
        at parsing jdk.nashorn.internal.runtime.AccessorProperty.getSetter(AccessorProperty.java:627)
Call path from entry point to jdk.nashorn.internal.runtime.AccessorProperty.getSetter(Class, PropertyMap): 
        at jdk.nashorn.internal.runtime.AccessorProperty.getSetter(AccessorProperty.java:604)
        at jdk.nashorn.internal.runtime.AccessorProperty.invokeSetter(AccessorProperty.java:460)
        at jdk.nashorn.internal.runtime.AccessorProperty.setValue(AccessorProperty.java:483)
        at jdk.nashorn.internal.runtime.FindProperty.setValue(FindProperty.java:259)
        at jdk.nashorn.internal.runtime.ScriptObject.setObject(ScriptObject.java:3038)
        at jdk.nashorn.internal.runtime.ScriptObject.set(ScriptObject.java:3229)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:270)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:268)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.inGlobal(ScriptObjectMirror.java:858)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.toString(ScriptObjectMirror.java:94)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.insertArguments(MethodHandle, int, Object[])
Trace: 
        at parsing jdk.nashorn.internal.runtime.SpillProperty$Accessors.<init>(SpillProperty.java:65)
Call path from entry point to jdk.nashorn.internal.runtime.SpillProperty$Accessors.<init>(int): 
        at jdk.nashorn.internal.runtime.SpillProperty$Accessors.<init>(SpillProperty.java:62)
        at jdk.nashorn.internal.runtime.SpillProperty$Accessors.getCached(SpillProperty.java:85)
        at jdk.nashorn.internal.runtime.SpillProperty.primitiveSetter(SpillProperty.java:145)
        at jdk.nashorn.internal.runtime.SpillProperty.<init>(SpillProperty.java:162)
        at jdk.nashorn.internal.runtime.ScriptObject.addSpillProperty(ScriptObject.java:2513)
        at jdk.nashorn.internal.runtime.ScriptObject.setObject(ScriptObject.java:3056)
        at jdk.nashorn.internal.runtime.ScriptObject.set(ScriptObject.java:3229)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:270)
        at jdk.nashorn.api.scripting.ScriptObjectMirror$7.call(ScriptObjectMirror.java:268)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.inGlobal(ScriptObjectMirror.java:858)
        at jdk.nashorn.api.scripting.ScriptObjectMirror.toString(ScriptObjectMirror.java:94)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: jdk.nashorn.internal.lookup.MethodHandleFactory$StandardMethodHandleFunctionality.insertArguments(MethodHandle, int, Object[])
Trace: 
        at parsing jdk.nashorn.internal.runtime.linker.LinkerCallSite$TracingLinkerCallSite.getFallbackLoggingRelink(LinkerCallSite.java:397)
Call path from entry point to jdk.nashorn.internal.runtime.linker.LinkerCallSite$TracingLinkerCallSite.getFallbackLoggingRelink(MethodHandle): 
        at jdk.nashorn.internal.runtime.linker.LinkerCallSite$TracingLinkerCallSite.getFallbackLoggingRelink(LinkerCallSite.java:392)
        at jdk.nashorn.internal.runtime.linker.LinkerCallSite$TracingLinkerCallSite.initialize(LinkerCallSite.java:378)
        at jdk.internal.dynalink.DynamicLinker.link(DynamicLinker.java:201)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.bootstrap(Bootstrap.java:208)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:371)
        at jdk.nashorn.internal.runtime.linker.Bootstrap.createDynamicInvoker(Bootstrap.java:345)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:403)
        at jdk.nashorn.internal.runtime.ListAdapter$2.call(ListAdapter.java:400)
        at jdk.nashorn.internal.objects.Global.getLazilyCreatedValue(Global.java:1379)
        at jdk.nashorn.internal.objects.Global.getDynamicInvoker(Global.java:1409)
        at jdk.nashorn.internal.runtime.ListAdapter.getDynamicInvoker(ListAdapter.java:409)
        at jdk.nashorn.internal.runtime.ListAdapter.invokePop(ListAdapter.java:288)
        at jdk.nashorn.internal.runtime.ListAdapter.remove(ListAdapter.java:269)
        at sun.nio.ch.SharedFileLockTable.removeAll(FileLockTable.java:212)
        at sun.nio.ch.FileChannelImpl.implCloseChannel(FileChannelImpl.java:119)
        at java.nio.channels.spi.AbstractInterruptibleChannel$1.interrupt(AbstractInterruptibleChannel.java:165)
        at java.lang.Thread.interrupt(Thread.java:922)
        at java.io.PrintStream.newLine(PrintStream.java:552)
        at java.io.PrintStream.println(PrintStream.java:807)
        at com.oracle.svm.jni.functions.JNIFunctions.ExceptionDescribe(JNIFunctions.java:751)
        at com.oracle.svm.core.code.IsolateEnterStub.JNIFunctions_ExceptionDescribe_b5412f7570bccae90b000bc37855f00408b2ad73(generated:0)
Error: com.oracle.graal.pointsto.constraints.UnsupportedFeatureException: Invoke with MethodHandle argument could not be reduced to at most a single call: jdk.nashorn.internal.runtime.ScriptFunction.createBuiltin(String, MethodHandle, Specialization[], int)
Trace: 
        at parsing jdk.nashorn.internal.objects.Global.init(Global.java:2270)
Call path from entry point to jdk.nashorn.internal.objects.Global.init(ScriptEngine): 
        at jdk.nashorn.internal.objects.Global.init(Global.java:2259)
        at jdk.nashorn.internal.objects.Global.initBuiltinObjects(Global.java:1094)
        at jdk.nashorn.internal.runtime.Context.initGlobal(Context.java:1150)
        at jdk.nashorn.api.scripting.NashornScriptEngine.createNashornGlobal(NashornScriptEngine.java:360)
        at jdk.nashorn.api.scripting.NashornScriptEngine.<init>(NashornScriptEngine.java:143)
        at jdk.nashorn.api.scripting.NashornScriptEngineFactory.getScriptEngine(NashornScriptEngineFactory.java:148)
        at org.apache.logging.log4j.core.script.ScriptManager.<init>(ScriptManager.java:99)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:216)
        at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250)
        at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:547)
        at org.apache.logging.log4j.core.LoggerContext.onChange(LoggerContext.java:670)
        at org.apache.logging.log4j.core.config.ConfiguratonFileWatcher$ReconfigurationRunnable.run(ConfiguratonFileWatcher.java:68)
        at java.lang.Thread.run(Thread.java:748)
        at com.oracle.svm.core.thread.JavaThreads.threadStartRoutine(JavaThreads.java:480)
        at com.oracle.svm.core.posix.thread.PosixJavaThreads.pthreadStartRoutine(PosixJavaThreads.java:198)
        at com.oracle.svm.core.code.IsolateEnterStub.PosixJavaThreads_pthreadStartRoutine_e1f4a8c0039f8337338252cd8734f63a79b5e3df(generated:0)
Error: type is not available in this platform: org.graalvm.nativeimage.Feature$BeforeAnalysisAccess
Trace:  object java.lang.Class[]
        object java.lang.invoke.MethodType
        object java.lang.invoke.MethodType$ConcurrentWeakInternSet$WeakEntry
        object java.util.concurrent.ConcurrentHashMap$Node
        object java.util.concurrent.ConcurrentHashMap$Node[]
        object java.util.concurrent.ConcurrentHashMap
        object java.lang.invoke.MethodType$ConcurrentWeakInternSet
        method java.lang.invoke.MethodType.makeImpl(Class, Class[], boolean)
Call path from entry point to java.lang.invoke.MethodType.makeImpl(Class, Class[], boolean): 
        at java.lang.invoke.MethodType.makeImpl(MethodType.java:301)
        at java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:1071)
        at java.lang.invoke.BoundMethodHandle$Factory.makeCbmhCtor(BoundMethodHandle.java:818)
        at java.lang.invoke.BoundMethodHandle$Factory.makeCtors(BoundMethodHandle.java:763)
        at java.lang.invoke.BoundMethodHandle$SpeciesData.<init>(BoundMethodHandle.java:349)
        at java.lang.invoke.BoundMethodHandle$SpeciesData$1.apply(BoundMethodHandle.java:389)
        at java.lang.invoke.BoundMethodHandle$SpeciesData$1.apply(BoundMethodHandle.java:383)
        at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
        at java.util.stream.SpinedBuffer.forEach(SpinedBuffer.java:246)
        at java.util.stream.SpinedBuffer.toString(SpinedBuffer.java:269)
        at java.lang.String.valueOf(String.java:2994)
        at java.lang.StringBuilder.append(StringBuilder.java:131)
        at com.oracle.svm.core.amd64.AMD64CPUFeatureAccess.verifyHostSupportsArchitecture(AMD64CPUFeatureAccess.java:165)
        at com.oracle.svm.core.JavaMainWrapper.run(JavaMainWrapper.java:138)
        at com.oracle.svm.core.code.IsolateEnterStub.JavaMainWrapper_run_5087f5482cc9a6abc971913ece43acb471d2631b(generated:0)
Error: type is not available in this platform: org.graalvm.nativeimage.impl.ImageSingletonsSupport

Error: Image building with exit status 1

Regarding your issue with:

GenericApplicationContext context = new GenericApplicationContext();
        context.registerBean(Foo.class);

It is quite easy to write a NodePlugin, which will react on every method invocation of registerBean and gets the argument. Or you could use an @AutomaticFeature like the guys from Graal-Team do, to register callbacks, when some specific method has been called.

In my opinion it is not SubstrateVMs task to support every framework. Like I said, it is quite easy to dynamically register classes via static code analysis.

@sdeleuze
Copy link
Collaborator Author

@SergejIsbrecht Where can I find documentation and samples to write such NodePlugin?

@cstancu cstancu added the feature label Feb 1, 2019
@sdeleuze
Copy link
Collaborator Author

@cstancu I will be happy to close that issue and implement it myself on Spring Fu side, I just need a little bit of guidance. Is @AutomaticFeature designed to be used by frameworks outside of GraalVM itself? If so in witch dependency is this annotation and related dependencies available? Is there an example project somewhere?

@olpaw
Copy link
Member

olpaw commented Mar 12, 2019

Is @AutomaticFeature designed to be used by frameworks outside of GraalVM itself?

@sdeleuze see #1005 (comment)

@thomaswue
Copy link
Member

@sdeleuze Would this new agent that records reflection usage help? Prototype is described at "https://github.com/oracle/graal/blob/master/substratevm/CONFIGURE.md". Do applications typically have tests that would exercise that reflection?

@sdeleuze
Copy link
Collaborator Author

@thomaswue I will give it a try tomorrow.

@cstancu
Copy link
Member

cstancu commented Apr 19, 2019

@sdeleuze I will close this issue as not-a-bug. As you mentioned above the automatic reflection registration should be implemented on Spring Fu side via a Feature.

@cstancu cstancu closed this as completed Apr 19, 2019
@cstancu
Copy link
Member

cstancu commented Apr 19, 2019

@sdeleuze we currently don't have a tutorial for Feature but you can look at JavaFXFeature, ServiceLoaderFeature or SecurityServicesFeature for some relatively simple examples of features that perform automatic reflection registration. As it was mentioned above: @AutomaticFeature is meant for internal use. Instead, you should list the feature class explicitly using the --features=... option.

@sdeleuze
Copy link
Collaborator Author

Thanks for the guidance @cstancu.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants