35 import java.lang.reflect.Modifier;
36 import java.nio.ByteOrder;
37 import java.util.ArrayList;
38 import java.util.Arrays;
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.ModifiersProvider;
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.TrustedInterface;
56
57 /**
58 * Implementation of {@link JavaType} for resolved non-primitive HotSpot classes.
59 */
60 final class HotSpotResolvedObjectTypeImpl extends HotSpotResolvedJavaType implements HotSpotResolvedObjectType, HotSpotProxified, MetaspaceWrapperObject {
61
62 /**
63 * The Java class this type represents.
64 */
65 private final Class<?> javaClass;
66 private HashMap<Long, HotSpotResolvedJavaField> fieldCache;
67 private HashMap<Long, HotSpotResolvedJavaMethodImpl> methodCache;
68 private HotSpotResolvedJavaField[] instanceFields;
69 private HotSpotResolvedObjectTypeImpl[] interfaces;
70 private HotSpotConstantPool constantPool;
71 final HotSpotJVMCIMetaAccessContext context;
72 private HotSpotResolvedObjectType arrayOfType;
73
74 /**
75 * Gets the JVMCI mirror for a {@link Class} object.
859 }
860
861 @Override
862 public ResolvedJavaMethod[] getDeclaredMethods() {
863 Method[] methods = mirror().getDeclaredMethods();
864 ResolvedJavaMethod[] result = new ResolvedJavaMethod[methods.length];
865 for (int i = 0; i < methods.length; i++) {
866 result[i] = runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod(methods[i]);
867 assert !result[i].isConstructor();
868 }
869 return result;
870 }
871
872 public ResolvedJavaMethod getClassInitializer() {
873 return compilerToVM().getClassInitializer(this);
874 }
875
876 @Override
877 public String toString() {
878 return "HotSpotType<" + getName() + ", resolved>";
879 }
880
881 @Override
882 public boolean isTrustedInterfaceType() {
883 return TrustedInterface.class.isAssignableFrom(mirror());
884 }
885
886 @Override
887 public boolean isCloneableWithAllocation() {
888 return (getAccessFlags() & config().jvmAccIsCloneableFast) != 0;
889 }
890 }
|
35 import java.lang.reflect.Modifier;
36 import java.nio.ByteOrder;
37 import java.util.ArrayList;
38 import java.util.Arrays;
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.ModifiersProvider;
52 import jdk.vm.ci.meta.ResolvedJavaField;
53 import jdk.vm.ci.meta.ResolvedJavaMethod;
54 import jdk.vm.ci.meta.ResolvedJavaType;
55
56 /**
57 * Implementation of {@link JavaType} for resolved non-primitive HotSpot classes.
58 */
59 final class HotSpotResolvedObjectTypeImpl extends HotSpotResolvedJavaType implements HotSpotResolvedObjectType, HotSpotProxified, MetaspaceWrapperObject {
60
61 /**
62 * The Java class this type represents.
63 */
64 private final Class<?> javaClass;
65 private HashMap<Long, HotSpotResolvedJavaField> fieldCache;
66 private HashMap<Long, HotSpotResolvedJavaMethodImpl> methodCache;
67 private HotSpotResolvedJavaField[] instanceFields;
68 private HotSpotResolvedObjectTypeImpl[] interfaces;
69 private HotSpotConstantPool constantPool;
70 final HotSpotJVMCIMetaAccessContext context;
71 private HotSpotResolvedObjectType arrayOfType;
72
73 /**
74 * Gets the JVMCI mirror for a {@link Class} object.
858 }
859
860 @Override
861 public ResolvedJavaMethod[] getDeclaredMethods() {
862 Method[] methods = mirror().getDeclaredMethods();
863 ResolvedJavaMethod[] result = new ResolvedJavaMethod[methods.length];
864 for (int i = 0; i < methods.length; i++) {
865 result[i] = runtime().getHostJVMCIBackend().getMetaAccess().lookupJavaMethod(methods[i]);
866 assert !result[i].isConstructor();
867 }
868 return result;
869 }
870
871 public ResolvedJavaMethod getClassInitializer() {
872 return compilerToVM().getClassInitializer(this);
873 }
874
875 @Override
876 public String toString() {
877 return "HotSpotType<" + getName() + ", resolved>";
878 }
879
880 @Override
881 public boolean isCloneableWithAllocation() {
882 return (getAccessFlags() & config().jvmAccIsCloneableFast) != 0;
883 }
884 }
|