src/jdk.vm.ci/share/classes/jdk.vm.ci.hotspot/src/jdk/vm/ci/hotspot/HotSpotMetaAccessProvider.java

Print this page

        

*** 39,49 **** import jdk.vm.ci.common.JVMCIError; import jdk.vm.ci.meta.DeoptimizationAction; import jdk.vm.ci.meta.DeoptimizationReason; import jdk.vm.ci.meta.JavaConstant; import jdk.vm.ci.meta.JavaKind; - import jdk.vm.ci.meta.JavaType; import jdk.vm.ci.meta.MetaAccessProvider; import jdk.vm.ci.meta.ResolvedJavaField; import jdk.vm.ci.meta.ResolvedJavaMethod; import jdk.vm.ci.meta.ResolvedJavaType; import jdk.vm.ci.meta.Signature; --- 39,48 ----
*** 109,135 **** throw new JVMCIError(e); } } public ResolvedJavaField lookupJavaField(Field reflectionField) { - String name = reflectionField.getName(); Class<?> fieldHolder = reflectionField.getDeclaringClass(); - Class<?> fieldType = reflectionField.getType(); - // java.lang.reflect.Field's modifiers should be enough here since VM internal modifier bits - // are not used (yet). - final int modifiers = reflectionField.getModifiers(); - final long offset = Modifier.isStatic(modifiers) ? UNSAFE.staticFieldOffset(reflectionField) : UNSAFE.objectFieldOffset(reflectionField); HotSpotResolvedObjectType holder = fromObjectClass(fieldHolder); ! JavaType type = runtime.fromClass(fieldType); ! ! if (offset != -1) { ! HotSpotResolvedObjectType resolved = holder; ! return resolved.createField(name, type, offset, modifiers); } else { ! throw new JVMCIError("unresolved field %s", reflectionField); } } private static int intMaskRight(int n) { assert n <= 32; return n == 32 ? -1 : (1 << n) - 1; --- 108,137 ---- throw new JVMCIError(e); } } public ResolvedJavaField lookupJavaField(Field reflectionField) { Class<?> fieldHolder = reflectionField.getDeclaringClass(); HotSpotResolvedObjectType holder = fromObjectClass(fieldHolder); ! if (Modifier.isStatic(reflectionField.getModifiers())) { ! final long offset = UNSAFE.staticFieldOffset(reflectionField); ! for (ResolvedJavaField field : holder.getStaticFields()) { ! if (offset == ((HotSpotResolvedJavaField) field).offset()) { ! return field; ! } ! } } else { ! final long offset = UNSAFE.objectFieldOffset(reflectionField); ! for (ResolvedJavaField field : holder.getInstanceFields(false)) { ! if (offset == ((HotSpotResolvedJavaField) field).offset()) { ! return field; ! } ! } } + + throw new JVMCIError("unresolved field %s", reflectionField); } private static int intMaskRight(int n) { assert n <= 32; return n == 32 ? -1 : (1 << n) - 1;