diff -r aeadaf905d78 -r d04960f05593 src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java --- a/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Feb 13 10:33:13 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Feb 13 17:04:21 2013 +0000 @@ -728,14 +728,24 @@ * Write method parameter names attribute. */ int writeMethodParametersAttr(MethodSymbol m) { - if (m.params != null && 0 != m.params.length()) { - int attrIndex = writeAttr(names.MethodParameters); - databuf.appendByte(m.params.length()); + MethodType ty = m.externalType(types).asMethodType(); + final int allparams = ty.argtypes.size(); + if (m.params != null && allparams != 0) { + final int attrIndex = writeAttr(names.MethodParameters); + databuf.appendByte(allparams); + // Write extra parameters first + for (VarSymbol s : m.extraParams) { + final int flags = + ((int) s.flags() & (FINAL | SYNTHETIC | MANDATED)) | + ((int) m.flags() & SYNTHETIC); + databuf.appendChar(pool.put(s.name)); + databuf.appendInt(flags); + } + // Now write the real parameters for (VarSymbol s : m.params) { - // TODO: expand to cover synthesized, once we figure out - // how to represent that. - final int flags = (int) s.flags() & (FINAL | SYNTHETIC); - // output parameter info + final int flags = + ((int) s.flags() & (FINAL | SYNTHETIC | MANDATED)) | + ((int) m.flags() & SYNTHETIC); databuf.appendChar(pool.put(s.name)); databuf.appendInt(flags); }