summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAleksandar Prokopec <axel22@gmail.com>2012-08-27 16:03:59 +0200
committerAleksandar Prokopec <axel22@gmail.com>2012-08-27 17:15:39 +0200
commit373f22a2022519ab894c1ea77460e6460d7c2ee4 (patch)
tree54a77d2414cfa80b6a3e878acb06b1b6526887f5 /src
parent5bdfddefd7ff13476185b67d869a92c6c9f94506 (diff)
downloadscala-373f22a2022519ab894c1ea77460e6460d7c2ee4.tar.gz
scala-373f22a2022519ab894c1ea77460e6460d7c2ee4.tar.bz2
scala-373f22a2022519ab894c1ea77460e6460d7c2ee4.zip
Fix SI-4581.
Specifically, the final flag on the generated static field is no longer ommitted. Fix 2 failing test-cases.
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/nsc/transform/CleanUp.scala10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/transform/CleanUp.scala b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
index 570704f049..972debb900 100644
--- a/src/compiler/scala/tools/nsc/transform/CleanUp.scala
+++ b/src/compiler/scala/tools/nsc/transform/CleanUp.scala
@@ -550,6 +550,10 @@ abstract class CleanUp extends Transform with ast.TreeDSL {
else tree
}
+ case DefDef(mods, name, tps, vps, tp, rhs) if tree.symbol.hasStaticAnnotation =>
+ reporter.error(tree.pos, "The @static annotation is not allowed on method definitions.")
+ super.transform(tree)
+
case ValDef(mods, name, tpt, rhs) if tree.symbol.hasStaticAnnotation =>
def transformStaticValDef = {
log("moving @static valdef field: " + name + ", in: " + tree.symbol.owner)
@@ -592,7 +596,8 @@ abstract class CleanUp extends Transform with ast.TreeDSL {
}
// create a static field in the companion class for this @static field
- val stfieldSym = linkedClass.newVariable(newTermName(name), tree.pos, STATIC | SYNTHETIC | FINAL) setInfo sym.tpe
+ val stfieldSym = linkedClass.newValue(newTermName(name), tree.pos, STATIC | SYNTHETIC | FINAL) setInfo sym.tpe
+ if (sym.isMutable) stfieldSym.setFlag(MUTABLE)
stfieldSym.addAnnotation(StaticClass)
val names = classNames.getOrElseUpdate(linkedClass, linkedClass.info.decls.collect {
@@ -768,7 +773,8 @@ abstract class CleanUp extends Transform with ast.TreeDSL {
staticSym <- clazz.info.decls
if staticSym.hasStaticAnnotation
} staticSym match {
- case stfieldSym if stfieldSym.isVariable =>
+ case stfieldSym if (stfieldSym.isValue && !stfieldSym.isMethod) || stfieldSym.isVariable =>
+ log(stfieldSym + " is value: " + stfieldSym.isValue)
val valdef = staticBodies((clazz, stfieldSym))
val ValDef(_, _, _, rhs) = valdef
val fixedrhs = rhs.changeOwner((valdef.symbol, clazz.info.decl(nme.CONSTRUCTOR)))