1.1 --- a/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Feb 13 10:33:13 2013 +0100 1.2 +++ b/src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java Wed Feb 13 17:04:21 2013 +0000 1.3 @@ -728,14 +728,24 @@ 1.4 * Write method parameter names attribute. 1.5 */ 1.6 int writeMethodParametersAttr(MethodSymbol m) { 1.7 - if (m.params != null && 0 != m.params.length()) { 1.8 - int attrIndex = writeAttr(names.MethodParameters); 1.9 - databuf.appendByte(m.params.length()); 1.10 + MethodType ty = m.externalType(types).asMethodType(); 1.11 + final int allparams = ty.argtypes.size(); 1.12 + if (m.params != null && allparams != 0) { 1.13 + final int attrIndex = writeAttr(names.MethodParameters); 1.14 + databuf.appendByte(allparams); 1.15 + // Write extra parameters first 1.16 + for (VarSymbol s : m.extraParams) { 1.17 + final int flags = 1.18 + ((int) s.flags() & (FINAL | SYNTHETIC | MANDATED)) | 1.19 + ((int) m.flags() & SYNTHETIC); 1.20 + databuf.appendChar(pool.put(s.name)); 1.21 + databuf.appendInt(flags); 1.22 + } 1.23 + // Now write the real parameters 1.24 for (VarSymbol s : m.params) { 1.25 - // TODO: expand to cover synthesized, once we figure out 1.26 - // how to represent that. 1.27 - final int flags = (int) s.flags() & (FINAL | SYNTHETIC); 1.28 - // output parameter info 1.29 + final int flags = 1.30 + ((int) s.flags() & (FINAL | SYNTHETIC | MANDATED)) | 1.31 + ((int) m.flags() & SYNTHETIC); 1.32 databuf.appendChar(pool.put(s.name)); 1.33 databuf.appendInt(flags); 1.34 }