< prev index next >
src/java.base/share/classes/java/lang/invoke/VarHandles.java
Print this page
*** 31,41 ****
static VarHandle makeFieldHandle(MemberName f, Class<?> refc, Class<?> type, boolean isWriteAllowedOnFinalFields) {
if (!f.isStatic()) {
long foffset = MethodHandleNatives.objectFieldOffset(f);
if (!type.isPrimitive()) {
! if (f.isFlatValue()) {
return f.isFinal() && !isWriteAllowedOnFinalFields
? new VarHandleReferences.FlatValueFieldInstanceReadOnly(refc, foffset, type)
: new VarHandleReferences.FlatValueFieldInstanceReadWrite(refc, foffset, type);
} else {
return f.isFinal() && !isWriteAllowedOnFinalFields
--- 31,41 ----
static VarHandle makeFieldHandle(MemberName f, Class<?> refc, Class<?> type, boolean isWriteAllowedOnFinalFields) {
if (!f.isStatic()) {
long foffset = MethodHandleNatives.objectFieldOffset(f);
if (!type.isPrimitive()) {
! if (f.isFlattened()) {
return f.isFinal() && !isWriteAllowedOnFinalFields
? new VarHandleReferences.FlatValueFieldInstanceReadOnly(refc, foffset, type)
: new VarHandleReferences.FlatValueFieldInstanceReadWrite(refc, foffset, type);
} else {
return f.isFinal() && !isWriteAllowedOnFinalFields
*** 98,108 ****
UNSAFE.ensureClassInitialized(refc);
Object base = MethodHandleNatives.staticFieldBase(f);
long foffset = MethodHandleNatives.staticFieldOffset(f);
if (!type.isPrimitive()) {
! assert(!f.isFlatValue()); // static field is not flattened
return f.isFinal() && !isWriteAllowedOnFinalFields
? new VarHandleReferences.FieldStaticReadOnly(base, foffset, type)
: new VarHandleReferences.FieldStaticReadWrite(base, foffset, type, f.canBeNull());
}
else if (type == boolean.class) {
--- 98,108 ----
UNSAFE.ensureClassInitialized(refc);
Object base = MethodHandleNatives.staticFieldBase(f);
long foffset = MethodHandleNatives.staticFieldOffset(f);
if (!type.isPrimitive()) {
! assert(!f.isFlattened()); // static field is not flattened
return f.isFinal() && !isWriteAllowedOnFinalFields
? new VarHandleReferences.FieldStaticReadOnly(base, foffset, type)
: new VarHandleReferences.FieldStaticReadWrite(base, foffset, type, f.canBeNull());
}
else if (type == boolean.class) {
< prev index next >