You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2019/05/10 14:53:30 UTC

[groovy] 02/03: Revert "GROOVY-9111: Reduce the cost of transforming meta method(closes #925)"

This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit b8a5567ead17d90f2951a08b27a76fb3ad52d444
Author: Daniel Sun <su...@apache.org>
AuthorDate: Fri May 10 22:43:44 2019 +0800

    Revert "GROOVY-9111: Reduce the cost of transforming meta method(closes #925)"
    
    This reverts commit 7753124d
---
 src/main/groovy/groovy/lang/MetaClassImpl.java                     | 2 +-
 .../java/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java  | 7 +------
 src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java           | 7 ++-----
 src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java           | 7 +++++++
 src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java           | 5 +----
 5 files changed, 12 insertions(+), 16 deletions(-)

diff --git a/src/main/groovy/groovy/lang/MetaClassImpl.java b/src/main/groovy/groovy/lang/MetaClassImpl.java
index 84c806e..171bf7c 100644
--- a/src/main/groovy/groovy/lang/MetaClassImpl.java
+++ b/src/main/groovy/groovy/lang/MetaClassImpl.java
@@ -1276,7 +1276,7 @@ public class MetaClassImpl implements MetaClass, MutableMetaClass {
         }
 
         if (method != null) {
-            MetaMethod transformedMetaMethod = CallSiteHelper.transformMetaMethod(this, method, () -> MetaClassHelper.convertToTypeArray(arguments), MetaClassImpl.class);
+            MetaMethod transformedMetaMethod = CallSiteHelper.transformMetaMethod(this, method, MetaClassHelper.convertToTypeArray(arguments), MetaClassImpl.class);
             return transformedMetaMethod.doMethodInvoke(object, arguments);
         } else {
             return invokePropertyOrMissing(object, methodName, originalArguments, fromInsideClass, isCallToSuper);
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java
index 1d6cdef..016c537 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteHelper.java
@@ -23,16 +23,11 @@ import groovy.lang.MetaMethod;
 import org.codehaus.groovy.vmplugin.VMPlugin;
 import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
-import java.util.function.Supplier;
-
 public class CallSiteHelper {
     private static final VMPlugin VM_PLUGIN = VMPluginFactory.getPlugin();
 
     public static MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller) {
-        return transformMetaMethod(metaClass, metaMethod, () -> params, caller);
+        return VM_PLUGIN.transformMetaMethod(metaClass, metaMethod, params, caller);
     }
 
-    public static MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Supplier<Class<?>[]> paramsSupplier, Class<?> caller) {
-        return VM_PLUGIN.transformMetaMethod(metaClass, metaMethod, paramsSupplier, caller);
-    }
 }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java b/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
index 170d5a1..2848615 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
@@ -26,7 +26,6 @@ import org.codehaus.groovy.ast.CompileUnit;
 
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Method;
-import java.util.function.Supplier;
 
 /**
  * Interface to access VM version based actions.
@@ -89,11 +88,9 @@ public interface VMPlugin {
      *
      * @param metaClass meta class
      * @param metaMethod the original meta method
-     * @param paramsSupplier parameter types supplier
+     * @param params parameter types
      * @param caller caller type
      * @return the transformed meta method
      */
-    default MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Supplier<Class<?>[]> paramsSupplier, Class<?> caller) {
-        return metaMethod;
-    }
+    MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller);
 }
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java b/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
index 58c6ea3..b8182d1 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
@@ -18,6 +18,8 @@
  */
 package org.codehaus.groovy.vmplugin.v5;
 
+import groovy.lang.MetaClass;
+import groovy.lang.MetaMethod;
 import org.codehaus.groovy.GroovyBugError;
 import org.codehaus.groovy.ast.AnnotatedNode;
 import org.codehaus.groovy.ast.AnnotationNode;
@@ -582,6 +584,11 @@ public class Java5 implements VMPlugin {
         }
     }
 
+    @Override
+    public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller) {
+        return metaMethod;
+    }
+
     private static final Permission ACCESS_PERMISSION = new ReflectPermission("suppressAccessChecks");
 }
 
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
index c348121..882d900 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -50,7 +50,6 @@ import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
-import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 /**
@@ -173,7 +172,7 @@ public class Java9 extends Java8 {
     }
 
     @Override
-    public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Supplier<Class<?>[]> paramsSupplier, Class<?> caller) {
+    public MetaMethod transformMetaMethod(MetaClass metaClass, MetaMethod metaMethod, Class<?>[] params, Class<?> caller) {
         if (!(metaMethod instanceof CachedMethod)) {
             return metaMethod;
         }
@@ -204,7 +203,6 @@ public class Java9 extends Java8 {
             classList.add(theClass);
             classList.addAll(superclassList);
 
-            Class<?>[] params = paramsSupplier.get();
             for (Class<?> sc : classList) {
                 Optional<MetaMethod> optionalMetaMethod = getAccessibleMetaMethod(metaMethod, params, caller, sc);
                 if (optionalMetaMethod.isPresent()) {
@@ -221,7 +219,6 @@ public class Java9 extends Java8 {
         // e.g. StringBuilder sb = new StringBuilder(); sb.setLength(0);
         // `setLength` is the method of `AbstractStringBuilder`, which is `package-private`
         if (declaringClass.isAssignableFrom(theClass)) {
-            Class<?>[] params = paramsSupplier.get();
             Optional<MetaMethod> optionalMetaMethod = getAccessibleMetaMethod(metaMethod, params, caller, theClass);
             if (optionalMetaMethod.isPresent()) {
                 return optionalMetaMethod.get();