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);
    }
  }
示例#2
0
 private static long offset(Field field) {
   return isStatic(field) ? UNSAFE.staticFieldOffset(field) : UNSAFE.objectFieldOffset(field);
 }