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

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


The following commit(s) were added to refs/heads/GROOVY_4_0_X by this push:
     new 511a8aa36a prepare for Groovy 5 refactor
511a8aa36a is described below

commit 511a8aa36a2236922a2d1d802d66ee37ed1885cd
Author: Paul King <[email protected]>
AuthorDate: Fri Dec 22 20:55:43 2023 +1000

    prepare for Groovy 5 refactor
---
 src/main/java/groovy/lang/MetaClassImpl.java       |  3 +-
 .../codehaus/groovy/reflection/CachedClass.java    | 37 +++++++++++++++-------
 .../codehaus/groovy/reflection/ParameterTypes.java |  3 +-
 .../groovy/reflection/ReflectionCache.java         | 12 +++++--
 .../reflection/stdclasses/CachedSAMClass.java      |  7 ++--
 .../reflection/stdclasses/StringCachedClass.java   |  7 ++--
 .../groovy/runtime/DefaultGroovyMethods.java       |  3 +-
 .../codehaus/groovy/runtime/MetaClassHelper.java   |  9 +++---
 .../typehandling/DefaultTypeTransformation.java    |  8 ++---
 9 files changed, 53 insertions(+), 36 deletions(-)

diff --git a/src/main/java/groovy/lang/MetaClassImpl.java 
b/src/main/java/groovy/lang/MetaClassImpl.java
index 0dfcd5172b..1644fabc7b 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -123,7 +123,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.parameterTypeMatches;
 import static 
org.codehaus.groovy.runtime.MetaClassHelper.castArgumentsToClassArray;
 
@@ -601,7 +600,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 61cdc32092..fbfc3cad07 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -133,6 +133,28 @@ public class CachedClass {
         }
     };
 
+    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;
+    }
+
     @SuppressWarnings("removal") // TODO a future Groovy version should 
perform the action not as a privileged action
     private static <T> T doPrivileged(PrivilegedAction<T> action) {
         return java.security.AccessController.doPrivileged(action);
@@ -228,14 +250,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() {
@@ -268,7 +282,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;
         }
@@ -463,11 +477,12 @@ public class CachedClass {
     }
 
     public boolean isAssignableFrom(Class argument) {
-        return argument == null || 
ReflectionCache.isAssignableFrom(getTheClass(), argument);
+        if (argument == null) return true;
+        return 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 cdbbd6f414..0c13bac0e0 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;
@@ -183,7 +184,7 @@ public class ParameterTypes {
      */
     private static Object[] fitToVargs(Object[] argumentArrayOrig, 
CachedClass[] paramTypes) {
         Class vargsClassOrig = paramTypes[paramTypes.length - 
1].getTheClass().getComponentType();
-        Class vargsClass = ReflectionCache.autoboxType(vargsClassOrig);
+        Class vargsClass = TypeUtil.autoboxType(vargsClassOrig);
         Object[] argumentArray = argumentArrayOrig.clone();
         MetaClassHelper.unwrap(argumentArray);
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java 
b/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java
index 36795f29b7..17564cb5cf 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ReflectionCache.java
@@ -22,6 +22,7 @@ import org.codehaus.groovy.classgen.asm.util.TypeUtil;
 import org.codehaus.groovy.util.TripleKeyHashMap;
 
 public class ReflectionCache {
+    @Deprecated
     public static Class autoboxType(Class type) {
         return TypeUtil.autoboxType(type);
     }
@@ -38,12 +39,15 @@ public class ReflectionCache {
         return (String) mopNameEntry.value;
     }
 
+    @Deprecated
     static final CachedClass STRING_CLASS = getCachedClass(String.class);
 
+    @Deprecated
     public static boolean isArray(Class klazz) {
-      return klazz.isArray();
+        return klazz.isArray();
     }
 
+    @Deprecated
     static void setAssignableFrom(Class klazz, Class aClass) {
         // FIXME no implementation?
 //        SoftDoubleKeyMap.Entry val = (SoftDoubleKeyMap.Entry) 
assignableMap.getOrPut(klazz, aClass, null);
@@ -52,9 +56,10 @@ public class ReflectionCache {
 //        }
     }
 
+    @Deprecated
     public static boolean isAssignableFrom(Class klazz, Class aClass) {
         if (klazz == aClass)
-          return true;
+            return true;
 
 //        SoftDoubleKeyMap.Entry val = (SoftDoubleKeyMap.Entry) 
assignableMap.getOrPut(klazz, aClass, null);
 //        if (val.getValue() == null) {
@@ -64,6 +69,7 @@ public class ReflectionCache {
         return klazz.isAssignableFrom(aClass);
     }
 
+    @Deprecated
     static boolean arrayContentsEq(Object[] a1, Object[] a2) {
         if (a1 == null) {
             return a2 == null || a2.length == 0;
@@ -92,7 +98,7 @@ public class ReflectionCache {
 
     public static CachedClass getCachedClass(Class klazz) {
         if (klazz == null)
-          return null;
+            return null;
 
         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 55f35c79ec..bbd24f42e8 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;
 
@@ -53,9 +52,9 @@ public class CachedSAMClass extends CachedClass {
 
     @Override
     public boolean isAssignableFrom(Class argument) {
-        return argument == null
-            || Closure.class.isAssignableFrom(argument)
-            || ReflectionCache.isAssignableFrom(getTheClass(), argument);
+        if (argument == null
+                || Closure.class.isAssignableFrom(argument)) return true;
+        return 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..8299336d46 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;
@@ -38,9 +37,9 @@ public class StringCachedClass extends CachedClass {
 
     @Override
     public boolean isAssignableFrom(Class classToTransformFrom) {
-        return  classToTransformFrom == null
-              || classToTransformFrom == STRING_CLASS
-              || 
ReflectionCache.isAssignableFrom(GSTRING_CLASS,classToTransformFrom);
+        if (classToTransformFrom == null
+                || classToTransformFrom == STRING_CLASS) return true;
+        return 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 67ae614fdd..4d742c4229 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -60,7 +60,6 @@ import org.apache.groovy.util.ReversedList;
 import org.codehaus.groovy.classgen.Verifier;
 import org.codehaus.groovy.reflection.ClassInfo;
 import org.codehaus.groovy.reflection.MixinInMetaClass;
-import org.codehaus.groovy.reflection.ReflectionCache;
 import org.codehaus.groovy.reflection.ReflectionUtils;
 import org.codehaus.groovy.reflection.stdclasses.CachedSAMClass;
 import org.codehaus.groovy.runtime.callsite.BooleanClosureForMapPredicate;
@@ -12195,7 +12194,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 0c0abdfa13..5ef90d274b 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;
@@ -345,7 +346,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) {
                     if (getParameterCount(argument) == 
sam.getParameterCount()) objectDistance -= 1; // GROOVY-9881
                     objectDistance += 5; // ahead of Object but behind 
GroovyObjectSupport
@@ -741,8 +742,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
@@ -789,7 +790,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 6a30739d80..5c0b4a46d8 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;
@@ -59,8 +59,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.
  */
@@ -234,7 +232,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);
@@ -739,7 +737,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