You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2024/01/22 21:57:52 UTC
(groovy) branch GROOVY_4_0_X updated: GROOVY-11293: ensure `isVargsMethod` initialized before return
This is an automated email from the ASF dual-hosted git repository.
emilles 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 134e987dfb GROOVY-11293: ensure `isVargsMethod` initialized before return
134e987dfb is described below
commit 134e987dfbadce9c7378f483b72904885e079788
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Jan 22 14:46:52 2024 -0600
GROOVY-11293: ensure `isVargsMethod` initialized before return
4_0_X backport
---
.../groovy/reflection/GeneratedMetaMethod.java | 2 +-
.../codehaus/groovy/reflection/ParameterTypes.java | 165 +++++++++------------
.../runtime/dgmimpl/NumberNumberMetaMethod.java | 6 +-
.../dgmimpl/arrays/ArrayGetAtMetaMethod.java | 3 +-
.../runtime/dgmimpl/arrays/ArrayMetaMethod.java | 4 +-
.../dgmimpl/arrays/ArrayPutAtMetaMethod.java | 10 ++
.../arrays/BooleanArrayGetAtMetaMethod.java | 4 +-
.../arrays/BooleanArrayPutAtMetaMethod.java | 10 +-
.../dgmimpl/arrays/ByteArrayGetAtMetaMethod.java | 4 +-
.../dgmimpl/arrays/ByteArrayPutAtMetaMethod.java | 10 +-
.../arrays/CharacterArrayGetAtMetaMethod.java | 4 +-
.../arrays/CharacterArrayPutAtMetaMethod.java | 10 +-
.../dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java | 4 +-
.../dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java | 10 +-
.../dgmimpl/arrays/FloatArrayGetAtMetaMethod.java | 4 +-
.../dgmimpl/arrays/FloatArrayPutAtMetaMethod.java | 10 +-
.../arrays/IntegerArrayGetAtMetaMethod.java | 4 +-
.../arrays/IntegerArrayPutAtMetaMethod.java | 10 +-
.../dgmimpl/arrays/LongArrayGetAtMetaMethod.java | 4 +-
.../dgmimpl/arrays/LongArrayPutAtMetaMethod.java | 10 +-
.../dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java | 6 +-
.../dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java | 12 +-
.../dgmimpl/arrays/ShortArrayGetAtMetaMethod.java | 4 +-
.../dgmimpl/arrays/ShortArrayPutAtMetaMethod.java | 10 +-
.../runtime/metaclass/TransformMetaMethod.java | 4 +-
.../groovy/reflection/CachedMethodTest.groovy | 21 ++-
26 files changed, 147 insertions(+), 198 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/reflection/GeneratedMetaMethod.java b/src/main/java/org/codehaus/groovy/reflection/GeneratedMetaMethod.java
index f373e1c08f..ebb72baf2d 100644
--- a/src/main/java/org/codehaus/groovy/reflection/GeneratedMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/reflection/GeneratedMetaMethod.java
@@ -42,10 +42,10 @@ public abstract class GeneratedMetaMethod extends MetaMethod {
private final Class returnType;
public GeneratedMetaMethod(String name, CachedClass declaringClass, Class returnType, Class[] parameters) {
+ super(parameters);
this.name = name;
this.declaringClass = declaringClass;
this.returnType = returnType;
- nativeParamTypes = parameters;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java b/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java
index 0c13bac0e0..d608412e9e 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ParameterTypes.java
@@ -27,9 +27,9 @@ import org.codehaus.groovy.runtime.wrappers.Wrapper;
import java.lang.reflect.Array;
public class ParameterTypes {
- protected volatile Class[] nativeParamTypes;
- protected volatile CachedClass[] parameterTypes;
+ protected volatile CachedClass[] parameterTypes;
+ protected volatile Class[] nativeParamTypes;
protected boolean isVargsMethod;
public ParameterTypes() {
@@ -52,8 +52,8 @@ public class ParameterTypes {
}
}
- public ParameterTypes(CachedClass[] parameterTypes) {
- setParametersTypes(parameterTypes);
+ public ParameterTypes(CachedClass[] pt) {
+ setParametersTypes(pt);
}
protected final void setParametersTypes(CachedClass[] pt) {
@@ -65,25 +65,23 @@ public class ParameterTypes {
if (parameterTypes == null) {
getParametersTypes0();
}
-
return parameterTypes;
}
private synchronized void getParametersTypes0() {
- if (parameterTypes != null)
- return;
-
- Class[] npt = nativeParamTypes == null ? getPT() : nativeParamTypes;
- if (npt.length == 0) {
- nativeParamTypes = MetaClassHelper.EMPTY_TYPE_ARRAY;
- setParametersTypes(CachedClass.EMPTY_ARRAY);
- } else {
- CachedClass[] pt = new CachedClass[npt.length];
- for (int i = 0; i != npt.length; ++i)
- pt[i] = ReflectionCache.getCachedClass(npt[i]);
-
- nativeParamTypes = npt;
- setParametersTypes(pt);
+ if (parameterTypes == null) {
+ Class[] npt = nativeParamTypes == null ? getPT() : nativeParamTypes;
+ if (npt.length == 0) {
+ nativeParamTypes = MetaClassHelper.EMPTY_TYPE_ARRAY;
+ setParametersTypes(CachedClass.EMPTY_ARRAY);
+ } else {
+ CachedClass[] pt = new CachedClass[npt.length];
+ for (int i = 0; i != npt.length; ++i) {
+ pt[i] = ReflectionCache.getCachedClass(npt[i]);
+ }
+ nativeParamTypes = npt;
+ setParametersTypes(pt);
+ }
}
}
@@ -95,18 +93,18 @@ public class ParameterTypes {
}
private synchronized void getNativeParameterTypes0() {
- if (nativeParamTypes != null)
- return;
-
- Class[] npt;
- if (parameterTypes != null) {
- npt = new Class[parameterTypes.length];
- for (int i = 0; i != parameterTypes.length; ++i) {
- npt[i] = parameterTypes[i].getTheClass();
+ if (nativeParamTypes == null) {
+ Class[] npt;
+ if (parameterTypes == null) {
+ npt = getPT();
+ } else {
+ npt = new Class[parameterTypes.length];
+ for (int i = 0; i != parameterTypes.length; ++i) {
+ npt[i] = parameterTypes[i].getTheClass();
+ }
}
- } else
- npt = getPT();
- nativeParamTypes = npt;
+ nativeParamTypes = npt;
+ }
}
protected Class[] getPT() {
@@ -114,64 +112,54 @@ public class ParameterTypes {
}
public boolean isVargsMethod() {
+ if (parameterTypes == null) {
+ getParametersTypes0(); // GROOVY-11293
+ }
return isVargsMethod;
}
public boolean isVargsMethod(Object[] arguments) {
- // Uncomment if at some point this method can be called before parameterTypes initialized
- // getParameterTypes();
- if (!isVargsMethod)
- return false;
-
- final int lenMinus1 = parameterTypes.length - 1;
- // -1 because the varg part is optional
- if (lenMinus1 == arguments.length) return true;
- if (lenMinus1 > arguments.length) return false;
- if (arguments.length > parameterTypes.length) return true;
-
- // only case left is arguments.length == parameterTypes.length
- Object last = arguments[arguments.length - 1];
- if (last == null) return true;
- Class clazz = last.getClass();
- return !clazz.equals(parameterTypes[lenMinus1].getTheClass());
-
+ if (isVargsMethod()) {
+ int aCount = arguments.length;
+ int pCount = parameterTypes.length;
+ if (aCount > pCount || aCount == pCount-1) { // too many or too few?
+ return true;
+ }
+ if (aCount == pCount) {
+ Object last = arguments[aCount-1]; // is null or different type?
+ return last == null || !last.getClass().equals(parameterTypes[pCount-1].getTheClass());
+ }
+ }
+ return false;
}
- public final Object[] coerceArgumentsToClasses(Object[] argumentArray) {
- // Uncomment if at some point this method can be called before parameterTypes initialized
- // getParameterTypes();
- argumentArray = correctArguments(argumentArray);
-
- final CachedClass[] pt = parameterTypes;
- final int len = argumentArray.length;
- for (int i = 0; i < len; i++) {
- final Object argument = argumentArray[i];
+ public final Object[] coerceArgumentsToClasses(Object[] arguments) {
+ arguments = correctArguments(arguments);
+ for (int i = 0; i < arguments.length; ++i) {
+ final Object argument = arguments[i];
if (argument != null) {
- argumentArray[i] = pt[i].coerceArgument(argument);
+ arguments[i] = parameterTypes[i].coerceArgument(argument);
}
}
- return argumentArray;
+ return arguments;
}
- public Object[] correctArguments(Object[] argumentArray) {
- // correct argumentArray's length
- if (argumentArray == null) {
- return MetaClassHelper.EMPTY_ARRAY;
+ public Object[] correctArguments(Object[] arguments) {
+ if (arguments == null) {
+ arguments = MetaClassHelper.EMPTY_ARRAY;
}
- final CachedClass[] pt = getParameterTypes();
- if (pt.length == 1 && argumentArray.length == 0) {
- if (isVargsMethod)
- return new Object[]{Array.newInstance(pt[0].getTheClass().getComponentType(), 0)};
- else
- return MetaClassHelper.ARRAY_WITH_NULL;
+ CachedClass[] pt = getParameterTypes();
+ if (pt.length == 1 && arguments.length == 0) {
+ if (!isVargsMethod()) return MetaClassHelper.ARRAY_WITH_NULL;
+ return new Object[]{Array.newInstance(pt[0].getTheClass().getComponentType(), 0)};
}
- if (isVargsMethod && isVargsMethod(argumentArray)) {
- return fitToVargs(argumentArray, pt);
+ if (isVargsMethod(arguments)) {
+ return fitToVargs(arguments, pt);
}
- return argumentArray;
+ return arguments;
}
/**
@@ -226,11 +214,11 @@ public class ParameterTypes {
}
}
- private static Object makeCommonArray(Object[] arguments, int offset, Class baseClass) {
- Object[] result = (Object[]) Array.newInstance(baseClass, arguments.length - offset);
- for (int i = offset; i < arguments.length; i++) {
+ private static Object makeCommonArray(Object[] arguments, int offset, Class<?> baseType) {
+ Object[] result = (Object[]) Array.newInstance(baseType, arguments.length - offset);
+ for (int i = offset; i < arguments.length; ++i) {
Object v = arguments[i];
- v = DefaultTypeTransformation.castToType(v, baseClass);
+ v = DefaultTypeTransformation.castToType(v, baseType);
result[i - offset] = v;
}
return result;
@@ -241,7 +229,7 @@ public class ParameterTypes {
CachedClass[] pt = getParameterTypes();
final int nArguments = argumentTypes.length, nParameters = pt.length, nthParameter = nParameters - 1;
- if (isVargsMethod && nArguments >= nthParameter)
+ if (isVargsMethod() && nArguments >= nthParameter)
return isValidVargsMethod(argumentTypes, pt, nthParameter);
else if (nArguments == nParameters)
return isValidExactMethod(argumentTypes, pt);
@@ -253,7 +241,7 @@ public class ParameterTypes {
private static boolean isValidExactMethod(Class[] arguments, CachedClass[] pt) {
// let's check the parameter types match
int size = pt.length;
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < size; ++i) {
if (!pt[i].isAssignableFrom(arguments[i])) {
return false;
}
@@ -268,7 +256,7 @@ public class ParameterTypes {
if (size != parameterTypes.length)
return false;
- for (int i = 0; i < size; i++) {
+ for (int i = 0; i < size; ++i) {
final Object arg = args[i];
if (arg != null && !parameterTypes[i].isAssignableFrom(arg.getClass())) {
return false;
@@ -284,8 +272,8 @@ public class ParameterTypes {
if (size != parameterTypes.length)
return false;
- for (int i = 0; i < size; i++) {
- final Class arg = args[i];
+ for (int i = 0; i < size; ++i) {
+ final Class<?> arg = args[i];
if (arg != null && !parameterTypes[i].isAssignableFrom(arg)) {
return false;
}
@@ -305,7 +293,7 @@ public class ParameterTypes {
// check direct match
if (argumentTypes.length == parameterTypes.length) {
- Class argumentType = argumentTypes[nthParameter];
+ Class<?> argumentType = argumentTypes[nthParameter];
if (arrayType.isAssignableFrom(argumentType) || (argumentType.isArray()
&& componentType.isAssignableFrom(argumentType.getComponentType()))) {
return true;
@@ -337,7 +325,7 @@ public class ParameterTypes {
CachedClass componentType = ReflectionCache.getCachedClass(arrayType.getTheClass().getComponentType());
// check direct match
if (nArguments == parameterTypes.length) {
- Class argumentType = getArgClass(arguments[nthParameter]);
+ Class<?> argumentType = getArgClass(arguments[nthParameter]);
if (arrayType.isAssignableFrom(argumentType) || (argumentType.isArray()
&& componentType.isAssignableFrom(argumentType.getComponentType()))) {
return true;
@@ -363,16 +351,7 @@ public class ParameterTypes {
return false;
}
- private static Class getArgClass(Object arg) {
- Class cls;
- if (arg == null) {
- cls = null;
- } else {
- if (arg instanceof Wrapper) {
- cls = ((Wrapper) arg).getType();
- } else
- cls = arg.getClass();
- }
- return cls;
+ private static Class<?> getArgClass(final Object arg) {
+ return arg == null ? null : (arg instanceof Wrapper ? ((Wrapper) arg).getType() : arg.getClass());
}
}
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
index 57f2cd5f78..f9073aa38e 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/NumberNumberMetaMethod.java
@@ -30,11 +30,11 @@ import org.codehaus.groovy.runtime.typehandling.NumberMath;
import java.lang.reflect.Modifier;
public abstract class NumberNumberMetaMethod extends CallSiteAwareMetaMethod {
- private static final CachedClass NUMBER_CLASS = ReflectionCache.getCachedClass(Number.class);
- private static final CachedClass [] NUMBER_CLASS_ARR = new CachedClass[] { NUMBER_CLASS };
+ private static final CachedClass NUMBER_CLASS = ReflectionCache.getCachedClass(Number.class);
+ private static final CachedClass[] NUMBER_CLASS_ARR = {NUMBER_CLASS};
protected NumberNumberMetaMethod() {
- parameterTypes = NUMBER_CLASS_ARR;
+ setParametersTypes(NUMBER_CLASS_ARR);
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayGetAtMetaMethod.java
index 7994b4e3f9..77aa3f65c9 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayGetAtMetaMethod.java
@@ -19,8 +19,9 @@
package org.codehaus.groovy.runtime.dgmimpl.arrays;
public abstract class ArrayGetAtMetaMethod extends ArrayMetaMethod {
+
protected ArrayGetAtMetaMethod() {
- parameterTypes = INTEGER_CLASS_ARR;
+ setParametersTypes(INTEGER_CLASS_ARR);
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java
index 630fe6f551..c5cf781a65 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayMetaMethod.java
@@ -25,8 +25,8 @@ import org.codehaus.groovy.runtime.callsite.CallSiteAwareMetaMethod;
import java.lang.reflect.Modifier;
public abstract class ArrayMetaMethod extends CallSiteAwareMetaMethod {
- protected static final CachedClass INTEGER_CLASS = ReflectionCache.getCachedClass(Integer.class);
- protected static final CachedClass[] INTEGER_CLASS_ARR = new CachedClass[]{INTEGER_CLASS};
+ protected static final CachedClass INTEGER_CLASS = ReflectionCache.getCachedClass(Integer.class);
+ protected static final CachedClass[] INTEGER_CLASS_ARR = {INTEGER_CLASS};
protected static int normaliseIndex(int i, int size) {
int temp = i;
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayPutAtMetaMethod.java
index 41fa07027c..1cd27762f2 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ArrayPutAtMetaMethod.java
@@ -18,7 +18,17 @@
*/
package org.codehaus.groovy.runtime.dgmimpl.arrays;
+import org.codehaus.groovy.reflection.CachedClass;
+
+import static org.codehaus.groovy.reflection.ReflectionCache.OBJECT_CLASS;
+
public abstract class ArrayPutAtMetaMethod extends ArrayMetaMethod {
+ private static final CachedClass[] PARAM_TYPES = {INTEGER_CLASS, OBJECT_CLASS};
+
+ protected ArrayPutAtMetaMethod() {
+ setParametersTypes(PARAM_TYPES);
+ }
+
@Override
public String getName() {
return "putAt";
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
index 4244b2ad08..ce9132f868 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class BooleanArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(boolean[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(boolean[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class BooleanArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
index 4739fd6383..eea5fd6c38 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/BooleanArrayPutAtMetaMethod.java
@@ -26,17 +26,11 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class BooleanArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(boolean[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public BooleanArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(boolean[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
index 4e5af49e70..6d1f028889 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class ByteArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(byte[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(byte[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class ByteArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
index 2c79b481d4..8952f1658f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ByteArrayPutAtMetaMethod.java
@@ -26,17 +26,11 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class ByteArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(byte[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public ByteArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(byte[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
index 482d3911b9..03389270a0 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class CharacterArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(char[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(char[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class CharacterArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
index 4371c47e8c..88fb05bea1 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/CharacterArrayPutAtMetaMethod.java
@@ -27,17 +27,11 @@ import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
public class CharacterArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(char[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public CharacterArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(char[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
index 692abfbcef..0e1014d912 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class DoubleArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(double[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(double[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class DoubleArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
index f89a2d03a3..e3db4a9fda 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/DoubleArrayPutAtMetaMethod.java
@@ -28,17 +28,11 @@ import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
public class DoubleArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(double[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public DoubleArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(double[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
index 5caa586505..ff5badb50b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class FloatArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(float[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(float[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class FloatArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
index ebbf2e8f59..5cb0abcaec 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/FloatArrayPutAtMetaMethod.java
@@ -28,17 +28,11 @@ import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
public class FloatArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(float[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public FloatArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(float[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
index 30c4ee5cf8..0863753f7d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class IntegerArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(int[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(int[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class IntegerArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
index 34f114d0ac..2424e9aa5b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/IntegerArrayPutAtMetaMethod.java
@@ -28,17 +28,11 @@ import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
public class IntegerArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(int[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public IntegerArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(int[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
index f31ef1c7dc..231a9d887f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class LongArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(long[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(long[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class LongArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
index 7d753728b7..6e8afff874 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/LongArrayPutAtMetaMethod.java
@@ -28,17 +28,11 @@ import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
public class LongArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(long[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public LongArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(long[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java
index 011341f501..e2e9fc8464 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayGetAtMetaMethod.java
@@ -21,12 +21,12 @@ package org.codehaus.groovy.runtime.dgmimpl.arrays;
import groovy.lang.MetaClassImpl;
import groovy.lang.MetaMethod;
import org.codehaus.groovy.reflection.CachedClass;
-import org.codehaus.groovy.reflection.ReflectionCache;
import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
+import static org.codehaus.groovy.reflection.ReflectionCache.OBJECT_ARRAY_CLASS;
+
public class ObjectArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass OBJECT_ARR_CLASS = ReflectionCache.OBJECT_ARRAY_CLASS;
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class ObjectArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return OBJECT_ARR_CLASS;
+ return OBJECT_ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java
index 9cb7c746ed..208b161955 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ObjectArrayPutAtMetaMethod.java
@@ -22,23 +22,17 @@ import groovy.lang.GString;
import groovy.lang.MetaClassImpl;
import groovy.lang.MetaMethod;
import org.codehaus.groovy.reflection.CachedClass;
-import org.codehaus.groovy.reflection.ReflectionCache;
import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-public class ObjectArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.getCachedClass(Object.class);
- private static final CachedClass OBJECT_ARR_CLASS = ReflectionCache.OBJECT_ARRAY_CLASS;
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
+import static org.codehaus.groovy.reflection.ReflectionCache.OBJECT_ARRAY_CLASS;
- public ObjectArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+public class ObjectArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return OBJECT_ARR_CLASS;
+ return OBJECT_ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
index e85e212a70..c3e623483a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayGetAtMetaMethod.java
@@ -26,7 +26,7 @@ import org.codehaus.groovy.runtime.callsite.CallSite;
import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
public class ShortArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(short[].class);
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(short[].class);
@Override
public Class getReturnType() {
@@ -35,7 +35,7 @@ public class ShortArrayGetAtMetaMethod extends ArrayGetAtMetaMethod {
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
index 6083b24153..aad4e9a29a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/dgmimpl/arrays/ShortArrayPutAtMetaMethod.java
@@ -28,17 +28,11 @@ import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
public class ShortArrayPutAtMetaMethod extends ArrayPutAtMetaMethod {
- private static final CachedClass OBJECT_CLASS = ReflectionCache.OBJECT_CLASS;
- private static final CachedClass ARR_CLASS = ReflectionCache.getCachedClass(short[].class);
- private static final CachedClass[] PARAM_CLASS_ARR = new CachedClass[]{INTEGER_CLASS, OBJECT_CLASS};
-
- public ShortArrayPutAtMetaMethod() {
- parameterTypes = PARAM_CLASS_ARR;
- }
+ private static final CachedClass ARRAY_CLASS = ReflectionCache.getCachedClass(short[].class);
@Override
public final CachedClass getDeclaringClass() {
- return ARR_CLASS;
+ return ARRAY_CLASS;
}
@Override
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/TransformMetaMethod.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/TransformMetaMethod.java
index 64a1eb6617..2c212021b8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/TransformMetaMethod.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/TransformMetaMethod.java
@@ -29,9 +29,9 @@ public class TransformMetaMethod extends MetaMethod {
private final MetaMethod metaMethod;
public TransformMetaMethod(final MetaMethod metaMethod) {
- this.metaMethod = metaMethod;
+ super(metaMethod.getNativeParameterTypes());
setParametersTypes(metaMethod.getParameterTypes());
- nativeParamTypes = metaMethod.getNativeParameterTypes();
+ this.metaMethod = metaMethod;
}
@Override
diff --git a/src/test/org/codehaus/groovy/reflection/CachedMethodTest.groovy b/src/test/org/codehaus/groovy/reflection/CachedMethodTest.groovy
index eb552519c7..8d9852b361 100644
--- a/src/test/org/codehaus/groovy/reflection/CachedMethodTest.groovy
+++ b/src/test/org/codehaus/groovy/reflection/CachedMethodTest.groovy
@@ -18,10 +18,23 @@
*/
package org.codehaus.groovy.reflection
-import groovy.test.GroovyTestCase
+import org.junit.Test
-class CachedMethodTest extends GroovyTestCase {
- void testCachedMethodCompareTo() {
- assert String.metaClass.methods.size() == String.metaClass.methods.unique().size()
+final class CachedMethodTest {
+
+ @Test
+ void testCompareTo() {
+ int methodCount = String.metaClass.methods.size()
+ int uniqueCount = String.metaClass.methods.unique().size()
+
+ assert methodCount == uniqueCount
+ }
+
+ // GROOVY-11293
+ @Test
+ void testIsVargsMethod() {
+ def cachedMethod = new CachedMethod(String.getMethod('join', CharSequence, CharSequence[]))
+
+ assert cachedMethod.isVargsMethod()
}
}