1 /*
2  * Copyright (c) 2011, 2017, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  */
23 package jdk.vm.ci.hotspot;
24 
25 import jdk.vm.ci.meta.Assumptions.AssumptionResult;
26 import jdk.vm.ci.meta.Constant;
27 import jdk.vm.ci.meta.ConstantPool;
28 import jdk.vm.ci.meta.JavaConstant;
29 import jdk.vm.ci.meta.JavaKind;
30 import jdk.vm.ci.meta.JavaType;
31 import jdk.vm.ci.meta.ResolvedJavaMethod;
32 import jdk.vm.ci.meta.ResolvedJavaType;
33 
34 /**
35  * Implementation of {@link JavaType} for resolved non-primitive HotSpot classes.
36  */
37 public interface HotSpotResolvedObjectType extends ResolvedJavaType {
38 
39     @Override
getArrayClass()40     HotSpotResolvedObjectType getArrayClass();
41 
42     @Override
getComponentType()43     ResolvedJavaType getComponentType();
44 
45     @Override
findLeafConcreteSubtype()46     AssumptionResult<ResolvedJavaType> findLeafConcreteSubtype();
47 
48     @Override
getSuperclass()49     HotSpotResolvedObjectType getSuperclass();
50 
51     @Override
getInterfaces()52     HotSpotResolvedObjectType[] getInterfaces();
53 
getSupertype()54     HotSpotResolvedObjectType getSupertype();
55 
56     @Override
findLeastCommonAncestor(ResolvedJavaType otherType)57     HotSpotResolvedObjectType findLeastCommonAncestor(ResolvedJavaType otherType);
58 
59     @Override
isPrimitive()60     default boolean isPrimitive() {
61         return false;
62     }
63 
64     @Override
getJavaKind()65     default JavaKind getJavaKind() {
66         return JavaKind.Object;
67     }
68 
getConstantPool()69     ConstantPool getConstantPool();
70 
71     /**
72      * Gets the instance size of this type. If an instance of this type cannot be fast path
73      * allocated, then the returned value is negative (its absolute value gives the size). Must not
74      * be called if this is an array or interface type.
75      */
instanceSize()76     int instanceSize();
77 
getVtableLength()78     int getVtableLength();
79 
80     @Override
findUniqueConcreteMethod(ResolvedJavaMethod method)81     AssumptionResult<ResolvedJavaMethod> findUniqueConcreteMethod(ResolvedJavaMethod method);
82 
83     /**
84      * Performs a fast-path check that this type is resolved in the context of a given accessing
85      * class. A negative result does not mean this type is not resolved with respect to
86      * {@code accessingClass}. That can only be determined by
87      * {@linkplain HotSpotJVMCIRuntime#lookupType(String, HotSpotResolvedObjectType, boolean)
88      * re-resolving} the type.
89      */
isDefinitelyResolvedWithRespectTo(ResolvedJavaType accessingClass)90     boolean isDefinitelyResolvedWithRespectTo(ResolvedJavaType accessingClass);
91 
92     /**
93      * Gets the metaspace Klass boxed in a {@link JavaConstant}.
94      */
klass()95     Constant klass();
96 
isPrimaryType()97     boolean isPrimaryType();
98 
superCheckOffset()99     int superCheckOffset();
100 
prototypeMarkWord()101     long prototypeMarkWord();
102 
layoutHelper()103     int layoutHelper();
104 
getFingerprint()105     long getFingerprint();
106 
107     @Override
getEnclosingType()108     HotSpotResolvedObjectType getEnclosingType();
109 
110     @Override
getClassInitializer()111     ResolvedJavaMethod getClassInitializer();
112 
isAnonymous()113     boolean isAnonymous();
114 
115 }
116