package me.lzb.jvm.print;
import me.lzb.common.utils.AppUtils;
import me.lzb.jvm.clz.ClassFile;
import me.lzb.jvm.constant.ConstantInfo;
import me.lzb.jvm.constant.ConstantPool;
/**
* Created by LZB on 2017/4/23.
*/
public class ClassPrinter {
private ClassFile classFile;
private ConstantPool pool;
private int poolLong;
public ClassPrinter(ClassFile classFile) {
this.classFile = classFile;
this.pool = classFile.getConstantPool();
this.poolLong = AppUtils.getDigit(this.pool.getSize());
}
public void print() {
PrintVisitor visitor = new PrintFormat();
classFile.print(visitor);
System.out.println("Constant Pool:");
for (int i = 1; i <= pool.getSize(); i++) {
ConstantInfo constantInfo = pool.getConstantInfo(i);
System.out.print(dq(i) + " = ");
constantInfo.print(visitor);
}
}
private String dq(int i) {
int iLong = AppUtils.getDigit(i);
int c = poolLong - iLong;
StringBuffer sb = new StringBuffer();
if (c > 0) {
for (int j = 0; j < c; j++) {
sb.append(" ");
}
}
sb.append("#");
sb.append(i);
return sb.toString();
}
}