KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > vladium > jcd > cls > constant > CONSTANT_info


1 /* Copyright (C) 2003 Vladimir Roubtsov. All rights reserved.
2  *
3  * This program and the accompanying materials are made available under
4  * the terms of the Common Public License v1.0 which accompanies this distribution,
5  * and is available at http://www.eclipse.org/legal/cpl-v10.html
6  *
7  * $Id: CONSTANT_info.java,v 1.1.1.1 2004/05/09 16:57:48 vlad_r Exp $
8  */

9 package com.vladium.jcd.cls.constant;
10
11 import java.io.IOException JavaDoc;
12
13 import com.vladium.jcd.compiler.IClassFormatOutput;
14 import com.vladium.jcd.lib.UDataInputStream;
15 import com.vladium.jcd.lib.UDataOutputStream;
16
17 // ----------------------------------------------------------------------------
18
/**
19  * An abstract base for all other CONSTANT_XXX_info structures. See $4.4 in VM
20  * spec 1.0 for all such structure definitions.
21  *
22  * @author (C) 2001, Vlad Roubtsov
23  */

24 public
25 abstract class CONSTANT_info implements Cloneable JavaDoc, IClassFormatOutput
26 {
27     // public: ................................................................
28

29     
30     /**
31      * Returns the tag byte for this CONSTANT type [this data is
32      * static class data].
33      */

34     public abstract byte tag ();
35     
36     // Visitor:
37

38     public abstract Object JavaDoc accept (ICONSTANTVisitor visitor, Object JavaDoc ctx);
39     
40     public abstract String JavaDoc toString ();
41     
42     /**
43      * Returns the number of constant pool index slots occupied by this
44      * CONSTANT type. This implementation defaults to returning '1'.
45      *
46      * @see CONSTANT_Long_info
47      * @see CONSTANT_Long_info
48      *
49      * @return int
50      */

51     public int width ()
52     {
53         return 1;
54     }
55     
56     
57     /**
58      * Virtual constructor method for all CONSTANT_XXX_info structures.
59      */

60     public static CONSTANT_info new_CONSTANT_info (final UDataInputStream bytes)
61         throws IOException JavaDoc
62     {
63         byte tag = bytes.readByte ();
64         
65         switch (tag)
66         {
67         case CONSTANT_Utf8_info.TAG:
68             return new CONSTANT_Utf8_info (bytes);
69             
70         case CONSTANT_Integer_info.TAG:
71             return new CONSTANT_Integer_info (bytes);
72             
73         case CONSTANT_Float_info.TAG:
74             return new CONSTANT_Float_info (bytes);
75             
76         case CONSTANT_Long_info.TAG:
77             return new CONSTANT_Long_info (bytes);
78             
79         case CONSTANT_Double_info.TAG:
80             return new CONSTANT_Double_info (bytes);
81         
82             
83         case CONSTANT_Class_info.TAG:
84             return new CONSTANT_Class_info (bytes);
85             
86         case CONSTANT_String_info.TAG:
87             return new CONSTANT_String_info (bytes);
88             
89             
90         case CONSTANT_Fieldref_info.TAG:
91             return new CONSTANT_Fieldref_info (bytes);
92             
93         case CONSTANT_Methodref_info.TAG:
94             return new CONSTANT_Methodref_info (bytes);
95             
96         case CONSTANT_InterfaceMethodref_info.TAG:
97             return new CONSTANT_InterfaceMethodref_info (bytes);
98             
99             
100         case CONSTANT_NameAndType_info.TAG:
101             return new CONSTANT_NameAndType_info (bytes);
102             
103         default: throw new IllegalStateException JavaDoc ("CONSTANT_info: invalid tag value [" + tag + ']');
104                  
105         } // end of switch
106
}
107     
108     // Cloneable:
109

110     /**
111      * Chains to super.clone() and removes CloneNotSupportedException
112      * from the method signature.
113      */

114     public Object JavaDoc clone ()
115     {
116         try
117         {
118             return super.clone ();
119         }
120         catch (CloneNotSupportedException JavaDoc e)
121         {
122             throw new InternalError JavaDoc (e.toString ());
123         }
124     }
125     
126     // IClassFormatOutput:
127

128     public void writeInClassFormat (final UDataOutputStream out) throws IOException JavaDoc
129     {
130         out.writeByte (tag ());
131     }
132     
133     public static String JavaDoc tagToString (final CONSTANT_info constant)
134     {
135         switch (constant.tag ())
136         {
137         case CONSTANT_Utf8_info.TAG:
138             return "CONSTANT_Utf8";
139             
140         case CONSTANT_Integer_info.TAG:
141             return "CONSTANT_Integer";
142             
143         case CONSTANT_Float_info.TAG:
144             return "CONSTANT_Float";
145             
146         case CONSTANT_Long_info.TAG:
147             return "CONSTANT_Long";
148             
149         case CONSTANT_Double_info.TAG:
150             return "CONSTANT_Double";
151         
152             
153         case CONSTANT_Class_info.TAG:
154             return "CONSTANT_Class";
155             
156         case CONSTANT_String_info.TAG:
157             return "CONSTANT_String";
158             
159             
160         case CONSTANT_Fieldref_info.TAG:
161             return "CONSTANT_Fieldref";
162             
163         case CONSTANT_Methodref_info.TAG:
164             return "CONSTANT_Methodref";
165             
166         case CONSTANT_InterfaceMethodref_info.TAG:
167             return "CONSTANT_InterfaceMethodref";
168             
169             
170         case CONSTANT_NameAndType_info.TAG:
171             return "CONSTANT_NameAndType";
172             
173         default: throw new IllegalStateException JavaDoc ("CONSTANT_info: invalid tag value [" + constant.tag () + ']');
174                  
175         } // end of switch
176
}
177     
178     // protected: .............................................................
179

180     /*
181     protected static final byte CONSTANT_Utf8 = 1;
182     protected static final byte CONSTANT_Integer = 3;
183     protected static final byte CONSTANT_Float = 4;
184     protected static final byte CONSTANT_Long = 5;
185     protected static final byte CONSTANT_Double = 6;
186     protected static final byte CONSTANT_Class = 7;
187     protected static final byte CONSTANT_String = 8;
188     protected static final byte CONSTANT_Fieldref = 9;
189     protected static final byte CONSTANT_Methodref = 10;
190     protected static final byte CONSTANT_InterfaceMethodref = 11;
191     protected static final byte CONSTANT_NameAndType = 12;
192     */

193     
194     protected CONSTANT_info ()
195     {
196     }
197     
198     // package: ...............................................................
199

200     // private: ...............................................................
201

202 } // end of class
203
// ----------------------------------------------------------------------------
204
Popular Tags