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);
}