You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/06/09 05:58:52 UTC
svn commit: r664616 -
/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
Author: rfeng
Date: Sun Jun 8 20:58:51 2008
New Revision: 664616
URL: http://svn.apache.org/viewvc?rev=664616&view=rev
Log:
Add default impl class for Collection interfaces
Modified:
incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java?rev=664616&r1=664615&r2=664616&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/BaseBeanGenerator.java Sun Jun 8 20:58:51 2008
@@ -21,6 +21,7 @@
import java.lang.reflect.Type;
import java.util.Collections;
+import java.util.HashMap;
import java.util.Map;
import java.util.WeakHashMap;
@@ -32,6 +33,13 @@
import org.objectweb.asm.Opcodes;
public abstract class BaseBeanGenerator implements Opcodes {
+ private static final Map<String, String> COLLECTION_CLASSES = new HashMap<String, String>();
+ static {
+ COLLECTION_CLASSES.put("Ljava/util/Collection;", "java/util/ArrayList");
+ COLLECTION_CLASSES.put("Ljava/util/List;", "java/util/ArrayList");
+ COLLECTION_CLASSES.put("Ljava/util/Set;", "java/util/HashSet");
+ COLLECTION_CLASSES.put("Ljava/util/Queue;", "java/util/LinkedList");
+ }
protected static final Map<Object, Class<?>> generatedClasses =
Collections.synchronizedMap(new WeakHashMap<Object, Class<?>>());
@@ -143,15 +151,16 @@
mv.visitEnd();
}
-
+
protected void decalreGetter(ClassWriter cw,
String classDescriptor,
String classSignature,
String propName,
String propClassSignature,
String propTypeSignature) {
- if ("Ljava/util/List;".equals(propClassSignature)) {
- decalreListGetter(cw, classDescriptor, classSignature, propName, propClassSignature, propTypeSignature);
+ String collectionImplClass = COLLECTION_CLASSES.get(propClassSignature);
+ if (collectionImplClass != null) {
+ decalreCollectionGetter(cw, classDescriptor, classSignature, propName, propClassSignature, propTypeSignature, collectionImplClass);
return;
}
@@ -173,12 +182,13 @@
mv.visitEnd();
}
- protected void decalreListGetter(ClassWriter cw,
+ protected void decalreCollectionGetter(ClassWriter cw,
String classDescriptor,
String classSignature,
String propName,
String propClassSignature,
- String propTypeSignature) {
+ String propTypeSignature,
+ String collectionImplClass) {
String getterName = "get" + capitalize(propName);
String fieldName = getFieldName(propName);
MethodVisitor mv =
@@ -196,9 +206,9 @@
mv.visitLabel(l2);
mv.visitLineNumber(64, l2);
mv.visitVarInsn(ALOAD, 0);
- mv.visitTypeInsn(NEW, "java/util/ArrayList");
+ mv.visitTypeInsn(NEW, collectionImplClass);
mv.visitInsn(DUP);
- mv.visitMethodInsn(INVOKESPECIAL, "java/util/ArrayList", "<init>", "()V");
+ mv.visitMethodInsn(INVOKESPECIAL, collectionImplClass, "<init>", "()V");
mv.visitFieldInsn(PUTFIELD, classDescriptor, fieldName, propClassSignature);
mv.visitLabel(l1);
mv.visitLineNumber(66, l1);