You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ji...@apache.org on 2023/04/06 07:59:53 UTC
[camel-quarkus] 02/23: Ref #4624: Upgrade to Groovy 4.x
This is an automated email from the ASF dual-hosted git repository.
jiriondrusek pushed a commit to branch camel-main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit c97a0450aa0e13b8b47064b9e6db88c32d812d6e
Author: Nicolas Filotto <nf...@talend.com>
AuthorDate: Wed Mar 8 11:57:15 2023 +0100
Ref #4624: Upgrade to Groovy 4.x
---
.../groovy/runtime/graal/GroovySubstitutions.java | 130 ++++++++++++++++-----
1 file changed, 98 insertions(+), 32 deletions(-)
diff --git a/extensions/groovy-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/groovy/runtime/graal/GroovySubstitutions.java b/extensions/groovy-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/groovy/runtime/graal/GroovySubstitutions.java
index 3ddba6d540..927018517c 100644
--- a/extensions/groovy-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/groovy/runtime/graal/GroovySubstitutions.java
+++ b/extensions/groovy-dsl/runtime/src/main/java/org/apache/camel/quarkus/dsl/groovy/runtime/graal/GroovySubstitutions.java
@@ -16,68 +16,134 @@
*/
package org.apache.camel.quarkus.dsl.groovy.runtime.graal;
-import java.lang.invoke.MethodHandles;
+import java.lang.invoke.MethodHandle;
import java.lang.invoke.MutableCallSite;
-import java.lang.reflect.Constructor;
+import java.util.function.BiFunction;
-import com.oracle.svm.core.annotate.Delete;
+import com.oracle.svm.core.annotate.Alias;
import com.oracle.svm.core.annotate.Substitute;
import com.oracle.svm.core.annotate.TargetClass;
-import org.codehaus.groovy.control.ParserPluginFactory;
+import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.runtime.memoize.MemoizeCache;
+import org.codehaus.groovy.vmplugin.v8.CacheableCallSite;
+import org.codehaus.groovy.vmplugin.v8.IndyInterface;
final class GroovySubstitutions {
}
-@TargetClass(className = "org.codehaus.groovy.vmplugin.v8.IndyInterface")
+@TargetClass(className = "org.codehaus.groovy.vmplugin.v8.MethodHandleWrapper")
+final class SubstituteMethodHandleWrapper {
+
+ @Alias
+ public boolean isCanSetTarget() {
+ return false;
+ }
+
+ @Alias
+ public MethodHandle getCachedMethodHandle() {
+ return null;
+ }
+}
+
+@TargetClass(className = "org.codehaus.groovy.vmplugin.v8.IndyInterface$FallbackSupplier")
+final class SubstituteIndyFallbackSupplier {
+
+ @Alias
+ SubstituteIndyFallbackSupplier(MutableCallSite callSite, Class<?> sender, String methodName, int callID,
+ Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) {
+
+ }
+
+ @Alias
+ SubstituteMethodHandleWrapper get() {
+ return null;
+ }
+}
+
+@TargetClass(CacheableCallSite.class)
+final class SubstituteCacheableCallSite {
+
+ @Alias
+ public SubstituteMethodHandleWrapper getAndPut(String className,
+ MemoizeCache.ValueProvider<? super String, ? extends SubstituteMethodHandleWrapper> valueProvider) {
+ return null;
+ }
+}
+
+@TargetClass(IndyInterface.class)
final class SubstituteIndyInterface {
+ @Alias
+ private static SubstituteMethodHandleWrapper NULL_METHOD_HANDLE_WRAPPER;
+
@Substitute
protected static void invalidateSwitchPoints() {
throw new UnsupportedOperationException("invalidateSwitchPoints is not supported");
}
- @Substitute
- public static Object fromCache(MutableCallSite callSite, Class<?> sender, String methodName, int callID,
- Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments) {
- throw new UnsupportedOperationException("fromCache is not supported");
+ @Alias
+ private static boolean bypassCache(Boolean spreadCall, Object[] arguments) {
+ return false;
}
-}
-@TargetClass(className = "org.codehaus.groovy.control.SourceUnit")
-final class SubstituteSourceUnit {
+ @Alias
+ private static <T> T doWithCallSite(MutableCallSite callSite, Object[] arguments,
+ BiFunction<? super SubstituteCacheableCallSite, ? super Object, ? extends T> f) {
+ return null;
+ }
@Substitute
- public void convert() {
- throw new UnsupportedOperationException("convert is not supported");
+ public static Object selectMethod(MutableCallSite callSite, Class<?> sender, String methodName, int callID,
+ Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments)
+ throws Throwable {
+ throw new UnsupportedOperationException("selectMethod is not supported");
}
-}
-
-@TargetClass(className = "org.codehaus.groovy.vmplugin.v8.Java8")
-final class SubstituteJava8 {
@Substitute
- private static Constructor<MethodHandles.Lookup> getLookupConstructor() {
- throw new UnsupportedOperationException("getLookupConstructor is not supported");
+ public static Object fromCache(MutableCallSite callSite, Class<?> sender, String methodName, int callID,
+ Boolean safeNavigation, Boolean thisCall, Boolean spreadCall, Object dummyReceiver, Object[] arguments)
+ throws Throwable {
+ SubstituteIndyFallbackSupplier fallbackSupplier = new SubstituteIndyFallbackSupplier(callSite, sender, methodName,
+ callID, safeNavigation, thisCall, spreadCall, dummyReceiver, arguments);
+
+ SubstituteMethodHandleWrapper mhw = bypassCache(spreadCall, arguments)
+ ? NULL_METHOD_HANDLE_WRAPPER
+ : doWithCallSite(
+ callSite, arguments,
+ new FromCacheBiFunction(fallbackSupplier));
+
+ if (NULL_METHOD_HANDLE_WRAPPER == mhw) {
+ mhw = fallbackSupplier.get();
+ }
+
+ return mhw.getCachedMethodHandle().invokeExact(arguments);
}
-}
-@TargetClass(className = "org.codehaus.groovy.antlr.AntlrParserPlugin")
-@Delete
-final class SubstituteAntlrParserPlugin {
+ static class FromCacheBiFunction implements BiFunction<SubstituteCacheableCallSite, Object, SubstituteMethodHandleWrapper> {
-}
+ private final SubstituteIndyFallbackSupplier fallbackSupplier;
-@TargetClass(className = "org.codehaus.groovy.antlr.AntlrParserPluginFactory")
-@Delete
-final class SubstituteAntlrParserPluginFactory {
+ FromCacheBiFunction(SubstituteIndyFallbackSupplier fallbackSupplier) {
+ this.fallbackSupplier = fallbackSupplier;
+ }
+ @Override
+ public SubstituteMethodHandleWrapper apply(SubstituteCacheableCallSite cs, Object receiver) {
+ return cs.getAndPut(
+ receiver.getClass().getName(),
+ c -> {
+ SubstituteMethodHandleWrapper fbMhw = fallbackSupplier.get();
+ return fbMhw.isCanSetTarget() ? fbMhw : NULL_METHOD_HANDLE_WRAPPER;
+ });
+ }
+ }
}
-@TargetClass(className = "org.codehaus.groovy.control.ParserPluginFactory")
-final class SubstituteParserPluginFactory {
+@TargetClass(SourceUnit.class)
+final class SubstituteSourceUnit {
@Substitute
- public static ParserPluginFactory antlr2() {
- throw new UnsupportedOperationException("antlr2 is not supported");
+ public void convert() {
+ throw new UnsupportedOperationException("convert is not supported");
}
}