View Javadoc
1 package org.apache.bcel.classfile; 2 3 /* ==================================================================== 4 * The Apache Software License, Version 1.1 5 * 6 * Copyright (c) 2001 The Apache Software Foundation. All rights 7 * reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in 18 * the documentation and/or other materials provided with the 19 * distribution. 20 * 21 * 3. The end-user documentation included with the redistribution, 22 * if any, must include the following acknowledgment: 23 * "This product includes software developed by the 24 * Apache Software Foundation (http://www.apache.org/)." 25 * Alternately, this acknowledgment may appear in the software itself, 26 * if and wherever such third-party acknowledgments normally appear. 27 * 28 * 4. The names "Apache" and "Apache Software Foundation" and 29 * "Apache BCEL" must not be used to endorse or promote products 30 * derived from this software without prior written permission. For 31 * written permission, please contact apache@apache.org. 32 * 33 * 5. Products derived from this software may not be called "Apache", 34 * "Apache BCEL", nor may "Apache" appear in their name, without 35 * prior written permission of the Apache Software Foundation. 36 * 37 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 38 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 39 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 40 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 43 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 44 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 45 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 46 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 47 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 48 * SUCH DAMAGE. 49 * ==================================================================== 50 * 51 * This software consists of voluntary contributions made by many 52 * individuals on behalf of the Apache Software Foundation. For more 53 * information on the Apache Software Foundation, please see 54 * <http://www.apache.org/>;. 55 */ 56 57 import org.apache.bcel.Constants; 58 import java.io.*; 59 60 /*** 61 * This class represents colection of local variables in a 62 * method. This attribute is contained in the <em>Code</em> attribute. 63 * 64 * @version $Id: LocalVariableTable.java,v 1.2 2002/03/11 16:16:35 mdahm Exp $ 65 * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> 66 * @see Code 67 * @see LocalVariable 68 */ 69 public class LocalVariableTable extends Attribute { 70 private int local_variable_table_length; // Table of local 71 private LocalVariable[] local_variable_table; // variables 72 73 /*** 74 * Initialize from another object. Note that both objects use the same 75 * references (shallow copy). Use copy() for a physical copy. 76 */ 77 public LocalVariableTable(LocalVariableTable c) { 78 this(c.getNameIndex(), c.getLength(), c.getLocalVariableTable(), 79 c.getConstantPool()); 80 } 81 82 /*** 83 * @param name_index Index in constant pool to `LocalVariableTable' 84 * @param length Content length in bytes 85 * @param local_variable_table Table of local variables 86 * @param constant_pool Array of constants 87 */ 88 public LocalVariableTable(int name_index, int length, 89 LocalVariable[] local_variable_table, 90 ConstantPool constant_pool) 91 { 92 super(Constants.ATTR_LOCAL_VARIABLE_TABLE, name_index, length, constant_pool); 93 setLocalVariableTable(local_variable_table); 94 } 95 96 /*** 97 * Construct object from file stream. 98 * @param name_index Index in constant pool 99 * @param length Content length in bytes 100 * @param file Input stream 101 * @param constant_pool Array of constants 102 * @throws IOException 103 */ 104 LocalVariableTable(int name_index, int length, DataInputStream file, 105 ConstantPool constant_pool) throws IOException 106 { 107 this(name_index, length, (LocalVariable[])null, constant_pool); 108 109 local_variable_table_length = (file.readUnsignedShort()); 110 local_variable_table = new LocalVariable[local_variable_table_length]; 111 112 for(int i=0; i < local_variable_table_length; i++) 113 local_variable_table[i] = new LocalVariable(file, constant_pool); 114 } 115 116 /*** 117 * Called by objects that are traversing the nodes of the tree implicitely 118 * defined by the contents of a Java class. I.e., the hierarchy of methods, 119 * fields, attributes, etc. spawns a tree of objects. 120 * 121 * @param v Visitor object 122 */ 123 public void accept(Visitor v) { 124 v.visitLocalVariableTable(this); 125 } 126 127 /*** 128 * Dump local variable table attribute to file stream in binary format. 129 * 130 * @param file Output file stream 131 * @throws IOException 132 */ 133 public final void dump(DataOutputStream file) throws IOException 134 { 135 super.dump(file); 136 file.writeShort(local_variable_table_length); 137 for(int i=0; i < local_variable_table_length; i++) 138 local_variable_table[i].dump(file); 139 } 140 141 /*** 142 * @return Array of local variables of method. 143 */ 144 public final LocalVariable[] getLocalVariableTable() { 145 return local_variable_table; 146 } 147 148 /*** @return first matching variable using index 149 */ 150 public final LocalVariable getLocalVariable(int index) { 151 for(int i=0; i < local_variable_table_length; i++) 152 if(local_variable_table[i].getIndex() == index) 153 return local_variable_table[i]; 154 155 return null; 156 } 157 158 public final void setLocalVariableTable(LocalVariable[] local_variable_table) 159 { 160 this.local_variable_table = local_variable_table; 161 local_variable_table_length = (local_variable_table == null)? 0 : 162 local_variable_table.length; 163 } 164 165 /*** 166 * @return String representation. 167 */ 168 public final String toString() { 169 StringBuffer buf = new StringBuffer(""); 170 171 for(int i=0; i < local_variable_table_length; i++) { 172 buf.append(local_variable_table[i].toString()); 173 174 if(i < local_variable_table_length - 1) 175 buf.append('\n'); 176 } 177 178 return buf.toString(); 179 } 180 181 /*** 182 * @return deep copy of this attribute 183 */ 184 public Attribute copy(ConstantPool constant_pool) { 185 LocalVariableTable c = (LocalVariableTable)clone(); 186 187 c.local_variable_table = new LocalVariable[local_variable_table_length]; 188 for(int i=0; i < local_variable_table_length; i++) 189 c.local_variable_table[i] = local_variable_table[i].copy(); 190 191 c.constant_pool = constant_pool; 192 return c; 193 } 194 195 public final int getTableLength() { return local_variable_table_length; } 196 }

This page was automatically generated by Maven