KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > sun > org > apache > bcel > internal > classfile > Field


1 package com.sun.org.apache.bcel.internal.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 import com.sun.org.apache.bcel.internal.Constants;
57 import java.io.*;
58
59 /**
60  * This class represents the field info structure, i.e., the representation
61  * for a variable in the class. See JVM specification for details.
62  *
63  * @version $Id: Field.java,v 1.1.1.1 2001/10/29 20:00:01 jvanzyl Exp $
64  * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
65  */

66 public final class Field extends FieldOrMethod {
67   /**
68    * Initialize from another object. Note that both objects use the same
69    * references (shallow copy). Use clone() for a physical copy.
70    */

71   public Field(Field c) {
72     super(c);
73   }
74
75   /**
76    * Construct object from file stream.
77    * @param file Input stream
78    */

79   Field(DataInputStream file, ConstantPool constant_pool)
80        throws IOException, ClassFormatError JavaDoc
81   {
82     super(file, constant_pool);
83   }
84
85   /**
86    * @param access_flags Access rights of field
87    * @param name_index Points to field name in constant pool
88    * @param signature_index Points to encoded signature
89    * @param attributes Collection of attributes
90    * @param constant_pool Array of constants
91    */

92   public Field(int access_flags, int name_index, int signature_index,
93            Attribute[] attributes, ConstantPool constant_pool)
94   {
95     super(access_flags, name_index, signature_index, attributes, constant_pool);
96   }
97
98   /**
99    * Called by objects that are traversing the nodes of the tree implicitely
100    * defined by the contents of a Java class. I.e., the hierarchy of methods,
101    * fields, attributes, etc. spawns a tree of objects.
102    *
103    * @param v Visitor object
104    */

105   public void accept(Visitor v) {
106     v.visitField(this);
107   }
108
109   /**
110    * @return constant value associated with this field (may be null)
111    */

112   public final ConstantValue getConstantValue() {
113     for(int i=0; i < attributes_count; i++)
114       if(attributes[i].getTag() == Constants.ATTR_CONSTANT_VALUE)
115     return (ConstantValue)attributes[i];
116
117     return null;
118   }
119
120   /**
121    * Return string representation close to declaration format,
122    * `public static final short MAX = 100', e.g..
123    *
124    * @return String representation of field, including the signature.
125    */

126   public final String JavaDoc toString() {
127     String JavaDoc name, signature, access; // Short cuts to constant pool
128

129     // Get names from constant pool
130
access = Utility.accessToString(access_flags);
131     access = access.equals("")? "" : (access + " ");
132     signature = Utility.signatureToString(getSignature());
133     name = getName();
134
135     StringBuffer JavaDoc buf = new StringBuffer JavaDoc(access + signature + " " + name);
136     ConstantValue cv = getConstantValue();
137
138     if(cv != null)
139       buf.append(" = " + cv);
140
141     for(int i=0; i < attributes_count; i++) {
142       Attribute a = attributes[i];
143
144       if(!(a instanceof ConstantValue))
145     buf.append(" [" + a.toString() + "]");
146     }
147
148     return buf.toString();
149   }
150
151   /**
152    * @return deep copy of this field
153    */

154   public final Field copy(ConstantPool constant_pool) {
155     return (Field)copy_(constant_pool);
156   }
157 }
158
Popular Tags