src/share/classes/com/sun/tools/javac/jvm/ClassWriter.java

changeset 1565
d04960f05593
parent 1563
bc456436c613
child 1587
f1f605f85850
     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              }

mercurial