diff -r 19d4868d7f08 -r d534dd80da9f langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java --- a/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Fri Jan 14 13:59:18 2011 -0800 +++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/ClassReader.java Tue Jan 18 08:37:05 2011 -0800 @@ -434,14 +434,19 @@ } case CONSTANT_Class: case CONSTANT_String: + case CONSTANT_MethodType: bp = bp + 2; break; + case CONSTANT_MethodHandle: + bp = bp + 3; + break; case CONSTANT_Fieldref: case CONSTANT_Methodref: case CONSTANT_InterfaceMethodref: case CONSTANT_NameandType: case CONSTANT_Integer: case CONSTANT_Float: + case CONSTANT_InvokeDynamic: bp = bp + 4; break; case CONSTANT_Long: @@ -510,6 +515,15 @@ case CONSTANT_Double: poolObj[i] = new Double(getDouble(index + 1)); break; + case CONSTANT_MethodHandle: + skipBytes(4); + break; + case CONSTANT_MethodType: + skipBytes(3); + break; + case CONSTANT_InvokeDynamic: + skipBytes(5); + break; default: throw badClassFile("bad.const.pool.tag", Byte.toString(tag)); } @@ -1821,6 +1835,13 @@ sym.savedParameterNames = paramNames.reverse(); } + /** + * skip n bytes + */ + void skipBytes(int n) { + bp = bp + n; + } + /** Skip a field or method */ void skipMember() {