001: /* Copyright (C) 2004 - 2007 db4objects Inc. http://www.db4o.com
002:
003: This file is part of the db4o open source object database.
004:
005: db4o is free software; you can redistribute it and/or modify it under
006: the terms of version 2 of the GNU General Public License as published
007: by the Free Software Foundation and as clarified by db4objects' GPL
008: interpretation policy, available at
009: http://www.db4o.com/about/company/legalpolicies/gplinterpretation/
010: Alternatively you can write to db4objects, Inc., 1900 S Norfolk Street,
011: Suite 350, San Mateo, CA 94403, USA.
012:
013: db4o is distributed in the hope that it will be useful, but WITHOUT ANY
014: WARRANTY; without even the implied warranty of MERCHANTABILITY or
015: FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
016: for more details.
017:
018: You should have received a copy of the GNU General Public License along
019: with this program; if not, write to the Free Software Foundation, Inc.,
020: 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
021: package EDU.purdue.cs.bloat.file;
022:
023: import java.io.*;
024:
025: /**
026: * The ConstantValue attribute stores an index into the constant pool that
027: * represents constant value. A class's static fields have constant value
028: * attributes.
029: *
030: * @see Field
031: *
032: * @author Nate Nystrom (<a
033: * href="mailto:nystrom@cs.purdue.edu">nystrom@cs.purdue.edu</a>)
034: */
035: public class ConstantValue extends Attribute {
036: private int constantValueIndex;
037:
038: /**
039: * Creates a new <code>ConstantValue</code> from scratch
040: *
041: * @param nameIndex
042: * The index in the constant pool of the UTF8 string
043: * "ConstantValue"
044: * @param constantValueIndex
045: * The index in the constant pool of the Constant containing the
046: * constant value
047: */
048: ConstantValue(final int nameIndex, final int length,
049: final int constantValueIndex) {
050: super (nameIndex, length);
051: this .constantValueIndex = constantValueIndex;
052: }
053:
054: /**
055: * Constructor. Create a ConstantValue attribute from a data stream.
056: *
057: * @param in
058: * The data stream of the class file.
059: * @param nameIndex
060: * The index into the constant pool of the name of the attribute.
061: * @param length
062: * The length of the attribute, excluding the header.
063: * @exception IOException
064: * If an error occurs while reading.
065: */
066: public ConstantValue(final DataInputStream in, final int nameIndex,
067: final int length) throws IOException {
068: super (nameIndex, length);
069: constantValueIndex = in.readUnsignedShort();
070: }
071:
072: /**
073: * Write the attribute to a data stream.
074: *
075: * @param out
076: * The data stream of the class file.
077: */
078: public void writeData(final DataOutputStream out)
079: throws IOException {
080: out.writeShort(constantValueIndex);
081: }
082:
083: /**
084: * Returns the index into the constant pool of the constant value.
085: */
086: public int constantValueIndex() {
087: return constantValueIndex;
088: }
089:
090: /**
091: * Set the index into the constant pool of the constant value.
092: */
093: public void setConstantValueIndex(final int index) {
094: this .constantValueIndex = index;
095: }
096:
097: /**
098: * Private constructor used for cloning.
099: */
100: private ConstantValue(final ConstantValue other) {
101: super (other.nameIndex, other.length);
102:
103: this .constantValueIndex = other.constantValueIndex;
104: }
105:
106: public Object clone() {
107: return (new ConstantValue(this ));
108: }
109:
110: /**
111: * Converts the attribute to a string.
112: */
113: public String toString() {
114: return "(constant-value " + constantValueIndex + ")";
115: }
116: }
|