1 package de.uni_hamburg.eggink.autojar; 2 3 19 20 import java.io.*; 21 import java.util.*; 22 import org.apache.bcel.*; 23 import org.apache.bcel.classfile.*; 24 import org.apache.bcel.util.*; 25 26 31 32 class Avisitor 33 extends EmptyVisitor 34 { 35 private JavaClass klass; 36 private int indexForName; 37 38 40 41 42 Avisitor(JavaClass klass) 43 { 44 this.klass = klass; 45 indexForName = -1; 46 } 47 48 50 int getIndexForName() 51 { 52 return indexForName; 53 } 54 55 57 public void visitConstantClass(ConstantClass cc) 58 { 59 String cstr = klass.getConstantPool().getConstant(cc.getNameIndex()).toString(); 60 61 int ia = cstr.indexOf('"'), 62 ie = cstr.lastIndexOf('"'); 63 String name = cstr.substring(ia + 1, ie); 64 65 67 if (name.startsWith("[")) 68 return; 69 70 try 71 { 72 Autojar.lookupClass(name); 73 } 74 catch (IOException ex) 75 { 76 ex.printStackTrace(); 77 } 78 } 79 80 82 public void visitConstantMethodref(ConstantMethodref ref) 83 { 84 ConstantPool pool = klass.getConstantPool(); 85 String cstr = ref.getClass(pool); 86 87 if (cstr.equals("java.lang.Class")) 88 { 89 int iname = ref.getNameAndTypeIndex(); 90 String name = ((ConstantNameAndType)pool.getConstant(iname)).getName(pool); 91 92 if (name.equals("forName")) 93 indexForName = iname; 94 } 95 } 96 97 } 98 99 100 | Popular Tags |