< prev index next >

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

Print this page




 162         if (constant instanceof HotSpotObjectConstant) {
 163             Object obj = ((HotSpotObjectConstantImpl) constant).object();
 164             if (obj instanceof Class) {
 165                 return runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType((Class<?>) obj);
 166             }
 167         }
 168         if (constant instanceof HotSpotMetaspaceConstant) {
 169             MetaspaceWrapperObject obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant);
 170             if (obj instanceof HotSpotResolvedObjectTypeImpl) {
 171                 return (ResolvedJavaType) obj;
 172             }
 173         }
 174         return null;
 175     }
 176 
 177     public JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver) {
 178         HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
 179         if (hotspotField.isStatic()) {
 180             HotSpotResolvedJavaType holder = (HotSpotResolvedJavaType) hotspotField.getDeclaringClass();
 181             if (holder.isInitialized()) {
 182                 return memoryAccess.readUnsafeConstant(hotspotField.getJavaKind(), HotSpotObjectConstantImpl.forObject(holder.mirror()), hotspotField.offset());
 183             }
 184         } else {
 185             if (receiver.isNonNull() && hotspotField.isInObject(((HotSpotObjectConstantImpl) receiver).object())) {
 186                 return memoryAccess.readUnsafeConstant(hotspotField.getJavaKind(), receiver, hotspotField.offset());



 187             }
 188         }
 189         return null;
 190     }
 191 
 192     @Override
 193     public JavaConstant asJavaClass(ResolvedJavaType type) {
 194         return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedJavaType) type).mirror());
 195     }
 196 
 197     @Override
 198     public Constant asObjectHub(ResolvedJavaType type) {
 199         if (type instanceof HotSpotResolvedObjectType) {
 200             return ((HotSpotResolvedObjectType) type).klass();
 201         } else {
 202             throw JVMCIError.unimplemented();
 203         }
 204     }
 205 }


 162         if (constant instanceof HotSpotObjectConstant) {
 163             Object obj = ((HotSpotObjectConstantImpl) constant).object();
 164             if (obj instanceof Class) {
 165                 return runtime.getHostJVMCIBackend().getMetaAccess().lookupJavaType((Class<?>) obj);
 166             }
 167         }
 168         if (constant instanceof HotSpotMetaspaceConstant) {
 169             MetaspaceWrapperObject obj = HotSpotMetaspaceConstantImpl.getMetaspaceObject(constant);
 170             if (obj instanceof HotSpotResolvedObjectTypeImpl) {
 171                 return (ResolvedJavaType) obj;
 172             }
 173         }
 174         return null;
 175     }
 176 
 177     public JavaConstant readFieldValue(ResolvedJavaField field, JavaConstant receiver) {
 178         HotSpotResolvedJavaField hotspotField = (HotSpotResolvedJavaField) field;
 179         if (hotspotField.isStatic()) {
 180             HotSpotResolvedJavaType holder = (HotSpotResolvedJavaType) hotspotField.getDeclaringClass();
 181             if (holder.isInitialized()) {
 182                 return memoryAccess.readFieldValue(hotspotField, holder.mirror());
 183             }
 184         } else {
 185             if (receiver.isNonNull()) {
 186                 Object object = ((HotSpotObjectConstantImpl) receiver).object();
 187                 if (hotspotField.isInObject(object)) {
 188                     return memoryAccess.readFieldValue(hotspotField, object);
 189                 }
 190             }
 191         }
 192         return null;
 193     }
 194 
 195     @Override
 196     public JavaConstant asJavaClass(ResolvedJavaType type) {
 197         return HotSpotObjectConstantImpl.forObject(((HotSpotResolvedJavaType) type).mirror());
 198     }
 199 
 200     @Override
 201     public Constant asObjectHub(ResolvedJavaType type) {
 202         if (type instanceof HotSpotResolvedObjectType) {
 203             return ((HotSpotResolvedObjectType) type).klass();
 204         } else {
 205             throw JVMCIError.unimplemented();
 206         }
 207     }
 208 }
< prev index next >