summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
diff options
context:
space:
mode:
authorSom Snytt <som.snytt@gmail.com>2016-12-09 09:53:30 -0800
committerSom Snytt <som.snytt@gmail.com>2016-12-14 20:14:45 -0800
commitb775f4f58098d7f79155b3fe00c0bdb0eabf3d84 (patch)
treea4ba8d61638bbdd9a42c7a6db7a09df9ac0777d0 /src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
parent32a05ddfef09ac27904d9771ddf0ed8b4380e94a (diff)
downloadscala-b775f4f58098d7f79155b3fe00c0bdb0eabf3d84.tar.gz
scala-b775f4f58098d7f79155b3fe00c0bdb0eabf3d84.tar.bz2
scala-b775f4f58098d7f79155b3fe00c0bdb0eabf3d84.zip
SI-10097 Adapt unless -Xsource:2.13
For 2.12 migration, insert missing case class param section, strip caseaccessor from implicit paramsection, and deprecate the adaptation.
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/parser/Parsers.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/Parsers.scala15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
index 440e45c577..c35c0a1019 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/Parsers.scala
@@ -2262,11 +2262,20 @@ self =>
}
if (ofCaseClass) {
if (vds.isEmpty)
- syntaxError(in.lastOffset, s"case classes must have a parameter list; try 'case class ${owner.encoded
+ syntaxError(start, s"case classes must have a parameter list; try 'case class ${owner.encoded
}()' or 'case object ${owner.encoded}'")
- else if (vds.head.nonEmpty && vds.head.head.mods.isImplicit)
- syntaxError(in.lastOffset, s"case classes must have a non-implicit parameter list; try 'case class ${
+ else if (vds.head.nonEmpty && vds.head.head.mods.isImplicit) {
+ if (settings.isScala213)
+ syntaxError(start, s"case classes must have a non-implicit parameter list; try 'case class ${
owner.encoded}()${ vds.map(vs => "(...)").mkString }'")
+ else {
+ deprecationWarning(start, s"case classes should have a non-implicit parameter list; adapting to 'case class ${
+ owner.encoded}()${ vds.map(vs => "(...)").mkString }'", "2.12.2")
+ vds.insert(0, List.empty[ValDef])
+ vds(1) = vds(1).map(vd => copyValDef(vd)(mods = vd.mods & ~Flags.CASEACCESSOR))
+ if (implicitSection != -1) implicitSection += 1
+ }
+ }
}
if (implicitSection != -1 && implicitSection != vds.length - 1)
syntaxError(implicitOffset, "an implicit parameter section must be last")