Mirror of the JODE repository
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
jode/jode/jode/decompiler/ClassAnalyzer.java

73 lines
2.3 KiB

package jode;
import java.lang.reflect.Modifier;
import java.io.IOException;
import sun.tools.java.*;
public class ClassAnalyzer implements Analyzer {
BinaryClass cdef;
JodeEnvironment env;
Analyzer fields[];
public ClassAnalyzer(BinaryClass bc, JodeEnvironment e)
{
cdef = bc;
env = e;
}
public void analyze() {
int numFields = 0, i=0;
FieldDefinition f;
for (f= cdef.getInnerClassField(); f != null; f = f.getNextField())
numFields++;
for (f= cdef.getFirstField(); f != null; f = f.getNextField())
numFields++;
fields = new Analyzer[numFields];
for (f= cdef.getInnerClassField(); f != null; f = f.getNextField()) {
System.err.println("analyzing inner: "+f.getName());
fields[i] = new ClassAnalyzer((BinaryClass) f.getInnerClass(), env);
fields[i++].analyze();
}
for (f= cdef.getFirstField(); f != null; f = f.getNextField()) {
if (f.getType().getTypeCode() == Constants.TC_METHOD) {
fields[i] = new MethodAnalyzer(f, env);
} else {
fields[i] = new FieldAnalyzer(f, env);
}
fields[i++].analyze();
}
}
public void dumpSource(TabbedPrintWriter writer) throws IOException
{
if (cdef.getSource() != null)
writer.println("/* Original source: "+cdef.getSource()+" */");
String modif = Modifier.toString(cdef.getModifiers());
if (modif.length() > 0)
writer.print(modif + " ");
writer.print((cdef.isInterface())?"interface ":"class ");
writer.println(cdef.getName().getName().toString());
writer.tab();
if (cdef.getSuperClass() != null)
writer.println("extends "+cdef.getSuperClass().getName().toString());
ClassDeclaration interfaces[] = cdef.getInterfaces();
if (interfaces.length > 0) {
writer.print("implements ");
for (int i=0; i < interfaces.length; i++) {
if (i > 0)
writer.print(", ");
writer.print(interfaces[i].getName().toString());
}
}
writer.untab();
writer.println(" {");
writer.tab();
for (int i=0; i< fields.length; i++)
fields[i].dumpSource(writer);
writer.untab();
writer.println("}");
}
}