aboutsummaryrefslogtreecommitdiffstats
path: root/bcel-builder
diff options
context:
space:
mode:
authorAndy Clement <andrew.clement@gmail.com>2013-04-25 13:46:44 -0700
committerAndy Clement <andrew.clement@gmail.com>2013-04-25 13:46:44 -0700
commite9e4852b10a10e1fa1b597d471cbafc693f87e15 (patch)
treea7f82c4a8f557f8f7845dec98ac1fcc8b63b3ee4 /bcel-builder
parent6afb281ef0a0f0afcfcf0c77d6b6ebcead15c363 (diff)
downloadaspectj-e9e4852b10a10e1fa1b597d471cbafc693f87e15.tar.gz
aspectj-e9e4852b10a10e1fa1b597d471cbafc693f87e15.zip
utility class for dumping class files
Diffstat (limited to 'bcel-builder')
-rw-r--r--bcel-builder/testsrc/Play.java79
1 files changed, 79 insertions, 0 deletions
diff --git a/bcel-builder/testsrc/Play.java b/bcel-builder/testsrc/Play.java
new file mode 100644
index 000000000..024ef7a6d
--- /dev/null
+++ b/bcel-builder/testsrc/Play.java
@@ -0,0 +1,79 @@
+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;
+
+
+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) {
+ for (Attribute attribute: attributes) {
+ String n = attribute.getName();
+ if (n.equals("RuntimeInvisibleTypeAnnotations") ||
+ n.equals("RuntimeVisibleTypeAnnotations")) {
+ Unknown unknown = (Unknown)attribute;
+ byte[] bs = unknown.getBytes();
+ printBytes(bs);
+ }
+ }
+ }
+}