package js.tinyvm;
import java.io.PrintWriter;
import java.io.Writer;
/**
* Class for creating a report of a binary.
*/
public class BinaryReport
{
/**
* Binary.
*/
private Binary _binary;
/**
* Constructor.
*
* @param binary binary to create report from.
*/
public BinaryReport (Binary binary)
{
assert binary != null: "Precondition: binary != null";
_binary = binary;
}
/**
* Create report.
*
* @param writer writer to write result to
*/
public void report (Writer writer) throws TinyVMException
{
PrintWriter out = new PrintWriter(writer);
// all classes
for (int pIndex = 0; pIndex < _binary.iClassTable.size(); pIndex++)
{
ClassRecord pRec = _binary.iClassTable.get(pIndex);
out.println("Class " + pIndex + ": " + pRec.iName);
}
// all signatures
int pSize = _binary.iSignatures.size();
for (int i = 0; i < pSize; i++)
{
Signature pSig = _binary.iSignatures.elementAt(i);
out.println("Signature " + i + ": " + pSig.getImage());
}
// all records
out.println("Master record : " + _binary.iMasterRecord.getLength()
+ " bytes.");
out.println("Class records : " + _binary.iClassTable.size() + " ("
+ _binary.iClassTable.getLength() + " bytes).");
out.println("Field records : " + _binary.getTotalNumInstanceFields()
+ " (" + _binary.iInstanceFieldTables.getLength() + " bytes).");
out.println("Method records: " + _binary.getTotalNumMethods() + " ("
+ _binary.iMethodTables.getLength() + " bytes).");
out.println("Code : " + _binary.iCodeSequences.size() + " ("
+ _binary.iCodeSequences.getLength() + " bytes).");
// all tables
out.println("Class table offset : " + _binary.iClassTable.getOffset());
out.println("Constant table offset: "
+ _binary.iConstantTable.getOffset());
out
.println("Method tables offset : " + _binary.iMethodTables.getOffset());
out.println("Excep tables offset : "
+ _binary.iExceptionTables.getOffset());
}
}