aboutsummaryrefslogtreecommitdiffstats
path: root/bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java
diff options
context:
space:
mode:
authorAndy Clement <aclement@pivotal.io>2017-10-20 12:33:19 -0700
committerAndy Clement <aclement@pivotal.io>2017-10-20 12:33:19 -0700
commit5e86980fa0248cd94012416eda7fee581245f52a (patch)
treed44f5cc0f71aeb519275f205810db6b643420f83 /bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java
parent62024412b0efe3fe153cf02e460785d7137876ba (diff)
downloadaspectj-5e86980fa0248cd94012416eda7fee581245f52a.tar.gz
aspectj-5e86980fa0248cd94012416eda7fee581245f52a.zip
rebuilt internal dependencies
Diffstat (limited to 'bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java')
-rw-r--r--bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java84
1 files changed, 84 insertions, 0 deletions
diff --git a/bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java b/bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java
new file mode 100644
index 000000000..9fef2fa6c
--- /dev/null
+++ b/bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java
@@ -0,0 +1,84 @@
+import java.io.File;
+import java.io.FileInputStream;
+
+import org.aspectj.apache.bcel.classfile.Attribute;
+import org.aspectj.apache.bcel.classfile.ClassParser;
+import org.aspectj.apache.bcel.classfile.Field;
+import org.aspectj.apache.bcel.classfile.JavaClass;
+import org.aspectj.apache.bcel.classfile.Method;
+import org.aspectj.apache.bcel.classfile.Unknown;
+import org.aspectj.apache.bcel.classfile.annotation.RuntimeAnnos;
+
+
+public class Play {
+
+ public static void printBytes(byte[] bs) {
+ StringBuilder sb = new StringBuilder("Bytes:"+bs.length+"[");
+ for (int i=0;i<bs.length;i++) {
+ if (i>0) sb.append(" ");
+ sb.append(bs[i]);
+ }
+ sb.append("]");
+ System.out.println(sb);
+ }
+
+ public static void main(String[] args) throws Exception {
+ if (args==null || args.length==0 ) {
+ System.out.println("Specify a file");
+ return;
+ }
+ if (!args[0].endsWith(".class")) {
+ args[0] = args[0]+".class";
+ }
+ FileInputStream fis = new FileInputStream(new File(args[0]));
+ ClassParser cp = new ClassParser(fis,args[0]);
+ JavaClass jc = cp.parse();
+ Attribute[] attributes = jc.getAttributes();
+ printUsefulAttributes(attributes);
+ System.out.println("Fields");
+ Field[] fs = jc.getFields();
+ if (fs!=null) {
+ for (Field f: fs) {
+ System.out.println(f);
+ printUsefulAttributes(f.getAttributes());
+ }
+ }
+ System.out.println("Methods");
+ Method[] ms = jc.getMethods();
+ if (ms!=null) {
+ for (Method m: ms) {
+ System.out.println(m);
+ printUsefulAttributes(m.getAttributes());
+ System.out.println("Code attributes:");
+ printUsefulAttributes(m.getCode().getAttributes());
+ }
+ }
+// Method[] ms = jc.getMethods();
+// for (Method m: ms) {
+// System.out.println("==========");
+// System.out.println("Method: "+m.getName()+" modifiers=0x"+Integer.toHexString(m.getModifiers()));
+// Attribute[] as = m.getAttributes();
+// for (Attribute a: as) {
+// if (a.getName().toLowerCase().contains("synthetic")) {
+// System.out.println("> "+a.getName());
+// }
+// }
+// }
+ }
+
+ private static void printUsefulAttributes(Attribute[] attributes) throws Exception {
+ for (Attribute attribute: attributes) {
+ String n = attribute.getName();
+ if (n.equals("RuntimeInvisibleAnnotations") ||
+ n.equals("RuntimeVisibleAnnotations")) {
+ RuntimeAnnos ra = (RuntimeAnnos)attribute;
+ // private byte[] annotation_data;
+ java.lang.reflect.Field f = RuntimeAnnos.class.getDeclaredField("annotation_data");
+ f.setAccessible(true);
+ byte[] bs = (byte[])f.get(ra);
+// byte[] bs = unknown.getBytes();
+ printBytes(bs);
+ }
+ }
+ }
+}