diff options
author | Som Snytt <som.snytt@gmail.com> | 2016-12-09 09:53:30 -0800 |
---|---|---|
committer | Som Snytt <som.snytt@gmail.com> | 2016-12-14 20:14:45 -0800 |
commit | b775f4f58098d7f79155b3fe00c0bdb0eabf3d84 (patch) | |
tree | a4ba8d61638bbdd9a42c7a6db7a09df9ac0777d0 /src/compiler/scala | |
parent | 32a05ddfef09ac27904d9771ddf0ed8b4380e94a (diff) | |
download | scala-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')
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/parser/Parsers.scala | 15 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/settings/ScalaSettings.scala | 5 |
2 files changed, 16 insertions, 4 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") diff --git a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala index 5455111674..7be65431db 100644 --- a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala +++ b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala @@ -84,7 +84,10 @@ trait ScalaSettings extends AbsScalaSettings * though this helper. */ def isScala211: Boolean = source.value >= ScalaVersion("2.11.0") - def isScala212: Boolean = source.value >= ScalaVersion("2.12.0") + private[this] val version212 = ScalaVersion("2.12.0") + def isScala212: Boolean = source.value >= version212 + private[this] val version213 = ScalaVersion("2.13.0") + def isScala213: Boolean = source.value >= version213 /** * -X "Advanced" settings |