]> source.dussan.org Git - javassist.git/commitdiff
fixed some annotation bugs and added some integration features
authorpatriot1burke <patriot1burke@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Sat, 24 Apr 2004 03:16:07 +0000 (03:16 +0000)
committerpatriot1burke <patriot1burke@30ef5769-5b8d-40dd-aea6-55b5d6557bb3>
Sat, 24 Apr 2004 03:16:07 +0000 (03:16 +0000)
git-svn-id: http://anonsvn.jboss.org/repos/javassist/trunk@94 30ef5769-5b8d-40dd-aea6-55b5d6557bb3

16 files changed:
src/main/javassist/bytecode/annotation/AnnotationInfo.java
src/main/javassist/bytecode/annotation/AnnotationMemberValue.java
src/main/javassist/bytecode/annotation/ArrayMemberValue.java
src/main/javassist/bytecode/annotation/BooleanMemberValue.java
src/main/javassist/bytecode/annotation/ByteMemberValue.java
src/main/javassist/bytecode/annotation/CharMemberValue.java
src/main/javassist/bytecode/annotation/ClassMemberValue.java
src/main/javassist/bytecode/annotation/DoubleMemberValue.java
src/main/javassist/bytecode/annotation/EnumMemberValue.java
src/main/javassist/bytecode/annotation/FloatMemberValue.java
src/main/javassist/bytecode/annotation/IntegerMemberValue.java
src/main/javassist/bytecode/annotation/LongMemberValue.java
src/main/javassist/bytecode/annotation/MemberValue.java
src/main/javassist/bytecode/annotation/MemberValueVisitor.java [new file with mode: 0644]
src/main/javassist/bytecode/annotation/ShortMemberValue.java
src/main/javassist/bytecode/annotation/StringMemberValue.java

index 422b4d17752fdaf40881243013fd313ab8b3439f..312ba577d7702e137ad29b05ae4757378a87b1e7 100644 (file)
@@ -24,7 +24,7 @@ import java.util.Iterator;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class AnnotationInfo
@@ -39,6 +39,65 @@ public class AnnotationInfo
 
    }
 
+   private MemberValue createMemberValue(ConstPool cp, CtClass returnType) throws javassist.NotFoundException
+   {
+      if (returnType.equals(CtPrimitiveType.booleanType))
+      {
+         return new BooleanMemberValue(cp);
+      }
+      else if (returnType.equals(CtPrimitiveType.byteType))
+      {
+         return new ByteMemberValue(cp);
+      }
+      else if (returnType.equals(CtPrimitiveType.charType))
+      {
+         return new CharMemberValue(cp);
+      }
+      else if (returnType.equals(CtPrimitiveType.doubleType))
+      {
+         return new DoubleMemberValue(cp);
+      }
+      else if (returnType.equals(CtPrimitiveType.floatType))
+      {
+         return new FloatMemberValue(cp);
+      }
+      else if (returnType.equals(CtPrimitiveType.intType))
+      {
+         return new IntegerMemberValue(cp);
+      }
+      else if (returnType.equals(CtPrimitiveType.longType))
+      {
+         return new LongMemberValue(cp);
+      }
+      else if (returnType.equals(CtPrimitiveType.shortType))
+      {
+         return new ShortMemberValue(cp);
+      }
+      else if (returnType.getName().equals("java.lang.Class"))
+      {
+         return new ClassMemberValue(cp);
+      }
+      else if (returnType.getName().equals("java.lang.String") || returnType.getName().equals("String"))
+      {
+         return new StringMemberValue(cp);
+      }
+      else if (returnType.isArray())
+      {
+         CtClass arrayType = returnType.getComponentType();
+         MemberValue type = createMemberValue(cp, arrayType);
+         return new ArrayMemberValue(type, cp);
+      }
+      else if (returnType.isInterface())
+      {
+         AnnotationInfo info = new AnnotationInfo(cp, returnType);
+         return new AnnotationMemberValue(info, cp);
+      }
+      else
+      {
+         throw new RuntimeException("cannot handle member type: " + returnType.getName());
+      }
+   }
+
    /**
     * todo Enums are not supported right now.
     * This is for creation at runtime
@@ -59,58 +118,7 @@ public class AnnotationInfo
       for (int i = 0; i < methods.length; i++)
       {
          CtClass returnType = methods[i].getReturnType();
-         if (returnType.equals(CtPrimitiveType.booleanType))
-         {
-            addMemberValue(methods[i].getName(), new BooleanMemberValue((short) -1));
-         }
-         else if (returnType.equals(CtPrimitiveType.byteType))
-         {
-            addMemberValue(methods[i].getName(), new ByteMemberValue((short) -1));
-         }
-         else if (returnType.equals(CtPrimitiveType.charType))
-         {
-            addMemberValue(methods[i].getName(), new CharMemberValue((short) -1));
-         }
-         else if (returnType.equals(CtPrimitiveType.doubleType))
-         {
-            addMemberValue(methods[i].getName(), new DoubleMemberValue((short) -1));
-         }
-         else if (returnType.equals(CtPrimitiveType.floatType))
-         {
-            addMemberValue(methods[i].getName(), new FloatMemberValue((short) -1));
-         }
-         else if (returnType.equals(CtPrimitiveType.intType))
-         {
-            addMemberValue(methods[i].getName(), new IntegerMemberValue((short) -1));
-         }
-         else if (returnType.equals(CtPrimitiveType.longType))
-         {
-            addMemberValue(methods[i].getName(), new LongMemberValue((short) -1));
-         }
-         else if (returnType.equals(CtPrimitiveType.shortType))
-         {
-            addMemberValue(methods[i].getName(), new ShortMemberValue((short) -1));
-         }
-         else if (returnType.getName().equals("java.lang.Class"))
-         {
-            addMemberValue(methods[i].getName(), new ClassMemberValue((short) -1));
-         }
-         else if (returnType.getName().equals("java.lang.String") || returnType.getName().equals("String"))
-         {
-            addMemberValue(methods[i].getName(), new StringMemberValue((short) -1));
-         }
-         else if (returnType.isArray())
-         {
-            addMemberValue(methods[i].getName(), new ArrayMemberValue());
-         }
-         else if (returnType.isInterface())
-         {
-            addMemberValue(methods[i].getName(), new AnnotationMemberValue(null));
-         }
-         else
-         {
-            throw new RuntimeException("cannot handle member type: " + returnType.getName());
-         }
+         addMemberValue(methods[i].getName(), createMemberValue(cp, returnType));
       }
    }
 
@@ -165,6 +173,11 @@ public class AnnotationInfo
    public void write(DataOutputStream dos) throws IOException
    {
       dos.writeShort(type_index);
+      if (members == null)
+      {
+         dos.writeShort((short)0);
+         return;
+      }
       dos.writeShort(members.size());
       Iterator it = members.keySet().iterator();
       while (it.hasNext())
index 1b55bd79672e54a5362bc7d46cc1f122beeb525e..11d021cc246004a2d00ccf6c70fb8678cb5eeedf 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,18 +15,23 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class AnnotationMemberValue extends MemberValue
 {
    AnnotationInfo annotation;
-   public AnnotationMemberValue(AnnotationInfo a)
+   public AnnotationMemberValue(AnnotationInfo a, ConstPool cp)
    {
-      tag = '@';
+      super('@', cp);
       this.annotation = a;
    }
 
+   public AnnotationMemberValue(ConstPool cp)
+   {
+      super('@', cp);
+   }
+
    public AnnotationInfo getNestedAnnotation()
    {
       return annotation;
@@ -45,4 +52,10 @@ public class AnnotationMemberValue extends MemberValue
       super.write(dos);
       annotation.write(dos);
    }
+
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitAnnotationMemberValue(this);
+   }
+
 }
index 70d607ef47667ea57d1103294372f5055fc28913..505452fcc3c15938dcfd9ad030461a31ed1b9a09 100644 (file)
@@ -12,20 +12,30 @@ import java.io.DataInput;
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.StringTokenizer;
 
 /**
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class ArrayMemberValue extends MemberValue
 {
    MemberValue[] values;
-   public ArrayMemberValue()
+   MemberValue type;
+
+   private ArrayMemberValue(ConstPool cp)
+   {
+      super('[', cp);
+
+   }
+
+   public ArrayMemberValue(MemberValue type, ConstPool cp)
    {
-      tag = '[';
+      this(cp);
+      this.type = type;
    }
 
    public MemberValue[] getValue()
@@ -35,20 +45,28 @@ public class ArrayMemberValue extends MemberValue
 
    public void setValue(MemberValue[] values)
    {
+      if (values != null && values.length > 0) type = values[0];
       this.values = values;
    }
 
+   public MemberValue getType()
+   {
+      return type;
+   }
+
 
    public static ArrayMemberValue readArray(ConstPool cp, DataInput di) throws java.io.IOException
    {
-      ArrayMemberValue rtn = new ArrayMemberValue();
+      ArrayMemberValue rtn = new ArrayMemberValue(cp);
       int length = di.readShort();
       ArrayList values = new ArrayList(length);
       for (int i = 0; i < length; i++)
       {
-         values.add(MemberValue.readMemberValue(cp, di));
+         MemberValue type = MemberValue.readMemberValue(cp, di);
+         rtn.type = type;
+         values.add(type);
       }
-      rtn.values = (MemberValue[])values.toArray(new MemberValue[length]);
+      rtn.values = (MemberValue[]) values.toArray(new MemberValue[length]);
       return rtn;
 
    }
@@ -56,21 +74,35 @@ public class ArrayMemberValue extends MemberValue
    public void write(DataOutputStream dos) throws IOException
    {
       super.write(dos);
+      if (values == null)
+      {
+         dos.writeShort(0);
+         return;
+      }
       dos.writeShort(values.length);
       for (int i = 0; i < values.length; i++)
       {
          values[i].write(dos);
       }
    }
+
    public String toString()
    {
       StringBuffer buf = new StringBuffer("{");
-      for (int i = 0; i < values.length; i++)
+      if (values != null)
       {
-         buf.append(values[i].toString());
-         if (i + 1 < values.length) buf.append(", ");
+         for (int i = 0; i < values.length; i++)
+         {
+            buf.append(values[i].toString());
+            if (i + 1 < values.length) buf.append(", ");
+         }
       }
       buf.append("}");
       return buf.toString();
    }
+
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitArrayMemberValue(this);
+   }
 }
index f11354d57cd5b633fd9dff2f534824c9dba0f50c..d91dcfcccf7e888bd0ffe556cd5f4512a14dec92 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class BooleanMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public BooleanMemberValue(short cvi)
+   public BooleanMemberValue(short cvi, ConstPool cp)
    {
-      tag = 'Z';
+      super('Z', cp);
       this.const_value_index = cvi;
    }
 
+   public BooleanMemberValue(ConstPool cp)
+   {
+      super('Z', cp);
+      setValue(false);
+   }
+
    public boolean getValue()
    {
       return cp.getIntegerInfo(const_value_index) == 1;
@@ -45,4 +53,8 @@ public class BooleanMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitBooleanMemberValue(this);
+   }
 }
index b567b9bd2b760a03bca5a9815387955c101104a6..461a9dd89603172784c72961858ab7ab725f75ce 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class ByteMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public ByteMemberValue(short const_value_index)
+   public ByteMemberValue(short const_value_index, ConstPool cp)
    {
-      tag = 'B';
+      super('B', cp);
       this.const_value_index = const_value_index;
    }
 
+   public ByteMemberValue(ConstPool cp)
+   {
+      super('B', cp);
+      setValue((byte)0);
+   }
+
    public byte getValue()
    {
       return (byte)cp.getIntegerInfo(const_value_index);
@@ -45,4 +53,8 @@ public class ByteMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitByteMemberValue(this);
+   }
 }
index 9d9eb17ff83c94fb5bfa59ab17726960fa7a321b..646bfdeee0c5418f5c4964e280848e5f1db2e0e9 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class CharMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public CharMemberValue(short cvi)
+   public CharMemberValue(short cvi, ConstPool cp)
    {
-      tag = 'C';
+      super('C', cp);
       this.const_value_index = cvi;
    }
 
+   public CharMemberValue(ConstPool cp)
+   {
+      super('C', cp);
+      setValue('\0');
+   }
+
    public char getValue()
    {
       return (char)cp.getIntegerInfo(const_value_index);
@@ -44,4 +52,8 @@ public class CharMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitCharMemberValue(this);
+   }
 }
index 8931eb0518532af97f688a3e1d17b96acf475231..96bf7afe6a32b56b2de7a300920728135949b7bd 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class ClassMemberValue extends MemberValue
 {
    short class_info_index;
 
-   public ClassMemberValue(short cii)
+   public ClassMemberValue(short cii, ConstPool cp)
    {
-      tag = 'c';
+      super('c', cp);
       this.class_info_index = cii;
    }
 
+   public ClassMemberValue(ConstPool cp)
+   {
+      super('c', cp);
+      setClassName("java.lang.Class");
+   }
+
    public String getClassName()
    {
       return cp.getClassInfo(class_info_index);
@@ -45,4 +53,8 @@ public class ClassMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(class_info_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitClassMemberValue(this);
+   }
 }
index b56e4e7d271785ea890bb3a579ad1442ce694e8a..5e468971778d1d398ee95f4b4ad4f2d88f63b116 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class DoubleMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public DoubleMemberValue(short cvi)
+   public DoubleMemberValue(short cvi, ConstPool cp)
    {
-      tag = 'D';
+      super('D', cp);
       this.const_value_index = cvi;
    }
 
+   public DoubleMemberValue(ConstPool cp)
+   {
+      super('D', cp);
+      setValue(0);
+   }
+
    public double getValue()
    {
       return cp.getDoubleInfo(const_value_index);
@@ -44,4 +52,8 @@ public class DoubleMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitDoubleMemberValue(this);
+   }
 }
index faf84a74a1467f3be32921c7c89fa88bff83dde8..3a2ffaf1a5e2c94e09875c93ea4baadec07b538a 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,7 +15,7 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class EnumMemberValue extends MemberValue
@@ -21,9 +23,9 @@ public class EnumMemberValue extends MemberValue
    short type_name_index;
    short const_name_index;
 
-   public EnumMemberValue(short type, short cni)
+   public EnumMemberValue(short type, short cni, ConstPool cp)
    {
-      tag = 'e';
+      super('e', cp);
       this.type_name_index = type;
       this.const_name_index = cni;
    }
@@ -49,4 +51,8 @@ public class EnumMemberValue extends MemberValue
       dos.writeShort(type_name_index);
       dos.writeShort(const_name_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitEnumMemberValue(this);
+   }
 }
index d36d4b1f68c32eb26a03090e02d9d7a9d292f82e..6d5f124194d2b3a63513004b44b55fb1c63095d2 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class FloatMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public FloatMemberValue(short cvi)
+   public FloatMemberValue(short cvi, ConstPool cp)
    {
-      tag = 'F';
+      super('F', cp);
       this.const_value_index = cvi;
    }
 
+   public FloatMemberValue(ConstPool cp)
+   {
+      super('F', cp);
+      setValue(0);
+   }
+
    public float getValue()
    {
       return cp.getFloatInfo(const_value_index);
@@ -44,4 +52,8 @@ public class FloatMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitFloatMemberValue(this);
+   }
 }
index fbd78082fd690ee77896ba39cf7a768d9f3b3e26..55d56772446407ccd5f1f30e8db2b87965be6ebb 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class IntegerMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public IntegerMemberValue(short cvi)
+   public IntegerMemberValue(short cvi, ConstPool cp)
    {
-      tag = 'I';
+      super('I', cp);
       this.const_value_index = cvi;
    }
 
+   public IntegerMemberValue(ConstPool cp)
+   {
+      super('I', cp);
+      setValue(0);
+   }
+
    public int getValue()
    {
       return cp.getIntegerInfo(const_value_index);
@@ -45,4 +53,8 @@ public class IntegerMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitIntegerMemberValue(this);
+   }
 }
index 2922ed4fe223c38b9b489cc8120b93cb86e3695a..5d27a161af5eb492d9340d184dc674d4725d22d3 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class LongMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public LongMemberValue(short cvi)
+   public LongMemberValue(short cvi, ConstPool cp)
    {
-      tag = 'J';
+      super('J', cp);
       this.const_value_index = cvi;
    }
 
+   public LongMemberValue(ConstPool cp)
+   {
+      super('J', cp);
+      setValue(0);
+   }
+
    public long getValue()
    {
       return cp.getLongInfo(const_value_index);
@@ -44,4 +52,8 @@ public class LongMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitLongMemberValue(this);
+   }
 }
index b75c2f561ce04de7a9c21d3d3ae6b22492cb9c61..e3e7ef254592a5d2f767e37cd01c9ad2d175b930 100644 (file)
@@ -17,7 +17,7 @@ import java.util.LinkedHashMap;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public abstract class MemberValue
@@ -25,12 +25,20 @@ public abstract class MemberValue
    ConstPool cp;
    char tag;
 
+   protected MemberValue(char tag, ConstPool cp)
+   {
+      this.cp = cp;
+      this.tag = tag;
+   }
+
+   public abstract void accept(MemberValueVisitor visitor);
 
    public void write(DataOutputStream dos) throws IOException
    {
       byte btag = (byte)tag;
       dos.writeByte(btag);
    }
+
    public static MemberValue readMemberValue(ConstPool cp, DataInput di) throws java.io.IOException
    {
       byte btag = di.readByte();
@@ -39,40 +47,40 @@ public abstract class MemberValue
       switch (tag)
       {
          case 'B':
-            rtn = new ByteMemberValue(di.readShort());
+            rtn = new ByteMemberValue(di.readShort(), cp);
             break;
          case 'C':
-            rtn = new CharMemberValue(di.readShort());
+            rtn = new CharMemberValue(di.readShort(), cp);
             break;
          case 'D':
-            rtn = new DoubleMemberValue(di.readShort());
+            rtn = new DoubleMemberValue(di.readShort(), cp);
             break;
          case 'F':
-            rtn = new FloatMemberValue(di.readShort());
+            rtn = new FloatMemberValue(di.readShort(), cp);
             break;
          case 'I':
-            rtn = new IntegerMemberValue(di.readShort());
+            rtn = new IntegerMemberValue(di.readShort(), cp);
             break;
          case 'J':
-            rtn = new LongMemberValue(di.readShort());
+            rtn = new LongMemberValue(di.readShort(), cp);
             break;
          case 'S':
-            rtn = new ShortMemberValue(di.readShort());
+            rtn = new ShortMemberValue(di.readShort(), cp);
             break;
          case 'Z':
-            rtn = new BooleanMemberValue(di.readShort());
+            rtn = new BooleanMemberValue(di.readShort(), cp);
             break;
          case 's':
-            rtn = new StringMemberValue(di.readShort());
+            rtn = new StringMemberValue(di.readShort(), cp);
             break;
          case 'e':
-            rtn = new EnumMemberValue(di.readShort(), di.readShort());
+            rtn = new EnumMemberValue(di.readShort(), di.readShort(), cp);
             break;
          case 'c':
-            rtn = new ClassMemberValue(di.readShort());
+            rtn = new ClassMemberValue(di.readShort(), cp);
             break;
          case '@':
-            rtn = new AnnotationMemberValue(AnnotationInfo.readAnnotationInfo(cp, di));
+            rtn = new AnnotationMemberValue(AnnotationInfo.readAnnotationInfo(cp, di), cp);
             break;
          case '[':
             rtn = ArrayMemberValue.readArray(cp, di);
diff --git a/src/main/javassist/bytecode/annotation/MemberValueVisitor.java b/src/main/javassist/bytecode/annotation/MemberValueVisitor.java
new file mode 100644 (file)
index 0000000..3f20fe0
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * JBoss, the OpenSource J2EE webOS
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
+package javassist.bytecode.annotation;
+
+/**
+ * Comment
+ *
+ * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
+ * @version $Revision: 1.1 $
+ *
+ **/
+public interface MemberValueVisitor
+{
+   public void visitAnnotationMemberValue(AnnotationMemberValue node);
+   public void visitArrayMemberValue(ArrayMemberValue node);
+   public void visitBooleanMemberValue(BooleanMemberValue node);
+   public void visitByteMemberValue(ByteMemberValue node);
+   public void visitCharMemberValue(CharMemberValue node);
+   public void visitDoubleMemberValue(DoubleMemberValue node);
+   public void visitEnumMemberValue(EnumMemberValue node);
+   public void visitFloatMemberValue(FloatMemberValue node);
+   public void visitIntegerMemberValue(IntegerMemberValue node);
+   public void visitLongMemberValue(LongMemberValue node);
+   public void visitShortMemberValue(ShortMemberValue node);
+   public void visitStringMemberValue(StringMemberValue node);
+   public void visitClassMemberValue(ClassMemberValue node);
+}
index 82aa17eda033adf98d0e387f188d4981bbcceb84..2a5b0505ba922f86bb4c0290838605e7275f1ddd 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class ShortMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public ShortMemberValue(short cvi)
+   public ShortMemberValue(short cvi, ConstPool cp)
    {
-      tag = 'S';
+      super('S', cp);
       this.const_value_index = cvi;
    }
 
+   public ShortMemberValue(ConstPool cp)
+   {
+      super('S', cp);
+      setValue((short)0);
+   }
+
    public short getValue()
    {
       return (short)cp.getIntegerInfo(const_value_index);
@@ -44,4 +52,8 @@ public class ShortMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitShortMemberValue(this);
+   }
 }
index 54cfa43855546cef5fb3a0d162189eee3871ea08..873a5fde137becf8daeeaeab070fa31c8d9f85ad 100644 (file)
@@ -6,6 +6,8 @@
  */
 package javassist.bytecode.annotation;
 
+import javassist.bytecode.ConstPool;
+
 import java.io.DataOutputStream;
 import java.io.IOException;
 
@@ -13,19 +15,25 @@ import java.io.IOException;
  * Comment
  *
  * @author <a href="mailto:bill@jboss.org">Bill Burke</a>
- * @version $Revision: 1.1 $
+ * @version $Revision: 1.2 $
  *
  **/
 public class StringMemberValue extends MemberValue
 {
    short const_value_index;
 
-   public StringMemberValue(short cvi)
+   public StringMemberValue(short cvi, ConstPool cp)
    {
-      tag = 's';
+      super('s', cp);
       this.const_value_index = cvi;
    }
 
+   public StringMemberValue(ConstPool cp)
+   {
+      super('s', cp);
+      setValue("");
+   }
+
    public String getValue()
    {
       return cp.getUtf8Info(const_value_index);
@@ -44,4 +52,8 @@ public class StringMemberValue extends MemberValue
       super.write(dos);
       dos.writeShort(const_value_index);
    }
+   public void accept(MemberValueVisitor visitor)
+   {
+      visitor.visitStringMemberValue(this);
+   }
 }