diff -r 75bcd5e48fab -r 9949ffb8eb3a jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java --- a/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java Thu Jan 05 08:42:40 2012 -0800 +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandleImpl.java Wed Jan 18 17:34:29 2012 -0800 @@ -112,7 +112,7 @@ assert(cookedConstructor.type().equals(ctype)); ctype = ctype.dropParameterTypes(0, 1); cookedConstructor = AdapterMethodHandle.makeCollectArguments(cookedConstructor, returner, 0, true); - MethodHandle allocator = new AllocateObject(allocateClass); + AllocateObject allocator = new AllocateObject(allocateClass); // allocate() => new C(void) assert(allocator.type().equals(MethodType.methodType(allocateClass))); ctype = ctype.dropParameterTypes(0, 1); @@ -120,19 +120,19 @@ return fold; } - static final class AllocateObject extends BoundMethodHandle { + static final class AllocateObject /**/ extends BoundMethodHandle { private static final Unsafe unsafe = Unsafe.getUnsafe(); - private final Class allocateClass; + private final Class /**/ allocateClass; // for allocation only: - private AllocateObject(Class allocateClass) { + private AllocateObject(Class /**/ allocateClass) { super(ALLOCATE.asType(MethodType.methodType(allocateClass, AllocateObject.class))); this.allocateClass = allocateClass; } @SuppressWarnings("unchecked") - private C allocate() throws InstantiationException { - return (C) unsafe.allocateInstance(allocateClass); + private Object /*C*/ allocate() throws InstantiationException { + return unsafe.allocateInstance(allocateClass); } static final MethodHandle ALLOCATE; static { @@ -148,8 +148,8 @@ MethodHandle accessField(MemberName member, boolean isSetter, Class lookupClass) { // Use sun. misc.Unsafe to dig up the dirt on the field. - MethodHandle mh = new FieldAccessor(member, isSetter); - return mh; + FieldAccessor accessor = new FieldAccessor(member, isSetter); + return accessor; } static @@ -175,7 +175,7 @@ return mhs[isSetter ? 1 : 0]; } - static final class FieldAccessor extends BoundMethodHandle { + static final class FieldAccessor /**/ extends BoundMethodHandle { private static final Unsafe unsafe = Unsafe.getUnsafe(); final Object base; // for static refs only final long offset; @@ -190,26 +190,24 @@ @Override String debugString() { return addTypeString(name, this); } - int getFieldI(C obj) { return unsafe.getInt(obj, offset); } - void setFieldI(C obj, int x) { unsafe.putInt(obj, offset, x); } - long getFieldJ(C obj) { return unsafe.getLong(obj, offset); } - void setFieldJ(C obj, long x) { unsafe.putLong(obj, offset, x); } - float getFieldF(C obj) { return unsafe.getFloat(obj, offset); } - void setFieldF(C obj, float x) { unsafe.putFloat(obj, offset, x); } - double getFieldD(C obj) { return unsafe.getDouble(obj, offset); } - void setFieldD(C obj, double x) { unsafe.putDouble(obj, offset, x); } - boolean getFieldZ(C obj) { return unsafe.getBoolean(obj, offset); } - void setFieldZ(C obj, boolean x) { unsafe.putBoolean(obj, offset, x); } - byte getFieldB(C obj) { return unsafe.getByte(obj, offset); } - void setFieldB(C obj, byte x) { unsafe.putByte(obj, offset, x); } - short getFieldS(C obj) { return unsafe.getShort(obj, offset); } - void setFieldS(C obj, short x) { unsafe.putShort(obj, offset, x); } - char getFieldC(C obj) { return unsafe.getChar(obj, offset); } - void setFieldC(C obj, char x) { unsafe.putChar(obj, offset, x); } - @SuppressWarnings("unchecked") - V getFieldL(C obj) { return (V) unsafe.getObject(obj, offset); } - @SuppressWarnings("unchecked") - void setFieldL(C obj, V x) { unsafe.putObject(obj, offset, x); } + int getFieldI(Object /*C*/ obj) { return unsafe.getInt(obj, offset); } + void setFieldI(Object /*C*/ obj, int x) { unsafe.putInt(obj, offset, x); } + long getFieldJ(Object /*C*/ obj) { return unsafe.getLong(obj, offset); } + void setFieldJ(Object /*C*/ obj, long x) { unsafe.putLong(obj, offset, x); } + float getFieldF(Object /*C*/ obj) { return unsafe.getFloat(obj, offset); } + void setFieldF(Object /*C*/ obj, float x) { unsafe.putFloat(obj, offset, x); } + double getFieldD(Object /*C*/ obj) { return unsafe.getDouble(obj, offset); } + void setFieldD(Object /*C*/ obj, double x) { unsafe.putDouble(obj, offset, x); } + boolean getFieldZ(Object /*C*/ obj) { return unsafe.getBoolean(obj, offset); } + void setFieldZ(Object /*C*/ obj, boolean x) { unsafe.putBoolean(obj, offset, x); } + byte getFieldB(Object /*C*/ obj) { return unsafe.getByte(obj, offset); } + void setFieldB(Object /*C*/ obj, byte x) { unsafe.putByte(obj, offset, x); } + short getFieldS(Object /*C*/ obj) { return unsafe.getShort(obj, offset); } + void setFieldS(Object /*C*/ obj, short x) { unsafe.putShort(obj, offset, x); } + char getFieldC(Object /*C*/ obj) { return unsafe.getChar(obj, offset); } + void setFieldC(Object /*C*/ obj, char x) { unsafe.putChar(obj, offset, x); } + Object /*V*/ getFieldL(Object /*C*/ obj) { return unsafe.getObject(obj, offset); } + void setFieldL(Object /*C*/ obj, Object /*V*/ x) { unsafe.putObject(obj, offset, x); } // cast (V) is OK here, since we wrap convertArguments around the MH. static Object staticBase(final MemberName field) { @@ -244,8 +242,9 @@ void setStaticS(short x) { unsafe.putShort(base, offset, x); } char getStaticC() { return unsafe.getChar(base, offset); } void setStaticC(char x) { unsafe.putChar(base, offset, x); } - V getStaticL() { return (V) unsafe.getObject(base, offset); } - void setStaticL(V x) { unsafe.putObject(base, offset, x); } + @SuppressWarnings("unchecked") // (V) is for internal clarity but triggers warning + Object /*V*/ getStaticL() { return unsafe.getObject(base, offset); } + void setStaticL(Object /*V*/ x) { unsafe.putObject(base, offset, x); } static String fname(Class vclass, boolean isSetter, boolean isStatic) { String stem;