diff -r 105d1f9c1ab8 -r 3582b62dccb2 src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java --- a/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Mon Jun 10 15:18:47 2013 +0100 +++ b/src/share/classes/com/sun/tools/javac/comp/LambdaToMethod.java Mon Jun 10 15:57:32 2013 +0100 @@ -68,6 +68,8 @@ */ public class LambdaToMethod extends TreeTranslator { + private JCDiagnostic.Factory diags; + private Log log; private Lower lower; private Names names; private Symtab syms; @@ -89,6 +91,9 @@ /** info about the current class being processed */ private KlassInfo kInfo; + /** dump statistics about lambda code generation */ + private boolean dumpLambdaToMethodStats; + /** Flag for alternate metafactories indicating the lambda object is intended to be serializable */ public static final int FLAG_SERIALIZABLE = 1 << 0; @@ -146,6 +151,8 @@ } private LambdaToMethod(Context context) { + diags = JCDiagnostic.Factory.instance(context); + log = Log.instance(context); lower = Lower.instance(context); names = Names.instance(context); syms = Symtab.instance(context); @@ -154,6 +161,8 @@ types = Types.instance(context); transTypes = TransTypes.instance(context); analyzer = new LambdaAnalyzerPreprocessor(); + Options options = Options.instance(context); + dumpLambdaToMethodStats = options.isSet("dumpLambdaToMethodStats"); } // @@ -1101,7 +1110,9 @@ Map prevSerializableLambdaCount = serializableLambdaCounts; Map prevClinits = clinits; + DiagnosticSource prevSource = log.currentSource(); try { + log.useSource(tree.sym.sourcefile); serializableLambdaCounts = new HashMap(); prevClinits = new HashMap(); if (tree.sym.owner.kind == MTH) { @@ -1126,6 +1137,7 @@ super.visitClassDef(tree); } finally { + log.useSource(prevSource.getFile()); frameStack = prevStack; serializableLambdaCounts = prevSerializableLambdaCount; clinits = prevClinits; @@ -1685,6 +1697,9 @@ } Name name = isSerializable() ? serializedLambdaName(owner) : lambdaName(); this.translatedSym = makeSyntheticMethod(0, name, null, owner.enclClass()); + if (dumpLambdaToMethodStats) { + log.note(tree, "lambda.stat", needsAltMetafactory(), translatedSym); + } } /** @@ -1841,6 +1856,11 @@ lambdaName().append(names.fromString("$bridge")), null, owner.enclClass()) : null; + if (dumpLambdaToMethodStats) { + String key = bridgeSym == null ? + "mref.stat" : "mref.stat.1"; + log.note(tree, key, needsAltMetafactory(), bridgeSym); + } } /**