diff options
author | Lukas Rytz <lukas.rytz@gmail.com> | 2016-09-30 15:41:03 +0200 |
---|---|---|
committer | Adriaan Moors <adriaan@lightbend.com> | 2016-09-30 16:10:05 -0700 |
commit | 0e0614c866526d8922a34e3aab1afc64d7b4f01c (patch) | |
tree | 6cd286aa256ccfe4e58ae4a8f2e4c2e2e9e9c6de /src | |
parent | 759b0daaf448f08f3233ee5fdaa3bc29f0732dfc (diff) | |
download | scala-0e0614c866526d8922a34e3aab1afc64d7b4f01c.tar.gz scala-0e0614c866526d8922a34e3aab1afc64d7b4f01c.tar.bz2 scala-0e0614c866526d8922a34e3aab1afc64d7b4f01c.zip |
Default -Xmixin-force-forwarders to true
Also eliminates the warning when a mixin forwarder cannot be implemented
because the target method is a java-defined default method in an
interface that is not a direct parent of the class.
The test t5148 is moved to neg, as expected: It was moved to pos when
disabling mixin forwarders in 33e7106. Same for the changed error
message in t4749.
Diffstat (limited to 'src')
-rw-r--r-- | src/compiler/scala/tools/nsc/settings/ScalaSettings.scala | 4 | ||||
-rw-r--r-- | src/compiler/scala/tools/nsc/transform/Mixin.scala | 9 |
2 files changed, 7 insertions, 6 deletions
diff --git a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala index e10fa3a114..4f0a4c8a46 100644 --- a/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala +++ b/src/compiler/scala/tools/nsc/settings/ScalaSettings.scala @@ -139,7 +139,7 @@ trait ScalaSettings extends AbsScalaSettings helpArg = "mode", descr = "Generate forwarder methods in classes inhering concrete methods from traits.", choices = List("true", "junit", "false"), - default = "junit", + default = "true", choicesHelp = List( "Always generate mixin forwarders.", "Generate mixin forwarders for JUnit-annotated methods (JUnit 4 does not support default methods).", @@ -147,7 +147,7 @@ trait ScalaSettings extends AbsScalaSettings object mixinForwarderChoices { def isTruthy = XmixinForceForwarders.value == "true" - def isJunit = isTruthy || XmixinForceForwarders.value == "junit" + def isAtLeastJunit = isTruthy || XmixinForceForwarders.value == "junit" } // XML parsing options diff --git a/src/compiler/scala/tools/nsc/transform/Mixin.scala b/src/compiler/scala/tools/nsc/transform/Mixin.scala index 582c51b90d..1c27cee5d2 100644 --- a/src/compiler/scala/tools/nsc/transform/Mixin.scala +++ b/src/compiler/scala/tools/nsc/transform/Mixin.scala @@ -218,9 +218,10 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL with AccessorSynthes def genForwarder(required: Boolean): Unit = { val owner = member.owner if (owner.isJavaDefined && owner.isInterface && !clazz.parentSymbols.contains(owner)) { - val text = s"Unable to implement a mixin forwarder for $member in $clazz unless interface ${owner.name} is directly extended by $clazz." - if (required) reporter.error(clazz.pos, text) - else warning(clazz.pos, text) + if (required) { + val text = s"Unable to implement a mixin forwarder for $member in $clazz unless interface ${owner.name} is directly extended by $clazz." + reporter.error(clazz.pos, text) + } } else cloneAndAddMixinMember(mixinClass, member).asInstanceOf[TermSymbol] setAlias member } @@ -259,7 +260,7 @@ abstract class Mixin extends InfoTransform with ast.TreeDSL with AccessorSynthes } def generateJUnitForwarder: Boolean = { - settings.mixinForwarderChoices.isJunit && + settings.mixinForwarderChoices.isAtLeastJunit && member.annotations.nonEmpty && JUnitAnnotations.exists(annot => annot.exists && member.hasAnnotation(annot)) } |