package main.coding_170423.jvm.print; import main.coding_170423.jvm.constant.*; /** * Created by peterchen on 2017/4/26. */ public class ConstantPoolPrinter { private ConstantPool pool; public ConstantPoolPrinter(ConstantPool pool) { this.pool = pool; } public void print() { for (int i = 1; i < pool.getSizes(); i++) { if (pool.getConstantInfo(i) instanceof ClassInfo) { System.out.println("#"+i+" = Class "+"#"+((ClassInfo) pool.getConstantInfo(i)).getUtf8Index()); } else if (pool.getConstantInfo(i) instanceof UTF8Info) { System.out.println("#"+i+" = Utf8 "+"#"+((UTF8Info) pool.getConstantInfo(i)).getValue()); } else if (pool.getConstantInfo(i) instanceof StringInfo) { System.out.println("#"+i+" = String "+"#"+((StringInfo) pool.getConstantInfo(i)).getIndex()); } else if (pool.getConstantInfo(i) instanceof MethodRefInfo) { System.out.println("#"+i+" = Methodref "+"#"+((MethodRefInfo) pool.getConstantInfo(i)).getClassInfoIndex()+".#"+((MethodRefInfo) pool.getConstantInfo(i)).getNameAndTypeIndex()); } else if (pool.getConstantInfo(i) instanceof FieldRefInfo) { System.out.println("#"+i+" = Fieldref "+"#"+((FieldRefInfo) pool.getConstantInfo(i)).getClassInfoIndex()+".#"+((FieldRefInfo) pool.getConstantInfo(i)).getNameAndTypeIndex()); } else if (pool.getConstantInfo(i) instanceof NameAndTypeInfo) { System.out.println("#"+i+" = NameAndType "+"#"+((NameAndTypeInfo) pool.getConstantInfo(i)).getIndexA()+":#"+((NameAndTypeInfo) pool.getConstantInfo(i)).getIndexB()); } else { throw new RuntimeException("the constant has not implemented"); } } } }