package com.coderising.jvm.print;
import java.util.List;
import com.coderising.jvm.constant.ClassInfo;
import com.coderising.jvm.constant.ConstantInfo;
import com.coderising.jvm.constant.ConstantPool;
import com.coderising.jvm.constant.FieldRefInfo;
import com.coderising.jvm.constant.MethodRefInfo;
import com.coderising.jvm.constant.NameAndTypeInfo;
import com.coderising.jvm.constant.NullConstantInfo;
import com.coderising.jvm.constant.StringInfo;
import com.coderising.jvm.constant.UTF8Info;
public class ConstantPoolPrinter implements PrintVisitor {
ConstantPool pool;
ConstantPoolPrinter(ConstantPool pool){
this.pool = pool;
}
public void print(){
System.out.println("Constant Pool:");
int size = pool.getSize();
for (int i = 1; i <= size; i++) {
ConstantInfo info = pool.getConstantInfo(i);
System.out.print("#" + i + " = ");
info.accept(this);
}
}
@Override
public void visit(StringInfo info) {
StringBuilder buffer = new StringBuilder();
buffer.append("String #").append(info.getIndex());
System.out.println(buffer);
}
@Override
public void visit(NameAndTypeInfo info) {
StringBuilder buffer = new StringBuilder();
buffer.append("NameAndType #").append(info.getIndex1()).append(":#")
.append(info.getIndex2());
System.out.println(buffer);
}
@Override
public void visit(MethodRefInfo info) {
StringBuilder buffer = new StringBuilder();
buffer.append("MethodRef #").append(info.getClassInfoIndex()).append(".#")
.append(info.getNameAndTypeIndex());
System.out.println(buffer);
}
@Override
public void visit(FieldRefInfo info) {
StringBuilder buffer = new StringBuilder();
buffer.append("FieldRef #").append(info.getClassInfoIndex()).append(".#")
.append(info.getNameAndTypeIndex());
System.out.println(buffer);
}
@Override
public void visit(ClassInfo info) {
StringBuilder buffer = new StringBuilder();
buffer.append("Class #").append(info.getUtf8Index())
.append(" ").append(info.getClassName());
System.out.println(buffer);
}
@Override
public void visit(UTF8Info info) {
StringBuilder buffer = new StringBuilder();
buffer.append("UTF8 ").append(info.getValue());
System.out.println(buffer);
}
@Override
public void visit(NullConstantInfo nullConstantInfo) {
}
}