diff options
author | Simon Ochsenreither <simon@ochsenreither.de> | 2015-08-31 05:03:29 +0200 |
---|---|---|
committer | Simon Ochsenreither <simon@ochsenreither.de> | 2016-01-25 19:21:43 +0100 |
commit | c78d771e6f025e767801f7fe118acc2ea7540acd (patch) | |
tree | e2e4faa4bcc60e7b5fd0d9a59d5586ed5522b900 /src/compiler/scala/tools/nsc/symtab/classfile | |
parent | 94a228f90e7d0cb997c866a8b9a7663c67e2df3d (diff) | |
download | scala-c78d771e6f025e767801f7fe118acc2ea7540acd.tar.gz scala-c78d771e6f025e767801f7fe118acc2ea7540acd.tar.bz2 scala-c78d771e6f025e767801f7fe118acc2ea7540acd.zip |
SI-9437 Emit and support parameter names in class files
JEP 118 added a MethodParameters attribute to the class file spec which
holds the parameter names of methods when compiling Java code with
`javac -parameters`.
We emit parameter names by default now.
Diffstat (limited to 'src/compiler/scala/tools/nsc/symtab/classfile')
-rw-r--r-- | src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala index 406411f21f..fffd48d145 100644 --- a/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala +++ b/src/compiler/scala/tools/nsc/symtab/classfile/ClassfileParser.scala @@ -816,6 +816,23 @@ abstract class ClassfileParser { val c1 = convertTo(c, symtype) if (c1 ne null) sym.setInfo(ConstantType(c1)) else devWarning(s"failure to convert $c to $symtype") + case tpnme.MethodParametersATTR => + def readParamNames(): Unit = { + import tools.asm.Opcodes.ACC_SYNTHETIC + val paramCount = u1 + var i = 0 + while (i < paramCount) { + val name = pool.getName(u2) + val access = u2 + if ((access & ACC_SYNTHETIC) != ACC_SYNTHETIC) { // name not synthetic + val params = sym.paramss.head // Java only has exactly one parameter list + params(i).name = name.encode + params(i).resetFlag(SYNTHETIC) + } + i += 1 + } + } + readParamNames() case tpnme.ScalaSignatureATTR => if (!isScalaAnnot) { devWarning(s"symbol ${sym.fullName} has pickled signature in attribute") |