16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package jdk.vm.ci.hotspot;
24
25 import static java.util.Objects.requireNonNull;
26 import static jdk.vm.ci.hotspot.CompilerToVM.compilerToVM;
27 import static jdk.vm.ci.hotspot.HotSpotConstantPool.isSignaturePolymorphicHolder;
28 import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime;
29 import static jdk.vm.ci.hotspot.HotSpotModifiers.jvmClassModifiers;
30 import static jdk.vm.ci.hotspot.HotSpotVMConfig.config;
31 import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE;
32
33 import java.lang.annotation.Annotation;
34 import java.lang.reflect.Array;
35 import java.lang.reflect.Constructor;
36 import java.lang.reflect.Method;
37 import java.lang.reflect.Modifier;
38 import java.nio.ByteOrder;
39 import java.util.HashMap;
40
41 import jdk.vm.ci.common.JVMCIError;
42 import jdk.vm.ci.meta.Assumptions.AssumptionResult;
43 import jdk.vm.ci.meta.Assumptions.ConcreteMethod;
44 import jdk.vm.ci.meta.Assumptions.ConcreteSubtype;
45 import jdk.vm.ci.meta.Assumptions.LeafType;
46 import jdk.vm.ci.meta.Assumptions.NoFinalizableSubclass;
47 import jdk.vm.ci.meta.Constant;
48 import jdk.vm.ci.meta.JavaConstant;
49 import jdk.vm.ci.meta.JavaKind;
50 import jdk.vm.ci.meta.JavaType;
51 import jdk.vm.ci.meta.ResolvedJavaField;
52 import jdk.vm.ci.meta.ResolvedJavaMethod;
53 import jdk.vm.ci.meta.ResolvedJavaType;
54 import jdk.vm.ci.meta.UnresolvedJavaField;
55 import jdk.vm.ci.meta.UnresolvedJavaType;
58 * Implementation of {@link JavaType} for resolved non-primitive HotSpot classes.
59 */
60 final class HotSpotResolvedObjectTypeImpl extends HotSpotResolvedJavaType implements HotSpotResolvedObjectType, MetaspaceWrapperObject {
61
62 private static final HotSpotResolvedJavaField[] NO_FIELDS = new HotSpotResolvedJavaField[0];
63 private static final int METHOD_CACHE_ARRAY_CAPACITY = 8;
64
65 /**
66 * The Java class this type represents.
67 */
68 private final Class<?> javaClass;
69 private HotSpotResolvedJavaMethodImpl[] methodCacheArray;
70 private HashMap<Long, HotSpotResolvedJavaMethodImpl> methodCacheHashMap;
71 private HotSpotResolvedJavaField[] instanceFields;
72 private HotSpotResolvedObjectTypeImpl[] interfaces;
73 private HotSpotConstantPool constantPool;
74 final HotSpotJVMCIMetaAccessContext context;
75 private HotSpotResolvedObjectType arrayOfType;
76
77 /**
78 * Gets the JVMCI mirror for a {@link Class} object.
79 *
80 * @return the {@link HotSpotResolvedJavaType} corresponding to {@code javaClass}
81 */
82 static HotSpotResolvedObjectTypeImpl fromObjectClass(Class<?> javaClass) {
83 return (HotSpotResolvedObjectTypeImpl) runtime().fromClass(javaClass);
84 }
85
86 /**
87 * Gets the JVMCI mirror from a HotSpot type. Since {@link Class} is already a proxy for the
88 * underlying Klass*, it is used instead of the raw Klass*.
89 *
90 * Called from the VM.
91 *
92 * @param javaClass a {@link Class} object
93 * @return the {@link ResolvedJavaType} corresponding to {@code javaClass}
94 */
95 @SuppressWarnings("unused")
96 private static HotSpotResolvedObjectTypeImpl fromMetaspace(Class<?> javaClass) {
97 return fromObjectClass(javaClass);
|
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23 package jdk.vm.ci.hotspot;
24
25 import static java.util.Objects.requireNonNull;
26 import static jdk.vm.ci.hotspot.CompilerToVM.compilerToVM;
27 import static jdk.vm.ci.hotspot.HotSpotConstantPool.isSignaturePolymorphicHolder;
28 import static jdk.vm.ci.hotspot.HotSpotJVMCIRuntime.runtime;
29 import static jdk.vm.ci.hotspot.HotSpotModifiers.jvmClassModifiers;
30 import static jdk.vm.ci.hotspot.HotSpotVMConfig.config;
31 import static jdk.vm.ci.hotspot.UnsafeAccess.UNSAFE;
32
33 import java.lang.annotation.Annotation;
34 import java.lang.reflect.Array;
35 import java.lang.reflect.Constructor;
36 import java.lang.reflect.Field;
37 import java.lang.reflect.Method;
38 import java.lang.reflect.Modifier;
39 import java.nio.ByteOrder;
40 import java.util.HashMap;
41
42 import jdk.vm.ci.common.JVMCIError;
43 import jdk.vm.ci.meta.Assumptions.AssumptionResult;
44 import jdk.vm.ci.meta.Assumptions.ConcreteMethod;
45 import jdk.vm.ci.meta.Assumptions.ConcreteSubtype;
46 import jdk.vm.ci.meta.Assumptions.LeafType;
47 import jdk.vm.ci.meta.Assumptions.NoFinalizableSubclass;
48 import jdk.vm.ci.meta.Constant;
49 import jdk.vm.ci.meta.JavaConstant;
50 import jdk.vm.ci.meta.JavaKind;
51 import jdk.vm.ci.meta.JavaType;
52 import jdk.vm.ci.meta.ResolvedJavaField;
53 import jdk.vm.ci.meta.ResolvedJavaMethod;
54 import jdk.vm.ci.meta.ResolvedJavaType;
55 import jdk.vm.ci.meta.UnresolvedJavaField;
56 import jdk.vm.ci.meta.UnresolvedJavaType;
59 * Implementation of {@link JavaType} for resolved non-primitive HotSpot classes.
60 */
61 final class HotSpotResolvedObjectTypeImpl extends HotSpotResolvedJavaType implements HotSpotResolvedObjectType, MetaspaceWrapperObject {
62
63 private static final HotSpotResolvedJavaField[] NO_FIELDS = new HotSpotResolvedJavaField[0];
64 private static final int METHOD_CACHE_ARRAY_CAPACITY = 8;
65
66 /**
67 * The Java class this type represents.
68 */
69 private final Class<?> javaClass;
70 private HotSpotResolvedJavaMethodImpl[] methodCacheArray;
71 private HashMap<Long, HotSpotResolvedJavaMethodImpl> methodCacheHashMap;
72 private HotSpotResolvedJavaField[] instanceFields;
73 private HotSpotResolvedObjectTypeImpl[] interfaces;
74 private HotSpotConstantPool constantPool;
75 final HotSpotJVMCIMetaAccessContext context;
76 private HotSpotResolvedObjectType arrayOfType;
77
78 /**
79 * Managed exclusively by {@link HotSpotResolvedJavaFieldImpl#toJava}.
80 */
81 HashMap<HotSpotResolvedJavaFieldImpl, Field> reflectionFieldCache;
82
83 /**
84 * Gets the JVMCI mirror for a {@link Class} object.
85 *
86 * @return the {@link HotSpotResolvedJavaType} corresponding to {@code javaClass}
87 */
88 static HotSpotResolvedObjectTypeImpl fromObjectClass(Class<?> javaClass) {
89 return (HotSpotResolvedObjectTypeImpl) runtime().fromClass(javaClass);
90 }
91
92 /**
93 * Gets the JVMCI mirror from a HotSpot type. Since {@link Class} is already a proxy for the
94 * underlying Klass*, it is used instead of the raw Klass*.
95 *
96 * Called from the VM.
97 *
98 * @param javaClass a {@link Class} object
99 * @return the {@link ResolvedJavaType} corresponding to {@code javaClass}
100 */
101 @SuppressWarnings("unused")
102 private static HotSpotResolvedObjectTypeImpl fromMetaspace(Class<?> javaClass) {
103 return fromObjectClass(javaClass);
|