--- a/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Wed Jun 26 20:45:47 2013 -0700
+++ b/langtools/src/share/classes/com/sun/tools/javac/jvm/Gen.java Thu Jun 27 00:37:13 2013 -0400
@@ -991,9 +991,19 @@
*/
void genMethod(JCMethodDecl tree, Env<GenContext> env, boolean fatcode) {
MethodSymbol meth = tree.sym;
-// System.err.println("Generating " + meth + " in " + meth.owner); //DEBUG
- if (Code.width(types.erasure(env.enclMethod.sym.type).getParameterTypes()) +
- (((tree.mods.flags & STATIC) == 0 || meth.isConstructor()) ? 1 : 0) >
+ int extras = 0;
+ // Count up extra parameters
+ if (meth.isConstructor()) {
+ extras++;
+ if (meth.enclClass().isInner() &&
+ !meth.enclClass().isStatic()) {
+ extras++;
+ }
+ } else if ((tree.mods.flags & STATIC) == 0) {
+ extras++;
+ }
+ // System.err.println("Generating " + meth + " in " + meth.owner); //DEBUG
+ if (Code.width(types.erasure(env.enclMethod.sym.type).getParameterTypes()) + extras >
ClassFile.MAX_PARAMETERS) {
log.error(tree.pos(), "limit.parameters");
nerrs++;