< prev index next >

src/jdk.internal.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotResolvedObjectTypeImpl.java

Print this page




  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);


< prev index next >