comparison agent/src/share/classes/sun/jvm/hotspot/types/Type.java @ 0:a61af66fc99e jdk7-b24

Initial load
author duke
date Sat, 01 Dec 2007 00:00:00 +0000
parents
children ba764ed4b6f2
comparison
equal deleted inserted replaced
-1:000000000000 0:a61af66fc99e
1 /*
2 * Copyright 2000-2005 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
20 * CA 95054 USA or visit www.sun.com if you need additional information or
21 * have any questions.
22 *
23 */
24
25 package sun.jvm.hotspot.types;
26
27 import java.util.*;
28
29 /** This is the top-level interface which describes C++ classes and
30 primitive types as well as enough about Java primitive and object
31 types to allow the oop hierarchy to be constructed. */
32
33 public interface Type {
34 public String getName();
35
36 /* The supertype of this type. May be null for top-level classes and
37 primitive types. NOTE that multiple inheritance is currently not
38 handled. However, it could (probably) be by making this return a
39 list and adding appropriate routines to cast an address of one
40 type to another. */
41 public Type getSuperclass();
42
43 /** The size in bytes, at the machine level, of this type. This
44 should be equivalent to the sizeof operator -- i.e., should
45 include any compiler-inserted fields like the vtbl for C++
46 types. */
47 public long getSize();
48
49 /** Indicates whether this type is a C integer type -- regardless of
50 size or signedness. */
51 public boolean isCIntegerType();
52
53 /** Indicates whether this type is const char*. */
54 public boolean isCStringType();
55
56 /** Indicates whether this type is one of the Java primitive types. */
57 public boolean isJavaPrimitiveType();
58
59 /** Indicates whether this type is an oop type in the VM. */
60 public boolean isOopType();
61
62 /** Indicates whether this type is a pointer type. */
63 public boolean isPointerType();
64
65 /** This is permissive and returns the CField regardless of its type
66 as long as it is present. Returns null if the field was not
67 found, unless throwExceptionIfNotFound is true, in which case a
68 RuntimeException is thrown (for debugging purposes). */
69 public Field getField(String fieldName, boolean searchSuperclassFields,
70 boolean throwExceptionIfNotFound);
71
72 /** This is permissive and returns the CField regardless of its type
73 as long as it is present -- it is equivalent to
74 getField(fieldName, searchSuperclassFields, true). Throws a
75 RuntimeException if the field was not found. */
76 public Field getField(String fieldName, boolean searchSuperclassFields);
77
78 /** This is permissive and returns the CField regardless of its type
79 as long as it is present. This does not search superclasses'
80 fields; it is equivalent to getField(fieldName, false). Throws a
81 RuntimeException if the field was not found. */
82 public Field getField(String fieldName);
83
84 /** If there is a mismatch between the declared type and the type
85 which would otherwise be returned from this routine, it throws a
86 WrongTypeException. declaredType must not be null. Throws a
87 RuntimeException if field was otherwise not found. */
88 public Field getField(String fieldName, Type declaredType,
89 boolean searchSuperclassFields) throws WrongTypeException;
90
91 /** If there is a mismatch between the declared type and the type
92 which would otherwise be returned from this routine, it throws a
93 WrongTypeException. declaredType must not be null. This does not
94 search superclasses' fields; it is equivalent to
95 getField(fieldName, declaredType, false). Throws a
96 RuntimeException if field was otherwise not found. */
97 public Field getField(String fieldName, Type declaredType) throws WrongTypeException;
98
99 /** Iterate over all of the fields in this type but <B>not</B> in
100 any of its superclasses. The returned Iterator's "remove" method
101 must not be called. */
102 public Iterator getFields();
103
104 /** <P> These accessors are designed to allow strong type checking
105 of certain well-known types of fields, specifically Java
106 primitive and oop types. Specialized fields for all primitive
107 types, as well as oop fields, are required to have strong type
108 checking and a WrongTypeException should be thrown if the given
109 field is not precisely of the given type. Address and Oop fields
110 are more permissive to reduce the complexity of the initial
111 implementation. </P>
112
113 <P> These accessors do not search the superclass's fields. </P>
114 */
115 public JBooleanField getJBooleanField (String fieldName) throws WrongTypeException;
116 public JByteField getJByteField (String fieldName) throws WrongTypeException;
117 public JCharField getJCharField (String fieldName) throws WrongTypeException;
118 public JDoubleField getJDoubleField (String fieldName) throws WrongTypeException;
119 public JFloatField getJFloatField (String fieldName) throws WrongTypeException;
120 public JIntField getJIntField (String fieldName) throws WrongTypeException;
121 public JLongField getJLongField (String fieldName) throws WrongTypeException;
122 public JShortField getJShortField (String fieldName) throws WrongTypeException;
123 public CIntegerField getCIntegerField (String fieldName) throws WrongTypeException;
124 public OopField getOopField (String fieldName) throws WrongTypeException;
125 public AddressField getAddressField (String fieldName);
126 }