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

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


The following commit(s) were added to refs/heads/master by this push:
     new bd73ba82dc partial cleanup of reflection cache
bd73ba82dc is described below

commit bd73ba82dcb9b68ded7ee6aee25032468a5ce064
Author: Jochen Theodorou <blackd...@gmx.org>
AuthorDate: Wed Dec 20 23:01:45 2023 +0100

    partial cleanup of reflection cache
---
 src/main/java/groovy/lang/MetaClassImpl.java       |  3 +-
 .../codehaus/groovy/reflection/CachedClass.java    | 42 +++++++++-----
 .../codehaus/groovy/reflection/ParameterTypes.java |  3 +-
 .../groovy/reflection/ReflectionCache.java         | 67 ----------------------
 .../reflection/stdclasses/CachedSAMClass.java      |  3 +-
 .../reflection/stdclasses/StringCachedClass.java   |  3 +-
 .../groovy/runtime/DefaultGroovyMethods.java       |  2 +-
 .../codehaus/groovy/runtime/MetaClassHelper.java   |  9 +--
 .../typehandling/DefaultTypeTransformation.java    |  8 +--
 9 files changed, 42 insertions(+), 98 deletions(-)

diff --git a/src/main/java/groovy/lang/MetaClassImpl.java 
b/src/main/java/groovy/lang/MetaClassImpl.java
index 184ba97618..c253e2b5f0 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -117,7 +117,6 @@ import static groovy.lang.Tuple.tuple;
 import static java.lang.Character.isUpperCase;
 import static org.apache.groovy.util.Arrays.concat;
 import static org.codehaus.groovy.ast.tools.GeneralUtils.inSamePackage;
-import static org.codehaus.groovy.reflection.ReflectionCache.isAssignableFrom;
 import static org.codehaus.groovy.reflection.ReflectionUtils.checkAccessible;
 
 /**
@@ -597,7 +596,7 @@ public class MetaClassImpl implements MetaClass, 
MutableMetaClass {
                 boolean skip = false;
                 // skip DGM methods on an interface if the class already has 
the method
                 // but don't skip for GroovyObject-related methods as it 
breaks things :-(
-                if (method instanceof GeneratedMetaMethod && 
!isAssignableFrom(GroovyObject.class, 
method.getDeclaringClass().getTheClass())) {
+                if (method instanceof GeneratedMetaMethod && 
!GroovyObject.class.isAssignableFrom(method.getDeclaringClass().getTheClass())) 
{
                     final String generatedMethodName = method.getName();
                     final CachedClass[] generatedMethodParameterTypes = 
method.getParameterTypes();
                     for (Method m : (null == theClassMethods ? theClassMethods 
= theClass.getMethods() : theClassMethods)) {
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java 
b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
index 52f215d6ae..a80d27ceb4 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -242,14 +242,6 @@ public class CachedClass {
         modifiers = klazz.getModifiers();
         isInterface = klazz.isInterface();
         isNumber = Number.class.isAssignableFrom(klazz);
-
-        for (CachedClass inf : getInterfaces()) {
-            ReflectionCache.isAssignableFrom(klazz, inf.cachedClass);
-        }
-
-        for (CachedClass cur = this; cur != null; cur = 
cur.getCachedSuperClass()) {
-            ReflectionCache.setAssignableFrom(cur.cachedClass, klazz);
-        }
     }
 
     public CachedClass getCachedSuperClass() {
@@ -282,7 +274,7 @@ public class CachedClass {
         CachedMethod res = null;
         for (CachedMethod m : methods) {
             if (m.getName().equals(name)
-                    && ReflectionCache.arrayContentsEq(parameterTypes, 
m.getParameterTypes())
+                    && arrayContentsEq(parameterTypes, m.getParameterTypes())
                     && (res == null || 
res.getReturnType().isAssignableFrom(m.getReturnType())))
                 res = m;
         }
@@ -290,6 +282,28 @@ public class CachedClass {
         return res;
     }
 
+    private static boolean arrayContentsEq(Object[] a1, Object[] a2) {
+        if (a1 == null) {
+            return a2 == null || a2.length == 0;
+        }
+
+        if (a2 == null) {
+            return a1.length == 0;
+        }
+
+        if (a1.length != a2.length) {
+            return false;
+        }
+
+        for (int i = 0; i < a1.length; i++) {
+            if (a1[i] != a2[i]) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
     public int getModifiers() {
         return modifiers;
     }
@@ -339,7 +353,7 @@ public class CachedClass {
         return BytecodeHelper.getTypeDescription(getTheClass());
     }
 
-    public final Class getTheClass() {
+    public final Class<?> getTheClass() {
         return cachedClass;
     }
 
@@ -470,18 +484,18 @@ public class CachedClass {
         res.addAll(Arrays.asList(classInfo.newMetaMethods));
         res.addAll(arr);
         classInfo.newMetaMethods = res.toArray(MetaMethod.EMPTY_ARRAY);
-        Class theClass = classInfo.getCachedClass().getTheClass();
+        var theClass = classInfo.getCachedClass().getTheClass();
         if (theClass == Closure.class || theClass == Class.class) {
             ClosureMetaClass.resetCachedMetaClasses();
         }
     }
 
-    public boolean isAssignableFrom(Class argument) {
-        return argument == null || 
ReflectionCache.isAssignableFrom(getTheClass(), argument);
+    public boolean isAssignableFrom(Class<?> argument) {
+        return argument == null || getTheClass().isAssignableFrom(argument);
     }
 
     public boolean isDirectlyAssignable(Object argument) {
-        return ReflectionCache.isAssignableFrom(getTheClass(), 
argument.getClass());
+        return getTheClass().isAssignableFrom(argument.getClass());
     }
 
     public CallSiteClassLoader getCallSiteLoader() {
diff --git a/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java 
b/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java
index f5b442b497..d610cc0aea 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java
@@ -19,6 +19,7 @@
 package org.codehaus.groovy.reflection;
 
 import org.codehaus.groovy.GroovyBugError;
+import org.codehaus.groovy.classgen.asm.util.TypeUtil;
 import org.codehaus.groovy.runtime.MetaClassHelper;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 import org.codehaus.groovy.runtime.wrappers.Wrapper;
@@ -181,7 +182,7 @@ public class ParameterTypes {
         MetaClassHelper.unwrap(unwrappedArguments);
 
         // get type of each vargs element -- arguments are not primitive
-        vaType = ReflectionCache.autoboxType(vaType.getComponentType());
+        vaType = TypeUtil.autoboxType(vaType.getComponentType());
 
         if (aCount == pCount - 1) {
             // one argument is missing, so fill it with an empty array
diff --git a/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java 
b/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java
index 36795f29b7..fe4d4f59c0 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java
@@ -18,73 +18,7 @@
  */
 package org.codehaus.groovy.reflection;
 
-import org.codehaus.groovy.classgen.asm.util.TypeUtil;
-import org.codehaus.groovy.util.TripleKeyHashMap;
-
 public class ReflectionCache {
-    public static Class autoboxType(Class type) {
-        return TypeUtil.autoboxType(type);
-    }
-
-    @Deprecated
-    static TripleKeyHashMap mopNames = new TripleKeyHashMap();
-
-    @Deprecated // the method is never called
-    public static String getMOPMethodName(CachedClass declaringClass, String 
name, boolean useThis) {
-        TripleKeyHashMap.Entry mopNameEntry = 
mopNames.getOrPut(declaringClass, name, useThis);
-        if (mopNameEntry.value == null) {
-            mopNameEntry.value = (useThis ? "this$" : "super$") + 
declaringClass.getSuperClassDistance() + "$" + name;
-        }
-        return (String) mopNameEntry.value;
-    }
-
-    static final CachedClass STRING_CLASS = getCachedClass(String.class);
-
-    public static boolean isArray(Class klazz) {
-      return klazz.isArray();
-    }
-
-    static void setAssignableFrom(Class klazz, Class aClass) {
-        // FIXME no implementation?
-//        SoftDoubleKeyMap.Entry val = (SoftDoubleKeyMap.Entry) 
assignableMap.getOrPut(klazz, aClass, null);
-//        if (val.getValue() == null) {
-//            val.setValue(Boolean.TRUE);
-//        }
-    }
-
-    public static boolean isAssignableFrom(Class klazz, Class aClass) {
-        if (klazz == aClass)
-          return true;
-
-//        SoftDoubleKeyMap.Entry val = (SoftDoubleKeyMap.Entry) 
assignableMap.getOrPut(klazz, aClass, null);
-//        if (val.getValue() == null) {
-//            val.setValue(Boolean.valueOf(klazz.isAssignableFrom(aClass)));
-//        }
-//        return ((Boolean)val.getValue()).booleanValue();
-        return klazz.isAssignableFrom(aClass);
-    }
-
-    static boolean arrayContentsEq(Object[] a1, Object[] a2) {
-        if (a1 == null) {
-            return a2 == null || a2.length == 0;
-        }
-
-        if (a2 == null) {
-            return a1.length == 0;
-        }
-
-        if (a1.length != a2.length) {
-            return false;
-        }
-
-        for (int i = 0; i < a1.length; i++) {
-            if (a1[i] != a2[i]) {
-                return false;
-            }
-        }
-
-        return true;
-    }
 
     public static final CachedClass OBJECT_CLASS = 
getCachedClass(Object.class);
 
@@ -96,5 +30,4 @@ public class ReflectionCache {
 
         return ClassInfo.getClassInfo(klazz).getCachedClass();
     }
-
 }
diff --git 
a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java 
b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
index e75b9eb5e8..e8329ab4cf 100644
--- 
a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
+++ 
b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
@@ -23,7 +23,6 @@ import groovy.util.ProxyGenerator;
 import org.codehaus.groovy.GroovyBugError;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.reflection.ReflectionCache;
 import org.codehaus.groovy.runtime.ConvertedClosure;
 import org.codehaus.groovy.transform.trait.Traits;
 
@@ -55,7 +54,7 @@ public class CachedSAMClass extends CachedClass {
     public boolean isAssignableFrom(Class argument) {
         return argument == null
             || Closure.class.isAssignableFrom(argument)
-            || ReflectionCache.isAssignableFrom(getTheClass(), argument);
+            || getTheClass().isAssignableFrom(argument);
     }
 
     @Override
diff --git 
a/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java
 
b/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java
index 37b2e90270..47d01262cf 100644
--- 
a/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java
+++ 
b/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java
@@ -21,7 +21,6 @@ package org.codehaus.groovy.reflection.stdclasses;
 import groovy.lang.GString;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ClassInfo;
-import org.codehaus.groovy.reflection.ReflectionCache;
 
 public class StringCachedClass extends CachedClass {
     private static final Class STRING_CLASS = String.class;
@@ -40,7 +39,7 @@ public class StringCachedClass extends CachedClass {
     public boolean isAssignableFrom(Class classToTransformFrom) {
         return  classToTransformFrom == null
               || classToTransformFrom == STRING_CLASS
-              || 
ReflectionCache.isAssignableFrom(GSTRING_CLASS,classToTransformFrom);
+              || GSTRING_CLASS.isAssignableFrom(classToTransformFrom);
     }
 
     @Override
diff --git 
a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java 
b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 555b54231b..f14b2dc077 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -1258,7 +1258,7 @@ public class DefaultGroovyMethods extends 
DefaultGroovyMethodsSupport {
             return (T) stack;
         }
 
-        if (clazz!=String[].class && ReflectionCache.isArray(clazz)) {
+        if (clazz!=String[].class && clazz.isArray()) {
             try {
                 return (T) asArrayType(col, clazz);
             } catch (GroovyCastException e) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java 
b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
index 18ecedd3b8..44cb3f4e45 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
@@ -25,6 +25,7 @@ import groovy.lang.GroovyRuntimeException;
 import groovy.lang.MetaClass;
 import groovy.lang.MetaMethod;
 import org.apache.groovy.util.BeanUtils;
+import org.codehaus.groovy.classgen.asm.util.TypeUtil;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ParameterTypes;
 import org.codehaus.groovy.reflection.ReflectionCache;
@@ -344,7 +345,7 @@ public class MetaClassHelper {
             }
 
             Method sam;
-            for (Class<?> c = ReflectionCache.autoboxType(argument); c != null 
&& c != parameterClass; c = c.getSuperclass()) {
+            for (Class<?> c = TypeUtil.autoboxType(argument); c != null && c 
!= parameterClass; c = c.getSuperclass()) {
                 if (c == Closure.class && parameterClass.isInterface() && (sam 
= getSAMMethod(parameterClass)) != null) {
                     // In the case of multiple overloads, give preference to 
equal parameter count
                     // with fuzzy matching of length for implicit arg Closures
@@ -745,8 +746,8 @@ public class MetaClassHelper {
             return true;
         }
 
-        classToTransformTo = ReflectionCache.autoboxType(classToTransformTo);
-        classToTransformFrom = 
ReflectionCache.autoboxType(classToTransformFrom);
+        classToTransformTo = TypeUtil.autoboxType(classToTransformTo);
+        classToTransformFrom = TypeUtil.autoboxType(classToTransformFrom);
         if (classToTransformTo == classToTransformFrom) return true;
 
         // note: there is no coercion for boolean and char. Range matters, 
precision doesn't
@@ -793,7 +794,7 @@ public class MetaClassHelper {
             }
         }
 
-        return ReflectionCache.isAssignableFrom(classToTransformTo, 
classToTransformFrom);
+        return classToTransformTo.isAssignableFrom(classToTransformFrom);
     }
 
     private static boolean isIntegerLongShortByte(Class classToTransformFrom) {
diff --git 
a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
 
b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
index 30238c2212..f48d1143ef 100644
--- 
a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
+++ 
b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
@@ -21,7 +21,7 @@ package org.codehaus.groovy.runtime.typehandling;
 import groovy.lang.Closure;
 import groovy.lang.GString;
 import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.reflection.ReflectionCache;
+import org.codehaus.groovy.classgen.asm.util.TypeUtil;
 import org.codehaus.groovy.reflection.stdclasses.CachedSAMClass;
 import org.codehaus.groovy.runtime.DefaultGroovyMethods;
 import org.codehaus.groovy.runtime.FormatHelper;
@@ -60,8 +60,6 @@ import java.util.stream.DoubleStream;
 import java.util.stream.IntStream;
 import java.util.stream.LongStream;
 
-import static org.codehaus.groovy.reflection.ReflectionCache.isArray;
-
 /**
  * Class providing various type conversions, coercions and boxing/unboxing 
operations.
  */
@@ -235,7 +233,7 @@ public class DefaultTypeTransformation {
             return object;
         }
 
-        if (isArray(type)) {
+        if (type.isArray()) {
             return asArray(object, type);
         } else if (type.isEnum()) {
             return ShortTypeHandling.castToEnum(object, type);
@@ -743,7 +741,7 @@ public class DefaultTypeTransformation {
 
     public static Object[] primitiveArrayBox(Object array) {
         int size = Array.getLength(array);
-        Object[] ret = (Object[]) 
Array.newInstance(ReflectionCache.autoboxType(array.getClass().getComponentType()),
 size);
+        Object[] ret = (Object[]) 
Array.newInstance(TypeUtil.autoboxType(array.getClass().getComponentType()), 
size);
         for (int i = 0; i < size; i++) {
             ret[i] = Array.get(array, i);
         }

Reply via email to