src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java
Print this page
@@ -728,18 +728,28 @@
/**
* 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);
}
endAttr(attrIndex);
return 1;