001 package serp.bytecode; 002 003 import serp.bytecode.visitor.*; 004 import serp.util.*; 005 006 /** 007 * A local variable contains the name, description, index and scope 008 * of a local used in opcodes. 009 * 010 * @author Abe White 011 */ 012 public class LocalVariable extends Local { 013 LocalVariable(LocalVariableTable owner) { 014 super(owner); 015 } 016 017 /** 018 * The owning table. 019 */ 020 public LocalVariableTable getLocalVariableTable() { 021 return (LocalVariableTable) getTable(); 022 } 023 024 /** 025 * Return the type of this local. 026 * If the type has not been set, this method will return null. 027 */ 028 public Class getType() { 029 String type = getTypeName(); 030 if (type == null) 031 return null; 032 return Strings.toClass(type, getClassLoader()); 033 } 034 035 /** 036 * Return the type of this local. 037 * If the type has not been set, this method will return null. 038 */ 039 public BCClass getTypeBC() { 040 String type = getTypeName(); 041 if (type == null) 042 return null; 043 return getProject().loadClass(type, getClassLoader()); 044 } 045 046 /** 047 * Set the type of this local. 048 */ 049 public void setType(Class type) { 050 if (type == null) 051 setType((String) null); 052 else 053 setType(type.getName()); 054 } 055 056 /** 057 * Set the type of this local. 058 */ 059 public void setType(BCClass type) { 060 if (type == null) 061 setType((String) null); 062 else 063 setType(type.getName()); 064 } 065 066 public void acceptVisit(BCVisitor visit) { 067 visit.enterLocalVariable(this); 068 visit.exitLocalVariable(this); 069 } 070 }