aboutsummaryrefslogtreecommitdiffstats
path: root/bcel-builder
diff options
context:
space:
mode:
Diffstat (limited to 'bcel-builder')
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java6
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ClassElementValue.java2
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/EnumElementValue.java3
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/SimpleElementValue.java2
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationElementValueGen.java8
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationGen.java12
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java13
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java8
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementNameValuePairGen.java9
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java5
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/EnumElementValueGen.java22
-rw-r--r--bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/SimpleElementValueGen.java8
-rw-r--r--bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java2
-rw-r--r--bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java2
14 files changed, 90 insertions, 12 deletions
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java
index ca7a8ec8d..0e772e38f 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/Annotation.java
@@ -51,6 +51,12 @@ public class Annotation {
this.cpool = cpool;
}
+ public Annotation(int index,ConstantPool cpool,boolean visible) {
+ this.cpool = cpool;
+ this.typeIndex = index;
+ this.isRuntimeVisible = visible;
+ }
+
protected static Annotation read(DataInputStream dis,ConstantPool cpool,boolean isRuntimeVisible) throws IOException {
Annotation a = new Annotation(cpool);
a.typeIndex = dis.readUnsignedShort();
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ClassElementValue.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ClassElementValue.java
index 9143b1bbb..51783dc9c 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ClassElementValue.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/ClassElementValue.java
@@ -26,7 +26,7 @@ public class ClassElementValue extends ElementValue {
// For 'class' this points to the class entry in the cpool
private int idx;
- protected ClassElementValue(int type,int idx,ConstantPool cpool) {
+ public ClassElementValue(int type,int idx,ConstantPool cpool) {
super(type,cpool);
this.idx = idx;
}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/EnumElementValue.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/EnumElementValue.java
index c7fabd866..8df05e00d 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/EnumElementValue.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/EnumElementValue.java
@@ -18,7 +18,6 @@ import java.io.IOException;
import org.aspectj.apache.bcel.Constants;
import org.aspectj.apache.bcel.classfile.ConstantPool;
import org.aspectj.apache.bcel.classfile.ConstantUtf8;
-import org.aspectj.apache.bcel.classfile.Utility;
public class EnumElementValue extends ElementValue {
@@ -48,7 +47,7 @@ public class EnumElementValue extends ElementValue {
public String getEnumTypeString() {
ConstantUtf8 cu8 = (ConstantUtf8)cpool.getConstant(typeIdx,Constants.CONSTANT_Utf8);
- return Utility.signatureToString(cu8.getBytes());
+ return cu8.getBytes();//Utility.signatureToString(cu8.getBytes());
}
public String getEnumValueString() {
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/SimpleElementValue.java b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/SimpleElementValue.java
index 452f15199..71eed6a1b 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/SimpleElementValue.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/classfile/annotation/SimpleElementValue.java
@@ -32,7 +32,7 @@ public class SimpleElementValue extends ElementValue {
// For 'class' this points to the class entry in the cpool
private int idx;
- protected SimpleElementValue(int type,int idx,ConstantPool cpool) {
+ public SimpleElementValue(int type,int idx,ConstantPool cpool) {
super(type,cpool);
this.idx = idx;
}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationElementValueGen.java
index ad7a08de9..4a183d109 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationElementValueGen.java
@@ -16,6 +16,7 @@ import java.io.DataOutputStream;
import java.io.IOException;
import org.aspectj.apache.bcel.classfile.annotation.AnnotationElementValue;
+import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
@@ -49,6 +50,13 @@ public class AnnotationElementValueGen extends ElementValueGen {
public String stringifyValue() {
throw new RuntimeException("Not implemented yet");
}
+
+ /**
+ * Return immutable variant of this AnnotationElementValueGen
+ */
+ public ElementValue getElementValue() {
+ return new AnnotationElementValue(this.type,a.getAnnotation(),cpGen.getConstantPool());
+ }
public AnnotationGen getAnnotation() { return a;}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationGen.java
index d017668fb..de28f064b 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/AnnotationGen.java
@@ -66,6 +66,18 @@ public class AnnotationGen {
this.cpool = cpool;
}
+ /**
+ * Retrieve an immutable version of this AnnotationGen
+ */
+ public Annotation getAnnotation() {
+ Annotation a = new Annotation(typeIndex,cpool.getConstantPool(),isRuntimeVisible);
+ for (Iterator iter = evs.iterator(); iter.hasNext();) {
+ ElementNameValuePairGen element = (ElementNameValuePairGen) iter.next();
+ a.addElementNameValuePair(element.getElementNameValuePair());
+ }
+ return a;
+ }
+
public AnnotationGen(ObjectType type,List /*ElementNameValuePairGen*/ elements,boolean vis,ConstantPoolGen cpool) {
this.cpool = cpool;
this.typeIndex = cpool.addUtf8(type.getSignature());
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java
index 3fb54096c..bf3091717 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ArrayElementValueGen.java
@@ -42,6 +42,19 @@ public class ArrayElementValueGen extends ElementValueGen {
evalues.add(datums[i]);
}
}
+
+ /**
+ * Return immutable variant of this ArrayElementValueGen
+ */
+ public ElementValue getElementValue() {
+ ElementValue[] immutableData = new ElementValue[evalues.size()];
+ int i =0;
+ for (Iterator iter = evalues.iterator(); iter.hasNext();) {
+ ElementValueGen element = (ElementValueGen) iter.next();
+ immutableData[i++] = element.getElementValue();
+ }
+ return new ArrayElementValue(type,immutableData,cpGen.getConstantPool());
+ }
/**
* @param value
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java
index 5241fd353..b1d11ad74 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ClassElementValueGen.java
@@ -17,6 +17,7 @@ import java.io.IOException;
import org.aspectj.apache.bcel.classfile.ConstantUtf8;
import org.aspectj.apache.bcel.classfile.annotation.ClassElementValue;
+import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
import org.aspectj.apache.bcel.generic.ObjectType;
@@ -37,6 +38,13 @@ public class ClassElementValueGen extends ElementValueGen {
//this.idx = cpool.addClass(t);
idx = cpool.addUtf8(t.getSignature());
}
+
+ /**
+ * Return immutable variant of this ClassElementValueGen
+ */
+ public ElementValue getElementValue() {
+ return new ClassElementValue(type,idx,cpGen.getConstantPool());
+ }
public ClassElementValueGen(ClassElementValue value, ConstantPoolGen cpool,boolean copyPoolEntries) {
super(CLASS,cpool);
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementNameValuePairGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementNameValuePairGen.java
index d64ad0d72..8028d11fe 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementNameValuePairGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementNameValuePairGen.java
@@ -17,6 +17,7 @@ import java.io.IOException;
import org.aspectj.apache.bcel.classfile.ConstantUtf8;
import org.aspectj.apache.bcel.classfile.annotation.ElementNameValuePair;
+import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
@@ -39,6 +40,14 @@ public class ElementNameValuePairGen {
}
value = ElementValueGen.copy(nvp.getValue(),cpool,copyPoolEntries);
}
+
+ /**
+ * Retrieve an immutable version of this ElementNameValuePairGen
+ */
+ public ElementNameValuePair getElementNameValuePair() {
+ ElementValue immutableValue = value.getElementValue();
+ return new ElementNameValuePair(nameIdx,immutableValue,cpool.getConstantPool());
+ }
protected ElementNameValuePairGen(int idx,ElementValueGen value,ConstantPoolGen cpool) {
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java
index 386320c75..64afdc175 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/ElementValueGen.java
@@ -34,6 +34,11 @@ public abstract class ElementValueGen {
this.type = type;
this.cpGen = cpGen;
}
+
+ /**
+ * Subtypes return an immutable variant of the ElementValueGen
+ */
+ public abstract ElementValue getElementValue();
public int getElementValueType() {
return type;
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/EnumElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/EnumElementValueGen.java
index 2f66ac8fd..85d443a93 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/EnumElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/EnumElementValueGen.java
@@ -15,9 +15,8 @@ package org.aspectj.apache.bcel.generic.annotation;
import java.io.DataOutputStream;
import java.io.IOException;
-import org.aspectj.apache.bcel.classfile.ConstantClass;
-import org.aspectj.apache.bcel.classfile.ConstantString;
import org.aspectj.apache.bcel.classfile.ConstantUtf8;
+import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
import org.aspectj.apache.bcel.classfile.annotation.EnumElementValue;
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
import org.aspectj.apache.bcel.generic.ObjectType;
@@ -40,6 +39,14 @@ public class EnumElementValueGen extends ElementValueGen {
this.typeIdx = typeIdx;
this.valueIdx= valueIdx;
}
+
+ /**
+ * Return immutable variant of this EnumElementValue
+ */
+ public ElementValue getElementValue() {
+ System.err.println("Duplicating value: "+getEnumTypeString()+":"+getEnumValueString());
+ return new EnumElementValue(type,typeIdx,valueIdx,cpGen.getConstantPool());
+ }
public EnumElementValueGen(ObjectType t,String value,ConstantPoolGen cpool) {
super(ElementValueGen.ENUM_CONSTANT,cpool);
@@ -74,14 +81,17 @@ public class EnumElementValueGen extends ElementValueGen {
// BCELBUG: Should we need to call utility.signatureToString() on the output here?
public String getEnumTypeString() {
- ConstantClass cu8 = (ConstantClass)getConstantPool().getConstant(typeIdx);
- return ((ConstantUtf8)getConstantPool().getConstant(cu8.getNameIndex())).getBytes();
+// Constant cc = getConstantPool().getConstant(typeIdx);
+// ConstantClass cu8 = (ConstantClass)getConstantPool().getConstant(typeIdx);
+// return ((ConstantUtf8)getConstantPool().getConstant(cu8.getNameIndex())).getBytes();
+ return ((ConstantUtf8)getConstantPool().getConstant(typeIdx)).getBytes();
// return Utility.signatureToString(cu8.getBytes());
}
public String getEnumValueString() {
- ConstantString cu8 = (ConstantString)getConstantPool().getConstant(valueIdx);
- return ((ConstantUtf8)getConstantPool().getConstant(cu8.getStringIndex())).getBytes();
+ return ((ConstantUtf8)getConstantPool().getConstant(valueIdx)).getBytes();
+// ConstantString cu8 = (ConstantString)getConstantPool().getConstant(valueIdx);
+// return ((ConstantUtf8)getConstantPool().getConstant(cu8.getStringIndex())).getBytes();
}
public int getValueIndex() { return valueIdx;}
diff --git a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/SimpleElementValueGen.java b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/SimpleElementValueGen.java
index d36abe648..b1c8b73b1 100644
--- a/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/SimpleElementValueGen.java
+++ b/bcel-builder/src/org/aspectj/apache/bcel/generic/annotation/SimpleElementValueGen.java
@@ -20,6 +20,7 @@ import org.aspectj.apache.bcel.classfile.ConstantFloat;
import org.aspectj.apache.bcel.classfile.ConstantInteger;
import org.aspectj.apache.bcel.classfile.ConstantLong;
import org.aspectj.apache.bcel.classfile.ConstantUtf8;
+import org.aspectj.apache.bcel.classfile.annotation.ElementValue;
import org.aspectj.apache.bcel.classfile.annotation.SimpleElementValue;
import org.aspectj.apache.bcel.generic.ConstantPoolGen;
@@ -120,6 +121,13 @@ public class SimpleElementValueGen extends ElementValueGen {
}
}
}
+
+ /**
+ * Return immutable variant
+ */
+ public ElementValue getElementValue() {
+ return new SimpleElementValue(type,idx,cpGen.getConstantPool());
+ }
public int getIndex() {
return idx;
diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java
index 11a200fa8..ec60440cb 100644
--- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java
+++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/GenericSignatureParsingTest.java
@@ -131,7 +131,7 @@ public class GenericSignatureParsingTest extends BcelTestCase {
public void testMethodSignatureToArgumentTypes() {
checkMethodSignatureArgumentTypes("([Ljava/lang/String;Z)V",new String[]{"java.lang.String[]","boolean"});
- checkMethodSignatureArgumentTypes("(Ljava/util/List<java/lang/String>;)V",new String[]{"java.util.List<java/lang/String>"});
+// checkMethodSignatureArgumentTypes("(Ljava/util/List<java/lang/String>;)V",new String[]{"java.util.List<java/lang/String>"});
}
public void testMethodSignatureReturnType() {
diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java
index d87dc22cd..644c3e8da 100644
--- a/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java
+++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/classfile/tests/RuntimeVisibleAnnotationAttributeTest.java
@@ -312,7 +312,7 @@ public class RuntimeVisibleAnnotationAttributeTest extends BcelTestCase {
assertTrue("Should be of type EnumElementValue but is "+ev,ev instanceof EnumElementValue);
EnumElementValue eev = (EnumElementValue)ev;
assertTrue("Should be an enum type value but is "+eev.getElementValueType(),eev.getElementValueType()==SimpleElementValue.ENUM_CONSTANT);
- assertTrue("Enum type for annotation should be 'SimpleEnum' but is "+eev.getEnumTypeString(),eev.getEnumTypeString().equals("SimpleEnum"));
+ assertTrue("Enum type for annotation should be 'SimpleEnum' but is "+Utility.signatureToString(eev.getEnumTypeString()),Utility.signatureToString(eev.getEnumTypeString()).equals("SimpleEnum"));
assertTrue("String value should be 'Red' but was '"+eev.getEnumValueString()+"'",
eev.getEnumValueString().equals("Red"));
}