1 32 33 package com.jeantessier.classreader; 34 35 import java.io.*; 36 37 import org.apache.log4j.*; 38 39 public class ExceptionHandler implements Visitable { 40 private Code_attribute code; 41 private int startPC; 42 private int endPC; 43 private int handlerPC; 44 private int catchTypeIndex; 45 46 public ExceptionHandler(Code_attribute code, DataInputStream in) throws IOException { 47 this.code = code; 48 49 startPC = in.readUnsignedShort(); 50 Logger.getLogger(getClass()).debug("start PC: " + startPC); 51 52 endPC = in.readUnsignedShort(); 53 Logger.getLogger(getClass()).debug("end PC: " + endPC); 54 55 handlerPC = in.readUnsignedShort(); 56 Logger.getLogger(getClass()).debug("handler PC: " + handlerPC); 57 58 catchTypeIndex = in.readUnsignedShort(); 59 Logger.getLogger(getClass()).debug("catch type index: " + catchTypeIndex + " (" + getCatchType() + ")"); 60 } 61 62 public Code_attribute getCode() { 63 return code; 64 } 65 66 public int getStartPC() { 67 return startPC; 68 } 69 70 public int getEndPC() { 71 return endPC; 72 } 73 74 public int getHandlerPC() { 75 return handlerPC; 76 } 77 78 public int getCatchTypeIndex() { 79 return catchTypeIndex; 80 } 81 82 public Class_info getRawCatchType() { 83 return (Class_info) code.getClassfile().getConstantPool().get(getCatchTypeIndex()); 84 } 85 86 public String getCatchType() { 87 String result = "<none>"; 88 89 if (getCatchTypeIndex() != 0) { 90 result = getRawCatchType().toString(); 91 } 92 93 return result; 94 } 95 96 public String toString() { 97 return "ExceptionHandler for " + getCatchType(); 98 } 99 100 public void accept(Visitor visitor) { 101 visitor.visitExceptionHandler(this); 102 } 103 } 104 | Popular Tags |