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 2018/02/28 02:27:31 UTC
groovy git commit: Minor refactoring: remove duplicated code of
`ProxyGeneratorAdapter`
Repository: groovy
Updated Branches:
refs/heads/master 90dde8534 -> 1937901a6
Minor refactoring: remove duplicated code of `ProxyGeneratorAdapter`
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/1937901a
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/1937901a
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/1937901a
Branch: refs/heads/master
Commit: 1937901a6d439450ae542dc219ebc1d8b4f5b479
Parents: 90dde85
Author: sunlan <su...@apache.org>
Authored: Wed Feb 28 10:27:22 2018 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Feb 28 10:27:22 2018 +0800
----------------------------------------------------------------------
.../org/codehaus/groovy/ast/ClassHelper.java | 4 +-
.../groovy/classgen/asm/BytecodeHelper.java | 10 +-
.../classgen/asm/util/TypeDescriptionUtil.java | 120 -----------
.../groovy/classgen/asm/util/TypeUtil.java | 200 +++++++++++++++++++
.../groovy/runtime/ProxyGeneratorAdapter.java | 82 +++-----
5 files changed, 232 insertions(+), 184 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/1937901a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
index fa93fb4..2e034fb 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassHelper.java
@@ -29,7 +29,7 @@ import groovy.lang.Range;
import groovy.lang.Reference;
import groovy.lang.Script;
import org.apache.groovy.util.Maps;
-import org.codehaus.groovy.classgen.asm.util.TypeDescriptionUtil;
+import org.codehaus.groovy.classgen.asm.util.TypeUtil;
import org.codehaus.groovy.runtime.GeneratedClosure;
import org.codehaus.groovy.runtime.GeneratedLambda;
import org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport;
@@ -318,7 +318,7 @@ public class ClassHelper {
* @see #make(String)
*/
public static boolean isPrimitiveType(ClassNode cn) {
- return TypeDescriptionUtil.isPrimitiveType(cn);
+ return TypeUtil.isPrimitiveType(cn);
}
/**
http://git-wip-us.apache.org/repos/asf/groovy/blob/1937901a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
index 197ac9c..b5880fd 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
@@ -25,7 +25,7 @@ import org.codehaus.groovy.ast.GenericsType;
import org.codehaus.groovy.ast.MethodNode;
import org.codehaus.groovy.ast.Parameter;
import org.codehaus.groovy.ast.decompiled.DecompiledClassNode;
-import org.codehaus.groovy.classgen.asm.util.TypeDescriptionUtil;
+import org.codehaus.groovy.classgen.asm.util.TypeUtil;
import org.codehaus.groovy.reflection.ReflectionCache;
import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
import org.objectweb.asm.Label;
@@ -126,7 +126,7 @@ public class BytecodeHelper implements Opcodes {
* @return the ASM type description for class loading
*/
public static String getClassLoadingTypeDescription(ClassNode c) {
- String desc = TypeDescriptionUtil.getDescriptionByType(c);
+ String desc = TypeUtil.getDescriptionByType(c);
if (!c.isArray()) {
if (desc.startsWith("L") && desc.endsWith(";")) {
@@ -161,7 +161,7 @@ public class BytecodeHelper implements Opcodes {
d = d.redirect();
}
- String desc = TypeDescriptionUtil.getDescriptionByType(d);
+ String desc = TypeUtil.getDescriptionByType(d);
if (!end && desc.endsWith(";")) {
desc = desc.substring(0, desc.length() - 1);
@@ -251,7 +251,7 @@ public class BytecodeHelper implements Opcodes {
return "java.lang.Object;";
}
- if (TypeDescriptionUtil.isPrimitiveType(name)) {
+ if (TypeUtil.isPrimitiveType(name)) {
return name;
}
@@ -272,7 +272,7 @@ public class BytecodeHelper implements Opcodes {
prefix = "[";
name = name.substring(0, name.length() - 2);
- return prefix + TypeDescriptionUtil.getDescriptionByName(name);
+ return prefix + TypeUtil.getDescriptionByName(name);
}
return name.replace('/', '.');
http://git-wip-us.apache.org/repos/asf/groovy/blob/1937901a/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeDescriptionUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeDescriptionUtil.java b/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeDescriptionUtil.java
deleted file mode 100644
index 2f7349a..0000000
--- a/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeDescriptionUtil.java
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.codehaus.groovy.classgen.asm.util;
-
-import groovy.lang.Tuple2;
-import org.apache.groovy.util.Maps;
-import org.codehaus.groovy.ast.ClassNode;
-
-import java.util.Map;
-
-import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.boolean_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.byte_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.char_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.double_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.float_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.long_TYPE;
-import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
-
-/**
- * A utility for extracting type description
- */
-public class TypeDescriptionUtil {
- private static final String REF_DESCRIPTION = "L";
- private static final Map<ClassNode, String> TYPE_TO_DESCRIPTION_MAP = Maps.of(
- int_TYPE, "I",
- VOID_TYPE,"V",
- boolean_TYPE, "Z",
- byte_TYPE, "B",
- char_TYPE, "C",
- short_TYPE, "S",
- double_TYPE, "D",
- float_TYPE, "F",
- long_TYPE, "J"
- );
-
- private static final Map<String, ClassNode> NAME_TO_TYPE_MAP = Maps.of(
- "int", int_TYPE,
- "void", VOID_TYPE,
- "boolean", boolean_TYPE,
- "byte", byte_TYPE,
- "char", char_TYPE,
- "short", short_TYPE,
- "double", double_TYPE,
- "float", float_TYPE,
- "long", long_TYPE
- );
-
- public static boolean isPrimitiveType(String name) {
- return NAME_TO_TYPE_MAP.containsKey(name);
- }
-
- public static boolean isPrimitiveType(ClassNode type) {
- return TYPE_TO_DESCRIPTION_MAP.containsKey(type);
- }
-
- public static String getDescriptionByType(ClassNode type) {
- String desc = TYPE_TO_DESCRIPTION_MAP.get(type);
-
- if (null == desc) { // reference type
- if (!type.isArray()) {
- return makeRefDescription(type.getName());
- }
-
- StringBuilder arrayDescription = new StringBuilder(32);
- Tuple2<ClassNode, Integer> arrayInfo = extractArrayInfo(type);
-
- for (int i = 0, dimension = arrayInfo.getSecond(); i < dimension; i++) {
- arrayDescription.append("[");
- }
-
- ClassNode componentType = arrayInfo.getFirst();
- return arrayDescription.append(getDescriptionByType(componentType)).toString();
- }
-
- return desc;
- }
-
- public static String getDescriptionByName(String name) {
- ClassNode type = NAME_TO_TYPE_MAP.get(name);
-
- if (null == type) {
- return makeRefDescription(name);
- }
-
- return getDescriptionByType(type);
- }
-
- private static String makeRefDescription(String name) {
- return REF_DESCRIPTION + name.replace('.', '/') + ";";
- }
-
- private static Tuple2<ClassNode, Integer> extractArrayInfo(ClassNode type) {
- int dimension = 0;
-
- do {
- dimension++;
- } while ((type = type.getComponentType()).isArray());
-
- return new Tuple2<ClassNode, Integer>(type, dimension);
- }
-}
http://git-wip-us.apache.org/repos/asf/groovy/blob/1937901a/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeUtil.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeUtil.java b/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeUtil.java
new file mode 100644
index 0000000..483511d
--- /dev/null
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/util/TypeUtil.java
@@ -0,0 +1,200 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.codehaus.groovy.classgen.asm.util;
+
+import groovy.lang.Tuple2;
+import org.apache.groovy.util.Maps;
+import org.codehaus.groovy.ast.ClassNode;
+import org.objectweb.asm.Type;
+
+import java.util.Map;
+
+import static org.codehaus.groovy.ast.ClassHelper.VOID_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.boolean_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.byte_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.char_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.double_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.float_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.int_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.long_TYPE;
+import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
+import static org.objectweb.asm.Opcodes.ALOAD;
+import static org.objectweb.asm.Opcodes.ARETURN;
+import static org.objectweb.asm.Opcodes.DLOAD;
+import static org.objectweb.asm.Opcodes.DRETURN;
+import static org.objectweb.asm.Opcodes.FLOAD;
+import static org.objectweb.asm.Opcodes.FRETURN;
+import static org.objectweb.asm.Opcodes.ILOAD;
+import static org.objectweb.asm.Opcodes.IRETURN;
+import static org.objectweb.asm.Opcodes.LLOAD;
+import static org.objectweb.asm.Opcodes.LRETURN;
+
+/**
+ * A utility for getting information of types
+ *
+ * @since 2.5.0
+ */
+public abstract class TypeUtil {
+ public static int getLoadInsnByType(Type type) {
+ Integer insn = PRIMITIVE_TYPE_TO_LOAD_INSN_MAP.get(type);
+
+ if (null != insn) {
+ return insn;
+ }
+
+ return ALOAD;
+ }
+
+ public static int getReturnInsnByType(Type type) {
+ Integer insn = PRIMITIVE_TYPE_TO_RETURN_INSN_MAP.get(type);
+
+ if (null != insn) {
+ return insn;
+ }
+
+ return ARETURN;
+ }
+
+ public static String getWrappedClassDescriptor(Type type) {
+ String desc = PRIMITIVE_TYPE_TO_WRAPPED_CLASS_DESCRIPTOR_MAP.get(type);
+
+ if (null != desc) {
+ return desc;
+ }
+
+ throw new IllegalArgumentException("Unexpected type class [" + type + "]");
+ }
+
+ public static boolean isPrimitiveType(Type type) {
+ return PRIMITIVE_TYPE_TO_LOAD_INSN_MAP.containsKey(type);
+ }
+
+ public static boolean isPrimitiveType(String name) {
+ return NAME_TO_PRIMITIVE_TYPE_MAP.containsKey(name);
+ }
+
+ public static boolean isPrimitiveType(ClassNode type) {
+ return PRIMITIVE_TYPE_TO_DESCRIPTION_MAP.containsKey(type);
+ }
+
+ public static String getDescriptionByType(ClassNode type) {
+ String desc = PRIMITIVE_TYPE_TO_DESCRIPTION_MAP.get(type);
+
+ if (null == desc) { // reference type
+ if (!type.isArray()) {
+ return makeRefDescription(type.getName());
+ }
+
+ StringBuilder arrayDescription = new StringBuilder(32);
+ Tuple2<ClassNode, Integer> arrayInfo = extractArrayInfo(type);
+
+ for (int i = 0, dimension = arrayInfo.getSecond(); i < dimension; i++) {
+ arrayDescription.append("[");
+ }
+
+ ClassNode componentType = arrayInfo.getFirst();
+ return arrayDescription.append(getDescriptionByType(componentType)).toString();
+ }
+
+ return desc;
+ }
+
+ public static String getDescriptionByName(String name) {
+ ClassNode type = NAME_TO_PRIMITIVE_TYPE_MAP.get(name);
+
+ if (null == type) {
+ return makeRefDescription(name);
+ }
+
+ return getDescriptionByType(type);
+ }
+
+ private static String makeRefDescription(String name) {
+ return REF_DESCRIPTION + name.replace('.', '/') + ";";
+ }
+
+ private static Tuple2<ClassNode, Integer> extractArrayInfo(ClassNode type) {
+ int dimension = 0;
+
+ do {
+ dimension++;
+ } while ((type = type.getComponentType()).isArray());
+
+ return new Tuple2<ClassNode, Integer>(type, dimension);
+ }
+
+ private static final String REF_DESCRIPTION = "L";
+ private static final Map<ClassNode, String> PRIMITIVE_TYPE_TO_DESCRIPTION_MAP = Maps.of(
+ int_TYPE, "I",
+ VOID_TYPE,"V",
+ boolean_TYPE, "Z",
+ byte_TYPE, "B",
+ char_TYPE, "C",
+ short_TYPE, "S",
+ double_TYPE, "D",
+ float_TYPE, "F",
+ long_TYPE, "J"
+ );
+
+ private static final Map<String, ClassNode> NAME_TO_PRIMITIVE_TYPE_MAP = Maps.of(
+ "int", int_TYPE,
+ "void", VOID_TYPE,
+ "boolean", boolean_TYPE,
+ "byte", byte_TYPE,
+ "char", char_TYPE,
+ "short", short_TYPE,
+ "double", double_TYPE,
+ "float", float_TYPE,
+ "long", long_TYPE
+ );
+
+ private static final Map<Type, Integer> PRIMITIVE_TYPE_TO_LOAD_INSN_MAP = Maps.of(
+ Type.BOOLEAN_TYPE, ILOAD,
+ Type.BYTE_TYPE, ILOAD,
+ Type.CHAR_TYPE, ILOAD,
+ Type.DOUBLE_TYPE, DLOAD,
+ Type.FLOAT_TYPE, FLOAD,
+ Type.INT_TYPE, ILOAD,
+ Type.LONG_TYPE, LLOAD,
+ Type.SHORT_TYPE, ILOAD
+ );
+
+ private static final Map<Type, Integer> PRIMITIVE_TYPE_TO_RETURN_INSN_MAP = Maps.of(
+ Type.BOOLEAN_TYPE, IRETURN,
+ Type.BYTE_TYPE, IRETURN,
+ Type.CHAR_TYPE, IRETURN,
+ Type.DOUBLE_TYPE, DRETURN,
+ Type.FLOAT_TYPE, FRETURN,
+ Type.INT_TYPE, IRETURN,
+ Type.LONG_TYPE, LRETURN,
+ Type.SHORT_TYPE, IRETURN
+ );
+
+ private static final Map<Type, String> PRIMITIVE_TYPE_TO_WRAPPED_CLASS_DESCRIPTOR_MAP = Maps.of(
+ Type.BOOLEAN_TYPE, "java/lang/Boolean",
+ Type.BYTE_TYPE, "java/lang/Byte",
+ Type.CHAR_TYPE, "java/lang/Character",
+ Type.DOUBLE_TYPE, "java/lang/Double",
+ Type.FLOAT_TYPE, "java/lang/Float",
+ Type.INT_TYPE, "java/lang/Integer",
+ Type.LONG_TYPE, "java/lang/Long",
+ Type.SHORT_TYPE, "java/lang/Short"
+ );
+}
http://git-wip-us.apache.org/repos/asf/groovy/blob/1937901a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
index 2d3ca8a..47b6f3b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
@@ -27,6 +27,7 @@ import groovy.transform.Trait;
import org.codehaus.groovy.ast.ClassHelper;
import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.classgen.asm.BytecodeHelper;
+import org.codehaus.groovy.classgen.asm.util.TypeUtil;
import org.codehaus.groovy.control.CompilationUnit;
import org.codehaus.groovy.control.CompilerConfiguration;
import org.codehaus.groovy.control.ErrorCollector;
@@ -725,13 +726,7 @@ public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
mv.visitInsn(DUP);
BytecodeHelper.pushConstant(mv, i);
// primitive types must be boxed
- if (isPrimitive(arg)) {
- mv.visitIntInsn(getLoadInsn(arg), idx);
- String wrappedType = getWrappedClassDescriptor(arg);
- mv.visitMethodInsn(INVOKESTATIC, wrappedType, "valueOf", "(" + arg.getDescriptor() + ")L" + wrappedType + ";", false);
- } else {
- mv.visitVarInsn(ALOAD, idx); // load argument i
- }
+ boxPrimitiveType(mv, idx, arg);
size = Math.max(size, 5 + registerLen(arg));
idx += registerLen(arg);
mv.visitInsn(AASTORE); // store value into array
@@ -761,15 +756,8 @@ public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
Type arg = args[i];
mv.visitInsn(DUP); // stack size = 2
BytecodeHelper.pushConstant(mv, i); // array index, stack size = 3
- stackSize = 3;
// primitive types must be boxed
- if (isPrimitive(arg)) {
- mv.visitIntInsn(getLoadInsn(arg), idx);
- String wrappedType = getWrappedClassDescriptor(arg);
- mv.visitMethodInsn(INVOKESTATIC, wrappedType, "valueOf", "(" + arg.getDescriptor() + ")L" + wrappedType + ";", false);
- } else {
- mv.visitVarInsn(ALOAD, idx); // load argument i
- }
+ boxPrimitiveType(mv, idx, arg);
idx += registerLen(arg);
stackSize = Math.max(4, 3 + registerLen(arg));
mv.visitInsn(AASTORE); // store value into array
@@ -804,6 +792,16 @@ public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
return null;
}
+ private void boxPrimitiveType(MethodVisitor mv, int idx, Type arg) {
+ if (isPrimitive(arg)) {
+ mv.visitIntInsn(getLoadInsn(arg), idx);
+ String wrappedType = getWrappedClassDescriptor(arg);
+ mv.visitMethodInsn(INVOKESTATIC, wrappedType, "valueOf", "(" + arg.getDescriptor() + ")L" + wrappedType + ";", false);
+ } else {
+ mv.visitVarInsn(ALOAD, idx); // load argument i
+ }
+ }
+
private static void unwrapResult(final MethodVisitor mv, final String desc) {
Type returnType = Type.getReturnType(desc);
if (returnType == Type.VOID_TYPE) {
@@ -874,51 +872,20 @@ public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
return new ReturnValueWrappingClosure(o);
}
- private static int getLoadInsn(final Type type) {
- if (type == Type.BOOLEAN_TYPE) return ILOAD;
- if (type == Type.BYTE_TYPE) return ILOAD;
- if (type == Type.CHAR_TYPE) return ILOAD;
- if (type == Type.DOUBLE_TYPE) return DLOAD;
- if (type == Type.FLOAT_TYPE) return FLOAD;
- if (type == Type.INT_TYPE) return ILOAD;
- if (type == Type.LONG_TYPE) return LLOAD;
- if (type == Type.SHORT_TYPE) return ILOAD;
- return ALOAD;
- }
-
- private static int getReturnInsn(final Type type) {
- if (type == Type.BOOLEAN_TYPE) return IRETURN;
- if (type == Type.BYTE_TYPE) return IRETURN;
- if (type == Type.CHAR_TYPE) return IRETURN;
- if (type == Type.DOUBLE_TYPE) return DRETURN;
- if (type == Type.FLOAT_TYPE) return FRETURN;
- if (type == Type.INT_TYPE) return IRETURN;
- if (type == Type.LONG_TYPE) return LRETURN;
- if (type == Type.SHORT_TYPE) return IRETURN;
- return ARETURN;
- }
-
- private static boolean isPrimitive(final Type arg) {
- return arg == Type.BOOLEAN_TYPE
- || arg == Type.BYTE_TYPE
- || arg == Type.CHAR_TYPE
- || arg == Type.DOUBLE_TYPE
- || arg == Type.FLOAT_TYPE
- || arg == Type.INT_TYPE
- || arg == Type.LONG_TYPE
- || arg == Type.SHORT_TYPE;
+ private static int getLoadInsn(Type type) {
+ return TypeUtil.getLoadInsnByType(type);
+ }
+
+ private static int getReturnInsn(Type type) {
+ return TypeUtil.getReturnInsnByType(type);
+ }
+
+ private static boolean isPrimitive(Type type) {
+ return TypeUtil.isPrimitiveType(type);
}
private static String getWrappedClassDescriptor(Type type) {
- if (type == Type.BOOLEAN_TYPE) return "java/lang/Boolean";
- if (type == Type.BYTE_TYPE) return "java/lang/Byte";
- if (type == Type.CHAR_TYPE) return "java/lang/Character";
- if (type == Type.DOUBLE_TYPE) return "java/lang/Double";
- if (type == Type.FLOAT_TYPE) return "java/lang/Float";
- if (type == Type.INT_TYPE) return "java/lang/Integer";
- if (type == Type.LONG_TYPE) return "java/lang/Long";
- if (type == Type.SHORT_TYPE) return "java/lang/Short";
- throw new IllegalArgumentException("Unexpected type class [" + type + "]");
+ return TypeUtil.getWrappedClassDescriptor(type);
}
private static class InnerLoader extends GroovyClassLoader {
@@ -987,6 +954,7 @@ public class ProxyGeneratorAdapter extends ClassVisitor implements Opcodes {
}
private static class ReturnValueWrappingClosure<V> extends Closure<V> {
+ private static final long serialVersionUID = 1313135457715304501L;
private final V value;
public ReturnValueWrappingClosure(V returnValue) {