This class may be removed in the future. Consider the replacements in JEP 193 'Variable Handles': http://openjdk.java.net/jeps/193
/** * Returns static field offset. * * @param field Field. * @return Static field offset. */ public static long staticFieldOffset(Field field) { return UNSAFE.staticFieldOffset(field); }
private static int computeOffset(Field field) { if (Modifier.isStatic(field.getModifiers())) { return (int) VMSupport.U.staticFieldOffset(field); } else { return (int) VMSupport.U.objectFieldOffset(field); } }
@SuppressWarnings({"sunapi", "all"}) private void disableJava9SillyWarning() { // JVM9 complains about using reflection to access packages from a module that aren't exported. This makes no sense; the whole point of reflection // is to get past such issues. The only comment from the jigsaw team lead on this was some unspecified mumbling about security which makes no sense, // as the SecurityManager is invoked to check such things. Therefore this warning is a bug, so we shall patch java to fix it. try { Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); Unsafe u = (Unsafe) theUnsafe.get(null); Class<?> cls = Class.forName("jdk.internal.module.IllegalAccessLogger"); Field logger = cls.getDeclaredField("logger"); u.putObjectVolatile(cls, u.staticFieldOffset(logger), null); } catch (Throwable t) { // We shall ignore it; the effect of this code failing is that the user gets to see a warning they remove with various --add-opens magic. } }
@SuppressWarnings("unchecked") public static void disableWarning() { try { Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafe.setAccessible(true); Unsafe u = (Unsafe) theUnsafe.get(null); Class cls = Class.forName("jdk.internal.module.IllegalAccessLogger"); Field logger = cls.getDeclaredField("logger"); u.putObjectVolatile(cls, u.staticFieldOffset(logger), null); } catch (Exception e) { // ignore } }
private static ObjectStreamField[] getDeclaredSerialPersistentFields(Class<?> clazz) { final Field field; try { field = clazz.getDeclaredField("serialPersistentFields"); } catch (NoSuchFieldException e) { return null; } if (field == null) { return null; } final int requiredModifiers = Modifier.STATIC | Modifier.PRIVATE | Modifier.FINAL; if ((field.getModifiers() & requiredModifiers) != requiredModifiers) { return null; } try { return (ObjectStreamField[]) unsafe.getObject(unsafe.staticFieldBase(field), unsafe.staticFieldOffset(field)); } catch (ClassCastException e) { return null; } }
@Override public Object getStaticObject(Field field) { return getObject(unsafe.staticFieldBase(field), unsafe.staticFieldOffset(field)); } }
? theUnsafe.staticFieldOffset(field) : theUnsafe.objectFieldOffset(field);
? theUnsafe.staticFieldOffset(field) : theUnsafe.objectFieldOffset(field);
/** * Returns the offset of a static field. */ public final long staticFieldOffset(Field f) { return unsafe.staticFieldOffset( f ) ; }
/** * Returns static field offset. * * @param field Field. * @return Static field offset. */ public static long staticFieldOffset(Field field) { return UNSAFE.staticFieldOffset(field); }
/** * Returns the offset of a static field. */ public final long staticFieldOffset(Field f) { return unsafe.staticFieldOffset( f ) ; }
@Override public long fieldOffset(Field field) { if (Modifier.isStatic(field.getModifiers())) { return U.staticFieldOffset(field); } else { return U.objectFieldOffset(field); } }
public Field(java.lang.reflect.Field f) { if (Modifier.isStatic(f.getModifiers())) fieldID = unsafe.staticFieldOffset(f); else fieldID = unsafe.objectFieldOffset(f); }
private static int computeOffset(Field field) { if (Modifier.isStatic(field.getModifiers())) { return (int) VMSupport.U.staticFieldOffset(field); } else { return (int) VMSupport.U.objectFieldOffset(field); } }
private static long offset(Field field) { return isStatic(field) ? UNSAFE.staticFieldOffset(field) : UNSAFE.objectFieldOffset(field); } }
protected UnsafeField ( Field field ) { super(field); if ( super.isStatic() ) { base = unsafe.staticFieldBase( field ); offset = unsafe.staticFieldOffset( field ); } else { offset = unsafe.objectFieldOffset( field ); base = null; } this.field = field; }
protected UnsafeField ( Field field ) { super(field); if ( super.isStatic() ) { base = unsafe.staticFieldBase( field ); offset = unsafe.staticFieldOffset( field ); } else { offset = unsafe.objectFieldOffset( field ); base = null; } this.field = field; }
protected UnsafeField ( Field field ) { super(field); if ( super.isStatic() ) { base = unsafe.staticFieldBase( field ); offset = unsafe.staticFieldOffset( field ); } else { offset = unsafe.objectFieldOffset( field ); base = null; } this.field = field; }
@Override public Object getStaticObject(Field field) { return getObject(unsafe.staticFieldBase(field), unsafe.staticFieldOffset(field)); } }
@Override public Object getStaticObject(Field field) { return getObject(unsafe.staticFieldBase(field), unsafe.staticFieldOffset(field)); } }