annotate graal/com.oracle.graal.hotspot/src/com/oracle/graal/hotspot/meta/HotSpotResolvedObjectType.java @ 15722:c583759bbcfd

ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
author Gilles Duboscq <duboscq@ssw.jku.at>
date Fri, 18 Apr 2014 13:50:15 +0200
parents 820c6d353358
children ef6b8d1898e6
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
1 /*
7819
aa022eaf1569 class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
2 * Copyright (c) 2011, 2013, Oracle and/or its affiliates. All rights reserved.
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
4 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
5 * This code is free software; you can redistribute it and/or modify it
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
6 * under the terms of the GNU General Public License version 2 only, as
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
7 * published by the Free Software Foundation.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
8 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
9 * This code is distributed in the hope that it will be useful, but WITHOUT
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
12 * version 2 for more details (a copy is included in the LICENSE file that
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
13 * accompanied this code).
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
14 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
15 * You should have received a copy of the GNU General Public License version
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
16 * 2 along with this work; if not, write to the Free Software Foundation,
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
18 *
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
20 * or visit www.oracle.com if you need additional information or have any
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
21 * questions.
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
22 */
5548
8872bc0eebdf Renaming hotspot.ri => hotspot.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5545
diff changeset
23 package com.oracle.graal.hotspot.meta;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
24
7044
34753b057324 added unit tests for JavaType, JavaMethod and ResolvedJavaMethod
Doug Simon <doug.simon@oracle.com>
parents: 7037
diff changeset
25 import static com.oracle.graal.api.meta.MetaUtil.*;
15291
471e28b8f03b Move UnsafeAccess to graal.compiler.common.
Josef Eisl <josef.eisl@jku.at>
parents: 15193
diff changeset
26 import static com.oracle.graal.compiler.common.UnsafeAccess.*;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
27 import static com.oracle.graal.hotspot.HotSpotGraalRuntime.*;
15722
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
28
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
29 import java.lang.annotation.*;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
30 import java.lang.reflect.*;
7819
aa022eaf1569 class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
31 import java.net.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
32 import java.util.*;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
33
5507
dc71b06d09f8 Moving classes from cri.ri to api.meta.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5504
diff changeset
34 import com.oracle.graal.api.meta.*;
15193
96bb07a5d667 Spit up and move GraalInternalError.
Josef Eisl <josef.eisl@jku.at>
parents: 15053
diff changeset
35 import com.oracle.graal.compiler.common.*;
5466
af07e798947d lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents: 5326
diff changeset
36 import com.oracle.graal.hotspot.*;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
37
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
38 /**
5775
2c088af17e59 Removed left over Ri* prefixed identifiers
Doug Simon <doug.simon@oracle.com>
parents: 5760
diff changeset
39 * Implementation of {@link JavaType} for resolved non-primitive HotSpot classes.
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
40 */
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
41 public final class HotSpotResolvedObjectType extends HotSpotResolvedJavaType {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
42
4142
bc8527f3071c Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 3733
diff changeset
43 private static final long serialVersionUID = 3481514353553840471L;
5287
e96c8d2925da let NodeClass.getDebugProperties handle arrays and doubles
Lukas Stadler <lukas.stadler@jku.at>
parents: 5278
diff changeset
44
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
45 /**
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
46 * The Java class this type represents.
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
47 */
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
48 private final Class<?> javaClass;
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
49
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
50 private HashMap<Long, HotSpotResolvedJavaField> fieldCache;
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
51 private HashMap<Long, HotSpotResolvedJavaMethod> methodCache;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
52 private HotSpotResolvedJavaField[] instanceFields;
6699
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
53 private ResolvedJavaType[] interfaces;
5541
b4c406861c33 More renamings to drop Ri* prefix completely. Deleted graph.BitMap class and replaced with java.util.BitSet.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5540
diff changeset
54 private ConstantPool constantPool;
b4c406861c33 More renamings to drop Ri* prefix completely. Deleted graph.BitMap class and replaced with java.util.BitSet.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5540
diff changeset
55 private ResolvedJavaType arrayOfType;
5760
87e8baf5447c added snippets for lowering array creation and initialization (in NewObjectSnippets)
Doug Simon <doug.simon@oracle.com>
parents: 5686
diff changeset
56
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
57 /**
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
58 * Gets the Graal mirror from a HotSpot metaspace Klass native object.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
59 *
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
60 * @param metaspaceKlass a metaspace Klass object boxed in a {@link Constant}
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
61 * @return the {@link ResolvedJavaType} corresponding to {@code klassConstant}
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
62 */
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
63 public static ResolvedJavaType fromMetaspaceKlass(Constant metaspaceKlass) {
7098
e23980f4a890 Cleanup of Kind class: remove isXxx methods
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7097
diff changeset
64 assert metaspaceKlass.getKind() == Kind.Long;
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
65 return fromMetaspaceKlass(metaspaceKlass.asLong());
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
66 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
67
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
68 /**
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
69 * Gets the Graal mirror from a HotSpot metaspace Klass native object.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
70 *
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
71 * @param metaspaceKlass a metaspace Klass object
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
72 * @return the {@link ResolvedJavaType} corresponding to {@code metaspaceKlass}
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
73 */
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
74 public static ResolvedJavaType fromMetaspaceKlass(long metaspaceKlass) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
75 assert metaspaceKlass != 0;
15053
Doug Simon <doug.simon@oracle.com>
parents: 15052 15040
diff changeset
76 Class<?> javaClass = runtime().getCompilerToVM().getJavaMirror(metaspaceKlass);
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
77 assert javaClass != null;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
78 return fromClass(javaClass);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
79 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
80
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
81 /**
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
82 * Creates the Graal mirror for a {@link Class} object.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
83 *
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
84 * <p>
13479
606959535fd4 remove Graal mirror from Class
twisti
parents: 13478
diff changeset
85 * <b>NOTE</b>: Creating an instance of this class does not install the mirror for the
606959535fd4 remove Graal mirror from Class
twisti
parents: 13478
diff changeset
86 * {@link Class} type. Use {@link #fromClass(Class)}, {@link #fromMetaspaceKlass(Constant)} or
606959535fd4 remove Graal mirror from Class
twisti
parents: 13478
diff changeset
87 * {@link #fromMetaspaceKlass(long)} instead.
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
88 * </p>
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
89 *
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
90 * @param javaClass the Class to create the mirror for
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
91 */
13479
606959535fd4 remove Graal mirror from Class
twisti
parents: 13478
diff changeset
92 public HotSpotResolvedObjectType(Class<?> javaClass) {
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
93 super(getSignatureName(javaClass));
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
94 this.javaClass = javaClass;
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
95 assert getName().charAt(0) != '[' || isArray() : getName();
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
96 }
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
97
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
98 /**
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
99 * Returns the name of this type as it would appear in a signature.
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
100 */
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
101 private static String getSignatureName(Class<?> javaClass) {
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
102 if (javaClass.isArray()) {
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
103 return javaClass.getName().replace('.', '/');
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
104 }
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
105 return "L" + javaClass.getName().replace('.', '/') + ";";
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
106 }
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
107
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
108 /**
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
109 * Gets the metaspace Klass for this type.
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
110 */
14093
dd783f0ecf17 refactor CompilerToVM interface
twisti
parents: 14091
diff changeset
111 private long metaspaceKlass() {
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
112 return HotSpotGraalRuntime.unsafeReadWord(javaClass, runtime().getConfig().klassOffset);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
113 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
114
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
115 @Override
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
116 public int getModifiers() {
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
117 return mirror().getModifiers();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
118 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
119
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
120 public int getAccessFlags() {
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
121 HotSpotVMConfig config = runtime().getConfig();
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
122 return unsafe.getInt(metaspaceKlass() + config.klassAccessFlagsOffset);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
123 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
124
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
125 @Override
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
126 public ResolvedJavaType getArrayClass() {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
127 if (arrayOfType == null) {
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
128 arrayOfType = fromClass(Array.newInstance(mirror(), 0).getClass());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
129 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
130 return arrayOfType;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
131 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
132
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
133 @Override
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
134 public ResolvedJavaType getComponentType() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
135 Class<?> javaComponentType = mirror().getComponentType();
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
136 return javaComponentType == null ? null : fromClass(javaComponentType);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
137 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
138
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
139 @Override
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
140 public ResolvedJavaType findUniqueConcreteSubtype() {
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
141 HotSpotVMConfig config = runtime().getConfig();
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7059
diff changeset
142 if (isArray()) {
15311
820c6d353358 added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents: 15291
diff changeset
143 return getElementalType(this).isFinal() ? this : null;
7225
31c4d9f9e922 adder better CHA support
Christian Haeubl <haeubl@ssw.jku.at>
parents: 7221
diff changeset
144 } else if (isInterface()) {
13478
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
145 final long implementorMetaspaceKlass = runtime().getCompilerToVM().getKlassImplementor(metaspaceKlass());
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
146
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
147 // No implementor.
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
148 if (implementorMetaspaceKlass == 0) {
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
149 return null;
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
150 }
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
151
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
152 HotSpotResolvedObjectType type = (HotSpotResolvedObjectType) fromMetaspaceKlass(implementorMetaspaceKlass);
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
153
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
154 /*
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
155 * If the implementor field contains itself that indicates that the interface has more
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
156 * than one implementors (see: InstanceKlass::add_implementor). The isInterface check
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
157 * takes care of this fact since this class is an interface.
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
158 */
15311
820c6d353358 added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents: 15291
diff changeset
159 if (type.isAbstract() || type.isInterface() || !type.isLeafClass()) {
13478
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
160 return null;
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
161 }
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
162 return type;
4433
b494d6f329a3 some more checkcast opts
Lukas Stadler <lukas.stadler@jku.at>
parents: 4220
diff changeset
163 } else {
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
164 HotSpotResolvedObjectType type = this;
15311
820c6d353358 added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents: 15291
diff changeset
165 while (type.isAbstract()) {
13478
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
166 long subklass = type.getSubklass();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
167 if (subklass == 0 || unsafeReadWord(subklass + config.nextSiblingOffset) != 0) {
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
168 return null;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
169 }
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
170 type = (HotSpotResolvedObjectType) fromMetaspaceKlass(subklass);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
171 }
15311
820c6d353358 added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents: 15291
diff changeset
172 if (type.isAbstract() || type.isInterface() || !type.isLeafClass()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
173 return null;
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
174 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
175 return type;
4433
b494d6f329a3 some more checkcast opts
Lukas Stadler <lukas.stadler@jku.at>
parents: 4220
diff changeset
176 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
177 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
178
13478
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
179 /**
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
180 * Returns if type {@code type} is a leaf class. This is the case if the
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
181 * {@code Klass::_subklass} field of the underlying class is zero.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
182 *
13478
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
183 * @return true if the type is a leaf class
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
184 */
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
185 private boolean isLeafClass() {
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
186 return getSubklass() == 0;
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
187 }
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
188
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
189 /**
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
190 * Returns the {@code Klass::_subklass} field of the underlying metaspace klass for the given
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
191 * type {@code type}.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
192 *
13478
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
193 * @return value of the subklass field as metaspace klass pointer
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
194 */
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
195 private long getSubklass() {
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
196 return unsafeReadWord(metaspaceKlass() + runtime().getConfig().subklassOffset);
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
197 }
fe03864a2c72 replaced CompilerToVM.getUniqueImplementor with getKlassImplementor and moved the logic into Java
twisti
parents: 13375
diff changeset
198
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
199 @Override
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
200 public HotSpotResolvedObjectType getSuperclass() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
201 Class<?> javaSuperclass = mirror().getSuperclass();
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
202 return javaSuperclass == null ? null : (HotSpotResolvedObjectType) fromClass(javaSuperclass);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
203 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
204
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
205 @Override
6699
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
206 public ResolvedJavaType[] getInterfaces() {
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
207 if (interfaces == null) {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
208 Class<?>[] javaInterfaces = mirror().getInterfaces();
6699
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
209 ResolvedJavaType[] result = new ResolvedJavaType[javaInterfaces.length];
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
210 for (int i = 0; i < javaInterfaces.length; i++) {
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
211 result[i] = fromClass(javaInterfaces[i]);
6699
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
212 }
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
213 interfaces = result;
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
214 }
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
215 return interfaces;
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
216 }
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
217
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
218 public HotSpotResolvedObjectType getSupertype() {
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7059
diff changeset
219 if (isArray()) {
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
220 ResolvedJavaType componentType = getComponentType();
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
221 if (mirror() == Object[].class || componentType.isPrimitive()) {
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
222 return (HotSpotResolvedObjectType) fromClass(Object.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
223 }
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
224 return (HotSpotResolvedObjectType) ((HotSpotResolvedObjectType) componentType).getSupertype().getArrayClass();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
225 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
226 if (isInterface()) {
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
227 return (HotSpotResolvedObjectType) fromClass(Object.class);
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
228 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
229 return getSuperclass();
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
230 }
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
231
6699
d79098b9db3b Support for interfaces in the Graal API: Make interfaces implemented by a ResolvedJavaType available; change semantics of ResolvedJavaType.getSuperclass to return null for interfaces (to conform with java.lang.Class); change semantics of ResolvedJavaType.isInstanceClass to return false for interfaces.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6588
diff changeset
232 @Override
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
233 public ResolvedJavaType findLeastCommonAncestor(ResolvedJavaType otherType) {
7059
e4d9f153934f removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
234 if (otherType.isPrimitive()) {
4635
f35c183f33ce fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents: 4484
diff changeset
235 return null;
f35c183f33ce fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents: 4484
diff changeset
236 } else {
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
237 HotSpotResolvedObjectType t1 = this;
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
238 HotSpotResolvedObjectType t2 = (HotSpotResolvedObjectType) otherType;
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
239 while (true) {
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
240 if (t1.isAssignableFrom(t2)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
241 return t1;
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
242 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
243 if (t2.isAssignableFrom(t1)) {
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
244 return t2;
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
245 }
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
246 t1 = t1.getSupertype();
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
247 t2 = t2.getSupertype();
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
248 }
4635
f35c183f33ce fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents: 4484
diff changeset
249 }
f35c183f33ce fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents: 4484
diff changeset
250 }
f35c183f33ce fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents: 4484
diff changeset
251
f35c183f33ce fixed checkcast when inlining more than one method
Christian Haeubl <christian.haeubl@oracle.com>
parents: 4484
diff changeset
252 @Override
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
253 public ResolvedJavaType asExactType() {
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7059
diff changeset
254 if (isArray()) {
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
255 return getComponentType().asExactType() != null ? this : null;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
256 }
15311
820c6d353358 added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents: 15291
diff changeset
257 return isFinal() ? this : null;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
258 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
259
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
260 @Override
5538
e18ba36bfebc Renamed RiConstant => Constant.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5534
diff changeset
261 public Constant getEncoding(Representation r) {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
262 switch (r) {
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
263 case JavaClass:
15018
db4254246f9a Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents: 14980
diff changeset
264 return HotSpotObjectConstant.forObject(mirror());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
265 case ObjectHub:
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
266 return klass();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
267 default:
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
268 throw GraalInternalError.shouldNotReachHere("unexpected representation " + r);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
269 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
270 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
271
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
272 @Override
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
273 public boolean hasFinalizableSubclass() {
9126
bc26f978b0ce HotSpotResolvedObjectType: implement hasFinalizeSubclass() correctly
Bernhard Urban <bernhard.urban@jku.at>
parents: 9100
diff changeset
274 assert !isArray();
14104
a38a54030ea2 pass metaspace pointers instead of object to VM
twisti
parents: 14093
diff changeset
275 return runtime().getCompilerToVM().hasFinalizableSubclass(metaspaceKlass());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
276 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
277
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
278 @Override
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
279 public boolean hasFinalizer() {
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
280 HotSpotVMConfig config = runtime().getConfig();
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
281 return (getAccessFlags() & config.klassHasFinalizerFlag) != 0;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
282 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
283
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
284 @Override
7059
e4d9f153934f removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
285 public boolean isPrimitive() {
e4d9f153934f removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
286 return false;
e4d9f153934f removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
287 }
e4d9f153934f removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
288
e4d9f153934f removed ResolvedJavaType.toJava() and introduced ResolvedJavaType.isPrimitive()
Doug Simon <doug.simon@oracle.com>
parents: 7057
diff changeset
289 @Override
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7059
diff changeset
290 public boolean isArray() {
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
291 return mirror().isArray();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
292 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
293
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
294 @Override
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
295 public boolean isInitialized() {
13259
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
296 final int state = getState();
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
297 return state == runtime().getConfig().klassStateFullyInitialized;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
298 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
299
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
300 @Override
11520
7cca436d600b Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11431
diff changeset
301 public boolean isLinked() {
13259
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
302 final int state = getState();
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
303 return state >= runtime().getConfig().klassStateLinked;
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
304 }
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
305
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
306 /**
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
307 * Returns the value of the state field {@code InstanceKlass::_init_state} of the metaspace
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
308 * klass.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
309 *
13259
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
310 * @return state field value of this type
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
311 */
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
312 private int getState() {
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
313 return unsafe.getByte(metaspaceKlass() + runtime().getConfig().klassStateOffset) & 0xFF;
11520
7cca436d600b Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11431
diff changeset
314 }
7cca436d600b Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11431
diff changeset
315
7cca436d600b Add isLinked method to ResolvedJavaType
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 11431
diff changeset
316 @Override
6549
15e04f248d6b Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6539
diff changeset
317 public void initialize() {
13214
3f34b8f91cc5 moved CompilerToVM.isTypeInitialized and isTypeLinked to Java
twisti
parents: 12559
diff changeset
318 if (!isInitialized()) {
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
319 unsafe.ensureClassInitialized(mirror());
13214
3f34b8f91cc5 moved CompilerToVM.isTypeInitialized and isTypeLinked to Java
twisti
parents: 12559
diff changeset
320 assert isInitialized();
6549
15e04f248d6b Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6539
diff changeset
321 }
15e04f248d6b Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6539
diff changeset
322 }
15e04f248d6b Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6539
diff changeset
323
15e04f248d6b Add functionality to initialize a type
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6539
diff changeset
324 @Override
5538
e18ba36bfebc Renamed RiConstant => Constant.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5534
diff changeset
325 public boolean isInstance(Constant obj) {
7098
e23980f4a890 Cleanup of Kind class: remove isXxx methods
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7097
diff changeset
326 if (obj.getKind() == Kind.Object && !obj.isNull()) {
15018
db4254246f9a Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents: 14980
diff changeset
327 return mirror().isInstance(HotSpotObjectConstant.asObject(obj));
7015
62818f156081 added ResolvedJavaType.isClass(Class c) to replace some uses of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents: 6996
diff changeset
328 }
62818f156081 added ResolvedJavaType.isClass(Class c) to replace some uses of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents: 6996
diff changeset
329 return false;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
330 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
331
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
332 @Override
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
333 public boolean isInstanceClass() {
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7059
diff changeset
334 return !isArray() && !isInterface();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
335 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
336
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
337 @Override
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
338 public boolean isInterface() {
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
339 return mirror().isInterface();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
340 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
341
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
342 @Override
7097
6644cecbd3a7 Replace ResolvedJavaType.isAssignableTo with isAssignableFrom to be consistent with java.lang.Class
Christian Wimmer <christian.wimmer@oracle.com>
parents: 7096
diff changeset
343 public boolean isAssignableFrom(ResolvedJavaType other) {
9835
fcfedd3dd2eb ResolvedJavaType.isAssignableFrom must not be called with null argument. Check that with assertions in HotSpot implementation.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 9289
diff changeset
344 assert other != null;
7084
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
345 if (other instanceof HotSpotResolvedObjectType) {
9ba90252ce08 HotSpotResolvedJavaType is now the HotSpot implementation of ResolvedJavaType,
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 7083
diff changeset
346 HotSpotResolvedObjectType otherType = (HotSpotResolvedObjectType) other;
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
347 return mirror().isAssignableFrom(otherType.mirror());
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
348 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
349 return false;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
350 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
351
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
352 @Override
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
353 public Kind getKind() {
5540
a891c53a295b Renaming RiKind => Kind.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5538
diff changeset
354 return Kind.Object;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
355 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
356
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
357 @Override
15722
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
358 public ResolvedJavaMethod resolveMethod(ResolvedJavaMethod method, ResolvedJavaType callerType) {
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
359 assert !callerType.isArray();
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
360 if (!method.isAbstract() && method.getDeclaringClass().equals(this) && method.isPublic()) {
14604
bd7cf02d1756 added fast path for HotSpotResolvedObjectType.resolveMethod() when the receiver is the declarer of the method
Doug Simon <doug.simon@oracle.com>
parents: 14158
diff changeset
361 return method;
bd7cf02d1756 added fast path for HotSpotResolvedObjectType.resolveMethod() when the receiver is the declarer of the method
Doug Simon <doug.simon@oracle.com>
parents: 14158
diff changeset
362 }
15722
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
363 if (!method.getDeclaringClass().isAssignableFrom(this)) {
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
364 return null;
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
365 }
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
366 HotSpotResolvedJavaMethod hotSpotMethod = (HotSpotResolvedJavaMethod) method;
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
367 HotSpotResolvedObjectType hotSpotCallerType = (HotSpotResolvedObjectType) callerType;
c583759bbcfd ResolvedJavaType.resolveMethod now takes a callerType that is used to check access rules. Make it work for default methods.
Gilles Duboscq <duboscq@ssw.jku.at>
parents: 15311
diff changeset
368 final long resolvedMetaspaceMethod = runtime().getCompilerToVM().resolveMethod(metaspaceKlass(), hotSpotMethod.getMetaspaceMethod(), hotSpotCallerType.metaspaceKlass());
13374
ad187607b784 make CompilerToVM.resolveMethod return a metadata method instead of a Java type
twisti
parents: 13305
diff changeset
369 if (resolvedMetaspaceMethod == 0) {
11823
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
370 return null;
6440f50c1ea8 improved documentation and testing for ResolvedJavaType.resolveMethod() (GRAAL-489)
Doug Simon <doug.simon@oracle.com>
parents: 11520
diff changeset
371 }
13374
ad187607b784 make CompilerToVM.resolveMethod return a metadata method instead of a Java type
twisti
parents: 13305
diff changeset
372 HotSpotResolvedJavaMethod resolvedMethod = HotSpotResolvedJavaMethod.fromMetaspace(resolvedMetaspaceMethod);
15311
820c6d353358 added ModifiersProvider as superinterface for ResolvedJava[Method|Field|Type] and implemented all checks against modifiers as default methods
Doug Simon <doug.simon@oracle.com>
parents: 15291
diff changeset
373 if (resolvedMethod.isAbstract()) {
13374
ad187607b784 make CompilerToVM.resolveMethod return a metadata method instead of a Java type
twisti
parents: 13305
diff changeset
374 return null;
ad187607b784 make CompilerToVM.resolveMethod return a metadata method instead of a Java type
twisti
parents: 13305
diff changeset
375 }
ad187607b784 make CompilerToVM.resolveMethod return a metadata method instead of a Java type
twisti
parents: 13305
diff changeset
376 return resolvedMethod;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
377 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
378
5541
b4c406861c33 More renamings to drop Ri* prefix completely. Deleted graph.BitMap class and replaced with java.util.BitSet.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5540
diff changeset
379 public ConstantPool constantPool() {
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
380 if (constantPool == null) {
13259
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
381 final long metaspaceConstantPool = unsafe.getAddress(metaspaceKlass() + runtime().getConfig().instanceKlassConstantsOffset);
b16fb0b7479b every HotSpotResolvedJavaMethod needs its own constant pool
twisti
parents: 13258
diff changeset
382 constantPool = new HotSpotConstantPool(metaspaceConstantPool);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
383 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
384 return constantPool;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
385 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
386
5616
310ed6650682 added check to ensure fast path allocation is never used for types that don't allow it
Doug Simon <doug.simon@oracle.com>
parents: 5554
diff changeset
387 /**
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
388 * Gets the instance size of this type. If an instance of this type cannot be fast path
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
389 * allocated, then the returned value is negative (its absolute value gives the size). Must not
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
390 * be called if this is an array or interface type.
5616
310ed6650682 added check to ensure fast path allocation is never used for types that don't allow it
Doug Simon <doug.simon@oracle.com>
parents: 5554
diff changeset
391 */
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
392 public int instanceSize() {
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7059
diff changeset
393 assert !isArray();
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
394 assert !isInterface();
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
395
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
396 HotSpotVMConfig config = runtime().getConfig();
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
397 final int layoutHelper = unsafe.getInt(metaspaceKlass() + config.klassLayoutHelperOffset);
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
398 assert layoutHelper > config.klassLayoutHelperNeutralValue : "must be instance";
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
399
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
400 // See: Klass::layout_helper_size_in_bytes
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
401 int size = layoutHelper & ~config.klassLayoutHelperInstanceSlowPathBit;
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
402
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
403 // See: Klass::layout_helper_needs_slow_path
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
404 boolean needsSlowPath = (layoutHelper & config.klassLayoutHelperInstanceSlowPathBit) != 0;
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
405
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
406 return needsSlowPath ? -size : size;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
407 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
408
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
409 public synchronized HotSpotResolvedJavaMethod createMethod(long metaspaceMethod) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
410 HotSpotResolvedJavaMethod method = null;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
411 if (methodCache == null) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
412 methodCache = new HashMap<>(8);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
413 } else {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
414 method = methodCache.get(metaspaceMethod);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
415 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
416 if (method == null) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
417 method = new HotSpotResolvedJavaMethod(this, metaspaceMethod);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
418 methodCache.put(metaspaceMethod, method);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
419 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
420 return method;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
421 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
422
13823
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
423 /**
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
424 * Gets the mask used to filter out HotSpot internal flags for fields when a {@link Field}
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
425 * object is created. This is the value of {@code JVM_RECOGNIZED_FIELD_MODIFIERS} in
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
426 * {@code jvm.h}, <b>not</b> {@link Modifier#fieldModifiers()}.
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
427 */
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
428 public static int getReflectionFieldModifiers() {
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
429 return runtime().getConfig().recognizedFieldModifiers;
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
430 }
6dd8b95a7fbb fixed HotSpotResolvedJavaField.getModifiers() to mask out FIELD_INTERNAL_FLAG
Doug Simon <doug.simon@oracle.com>
parents: 13818
diff changeset
431
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
432 public synchronized HotSpotResolvedJavaField createField(String fieldName, JavaType type, long offset, int rawFlags) {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
433 HotSpotResolvedJavaField result = null;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
434
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
435 final int flags = rawFlags & getReflectionFieldModifiers();
13495
818d2885db2f Bugfix: Canonicalize field flags before looking up cached fields, to avoid creating the same field twice with different flags
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13479
diff changeset
436
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
437 final long id = offset + ((long) flags << 32);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
438
7530
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
439 // (thomaswue) Must cache the fields, because the local load elimination only works if the
5e3d1a68664e applied mx eclipseformat to all Java files
Doug Simon <doug.simon@oracle.com>
parents: 7359
diff changeset
440 // objects from two field lookups are identical.
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
441 if (fieldCache == null) {
4142
bc8527f3071c Adjust code base to new level of warnings.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 3733
diff changeset
442 fieldCache = new HashMap<>(8);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
443 } else {
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
444 result = fieldCache.get(id);
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
445 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
446
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
447 if (result == null) {
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
448 result = new HotSpotResolvedJavaField(this, fieldName, type, offset, rawFlags);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
449 fieldCache.put(id, result);
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
450 } else {
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
451 assert result.getName().equals(fieldName);
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
452 // assert result.getType().equals(type);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
453 assert result.offset() == offset;
13495
818d2885db2f Bugfix: Canonicalize field flags before looking up cached fields, to avoid creating the same field twice with different flags
Christian Wimmer <christian.wimmer@oracle.com>
parents: 13479
diff changeset
454 assert result.getModifiers() == flags;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
455 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
456
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
457 return result;
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
458 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
459
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
460 @Override
6539
2463eb24b644 Cleanup of Graal API: Rename methods so that it follows the getXxx naming convention and so that they are similar to the names of the java.lang.reflect classes. Remove unused methods.
Christian Wimmer <christian.wimmer@oracle.com>
parents: 6430
diff changeset
461 public ResolvedJavaMethod findUniqueConcreteMethod(ResolvedJavaMethod method) {
5554
70f715dfbb41 Bring Java renamings and restructurings to the C++ part.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5548
diff changeset
462 return ((HotSpotResolvedJavaMethod) method).uniqueConcreteMethod();
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
463 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
464
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
465 /**
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
466 * This class represents the field information for one field contained in the fields array of an
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
467 * {@code InstanceKlass}. The implementation is similar to the native {@code FieldInfo} class.
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
468 */
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
469 private class FieldInfo {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
470 /**
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
471 * Native pointer into the array of Java shorts.
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
472 */
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
473 private final long metaspaceData;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
474
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
475 /**
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
476 * Creates a field info for the field in the fields array at index {@code index}.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
477 *
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
478 * @param index index to the fields array
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
479 */
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
480 public FieldInfo(int index) {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
481 HotSpotVMConfig config = runtime().getConfig();
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
482 // Get Klass::_fields
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
483 final long metaspaceFields = unsafe.getAddress(metaspaceKlass() + config.instanceKlassFieldsOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
484 assert config.fieldInfoFieldSlots == 6 : "revisit the field parsing code";
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
485 metaspaceData = metaspaceFields + config.arrayU2DataOffset + config.fieldInfoFieldSlots * Short.BYTES * index;
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
486 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
487
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
488 private int getAccessFlags() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
489 return readFieldSlot(runtime().getConfig().fieldInfoAccessFlagsOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
490 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
491
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
492 private int getNameIndex() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
493 return readFieldSlot(runtime().getConfig().fieldInfoNameIndexOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
494 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
495
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
496 private int getSignatureIndex() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
497 return readFieldSlot(runtime().getConfig().fieldInfoSignatureIndexOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
498 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
499
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
500 public int getOffset() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
501 HotSpotVMConfig config = runtime().getConfig();
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
502 final int lowPacked = readFieldSlot(config.fieldInfoLowPackedOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
503 final int highPacked = readFieldSlot(config.fieldInfoHighPackedOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
504 final int offset = ((highPacked << Short.SIZE) | lowPacked) >> config.fieldInfoTagSize;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
505 return offset;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
506 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
507
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
508 /**
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
509 * Helper method to read an entry (slot) from the field array. Currently field info is laid
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
510 * on top an array of Java shorts.
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
511 */
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
512 private int readFieldSlot(int index) {
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
513 return unsafe.getChar(metaspaceData + Short.BYTES * index);
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
514 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
515
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
516 /**
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
517 * Returns the name of this field as a {@link String}. If the field is an internal field the
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
518 * name index is pointing into the vmSymbols table.
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
519 */
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
520 public String getName() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
521 final int nameIndex = getNameIndex();
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
522 return isInternal() ? HotSpotVmSymbols.symbolAt(nameIndex) : constantPool().lookupUtf8(nameIndex);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
523 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
524
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
525 /**
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
526 * Returns the signature of this field as {@link String}. If the field is an internal field
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
527 * the signature index is pointing into the vmSymbols table.
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
528 */
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
529 public String getSignature() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
530 final int signatureIndex = getSignatureIndex();
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
531 return isInternal() ? HotSpotVmSymbols.symbolAt(signatureIndex) : constantPool().lookupUtf8(signatureIndex);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
532 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
533
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
534 public JavaType getType() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
535 String signature = getSignature();
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
536 return runtime().lookupType(signature, HotSpotResolvedObjectType.this, false);
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
537 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
538
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
539 private boolean isInternal() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
540 return (getAccessFlags() & runtime().getConfig().jvmAccFieldInternal) != 0;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
541 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
542
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
543 public boolean isStatic() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
544 return Modifier.isStatic(getAccessFlags());
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
545 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
546
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
547 public boolean hasGenericSignature() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
548 return (getAccessFlags() & runtime().getConfig().jvmAccFieldHasGenericSignature) != 0;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
549 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
550 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
551
7136
4f62a7fa7f9f sort the fields returned by getInstanceFields by offset
Lukas Stadler <lukas.stadler@jku.at>
parents: 7128
diff changeset
552 private static class OffsetComparator implements Comparator<HotSpotResolvedJavaField> {
4f62a7fa7f9f sort the fields returned by getInstanceFields by offset
Lukas Stadler <lukas.stadler@jku.at>
parents: 7128
diff changeset
553 @Override
4f62a7fa7f9f sort the fields returned by getInstanceFields by offset
Lukas Stadler <lukas.stadler@jku.at>
parents: 7128
diff changeset
554 public int compare(HotSpotResolvedJavaField o1, HotSpotResolvedJavaField o2) {
4f62a7fa7f9f sort the fields returned by getInstanceFields by offset
Lukas Stadler <lukas.stadler@jku.at>
parents: 7128
diff changeset
555 return o1.offset() - o2.offset();
4f62a7fa7f9f sort the fields returned by getInstanceFields by offset
Lukas Stadler <lukas.stadler@jku.at>
parents: 7128
diff changeset
556 }
4f62a7fa7f9f sort the fields returned by getInstanceFields by offset
Lukas Stadler <lukas.stadler@jku.at>
parents: 7128
diff changeset
557 }
4f62a7fa7f9f sort the fields returned by getInstanceFields by offset
Lukas Stadler <lukas.stadler@jku.at>
parents: 7128
diff changeset
558
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
559 @Override
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
560 public ResolvedJavaField[] getInstanceFields(boolean includeSuperclasses) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
561 if (instanceFields == null) {
7060
06d5f450f32b rename: ResolvedJavaType.isArrayClass() -> ResolvedJavaType.isArray()
Doug Simon <doug.simon@oracle.com>
parents: 7059
diff changeset
562 if (isArray() || isInterface()) {
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
563 instanceFields = new HotSpotResolvedJavaField[0];
6293
6550737d7807 an empty array is now returned by ResolvedJavaType.declaredFields() for array and primitive types
Doug Simon <doug.simon@oracle.com>
parents: 6277
diff changeset
564 } else {
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
565 final int fieldCount = getFieldCount();
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
566 ArrayList<HotSpotResolvedJavaField> fieldsArray = new ArrayList<>(fieldCount);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
567
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
568 for (int i = 0; i < fieldCount; i++) {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
569 FieldInfo field = new FieldInfo(i);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
570
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
571 // We are only interested in instance fields.
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
572 if (!field.isStatic()) {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
573 HotSpotResolvedJavaField resolvedJavaField = createField(field.getName(), field.getType(), field.getOffset(), field.getAccessFlags());
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
574 fieldsArray.add(resolvedJavaField);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
575 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
576 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
577
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
578 fieldsArray.sort(new OffsetComparator());
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
579
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
580 HotSpotResolvedJavaField[] myFields = fieldsArray.toArray(new HotSpotResolvedJavaField[0]);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
581
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
582 if (mirror() != Object.class) {
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
583 HotSpotResolvedJavaField[] superFields = (HotSpotResolvedJavaField[]) getSuperclass().getInstanceFields(true);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
584 HotSpotResolvedJavaField[] fields = Arrays.copyOf(superFields, superFields.length + myFields.length);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
585 System.arraycopy(myFields, 0, fields, superFields.length, myFields.length);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
586 instanceFields = fields;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
587 } else {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
588 assert myFields.length == 0 : "java.lang.Object has fields!";
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
589 instanceFields = myFields;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
590 }
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
591
6293
6550737d7807 an empty array is now returned by ResolvedJavaType.declaredFields() for array and primitive types
Doug Simon <doug.simon@oracle.com>
parents: 6277
diff changeset
592 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
593 }
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
594 if (!includeSuperclasses) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
595 int myFieldsStart = 0;
14158
fd7fcd2d2072 replaced == with .equals() for comparisons between JavaMethod/JavaField/JavaType values
Doug Simon <doug.simon@oracle.com>
parents: 14105
diff changeset
596 while (myFieldsStart < instanceFields.length && !instanceFields[myFieldsStart].getDeclaringClass().equals(this)) {
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
597 myFieldsStart++;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
598 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
599 if (myFieldsStart == 0) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
600 return instanceFields;
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
601 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
602 if (myFieldsStart == instanceFields.length) {
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
603 return new HotSpotResolvedJavaField[0];
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
604 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
605 return Arrays.copyOfRange(instanceFields, myFieldsStart, instanceFields.length);
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
606 }
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
607 return instanceFields;
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
608 }
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
609
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
610 /**
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
611 * Returns the actual field count of this class's internal {@code InstanceKlass::_fields} array
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
612 * by walking the array and discounting the generic signature slots at the end of the array.
14980
a00b26a70011 use JDK 8 features for some TODOs
twisti
parents: 14604
diff changeset
613 *
14012
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
614 * <p>
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
615 * See {@code FieldStreamBase::init_generic_signature_start_slot}
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
616 */
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
617 private int getFieldCount() {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
618 HotSpotVMConfig config = runtime().getConfig();
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
619 final long metaspaceFields = unsafe.getAddress(metaspaceKlass() + config.instanceKlassFieldsOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
620 int metaspaceFieldsLength = unsafe.getInt(metaspaceFields + config.arrayU1LengthOffset);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
621 int fieldCount = 0;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
622
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
623 for (int i = 0, index = 0; i < metaspaceFieldsLength; i += config.fieldInfoFieldSlots, index++) {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
624 FieldInfo field = new FieldInfo(index);
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
625 if (field.hasGenericSignature()) {
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
626 metaspaceFieldsLength--;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
627 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
628 fieldCount++;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
629 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
630 return fieldCount;
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
631 }
1f34717ccafa remove CompilerToVM.getInstanceFields
twisti
parents: 13823
diff changeset
632
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
633 @Override
7053
014727292ae0 removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
634 public Class<?> mirror() {
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
635 return javaClass;
7053
014727292ae0 removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
636 }
014727292ae0 removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
637
014727292ae0 removed more usages of ResolvedJavaType.toJava()
Doug Simon <doug.simon@oracle.com>
parents: 7045
diff changeset
638 @Override
7307
dc3e86fd3be1 Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7226
diff changeset
639 public String getSourceFileName() {
13254
42aaf7306707 Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents: 13214
diff changeset
640 HotSpotVMConfig config = runtime().getConfig();
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
641 final int sourceFileNameIndex = unsafe.getChar(metaspaceKlass() + config.klassSourceFileNameIndexOffset);
13254
42aaf7306707 Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents: 13214
diff changeset
642 if (sourceFileNameIndex == 0) {
42aaf7306707 Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents: 13214
diff changeset
643 return null;
42aaf7306707 Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents: 13214
diff changeset
644 }
42aaf7306707 Teach Graal about Symbol and ConstantPool so we can move more logic into Java. We'll see how that ends...
twisti
parents: 13214
diff changeset
645 return constantPool().lookupUtf8(sourceFileNameIndex);
7307
dc3e86fd3be1 Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7226
diff changeset
646 }
dc3e86fd3be1 Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7226
diff changeset
647
dc3e86fd3be1 Introduce cutomization capability for canonicalizer.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 7226
diff changeset
648 @Override
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
649 public <T extends Annotation> T getAnnotation(Class<T> annotationClass) {
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
650 return mirror().getAnnotation(annotationClass);
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
651 }
4484
14a00ee82980 Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents: 4433
diff changeset
652
14a00ee82980 Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents: 4433
diff changeset
653 @Override
5541
b4c406861c33 More renamings to drop Ri* prefix completely. Deleted graph.BitMap class and replaced with java.util.BitSet.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents: 5540
diff changeset
654 public ResolvedJavaType resolve(ResolvedJavaType accessingClass) {
4484
14a00ee82980 Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents: 4433
diff changeset
655 return this;
14a00ee82980 Implement eager type resolving.
Andreas Woess <andreas.woess@jku.at>
parents: 4433
diff changeset
656 }
5326
a53162ca8219 introduced HotSpotKlassOop type to convey a klassOop value from the compiler to the C++ code instead of relying on the C++ code automagically converting a HotSpotTypeResolvedImpl value to a klassOop
Doug Simon <doug.simon@oracle.com>
parents: 5287
diff changeset
657
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
658 /**
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
659 * Gets the metaspace Klass boxed in a {@link Constant}.
7037
dd81042f4eb1 added unit tests for ResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 7030
diff changeset
660 */
6950
41938af2b3d8 modifications to support non-perm-gen changes in HotSpot
Doug Simon <doug.simon@oracle.com>
parents: 6699
diff changeset
661 public Constant klass() {
15018
db4254246f9a Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents: 14980
diff changeset
662 return HotSpotMetaspaceConstant.forMetaspaceObject(runtime().getTarget().wordKind, metaspaceKlass(), this);
12559
ae412befde21 read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents: 12456
diff changeset
663 }
ae412befde21 read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents: 12456
diff changeset
664
5466
af07e798947d lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents: 5326
diff changeset
665 public boolean isPrimaryType() {
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
666 return runtime().getConfig().secondarySuperCacheOffset != superCheckOffset();
5466
af07e798947d lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents: 5326
diff changeset
667 }
af07e798947d lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents: 5326
diff changeset
668
af07e798947d lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents: 5326
diff changeset
669 public int superCheckOffset() {
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
670 HotSpotVMConfig config = runtime().getConfig();
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
671 return unsafe.getInt(metaspaceKlass() + config.superCheckOffsetOffset);
5466
af07e798947d lifted fast subtype check into checkcast snippets
Doug Simon <doug.simon@oracle.com>
parents: 5326
diff changeset
672 }
5686
6cb39a47da14 replaced loading of instance prototype header word with a constant obtained from HotSpotResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 5682
diff changeset
673
6375
1d7c73b5d787 terminology change to match C++ code and biased locking paper: "initial mark word" -> "prototype mark word"
Doug Simon <doug.simon@oracle.com>
parents: 6367
diff changeset
674 public long prototypeMarkWord() {
12431
7080a96be216 rename: graalRuntime -> runtime, getGraalRuntime -> getRuntime
Doug Simon <doug.simon@oracle.com>
parents: 12429
diff changeset
675 HotSpotVMConfig config = runtime().getConfig();
7147
88d626e2c2a8 added TLAB fast refill stub for array allocation
Doug Simon <doug.simon@oracle.com>
parents: 7143
diff changeset
676 if (isArray()) {
12559
ae412befde21 read HotSpotVMConfig fields from HotSpot's vmStructs via annotations
twisti
parents: 12456
diff changeset
677 return config.arrayPrototypeMarkWord();
7147
88d626e2c2a8 added TLAB fast refill stub for array allocation
Doug Simon <doug.simon@oracle.com>
parents: 7143
diff changeset
678 } else {
13261
0ffe9e4bb364 don't go through VM to create HotSpotResolvedObjectType (part 1)
twisti
parents: 13260
diff changeset
679 return unsafeReadWord(metaspaceKlass() + config.prototypeMarkWordOffset);
7147
88d626e2c2a8 added TLAB fast refill stub for array allocation
Doug Simon <doug.simon@oracle.com>
parents: 7143
diff changeset
680 }
5686
6cb39a47da14 replaced loading of instance prototype header word with a constant obtained from HotSpotResolvedJavaType
Doug Simon <doug.simon@oracle.com>
parents: 5682
diff changeset
681 }
7049
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
682
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
683 @Override
7057
c37022832f1a rename: findFieldWithOffset -> findInstanceFieldWithOffset
Doug Simon <doug.simon@oracle.com>
parents: 7055
diff changeset
684 public ResolvedJavaField findInstanceFieldWithOffset(long offset) {
7049
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
685 ResolvedJavaField[] declaredFields = getInstanceFields(true);
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
686 for (ResolvedJavaField field : declaredFields) {
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
687 if (((HotSpotResolvedJavaField) field).offset() == offset) {
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
688 return field;
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
689 }
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
690 }
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
691 return null;
ccade022ec83 virtualization of unsafeload and unsafestore
Lukas Stadler <lukas.stadler@jku.at>
parents: 7037
diff changeset
692 }
7819
aa022eaf1569 class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
693
aa022eaf1569 class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
694 @Override
7828
49921d2ee9ce class file path retrieval returns URL
Michael Haupt <michael.haupt@oracle.com>
parents: 7820
diff changeset
695 public URL getClassFilePath() {
7819
aa022eaf1569 class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
696 Class<?> cls = mirror();
7831
fb0ef768d877 simplified class file path retrieval, added test
Michael Haupt <michael.haupt@oracle.com>
parents: 7829
diff changeset
697 return cls.getResource(MetaUtil.getSimpleName(cls, true).replace('.', '$') + ".class");
7819
aa022eaf1569 class file path retrieval
Michael Haupt <michael.haupt@oracle.com>
parents: 7530
diff changeset
698 }
7829
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
699
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
700 @Override
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
701 public boolean isLocal() {
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
702 return mirror().isLocalClass();
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
703 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
704
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
705 @Override
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
706 public boolean isMember() {
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
707 return mirror().isMemberClass();
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
708 }
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
709
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
710 @Override
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
711 public ResolvedJavaType getEnclosingType() {
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
712 final Class<?> encl = mirror().getEnclosingClass();
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
713 return encl == null ? null : fromClass(encl);
a44887443b0c support for inner classes (local/member) in meta API
Michael Haupt <michael.haupt@oracle.com>
parents: 7828
diff changeset
714 }
9100
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
715
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
716 @Override
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
717 public ResolvedJavaMethod[] getDeclaredConstructors() {
15040
288c23143d47 Fix most raw type references.
Josef Eisl <josef.eisl@jku.at>
parents: 15018
diff changeset
718 Constructor<?>[] constructors = mirror().getDeclaredConstructors();
9100
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
719 ResolvedJavaMethod[] result = new ResolvedJavaMethod[constructors.length];
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
720 for (int i = 0; i < constructors.length; i++) {
12456
f87c68d79f07 improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents: 12436
diff changeset
721 result[i] = runtime().getHostProviders().getMetaAccess().lookupJavaConstructor(constructors[i]);
9100
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
722 assert result[i].isConstructor();
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
723 }
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
724 return result;
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
725 }
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
726
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
727 @Override
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
728 public ResolvedJavaMethod[] getDeclaredMethods() {
14091
ed92bc6900d5 simplified HotSpotResolvedObjectType.FieldInfo.getType(); encapsulated all access to javaClass in HotSpotResolvedObjectType more
Doug Simon <doug.simon@oracle.com>
parents: 14069
diff changeset
729 Method[] methods = mirror().getDeclaredMethods();
9100
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
730 ResolvedJavaMethod[] result = new ResolvedJavaMethod[methods.length];
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
731 for (int i = 0; i < methods.length; i++) {
12456
f87c68d79f07 improved support for co-existing, multiple backends (GRAAL-363)
Doug Simon <doug.simon@oracle.com>
parents: 12436
diff changeset
732 result[i] = runtime().getHostProviders().getMetaAccess().lookupJavaMethod(methods[i]);
9100
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
733 assert !result[i].isConstructor();
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
734 }
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
735 return result;
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
736 }
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
737
11952
c0807f5fdca5 added ResolvedJavaType.getClassInititalizer()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
738 public ResolvedJavaMethod getClassInitializer() {
14104
a38a54030ea2 pass metaspace pointers instead of object to VM
twisti
parents: 14093
diff changeset
739 final long metaspaceMethod = runtime().getCompilerToVM().getClassInitializer(metaspaceKlass());
13295
903fd774dd61 simplified implementation of HotSpotResolvedObjectType.getClassInitializer()
Doug Simon <doug.simon@oracle.com>
parents: 13263
diff changeset
740 if (metaspaceMethod != 0L) {
903fd774dd61 simplified implementation of HotSpotResolvedObjectType.getClassInitializer()
Doug Simon <doug.simon@oracle.com>
parents: 13263
diff changeset
741 return createMethod(metaspaceMethod);
11952
c0807f5fdca5 added ResolvedJavaType.getClassInititalizer()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
742 }
c0807f5fdca5 added ResolvedJavaType.getClassInititalizer()
Doug Simon <doug.simon@oracle.com>
parents: 11823
diff changeset
743 return null;
9985
e6bd1004082a added HotSpotResolvedObjectType.getMethods() to get all methods of a class including those (such as <clinit>) not normally exposed by Java reflection
Doug Simon <doug.simon@oracle.com>
parents: 9835
diff changeset
744 }
e6bd1004082a added HotSpotResolvedObjectType.getMethods() to get all methods of a class including those (such as <clinit>) not normally exposed by Java reflection
Doug Simon <doug.simon@oracle.com>
parents: 9835
diff changeset
745
9100
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
746 @Override
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
747 public Constant newArray(int length) {
15018
db4254246f9a Remove Constant.forObject and Constant.asObject to improve compiler/VM separation
Christian Wimmer <christian.wimmer@oracle.com>
parents: 14980
diff changeset
748 return HotSpotObjectConstant.forObject(Array.newInstance(mirror(), length));
9100
d24955427b0b Remove MetaUtil.getMirrorOrFail; Add necessary functionality to the Graal API so that all previous usages of java.lang.Class can now use ResolvedJavaType
Christian Wimmer <christian.wimmer@oracle.com>
parents: 8959
diff changeset
749 }
11431
ca53d08b8ef9 removed Node.nodeClass field (GRAAL-359)
Doug Simon <doug.simon@oracle.com>
parents: 9985
diff changeset
750
13305
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
751 @Override
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
752 public String toString() {
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
753 String simpleName;
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
754 if (isArray() || isInterface()) {
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
755 simpleName = getName();
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
756 } else {
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
757 simpleName = getName().substring(1, getName().length() - 1);
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
758 }
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
759 return "HotSpotType<" + simpleName + ", resolved>";
a63d65b682a8 moved most HotSpotResolvedJavaMethod.getExceptionHandlers logic to Java
twisti
parents: 13295
diff changeset
760 }
3733
e233f5660da4 Added Java files from Maxine project.
Thomas Wuerthinger <thomas.wuerthinger@oracle.com>
parents:
diff changeset
761 }