1 cananian 1.1.2.2 // ConstantNameAndType.java, created Mon Jan 18 22:44:37 1999 by cananian 2 cananian 1.1.2.1 // Copyright (C) 1998 C. Scott Ananian <cananian@alumni.princeton.edu> 3 cananian 1.1.2.1 // Licensed under the terms of the GNU GPL; see COPYING for details. 4 cananian 1.1.2.1 package harpoon.IR.RawClass; 5 cananian 1.1.2.1 6 cananian 1.1.2.1 /** 7 cananian 1.1.2.1 * The <code>CONSTANT_NameAndType_info</code> structure is used to 8 cananian 1.1.2.1 * represent a field or method, without indicating which class or 9 cananian 1.1.2.1 * interface type it belongs to. 10 cananian 1.1.2.1 * 11 cananian 1.1.2.1 * @author C. Scott Ananian <cananian@alumni.princeton.edu> 12 cananian 1.2 * @version $Id: ConstantNameAndType.java,v 1.2 2002/02/25 21:05:27 cananian Exp $ 13 cananian 1.1.2.1 * @see "The Java Virtual Machine Specification, section 4.4.6" 14 cananian 1.1.2.1 * @see Constant 15 cananian 1.1.2.1 */ 16 cananian 1.1.2.1 public class ConstantNameAndType extends Constant { 17 cananian 1.1.2.1 /** The value of the <code>name_index</code> must be a valid index 18 cananian 1.1.2.1 into the <code>constant_pool</code> table. The 19 cananian 1.1.2.1 <code>constant_pool</code> entry at that index must be a 20 cananian 1.1.2.1 <code>CONSTANT_Utf8_info</code> structure representing a valid 21 cananian 1.1.2.1 Java field name or method name stored as a simple (not fully 22 cananian 1.1.2.1 qualified) name, that is, as a Java identifier. */ 23 cananian 1.1.2.1 public int name_index; 24 cananian 1.1.2.1 /** the value of the <code>descriptor_index</code> must be a valid 25 cananian 1.1.2.1 index into the <code>constant_pool</code> table. The 26 cananian 1.1.2.1 <code>constant_pool</code> entry at that index must be a 27 cananian 1.1.2.1 <code>CONSTANT_Utf8_info</code> structure representing a valid 28 cananian 1.1.2.1 Java field descriptor or method descriptor. */ 29 cananian 1.1.2.1 public int descriptor_index; 30 cananian 1.1.2.1 31 cananian 1.1.2.1 /** Constructor. */ 32 cananian 1.1.2.1 ConstantNameAndType(ClassFile parent, ClassDataInputStream in) 33 cananian 1.1.2.1 throws java.io.IOException { 34 cananian 1.1.2.1 super(parent); 35 cananian 1.1.2.1 name_index = in.read_u2(); 36 cananian 1.1.2.1 descriptor_index = in.read_u2(); 37 cananian 1.1.2.1 } 38 cananian 1.1.2.1 /** Constructor. */ 39 cananian 1.1.2.1 public ConstantNameAndType(ClassFile parent, 40 cananian 1.1.2.1 int name_index, int descriptor_index) { 41 cananian 1.1.2.1 super(parent); 42 cananian 1.1.2.1 this.name_index = name_index; 43 cananian 1.1.2.1 this.descriptor_index = descriptor_index; 44 cananian 1.1.2.1 } 45 cananian 1.1.2.1 46 cananian 1.1.2.1 /** Write to a bytecode file. */ 47 cananian 1.1.2.1 public void write(ClassDataOutputStream out) throws java.io.IOException { 48 cananian 1.1.2.1 out.write_u1(CONSTANT_NameAndType); 49 cananian 1.1.2.1 out.write_u2(name_index); 50 cananian 1.1.2.1 out.write_u2(descriptor_index); 51 cananian 1.1.2.1 } 52 cananian 1.1.2.1 53 cananian 1.1.2.1 // convenience. 54 cananian 1.1.2.1 public ConstantUtf8 name_index() 55 cananian 1.1.2.1 { return (ConstantUtf8) parent.constant_pool[name_index]; } 56 cananian 1.1.2.1 public ConstantUtf8 descriptor_index() 57 cananian 1.1.2.1 { return (ConstantUtf8) parent.constant_pool[descriptor_index]; } 58 cananian 1.1.2.1 59 cananian 1.1.2.1 public String name() { return name_index().val; } 60 cananian 1.1.2.1 public String descriptor() { return descriptor_index().val; } 61 cananian 1.1.2.1 62 cananian 1.1.2.1 /** Create a human-readable representation of this constant. */ 63 cananian 1.1.2.1 public String toString() { 64 cananian 1.1.2.1 return "CONSTANT_NameAndType: " + 65 cananian 1.1.2.1 name()+" {"+name_index+"} " + 66 cananian 1.1.2.1 descriptor()+" {"+descriptor_index+"}"; 67 cananian 1.1.2.1 } 68 cananian 1.2 }