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 the type of a local variable or item on stack 62 * used in the StackMap entries. 63 * 64 * @version $Id: StackMapType.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 StackMapEntry 67 * @see StackMap 68 * @see Constants 69 */ 70 public final class StackMapType implements Cloneable { 71 private byte type; 72 private int index = -1; // Index to CONSTANT_Class or offset 73 private ConstantPool constant_pool; 74 75 /*** 76 * Construct object from file stream. 77 * @param file Input stream 78 * @throws IOException 79 */ 80 StackMapType(DataInputStream file, ConstantPool constant_pool) throws IOException 81 { 82 this(file.readByte(), -1, constant_pool); 83 84 if(hasIndex()) 85 setIndex(file.readShort()); 86 87 setConstantPool(constant_pool); 88 } 89 90 /*** 91 * @param type type tag as defined in the Constants interface 92 * @param index index to constant pool, or byte code offset 93 */ 94 public StackMapType(byte type, int index, ConstantPool constant_pool) { 95 setType(type); 96 setIndex(index); 97 setConstantPool(constant_pool); 98 } 99 100 public void setType(byte t) { 101 if((t < Constants.ITEM_Bogus) || (t > Constants.ITEM_NewObject)) 102 throw new RuntimeException("Illegal type for StackMapType: " + t); 103 type = t; 104 } 105 106 public byte getType() { return type; } 107 public void setIndex(int t) { index = t; } 108 109 /*** @return index to constant pool if type == ITEM_Object, or offset 110 * in byte code, if type == ITEM_NewObject, and -1 otherwise 111 */ 112 public int getIndex() { return index; } 113 114 /*** 115 * Dump type entries to file. 116 * 117 * @param file Output file stream 118 * @throws IOException 119 */ 120 public final void dump(DataOutputStream file) throws IOException 121 { 122 file.writeByte(type); 123 if(hasIndex()) 124 file.writeShort(getIndex()); 125 } 126 127 /*** @return true, if type is either ITEM_Object or ITEM_NewObject 128 */ 129 public final boolean hasIndex() { 130 return ((type == Constants.ITEM_Object) || 131 (type == Constants.ITEM_NewObject)); 132 } 133 134 private String printIndex() { 135 if(type == Constants.ITEM_Object) 136 return ", class=" + constant_pool.constantToString(index, Constants.CONSTANT_Class); 137 else if(type == Constants.ITEM_NewObject) 138 return ", offset=" + index; 139 else 140 return ""; 141 } 142 143 /*** 144 * @return String representation 145 */ 146 public final String toString() { 147 return "(type=" + Constants.ITEM_NAMES[type] + printIndex() + ")"; 148 } 149 150 /*** 151 * @return deep copy of this object 152 */ 153 public StackMapType copy() { 154 try { 155 return (StackMapType)clone(); 156 } catch(CloneNotSupportedException e) {} 157 158 return null; 159 } 160 161 /*** 162 * @return Constant pool used by this object. 163 */ 164 public final ConstantPool getConstantPool() { return constant_pool; } 165 166 /*** 167 * @param constant_pool Constant pool to be used for this object. 168 */ 169 public final void setConstantPool(ConstantPool constant_pool) { 170 this.constant_pool = constant_pool; 171 } 172 }

This page was automatically generated by Maven