package com.coding.mini_jvm.src.com.coderising.jvm.print;
import com.coding.mini_jvm.src.com.coderising.jvm.constant.*;
import java.util.Formatter;
/**
* Created by Administrator on 2017/4/23 0023.
*/
public class SimpleVistor implements ConstantInfo.Visitor {
private Formatter formatter = new Formatter(System.out);
private String format = " = %-20s %-20s %-100s\n";
@Override
public void visitClassInfo(ClassInfo info) {
formatter.format(format, "Class",
"#" + info.getUtf8Index(),
"// " + info.getClassName());
}
@Override
public void visitFieldRef(FieldRefInfo info) {
NameAndTypeInfo nameAndTypeInfo = (NameAndTypeInfo)info.getConstantInfo(info.getNameAndTypeIndex());
formatter.format(format, "Fieldref",
"#" + info.getClassInfoIndex() + "." + "#" + info.getNameAndTypeIndex(),
"// " + info.getClassName() + "." + nameAndTypeInfo.getName() + ":" + nameAndTypeInfo.getTypeInfo());
}
@Override
public void visitMethodRef(MethodRefInfo info) {
formatter.format(format, "Methodref",
"#" + info.getClassInfoIndex() + "." + "#" + info.getNameAndTypeIndex(),
"// " + info.getClassName() + "." + info.getMethodName());
}
@Override
public void visitNameAndType(NameAndTypeInfo info) {
formatter.format(format, "NameAndType",
"#" + info.getIndex1() + ":" + "#" + info.getIndex2(),
"// " + info.getName() + ":" + info.getTypeInfo());
}
@Override
public void visitString(StringInfo info) {
formatter.format(format, "String", "#" + info.getIndex(), "// " + info.toString());
}
@Override
public void visistUTF8(UTF8Info info) {
formatter.format(format, "Utf8", info.getValue(), "");
}
}