summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/symtab/classfile
diff options
context:
space:
mode:
authorSimon Ochsenreither <simon@ochsenreither.de>2015-08-31 05:03:29 +0200
committerSimon Ochsenreither <simon@ochsenreither.de>2016-01-25 19:21:43 +0100
commitc78d771e6f025e767801f7fe118acc2ea7540acd (patch)
treee2e4faa4bcc60e7b5fd0d9a59d5586ed5522b900 /src/compiler/scala/tools/nsc/symtab/classfile
parent94a228f90e7d0cb997c866a8b9a7663c67e2df3d (diff)
downloadscala-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.scala17
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")