vendredi 27 février 2015

Java binary (.class) file format parser?



I am looking for a tool (or chain of tools) that can parse a .class files to a Java object. Something like :



JavaClass parsed = myTool.parse("/some_folder/SomeClassFile.class");


The parsed object would have methods like :



List<JavaMethod> methods = parsed.getMethods();
List<JavaInterface> interfaces = parsed.getImplementedInterfaces();


My constraints are :



  1. The aim is to parse all classes of a project, including jars, so performance does matter.

  2. The parser has to parse Java 8 .class files

  3. Java is my main language so it's better for me if it's in Java.


Of course I can do some coding, so for example if the output is xml it's ok.


So here are the options I have found so far - none being satisfying as it is :



  1. BCEL or ASM look like a weapon of choice, but they also look like they're not maintained anymore. Besides, they're a little overkill for my purpose.

  2. Elipse AST would work, but from what I saw it's only for source files, and I need to parse binary files (jars...)

  3. A grammar for a parsing engine like antlr, yacc, bison... would work, but I have yet to find a reference grammar for .class files ! Besides, antlr is for text files, and I don't know of another reference Java parser engine (as I said, I would like a Java tool better).

  4. Any class loader would actually do the job : I could just load the class and then use reflection. But that's not really what class loaders are for...


So here is where I am now ! Thanks in advance for your help !




Aucun commentaire:

Enregistrer un commentaire