Mercurial > hg > truffle
comparison graal/com.oracle.jvmci.meta/src/com/oracle/jvmci/meta/JavaType.java @ 21556:48c1ebd24120
renamed com.oracle.graal.api[meta|code] modules to com.oracle.jvmci.[meta|code] (JBS:GRAAL-53)
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 27 May 2015 00:36:16 +0200 |
parents | graal/com.oracle.graal.api.meta/src/com/oracle/graal/api/meta/JavaType.java@bf7db79a6e45 |
children |
comparison
equal
deleted
inserted
replaced
21555:d12eaef9af72 | 21556:48c1ebd24120 |
---|---|
1 /* | |
2 * Copyright (c) 2009, 2012, Oracle and/or its affiliates. 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | |
20 * or visit www.oracle.com if you need additional information or have any | |
21 * questions. | |
22 */ | |
23 package com.oracle.jvmci.meta; | |
24 | |
25 import static com.oracle.jvmci.meta.MetaUtil.*; | |
26 | |
27 /** | |
28 * Represents a resolved or unresolved type. Types include primitives, objects, {@code void}, and | |
29 * arrays thereof. | |
30 */ | |
31 public interface JavaType extends TrustedInterface { | |
32 | |
33 /** | |
34 * Returns the name of this type in internal form. The following are examples of strings | |
35 * returned by this method: | |
36 * | |
37 * <pre> | |
38 * "Ljava/lang/Object;" | |
39 * "I" | |
40 * "[[B" | |
41 * </pre> | |
42 */ | |
43 String getName(); | |
44 | |
45 /** | |
46 * Returns an unqualified name of this type. | |
47 * | |
48 * <pre> | |
49 * "Object" | |
50 * "Integer" | |
51 * </pre> | |
52 */ | |
53 default String getUnqualifiedName() { | |
54 String name = getName(); | |
55 if (name.indexOf('/') != -1) { | |
56 name = name.substring(name.lastIndexOf('/') + 1); | |
57 } | |
58 if (name.endsWith(";")) { | |
59 name = name.substring(0, name.length() - 1); | |
60 } | |
61 return name; | |
62 } | |
63 | |
64 /** | |
65 * For array types, gets the type of the components, or {@code null} if this is not an array | |
66 * type. This method is analogous to {@link Class#getComponentType()}. | |
67 */ | |
68 JavaType getComponentType(); | |
69 | |
70 /** | |
71 * Gets the elemental type for this given type. The elemental type is the corresponding zero | |
72 * dimensional type of an array type. For example, the elemental type of {@code int[][][]} is | |
73 * {@code int}. A non-array type is its own elemental type. | |
74 */ | |
75 default JavaType getElementalType() { | |
76 JavaType t = this; | |
77 while (t.getComponentType() != null) { | |
78 t = t.getComponentType(); | |
79 } | |
80 return t; | |
81 } | |
82 | |
83 /** | |
84 * Gets the array class type representing an array with elements of this type. | |
85 */ | |
86 JavaType getArrayClass(); | |
87 | |
88 /** | |
89 * Gets the kind of this type. | |
90 */ | |
91 Kind getKind(); | |
92 | |
93 /** | |
94 * Resolves this type to a {@link ResolvedJavaType}. | |
95 * | |
96 * @param accessingClass the context of resolution (must not be null) | |
97 * @return the resolved Java type | |
98 * @throws LinkageError if the resolution failed | |
99 * @throws NullPointerException if {@code accessingClass} is {@code null} | |
100 */ | |
101 ResolvedJavaType resolve(ResolvedJavaType accessingClass); | |
102 | |
103 /** | |
104 * Gets the Java programming language name for this type. The following are examples of strings | |
105 * returned by this method: | |
106 * | |
107 * <pre> | |
108 * java.lang.Object | |
109 * int | |
110 * boolean[][] | |
111 * </pre> | |
112 * | |
113 * @return the Java name corresponding to this type | |
114 */ | |
115 default String toJavaName() { | |
116 return internalNameToJava(getName(), true, false); | |
117 } | |
118 | |
119 /** | |
120 * Gets the Java programming language name for this type. The following are examples of strings | |
121 * returned by this method: | |
122 * | |
123 * <pre> | |
124 * qualified == true: | |
125 * java.lang.Object | |
126 * int | |
127 * boolean[][] | |
128 * qualified == false: | |
129 * Object | |
130 * int | |
131 * boolean[][] | |
132 * </pre> | |
133 * | |
134 * @param qualified specifies if the package prefix of this type should be included in the | |
135 * returned name | |
136 * @return the Java name corresponding to this type | |
137 */ | |
138 default String toJavaName(boolean qualified) { | |
139 Kind kind = getKind(); | |
140 if (kind == Kind.Object) { | |
141 return internalNameToJava(getName(), qualified, false); | |
142 } | |
143 return getKind().getJavaName(); | |
144 } | |
145 | |
146 /** | |
147 * Returns this type's name in the same format as {@link Class#getName()}. | |
148 */ | |
149 default String toClassName() { | |
150 return internalNameToJava(getName(), true, true); | |
151 } | |
152 | |
153 } |