1 /* 2 * reserved comment block 3 * DO NOT REMOVE OR ALTER! 4 */ 5 package com.sun.org.apache.bcel.internal.classfile; 6 7 /* ==================================================================== 8 * The Apache Software License, Version 1.1 9 * 10 * Copyright (c) 2001 The Apache Software Foundation. All rights 11 * reserved. 12 * 13 * Redistribution and use in source and binary forms, with or without 14 * modification, are permitted provided that the following conditions 15 * are met: 16 * 17 * 1. Redistributions of source code must retain the above copyright 18 * notice, this list of conditions and the following disclaimer. 19 * 20 * 2. Redistributions in binary form must reproduce the above copyright 21 * notice, this list of conditions and the following disclaimer in 22 * the documentation and/or other materials provided with the 23 * distribution. 24 * 25 * 3. The end-user documentation included with the redistribution, 26 * if any, must include the following acknowledgment: 27 * "This product includes software developed by the 28 * Apache Software Foundation (http://www.apache.org/)." 29 * Alternately, this acknowledgment may appear in the software itself, 30 * if and wherever such third-party acknowledgments normally appear. 31 * 32 * 4. The names "Apache" and "Apache Software Foundation" and 33 * "Apache BCEL" must not be used to endorse or promote products 34 * derived from this software without prior written permission. For 35 * written permission, please contact apache@apache.org. 36 * 37 * 5. Products derived from this software may not be called "Apache", 38 * "Apache BCEL", nor may "Apache" appear in their name, without 39 * prior written permission of the Apache Software Foundation. 40 * 41 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED 42 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 43 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 44 * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR 45 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 46 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 47 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF 48 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 49 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 50 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 51 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 52 * SUCH DAMAGE. 53 * ==================================================================== 54 * 55 * This software consists of voluntary contributions made by many 56 * individuals on behalf of the Apache Software Foundation. For more 57 * information on the Apache Software Foundation, please see 58 * <http://www.apache.org/>. 59 */ 60 61 import com.sun.org.apache.bcel.internal.Constants; 62 import java.io.*; 63 64 /** 65 * This class is derived from the abstract 66 * <A HREF="com.sun.org.apache.bcel.internal.classfile.Constant.html">Constant</A> class 67 * and represents a reference to the name and signature 68 * of a field or method. 69 * 70 * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A> 71 * @see Constant 72 */ 73 public final class ConstantNameAndType extends Constant { 74 private int name_index; // Name of field/method 75 private int signature_index; // and its signature. 76 77 /** 78 * Initialize from another object. 79 */ ConstantNameAndType(ConstantNameAndType c)80 public ConstantNameAndType(ConstantNameAndType c) { 81 this(c.getNameIndex(), c.getSignatureIndex()); 82 } 83 84 /** 85 * Initialize instance from file data. 86 * 87 * @param file Input stream 88 * @throws IOException 89 */ ConstantNameAndType(DataInputStream file)90 ConstantNameAndType(DataInputStream file) throws IOException 91 { 92 this((int)file.readUnsignedShort(), (int)file.readUnsignedShort()); 93 } 94 95 /** 96 * @param name_index Name of field/method 97 * @param signature_index and its signature 98 */ ConstantNameAndType(int name_index, int signature_index)99 public ConstantNameAndType(int name_index, 100 int signature_index) 101 { 102 super(Constants.CONSTANT_NameAndType); 103 this.name_index = name_index; 104 this.signature_index = signature_index; 105 } 106 107 /** 108 * Called by objects that are traversing the nodes of the tree implicitely 109 * defined by the contents of a Java class. I.e., the hierarchy of methods, 110 * fields, attributes, etc. spawns a tree of objects. 111 * 112 * @param v Visitor object 113 */ accept(Visitor v)114 public void accept(Visitor v) { 115 v.visitConstantNameAndType(this); 116 } 117 118 /** 119 * Dump name and signature index to file stream in binary format. 120 * 121 * @param file Output file stream 122 * @throws IOException 123 */ dump(DataOutputStream file)124 public final void dump(DataOutputStream file) throws IOException 125 { 126 file.writeByte(tag); 127 file.writeShort(name_index); 128 file.writeShort(signature_index); 129 } 130 131 /** 132 * @return Name index in constant pool of field/method name. 133 */ getNameIndex()134 public final int getNameIndex() { return name_index; } 135 136 /** @return name 137 */ getName(ConstantPool cp)138 public final String getName(ConstantPool cp) { 139 return cp.constantToString(getNameIndex(), Constants.CONSTANT_Utf8); 140 } 141 142 /** 143 * @return Index in constant pool of field/method signature. 144 */ getSignatureIndex()145 public final int getSignatureIndex() { return signature_index; } 146 147 /** @return signature 148 */ getSignature(ConstantPool cp)149 public final String getSignature(ConstantPool cp) { 150 return cp.constantToString(getSignatureIndex(), Constants.CONSTANT_Utf8); 151 } 152 153 /** 154 * @param name_index. 155 */ setNameIndex(int name_index)156 public final void setNameIndex(int name_index) { 157 this.name_index = name_index; 158 } 159 160 /** 161 * @param signature_index. 162 */ setSignatureIndex(int signature_index)163 public final void setSignatureIndex(int signature_index) { 164 this.signature_index = signature_index; 165 } 166 167 /** 168 * @return String representation 169 */ toString()170 public final String toString() { 171 return super.toString() + "(name_index = " + name_index + 172 ", signature_index = " + signature_index + ")"; 173 } 174 } 175