Author: ebourg
Date: Wed Feb 25 09:24:47 2015
New Revision: 1662190
URL: http://svn.apache.org/r1662190
Log:
Move the getAnnotationAttributes and getParameterAnnotationAttributes method
from Utility to AnnotationEntryGen and hide them from the public API
Added:
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/AnnotationGenTestCase.java
- copied, changed from r1654901,
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/AnnotationGenTestCase.java
Removed:
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/AnnotationGenTestCase.java
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleAnnotations.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleParameterAnnotations.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleAnnotations.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleParameterAnnotations.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Utility.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/ClassGen.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/FieldGen.java
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleAnnotations.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleAnnotations.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleAnnotations.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleAnnotations.java
Wed Feb 25 09:24:47 2015
@@ -44,7 +44,7 @@ public class RuntimeInvisibleAnnotations
* @param constant_pool
* Array of constants
*/
- RuntimeInvisibleAnnotations(int name_index, int length, DataInput input,
ConstantPool constant_pool)
+ public RuntimeInvisibleAnnotations(int name_index, int length, DataInput
input, ConstantPool constant_pool)
throws IOException
{
super(Constants.ATTR_RUNTIME_INVISIBLE_ANNOTATIONS, name_index,
length, input, constant_pool, false);
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleParameterAnnotations.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleParameterAnnotations.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleParameterAnnotations.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeInvisibleParameterAnnotations.java
Wed Feb 25 09:24:47 2015
@@ -39,7 +39,7 @@ public class RuntimeInvisibleParameterAn
* @param input Input stream
* @param constant_pool Array of constants
*/
- RuntimeInvisibleParameterAnnotations(int name_index, int length, DataInput
input, ConstantPool constant_pool)
+ public RuntimeInvisibleParameterAnnotations(int name_index, int length,
DataInput input, ConstantPool constant_pool)
throws IOException {
super(Constants.ATTR_RUNTIME_INVISIBLE_PARAMETER_ANNOTATIONS,
name_index, length, input, constant_pool);
}
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleAnnotations.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleAnnotations.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleAnnotations.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleAnnotations.java
Wed Feb 25 09:24:47 2015
@@ -44,7 +44,7 @@ public class RuntimeVisibleAnnotations e
* @param constant_pool
* Array of constants
*/
- RuntimeVisibleAnnotations(int name_index, int length, DataInput input,
ConstantPool constant_pool) throws IOException
+ public RuntimeVisibleAnnotations(int name_index, int length, DataInput
input, ConstantPool constant_pool) throws IOException
{
super(Constants.ATTR_RUNTIME_VISIBLE_ANNOTATIONS, name_index, length,
input, constant_pool, true);
}
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleParameterAnnotations.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleParameterAnnotations.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleParameterAnnotations.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/RuntimeVisibleParameterAnnotations.java
Wed Feb 25 09:24:47 2015
@@ -39,7 +39,7 @@ public class RuntimeVisibleParameterAnno
* @param input Input stream
* @param constant_pool Array of constants
*/
- RuntimeVisibleParameterAnnotations(int name_index, int length, DataInput
input, ConstantPool constant_pool)
+ public RuntimeVisibleParameterAnnotations(int name_index, int length,
DataInput input, ConstantPool constant_pool)
throws IOException {
super(Constants.ATTR_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS,
name_index, length, input, constant_pool);
}
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Utility.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Utility.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Utility.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/classfile/Utility.java
Wed Feb 25 09:24:47 2015
@@ -13,16 +13,14 @@
* 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.apache.bcel.classfile;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.CharArrayReader;
import java.io.CharArrayWriter;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
import java.io.FilterReader;
import java.io.FilterWriter;
import java.io.IOException;
@@ -37,8 +35,6 @@ import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.bcel.Constants;
-import org.apache.bcel.generic.AnnotationEntryGen;
-import org.apache.bcel.generic.ConstantPoolGen;
import org.apache.bcel.util.ByteSequence;
/**
@@ -1455,172 +1451,4 @@ public abstract class Utility {
return buf.toString();
}
-
- /**
- * Converts a list of AnnotationGen objects into a set of attributes
- * that can be attached to the class file.
- *
- * @param cp The constant pool gen where we can create the necessary name
refs
- * @param vec A list of AnnotationGen objects
- */
- public static Attribute[] getAnnotationAttributes(ConstantPoolGen
cp,List<AnnotationEntryGen> vec) {
-
- if (vec.isEmpty()) {
- return new Attribute[0];
- }
-
- try {
- int countVisible = 0;
- int countInvisible = 0;
-
- // put the annotations in the right output stream
- for (AnnotationEntryGen a : vec) {
- if (a.isRuntimeVisible()) {
- countVisible++;
- } else {
- countInvisible++;
- }
- }
-
- ByteArrayOutputStream rvaBytes = new ByteArrayOutputStream();
- ByteArrayOutputStream riaBytes = new ByteArrayOutputStream();
- DataOutputStream rvaDos = new DataOutputStream(rvaBytes);
- DataOutputStream riaDos = new DataOutputStream(riaBytes);
-
- rvaDos.writeShort(countVisible);
- riaDos.writeShort(countInvisible);
-
- // put the annotations in the right output stream
- for (AnnotationEntryGen a : vec) {
- if (a.isRuntimeVisible()) {
- a.dump(rvaDos);
- } else {
- a.dump(riaDos);
- }
- }
-
- rvaDos.close();
- riaDos.close();
-
- byte[] rvaData = rvaBytes.toByteArray();
- byte[] riaData = riaBytes.toByteArray();
-
- int rvaIndex = -1;
- int riaIndex = -1;
-
- if (rvaData.length>2) {
- rvaIndex = cp.addUtf8("RuntimeVisibleAnnotations");
- }
- if (riaData.length>2) {
- riaIndex = cp.addUtf8("RuntimeInvisibleAnnotations");
- }
-
- List<Attribute> newAttributes = new ArrayList<Attribute>();
- if (rvaData.length>2) {
-
- newAttributes.add(
- new RuntimeVisibleAnnotations(rvaIndex,rvaData.length,new
DataInputStream(new ByteArrayInputStream(rvaData)),cp.getConstantPool()));
- }
- if (riaData.length>2) {
- newAttributes.add(
- new RuntimeInvisibleAnnotations(riaIndex,riaData.length,new
DataInputStream(new ByteArrayInputStream(riaData)),cp.getConstantPool()));
- }
-
- return newAttributes.toArray(new Attribute[newAttributes.size()]);
- } catch (IOException e) {
- System.err.println("IOException whilst processing annotations");
- e.printStackTrace();
- }
- return null;
- }
-
-
- /**
- * Annotations against a class are stored in one of four attribute kinds:
- * - RuntimeVisibleParameterAnnotations
- * - RuntimeInvisibleParameterAnnotations
- */
- public static Attribute[] getParameterAnnotationAttributes(
- ConstantPoolGen cp,
- List<AnnotationEntryGen>[] /*Array of lists, array size depends on
#params */vec)
- {
- int visCount[] = new int[vec.length];
- int totalVisCount = 0;
- int invisCount[] = new int[vec.length];
- int totalInvisCount = 0;
- try {
- for (int i = 0; i < vec.length; i++) {
- if (vec[i] != null) {
- for (AnnotationEntryGen element : vec[i]) {
- if (element.isRuntimeVisible()) {
- visCount[i]++;
- totalVisCount++;
- }
- else {
- invisCount[i]++;
- totalInvisCount++;
- }
- }
- }
- }
- // Lets do the visible ones
- ByteArrayOutputStream rvaBytes = new ByteArrayOutputStream();
- DataOutputStream rvaDos = new DataOutputStream(rvaBytes);
- rvaDos.writeByte(vec.length); // First goes number of parameters
- for (int i = 0; i < vec.length; i++) {
- rvaDos.writeShort(visCount[i]);
- if (visCount[i] > 0) {
- for (AnnotationEntryGen element : vec[i]) {
- if (element.isRuntimeVisible()) {
- element.dump(rvaDos);
- }
- }
- }
- }
- rvaDos.close();
- // Lets do the invisible ones
- ByteArrayOutputStream riaBytes = new ByteArrayOutputStream();
- DataOutputStream riaDos = new DataOutputStream(riaBytes);
- riaDos.writeByte(vec.length); // First goes number of parameters
- for (int i = 0; i < vec.length; i++) {
- riaDos.writeShort(invisCount[i]);
- if (invisCount[i] > 0) {
- for (AnnotationEntryGen element : vec[i]) {
- if (!element.isRuntimeVisible()) {
- element.dump(riaDos);
- }
- }
- }
- }
- riaDos.close();
- byte[] rvaData = rvaBytes.toByteArray();
- byte[] riaData = riaBytes.toByteArray();
- int rvaIndex = -1;
- int riaIndex = -1;
- if (totalVisCount > 0) {
- rvaIndex = cp.addUtf8("RuntimeVisibleParameterAnnotations");
- }
- if (totalInvisCount > 0) {
- riaIndex = cp.addUtf8("RuntimeInvisibleParameterAnnotations");
- }
- List<Attribute> newAttributes = new ArrayList<Attribute>();
- if (totalVisCount > 0) {
- newAttributes
- .add(new RuntimeVisibleParameterAnnotations(rvaIndex,
- rvaData.length, new DataInputStream(new
ByteArrayInputStream(rvaData)), cp.getConstantPool()));
- }
- if (totalInvisCount > 0) {
- newAttributes
- .add(new RuntimeInvisibleParameterAnnotations(riaIndex,
- riaData.length, new DataInputStream(new
ByteArrayInputStream(riaData)), cp.getConstantPool()));
- }
- return newAttributes.toArray(new Attribute[newAttributes.size()]);
- }
- catch (IOException e) {
- System.err
- .println("IOException whilst processing parameter
annotations");
- e.printStackTrace();
- }
- return null;
- }
}
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/AnnotationEntryGen.java
Wed Feb 25 09:24:47 2015
@@ -17,21 +17,28 @@
*/
package org.apache.bcel.generic;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.io.DataInput;
+import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.bcel.classfile.AnnotationEntry;
+import org.apache.bcel.classfile.Attribute;
import org.apache.bcel.classfile.ConstantUtf8;
import org.apache.bcel.classfile.ElementValuePair;
+import org.apache.bcel.classfile.RuntimeInvisibleAnnotations;
+import org.apache.bcel.classfile.RuntimeInvisibleParameterAnnotations;
+import org.apache.bcel.classfile.RuntimeVisibleAnnotations;
+import org.apache.bcel.classfile.RuntimeVisibleParameterAnnotations;
/**
* @since 6.0
*/
-public class AnnotationEntryGen
-{
+public class AnnotationEntryGen {
private int typeIndex;
private List<ElementValuePairGen> evs;
@@ -49,15 +56,11 @@ public class AnnotationEntryGen
* and the visibility.
*/
public AnnotationEntryGen(AnnotationEntry a, ConstantPoolGen cpool,
- boolean copyPoolEntries)
- {
+ boolean copyPoolEntries) {
this.cpool = cpool;
- if (copyPoolEntries)
- {
+ if (copyPoolEntries) {
typeIndex = cpool.addUtf8(a.getAnnotationType());
- }
- else
- {
+ } else {
typeIndex = a.getAnnotationTypeIndex();
}
isRuntimeVisible = a.isRuntimeVisible();
@@ -65,26 +68,22 @@ public class AnnotationEntryGen
}
private List<ElementValuePairGen> copyValues(ElementValuePair[] in,
ConstantPoolGen cpool,
- boolean copyPoolEntries)
- {
+ boolean copyPoolEntries) {
List<ElementValuePairGen> out = new ArrayList<ElementValuePairGen>();
- for (ElementValuePair nvp : in)
- {
+ for (ElementValuePair nvp : in) {
out.add(new ElementValuePairGen(nvp, cpool, copyPoolEntries));
}
return out;
}
- private AnnotationEntryGen(ConstantPoolGen cpool)
- {
+ private AnnotationEntryGen(ConstantPoolGen cpool) {
this.cpool = cpool;
}
/**
* Retrieve an immutable version of this AnnotationGen
*/
- public AnnotationEntry getAnnotation()
- {
+ public AnnotationEntry getAnnotation() {
AnnotationEntry a = new AnnotationEntry(typeIndex,
cpool.getConstantPool(),
isRuntimeVisible);
for (ElementValuePairGen element : evs) {
@@ -94,9 +93,8 @@ public class AnnotationEntryGen
}
public AnnotationEntryGen(ObjectType type,
- List<ElementValuePairGen> elements, boolean vis,
- ConstantPoolGen cpool)
- {
+ List<ElementValuePairGen> elements, boolean vis,
+ ConstantPoolGen cpool) {
this.cpool = cpool;
this.typeIndex = cpool.addUtf8(type.getSignature());
evs = elements;
@@ -104,13 +102,11 @@ public class AnnotationEntryGen
}
public static AnnotationEntryGen read(DataInput dis,
- ConstantPoolGen cpool, boolean b) throws IOException
- {
+ ConstantPoolGen cpool, boolean b)
throws IOException {
AnnotationEntryGen a = new AnnotationEntryGen(cpool);
a.typeIndex = dis.readUnsignedShort();
int elemValuePairCount = dis.readUnsignedShort();
- for (int i = 0; i < elemValuePairCount; i++)
- {
+ for (int i = 0; i < elemValuePairCount; i++) {
int nidx = dis.readUnsignedShort();
a.addElementNameValuePair(new ElementValuePairGen(nidx,
ElementValueGen.readElementValue(dis, cpool), cpool));
@@ -119,58 +115,49 @@ public class AnnotationEntryGen
return a;
}
- public void dump(DataOutputStream dos) throws IOException
- {
+ public void dump(DataOutputStream dos) throws IOException {
dos.writeShort(typeIndex); // u2 index of type name in cpool
dos.writeShort(evs.size()); // u2 element_value pair count
- for (ElementValuePairGen envp : evs)
- {
+ for (ElementValuePairGen envp : evs) {
envp.dump(dos);
}
}
- public void addElementNameValuePair(ElementValuePairGen evp)
- {
+ public void addElementNameValuePair(ElementValuePairGen evp) {
if (evs == null) {
evs = new ArrayList<ElementValuePairGen>();
}
evs.add(evp);
}
- public int getTypeIndex()
- {
+ public int getTypeIndex() {
return typeIndex;
}
- public final String getTypeSignature()
- {
+ public final String getTypeSignature() {
// ConstantClass c = (ConstantClass)cpool.getConstant(typeIndex);
ConstantUtf8 utf8 = (ConstantUtf8) cpool
.getConstant(typeIndex/* c.getNameIndex() */);
return utf8.getBytes();
}
- public final String getTypeName()
- {
+ public final String getTypeName() {
return getTypeSignature();// BCELBUG: Should I use this instead?
- //
Utility.signatureToString(getTypeSignature());
+ // Utility.signatureToString(getTypeSignature());
}
/**
* Returns list of ElementNameValuePair objects
*/
- public List<ElementValuePairGen> getValues()
- {
+ public List<ElementValuePairGen> getValues() {
return evs;
}
@Override
- public String toString()
- {
+ public String toString() {
StringBuilder s = new StringBuilder(32);
s.append("AnnotationGen:[" + getTypeName() + " #" + evs.size() + " {");
- for (int i = 0; i < evs.size(); i++)
- {
+ for (int i = 0; i < evs.size(); i++) {
s.append(evs.get(i));
if (i + 1 < evs.size()) {
s.append(",");
@@ -180,12 +167,10 @@ public class AnnotationEntryGen
return s.toString();
}
- public String toShortString()
- {
+ public String toShortString() {
StringBuilder s = new StringBuilder();
s.append("@" + getTypeName() + "(");
- for (int i = 0; i < evs.size(); i++)
- {
+ for (int i = 0; i < evs.size(); i++) {
s.append(evs.get(i));
if (i + 1 < evs.size()) {
s.append(",");
@@ -195,13 +180,176 @@ public class AnnotationEntryGen
return s.toString();
}
- private void isRuntimeVisible(boolean b)
- {
+ private void isRuntimeVisible(boolean b) {
isRuntimeVisible = b;
}
- public boolean isRuntimeVisible()
- {
+ public boolean isRuntimeVisible() {
return isRuntimeVisible;
}
+
+
+ /**
+ * Converts a list of AnnotationGen objects into a set of attributes
+ * that can be attached to the class file.
+ *
+ * @param cp The constant pool gen where we can create the necessary name
refs
+ * @param vec A list of AnnotationGen objects
+ */
+ static Attribute[] getAnnotationAttributes(ConstantPoolGen cp,
List<AnnotationEntryGen> vec) {
+ if (vec.isEmpty()) {
+ return new Attribute[0];
+ }
+
+ try {
+ int countVisible = 0;
+ int countInvisible = 0;
+
+ // put the annotations in the right output stream
+ for (AnnotationEntryGen a : vec) {
+ if (a.isRuntimeVisible()) {
+ countVisible++;
+ } else {
+ countInvisible++;
+ }
+ }
+
+ ByteArrayOutputStream rvaBytes = new ByteArrayOutputStream();
+ ByteArrayOutputStream riaBytes = new ByteArrayOutputStream();
+ DataOutputStream rvaDos = new DataOutputStream(rvaBytes);
+ DataOutputStream riaDos = new DataOutputStream(riaBytes);
+
+ rvaDos.writeShort(countVisible);
+ riaDos.writeShort(countInvisible);
+
+ // put the annotations in the right output stream
+ for (AnnotationEntryGen a : vec) {
+ if (a.isRuntimeVisible()) {
+ a.dump(rvaDos);
+ } else {
+ a.dump(riaDos);
+ }
+ }
+
+ rvaDos.close();
+ riaDos.close();
+
+ byte[] rvaData = rvaBytes.toByteArray();
+ byte[] riaData = riaBytes.toByteArray();
+
+ int rvaIndex = -1;
+ int riaIndex = -1;
+
+ if (rvaData.length > 2) {
+ rvaIndex = cp.addUtf8("RuntimeVisibleAnnotations");
+ }
+ if (riaData.length > 2) {
+ riaIndex = cp.addUtf8("RuntimeInvisibleAnnotations");
+ }
+
+ List<Attribute> newAttributes = new ArrayList<Attribute>();
+ if (rvaData.length > 2) {
+ newAttributes.add(
+ new RuntimeVisibleAnnotations(rvaIndex,
rvaData.length, new DataInputStream(new ByteArrayInputStream(rvaData)),
cp.getConstantPool()));
+ }
+ if (riaData.length > 2) {
+ newAttributes.add(
+ new RuntimeInvisibleAnnotations(riaIndex,
riaData.length, new DataInputStream(new ByteArrayInputStream(riaData)),
cp.getConstantPool()));
+ }
+
+ return newAttributes.toArray(new Attribute[newAttributes.size()]);
+ } catch (IOException e) {
+ System.err.println("IOException whilst processing annotations");
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+
+ /**
+ * Annotations against a class are stored in one of four attribute kinds:
+ * - RuntimeVisibleParameterAnnotations
+ * - RuntimeInvisibleParameterAnnotations
+ */
+ static Attribute[] getParameterAnnotationAttributes(
+ ConstantPoolGen cp,
+ List<AnnotationEntryGen>[] /*Array of lists, array size depends on
#params */vec) {
+ int visCount[] = new int[vec.length];
+ int totalVisCount = 0;
+ int invisCount[] = new int[vec.length];
+ int totalInvisCount = 0;
+ try {
+ for (int i = 0; i < vec.length; i++) {
+ if (vec[i] != null) {
+ for (AnnotationEntryGen element : vec[i]) {
+ if (element.isRuntimeVisible()) {
+ visCount[i]++;
+ totalVisCount++;
+ } else {
+ invisCount[i]++;
+ totalInvisCount++;
+ }
+ }
+ }
+ }
+ // Lets do the visible ones
+ ByteArrayOutputStream rvaBytes = new ByteArrayOutputStream();
+ DataOutputStream rvaDos = new DataOutputStream(rvaBytes);
+ rvaDos.writeByte(vec.length); // First goes number of parameters
+ for (int i = 0; i < vec.length; i++) {
+ rvaDos.writeShort(visCount[i]);
+ if (visCount[i] > 0) {
+ for (AnnotationEntryGen element : vec[i]) {
+ if (element.isRuntimeVisible()) {
+ element.dump(rvaDos);
+ }
+ }
+ }
+ }
+ rvaDos.close();
+ // Lets do the invisible ones
+ ByteArrayOutputStream riaBytes = new ByteArrayOutputStream();
+ DataOutputStream riaDos = new DataOutputStream(riaBytes);
+ riaDos.writeByte(vec.length); // First goes number of parameters
+ for (int i = 0; i < vec.length; i++) {
+ riaDos.writeShort(invisCount[i]);
+ if (invisCount[i] > 0) {
+ for (AnnotationEntryGen element : vec[i]) {
+ if (!element.isRuntimeVisible()) {
+ element.dump(riaDos);
+ }
+ }
+ }
+ }
+ riaDos.close();
+ byte[] rvaData = rvaBytes.toByteArray();
+ byte[] riaData = riaBytes.toByteArray();
+ int rvaIndex = -1;
+ int riaIndex = -1;
+ if (totalVisCount > 0) {
+ rvaIndex = cp.addUtf8("RuntimeVisibleParameterAnnotations");
+ }
+ if (totalInvisCount > 0) {
+ riaIndex = cp.addUtf8("RuntimeInvisibleParameterAnnotations");
+ }
+ List<Attribute> newAttributes = new ArrayList<Attribute>();
+ if (totalVisCount > 0) {
+ newAttributes
+ .add(new RuntimeVisibleParameterAnnotations(rvaIndex,
+ rvaData.length, new DataInputStream(new
ByteArrayInputStream(rvaData)), cp.getConstantPool()));
+ }
+ if (totalInvisCount > 0) {
+ newAttributes
+ .add(new RuntimeInvisibleParameterAnnotations(riaIndex,
+ riaData.length, new DataInputStream(new
ByteArrayInputStream(riaData)), cp.getConstantPool()));
+ }
+ return newAttributes.toArray(new Attribute[newAttributes.size()]);
+ } catch (IOException e) {
+ System.err
+ .println("IOException whilst processing parameter
annotations");
+ e.printStackTrace();
+ }
+ return null;
+ }
+
}
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/ClassGen.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/ClassGen.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/ClassGen.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/ClassGen.java
Wed Feb 25 09:24:47 2015
@@ -204,7 +204,7 @@ public class ClassGen extends AccessFlag
attributes = getAttributes();
} else {
// TODO: Sometime later, trash any attributes called
'RuntimeVisibleAnnotations' or 'RuntimeInvisibleAnnotations'
- Attribute[] annAttributes =
Utility.getAnnotationAttributes(cp,annotation_vec);
+ Attribute[] annAttributes =
AnnotationEntryGen.getAnnotationAttributes(cp,annotation_vec);
attributes = new
Attribute[attribute_vec.size()+annAttributes.length];
attribute_vec.toArray(attributes);
System.arraycopy(annAttributes,0,attributes,attribute_vec.size(),annAttributes.length);
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/FieldGen.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/FieldGen.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/FieldGen.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/FieldGen.java
Wed Feb 25 09:24:47 2015
@@ -226,7 +226,7 @@ public class FieldGen extends FieldGenOr
}
private void addAnnotationsAsAttribute(ConstantPoolGen cp) {
- Attribute[] attrs =
Utility.getAnnotationAttributes(cp,annotation_vec);
+ Attribute[] attrs =
AnnotationEntryGen.getAnnotationAttributes(cp,annotation_vec);
for (Attribute attr : attrs) {
addAttribute(attr);
}
Modified:
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java?rev=1662190&r1=1662189&r2=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
(original)
+++
commons/proper/bcel/trunk/src/main/java/org/apache/bcel/generic/MethodGen.java
Wed Feb 25 09:24:47 2015
@@ -609,7 +609,7 @@ public class MethodGen extends FieldGenO
}
public void addAnnotationsAsAttribute(ConstantPoolGen cp) {
- Attribute[] attrs =
Utility.getAnnotationAttributes(cp,annotation_vec);
+ Attribute[] attrs =
AnnotationEntryGen.getAnnotationAttributes(cp,annotation_vec);
for (Attribute attr : attrs) {
addAttribute(attr);
}
@@ -619,7 +619,7 @@ public class MethodGen extends FieldGenO
if (!hasParameterAnnotations) {
return;
}
- Attribute[] attrs =
Utility.getParameterAnnotationAttributes(cp,param_annotations);
+ Attribute[] attrs =
AnnotationEntryGen.getParameterAnnotationAttributes(cp,param_annotations);
if (attrs!=null) {
for (Attribute attr : attrs) {
addAttribute(attr);
Copied:
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/AnnotationGenTestCase.java
(from r1654901,
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/AnnotationGenTestCase.java)
URL:
http://svn.apache.org/viewvc/commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/AnnotationGenTestCase.java?p2=commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/AnnotationGenTestCase.java&p1=commons/proper/bcel/trunk/src/test/java/org/apache/bcel/AnnotationGenTestCase.java&r1=1654901&r2=1662190&rev=1662190&view=diff
==============================================================================
---
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/AnnotationGenTestCase.java
(original)
+++
commons/proper/bcel/trunk/src/test/java/org/apache/bcel/generic/AnnotationGenTestCase.java
Wed Feb 25 09:24:47 2015
@@ -13,10 +13,9 @@
* 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.apache.bcel;
+package org.apache.bcel.generic;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
@@ -26,18 +25,13 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
+
+import org.apache.bcel.AbstractTestCase;
+import org.apache.bcel.Constants;
import org.apache.bcel.classfile.Annotations;
import org.apache.bcel.classfile.Attribute;
import org.apache.bcel.classfile.RuntimeInvisibleAnnotations;
import org.apache.bcel.classfile.RuntimeVisibleAnnotations;
-import org.apache.bcel.classfile.Utility;
-import org.apache.bcel.generic.AnnotationEntryGen;
-import org.apache.bcel.generic.ClassGen;
-import org.apache.bcel.generic.ConstantPoolGen;
-import org.apache.bcel.generic.ElementValueGen;
-import org.apache.bcel.generic.ElementValuePairGen;
-import org.apache.bcel.generic.ObjectType;
-import org.apache.bcel.generic.SimpleElementValueGen;
public class AnnotationGenTestCase extends AbstractTestCase
{
@@ -98,7 +92,7 @@ public class AnnotationGenTestCase exten
AnnotationEntryGen a = new AnnotationEntryGen(t, elements, true, cp);
Vector<AnnotationEntryGen> v = new Vector<AnnotationEntryGen>();
v.add(a);
- Attribute[] attributes = Utility.getAnnotationAttributes(cp, v);
+ Attribute[] attributes =
AnnotationEntryGen.getAnnotationAttributes(cp, v);
boolean foundRV = false;
for (Attribute attribute : attributes) {
if (attribute instanceof RuntimeVisibleAnnotations)
@@ -113,7 +107,7 @@ public class AnnotationGenTestCase exten
AnnotationEntryGen a2 = new AnnotationEntryGen(t, elements, false, cp);
Vector<AnnotationEntryGen> v2 = new Vector<AnnotationEntryGen>();
v2.add(a2);
- Attribute[] attributes2 = Utility.getAnnotationAttributes(cp, v2);
+ Attribute[] attributes2 =
AnnotationEntryGen.getAnnotationAttributes(cp, v2);
boolean foundRIV = false;
for (Attribute attribute : attributes2) {
if (attribute instanceof RuntimeInvisibleAnnotations)