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 a inner class attribute, i.e., the class 62 * indices of the inner and outer classes, the name and the attributes 63 * of the inner class. 64 * 65 * @version $Id: InnerClass.java,v 1.2 2002/03/11 16:16:35 mdahm Exp $ 66 * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> 67 * @see InnerClasses 68 */ 69 public final class InnerClass implements Cloneable, Node { 70 private int inner_class_index; 71 private int outer_class_index; 72 private int inner_name_index; 73 private int inner_access_flags; 74 75 /*** 76 * Initialize from another object. 77 */ 78 public InnerClass(InnerClass c) { 79 this(c.getInnerClassIndex(), c.getOuterClassIndex(), c.getInnerNameIndex(), 80 c.getInnerAccessFlags()); 81 } 82 83 /*** 84 * Construct object from file stream. 85 * @param file Input stream 86 * @throws IOException 87 */ 88 InnerClass(DataInputStream file) throws IOException 89 { 90 this(file.readUnsignedShort(), file.readUnsignedShort(), 91 file.readUnsignedShort(), file.readUnsignedShort()); 92 } 93 94 /*** 95 * @param inner_class_index Class index in constant pool of inner class 96 * @param outer_class_index Class index in constant pool of outer class 97 * @param inner_name_index Name index in constant pool of inner class 98 * @param inner_access_flags Access flags of inner class 99 */ 100 public InnerClass(int inner_class_index, int outer_class_index, 101 int inner_name_index, int inner_access_flags) 102 { 103 this.inner_class_index = inner_class_index; 104 this.outer_class_index = outer_class_index; 105 this.inner_name_index = inner_name_index; 106 this.inner_access_flags = inner_access_flags; 107 } 108 109 /*** 110 * Called by objects that are traversing the nodes of the tree implicitely 111 * defined by the contents of a Java class. I.e., the hierarchy of methods, 112 * fields, attributes, etc. spawns a tree of objects. 113 * 114 * @param v Visitor object 115 */ 116 public void accept(Visitor v) { 117 v.visitInnerClass(this); 118 } 119 /*** 120 * Dump inner class attribute to file stream in binary format. 121 * 122 * @param file Output file stream 123 * @throws IOException 124 */ 125 public final void dump(DataOutputStream file) throws IOException 126 { 127 file.writeShort(inner_class_index); 128 file.writeShort(outer_class_index); 129 file.writeShort(inner_name_index); 130 file.writeShort(inner_access_flags); 131 } 132 /*** 133 * @return access flags of inner class. 134 */ 135 public final int getInnerAccessFlags() { return inner_access_flags; } 136 /*** 137 * @return class index of inner class. 138 */ 139 public final int getInnerClassIndex() { return inner_class_index; } 140 /*** 141 * @return name index of inner class. 142 */ 143 public final int getInnerNameIndex() { return inner_name_index; } 144 /*** 145 * @return class index of outer class. 146 */ 147 public final int getOuterClassIndex() { return outer_class_index; } 148 /*** 149 * @param inner_access_flags. 150 */ 151 public final void setInnerAccessFlags(int inner_access_flags) { 152 this.inner_access_flags = inner_access_flags; 153 } 154 /*** 155 * @param inner_class_index. 156 */ 157 public final void setInnerClassIndex(int inner_class_index) { 158 this.inner_class_index = inner_class_index; 159 } 160 /*** 161 * @param inner_name_index. 162 */ 163 public final void setInnerNameIndex(int inner_name_index) { 164 this.inner_name_index = inner_name_index; 165 } 166 /*** 167 * @param outer_class_index. 168 */ 169 public final void setOuterClassIndex(int outer_class_index) { 170 this.outer_class_index = outer_class_index; 171 } 172 /*** 173 * @return String representation. 174 */ 175 public final String toString() { 176 return "InnerClass(" + inner_class_index + ", " + outer_class_index + 177 ", " + inner_name_index + ", " + inner_access_flags + ")"; 178 } 179 180 /*** 181 * @return Resolved string representation 182 */ 183 public final String toString(ConstantPool constant_pool) { 184 String inner_class_name, outer_class_name, inner_name, access; 185 186 inner_class_name = constant_pool.getConstantString(inner_class_index, 187 Constants.CONSTANT_Class); 188 inner_class_name = Utility.compactClassName(inner_class_name); 189 190 if (outer_class_index != 0) { 191 outer_class_name = constant_pool.getConstantString(outer_class_index, 192 Constants.CONSTANT_Class); 193 outer_class_name = Utility.compactClassName(outer_class_name); 194 } 195 else 196 outer_class_name = "<not a member>"; 197 198 if(inner_name_index != 0) 199 inner_name = ((ConstantUtf8)constant_pool. 200 getConstant(inner_name_index, Constants.CONSTANT_Utf8)).getBytes(); 201 else 202 inner_name = "<anonymous>"; 203 204 access = Utility.accessToString(inner_access_flags, true); 205 access = access.equals("")? "" : (access + " "); 206 207 return "InnerClass:" + access + inner_class_name + 208 "(\"" + outer_class_name + "\", \"" + inner_name + "\")"; 209 } 210 211 /*** 212 * @return deep copy of this object 213 */ 214 public InnerClass copy() { 215 try { 216 return (InnerClass)clone(); 217 } catch(CloneNotSupportedException e) {} 218 219 return null; 220 } 221 }

This page was automatically generated by Maven