diff -r 99983a4a593b -r 26d93df3905a src/share/classes/com/sun/tools/javac/jvm/Gen.java --- a/src/share/classes/com/sun/tools/javac/jvm/Gen.java Tue Sep 25 11:52:37 2012 +0100 +++ b/src/share/classes/com/sun/tools/javac/jvm/Gen.java Tue Sep 25 11:53:18 2012 +0100 @@ -2103,6 +2103,8 @@ result = res; } else if (sym.kind == VAR && sym.owner.kind == MTH) { result = items.makeLocalItem((VarSymbol)sym); + } else if (isInvokeDynamic(sym)) { + result = items.makeDynamicItem(sym); } else if ((sym.flags() & STATIC) != 0) { if (!isAccessSuper(env.enclMethod)) sym = binaryQualifier(sym, env.enclClass.type); @@ -2152,8 +2154,12 @@ result = items. makeImmediateItem(sym.type, ((VarSymbol) sym).getConstValue()); } else { - if (!accessSuper) + if (isInvokeDynamic(sym)) { + result = items.makeDynamicItem(sym); + return; + } else if (!accessSuper) { sym = binaryQualifier(sym, tree.selected.type); + } if ((sym.flags() & STATIC) != 0) { if (!selectSuper && (ssym == null || ssym.kind != TYP)) base = base.load(); @@ -2174,6 +2180,10 @@ } } + public boolean isInvokeDynamic(Symbol sym) { + return sym.kind == MTH && ((MethodSymbol)sym).isDynamic(); + } + public void visitLiteral(JCLiteral tree) { if (tree.type.tag == TypeTags.BOT) { code.emitop0(aconst_null);