1 cananian 1.1.2.2 // ConstantClass.java, created Mon Jan 18 22:44:36 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_Class_info</code> structure is used to
 8 cananian 1.1.2.1  * represent a class or an interface.
 9 cananian 1.1.2.1  *
10 cananian 1.1.2.1  * @author  C. Scott Ananian <cananian@alumni.princeton.edu>
11 cananian 1.2      * @version $Id: ConstantClass.java,v 1.2 2002/02/25 21:05:26 cananian Exp $
12 cananian 1.1.2.1  * @see "The Java Virtual Machine Specification, section 4.4.1"
13 cananian 1.1.2.1  * @see Constant
14 cananian 1.1.2.1  */
15 cananian 1.1.2.1 public class ConstantClass extends Constant {
16 cananian 1.1.2.1   /** The value of the <code>name_index</code> item must be a valid
17 cananian 1.1.2.1       index into the <code>constant_pool</code> table of
18 cananian 1.1.2.1       <code>parent</code>.  The <code>constant_pool</code> entry at
19 cananian 1.1.2.1       that index must be a <code>CONSTANT_Utf8_info</code> structure
20 cananian 1.1.2.1       representing a valid fully qualified Java class name that has
21 cananian 1.1.2.1       been converted to the <code>class</code> file's internal form. */
22 cananian 1.1.2.1   public int name_index;
23 cananian 1.1.2.1 
24 cananian 1.1.2.1   /** Constructor. */
25 cananian 1.1.2.1   ConstantClass(ClassFile parent, ClassDataInputStream in) 
26 cananian 1.1.2.1     throws java.io.IOException 
27 cananian 1.1.2.1   {
28 cananian 1.1.2.1     super(parent);
29 cananian 1.1.2.1     name_index = in.read_u2();
30 cananian 1.1.2.1   }
31 cananian 1.1.2.1   /** Constructor. */
32 cananian 1.1.2.1   public ConstantClass(ClassFile parent, int name_index) { 
33 cananian 1.1.2.1     super(parent);
34 cananian 1.1.2.1     this.name_index = name_index;
35 cananian 1.1.2.1   }
36 cananian 1.1.2.1 
37 cananian 1.1.2.1   /** Write to a bytecode file. */
38 cananian 1.1.2.1   public void write(ClassDataOutputStream out) throws java.io.IOException {
39 cananian 1.1.2.1     out.write_u1(CONSTANT_Class);
40 cananian 1.1.2.1     out.write_u2(name_index);
41 cananian 1.1.2.1   }
42 cananian 1.1.2.1 
43 cananian 1.1.2.1   // convenience.
44 cananian 1.1.2.1   public ConstantUtf8 name_index()
45 cananian 1.1.2.1   { return (ConstantUtf8) parent.constant_pool[name_index]; }
46 cananian 1.1.2.1 
47 cananian 1.1.2.1   public String name() { return name_index().val; }
48 cananian 1.1.2.1 
49 cananian 1.1.2.1   /** Create a human-readable representation of this constant. */
50 cananian 1.1.2.1   public String toString() {
51 cananian 1.1.2.1     return "CONSTANT_Class: " + name() + " {"+name_index+"}";
52 cananian 1.1.2.1   }
53 cananian 1.2     }