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