001: /*
002: * Copyright 1998-2004 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004: *
005: * This code is free software; you can redistribute it and/or modify it
006: * under the terms of the GNU General Public License version 2 only, as
007: * published by the Free Software Foundation. Sun designates this
008: * particular file as subject to the "Classpath" exception as provided
009: * by Sun in the LICENSE file that accompanied this code.
010: *
011: * This code is distributed in the hope that it will be useful, but WITHOUT
012: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014: * version 2 for more details (a copy is included in the LICENSE file that
015: * accompanied this code).
016: *
017: * You should have received a copy of the GNU General Public License version
018: * 2 along with this work; if not, write to the Free Software Foundation,
019: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020: *
021: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022: * CA 95054 USA or visit www.sun.com if you need additional information or
023: * have any questions.
024: */
025:
026: package com.sun.jdi;
027:
028: /**
029: * A class or instance variable in the target VM.
030: * See {@link TypeComponent}
031: * for general information about Field and Method mirrors.
032: *
033: * @see ObjectReference
034: * @see ReferenceType
035: *
036: * @author Robert Field
037: * @author Gordon Hirsch
038: * @author James McIlree
039: * @since 1.3
040: */
041: public interface Field extends TypeComponent, Comparable<Field> {
042:
043: /**
044: * Returns a text representation of the type
045: * of this field.
046: * Where the type is the type specified in the declaration
047: * of this field.
048: * <P>
049: * This type name is always available even if
050: * the type has not yet been created or loaded.
051: *
052: * @return a String representing the
053: * type of this field.
054: */
055: String typeName();
056:
057: /**
058: * Returns the type of this field.
059: * Where the type is the type specified in the declaration
060: * of this field.
061: * <P>
062: * For example, if a target class defines:
063: * <PRE>
064: * short s;
065: * Date d;
066: * byte[] ba;</PRE>
067: * And the JDI client defines these <CODE>Field</CODE> objects:
068: * <PRE>
069: * Field sField = targetClass.fieldByName("s");
070: * Field dField = targetClass.fieldByName("d");
071: * Field baField = targetClass.fieldByName("ba");</PRE>
072: * to mirror the corresponding fields, then <CODE>sField.type()</CODE>
073: * is a {@link ShortType}, <CODE>dField.type()</CODE> is the
074: * {@link ReferenceType} for <CODE>java.util.Date</CODE> and
075: * <CODE>((ArrayType)(baField.type())).componentType()</CODE> is a
076: * {@link ByteType}.
077: * <P>
078: * Note: if the type of this field is a reference type (class,
079: * interface, or array) and it has not been created or loaded
080: * by the declaring type's class loader - that is,
081: * {@link TypeComponent#declaringType <CODE>declaringType()</CODE>}
082: * <CODE>.classLoader()</CODE>,
083: * then ClassNotLoadedException will be thrown.
084: * Also, a reference type may have been loaded but not yet prepared,
085: * in which case the type will be returned
086: * but attempts to perform some operations on the returned type
087: * (e.g. {@link ReferenceType#fields() fields()}) will throw
088: * a {@link ClassNotPreparedException}.
089: * Use {@link ReferenceType#isPrepared()} to determine if
090: * a reference type is prepared.
091: *
092: * @see Type
093: * @return the {@link Type} of this field.
094: * @throws ClassNotLoadedException if the type has not yet been loaded
095: * or created through the appropriate class loader.
096: */
097: Type type() throws ClassNotLoadedException;
098:
099: /**
100: * Determine if this is a transient field.
101: *
102: * @return <code>true</code> if this field is transient; false otherwise.
103: */
104: boolean isTransient();
105:
106: /**
107: * Determine if this is a volatile field.
108: *
109: * @return <code>true</code> if this field is volatile; false otherwise.
110: */
111: boolean isVolatile();
112:
113: /**
114: * Determine if this is a field that represents an enum constant.
115: * @return <code>true</code> if this field represents an enum constant;
116: * false otherwise.
117: */
118: boolean isEnumConstant();
119:
120: /**
121: * Compares the specified Object with this field for equality.
122: *
123: * @return true if the Object is a Field and if both
124: * mirror the same field (declared in the same class or interface, in
125: * the same VM).
126: */
127: boolean equals(Object obj);
128:
129: /**
130: * Returns the hash code value for this Field.
131: *
132: * @return the integer hash code
133: */
134: int hashCode();
135: }
|