diff options
author | Andy Clement <aclement@pivotal.io> | 2017-10-20 12:33:19 -0700 |
---|---|---|
committer | Andy Clement <aclement@pivotal.io> | 2017-10-20 12:33:19 -0700 |
commit | 5e86980fa0248cd94012416eda7fee581245f52a (patch) | |
tree | d44f5cc0f71aeb519275f205810db6b643420f83 /bcel-builder/testsrc/org/aspectj/apache/bcel/util/Play.java | |
parent | 62024412b0efe3fe153cf02e460785d7137876ba (diff) | |
download | aspectj-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.java | 84 |
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); + } + } + } +} |