Skip to content

Commit ae6ae4d

Browse files
authored
Merge pull request #11179 from lrytz/merge-212
Merge 2.12.x to 2.13.x [ci: last-only]
2 parents 3303bea + e828c8f commit ae6ae4d

File tree

11 files changed

+58
-7
lines changed

11 files changed

+58
-7
lines changed

project/MimaFilters.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ object MimaFilters extends AutoPlugin {
5050
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.ArrayCharSequence.getChars"),
5151
ProblemFilters.exclude[DirectMissingMethodProblem]("scala.runtime.SeqCharSequence.getChars"),
5252

53+
// scala/scala#11175
54+
ProblemFilters.exclude[MissingClassProblem]("scala.annotation.unchecked.uncheckedOverride"),
5355
)
5456

5557
override val buildSettings = Seq(

project/ScalaOptionParser.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,5 +140,5 @@ object ScalaOptionParser {
140140
private def scaladocPathSettingNames = List("-doc-root-content", "-diagrams-dot-path")
141141
private def scaladocMultiStringSettingNames = List("-doc-external-doc")
142142

143-
private val targetSettingNames = (8 to 25).map(_.toString).flatMap(v => v :: s"jvm-1.$v" :: s"jvm-$v" :: s"1.$v" :: Nil).toList
143+
private val targetSettingNames = (8 to 26).map(_.toString).flatMap(v => v :: s"jvm-1.$v" :: s"jvm-$v" :: s"1.$v" :: Nil).toList
144144
}

src/compiler/scala/tools/nsc/backend/jvm/analysis/BackendUtils.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ abstract class BackendUtils extends PerRunInit {
8989
case "23" => asm.Opcodes.V23
9090
case "24" => asm.Opcodes.V24
9191
case "25" => asm.Opcodes.V25
92+
case "26" => asm.Opcodes.V26
9293
// to be continued...
9394
})
9495

src/compiler/scala/tools/nsc/settings/StandardScalaSettings.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ object StandardScalaSettings {
122122
val MaxTargetVersion = ScalaVersion(javaSpecVersion) match {
123123
case SpecificScalaVersion(1, minor, _, _) => minor
124124
case SpecificScalaVersion(major, _, _, _) => major
125-
case _ => 25
125+
case _ => 26
126126
}
127127

128128
private val AllTargetVersions = (MinTargetVersion to MaxTargetVersion).map(_.toString).to(List)

src/compiler/scala/tools/nsc/typechecker/RefChecks.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -500,8 +500,9 @@ abstract class RefChecks extends Transform {
500500
else if (other.isEffectivelyFinal) // (1.2)
501501
overrideErrorWithMemberInfo("cannot override final member:")
502502
else {
503-
// In Java, the OVERRIDE flag is implied
504-
val memberOverrides = member.isAnyOverride || (member.isJavaDefined && !member.isDeferred)
503+
val memberOverrides = member.isAnyOverride ||
504+
member.hasAnnotation(definitions.uncheckedOverrideClass) ||
505+
(member.isJavaDefined && !member.isDeferred) // In Java, the OVERRIDE flag is implied
505506

506507
// Concrete `other` requires `override` for `member`.
507508
// Synthetic exclusion for (at least) default getters, fixes scala/bug#5178.
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Scala (https://www.scala-lang.org)
3+
*
4+
* Copyright EPFL and Lightbend, Inc. dba Akka
5+
*
6+
* Licensed under Apache License 2.0
7+
* (http://www.apache.org/licenses/LICENSE-2.0).
8+
*
9+
* See the NOTICE file distributed with this work for
10+
* additional information regarding copyright ownership.
11+
*/
12+
13+
package scala.annotation.unchecked
14+
15+
import scala.annotation.StaticAnnotation
16+
17+
/**
18+
* Marking a definition `@uncheckedOverride` is equivalent to the `override` keyword, except that overriding is not
19+
* enforced. A definition marked `@uncheckedOverride` is allowed to override nothing.
20+
*/
21+
final class uncheckedOverride extends StaticAnnotation

src/library/scala/math/Ordering.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ package math
1515

1616
import java.util.Comparator
1717

18+
import scala.annotation.unchecked.uncheckedOverride
1819
import scala.language.implicitConversions
1920
import scala.annotation.migration
2021

@@ -103,10 +104,10 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl
103104
override def equiv(x: T, y: T): Boolean = compare(x, y) == 0
104105

105106
/** Return `x` if `x` >= `y`, otherwise `y`. */
106-
def max[U <: T](x: U, y: U): U = if (gteq(x, y)) x else y
107+
@uncheckedOverride def max[U <: T](x: U, y: U): U = if (gteq(x, y)) x else y
107108

108109
/** Return `x` if `x` <= `y`, otherwise `y`. */
109-
def min[U <: T](x: U, y: U): U = if (lteq(x, y)) x else y
110+
@uncheckedOverride def min[U <: T](x: U, y: U): U = if (lteq(x, y)) x else y
110111

111112
/** Return the opposite ordering of this one.
112113
*

src/reflect/scala/reflect/internal/Definitions.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,6 +1329,7 @@ trait Definitions extends api.StandardDefinitions {
13291329
lazy val NowarnClass = getClassIfDefined("scala.annotation.nowarn")
13301330
lazy val uncheckedStableClass = requiredClass[scala.annotation.unchecked.uncheckedStable]
13311331
lazy val uncheckedVarianceClass = requiredClass[scala.annotation.unchecked.uncheckedVariance]
1332+
lazy val uncheckedOverrideClass = getClassIfDefined("scala.annotation.unchecked.uncheckedOverride")
13321333

13331334
// Tasty Unpickling Helpers - only access when Scala 3 library is expected to be available
13341335
lazy val ChildAnnotationClass = getClassIfDefined("scala.annotation.internal.Child")

src/reflect/scala/reflect/runtime/JavaUniverseForce.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,7 @@ trait JavaUniverseForce { self: runtime.JavaUniverse =>
461461
definitions.NowarnClass
462462
definitions.uncheckedStableClass
463463
definitions.uncheckedVarianceClass
464+
definitions.uncheckedOverrideClass
464465
definitions.ChildAnnotationClass
465466
definitions.RepeatedAnnotationClass
466467
definitions.TargetNameAnnotationClass

test/files/pos/t13127.scala

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import scala.annotation.unchecked.uncheckedOverride
2+
3+
trait Hordering[T] extends java.util.Comparator[T] {
4+
// overriding on java 26 and later, not overriding before
5+
@uncheckedOverride def max[U <: T](x: U, y: U): U = x
6+
@uncheckedOverride def min[U <: T](x: U, y: U): U = x
7+
}
8+
9+
trait Base[T] {
10+
def max[U <: T](x: U, y: U): U = x
11+
12+
def mux(x: String = "ex") = x
13+
}
14+
15+
trait Sub[T] extends Base[T] {
16+
@uncheckedOverride def max[U <: T](x: U, y: U): U = x // overriding ok
17+
@uncheckedOverride def min[U <: T](x: U, y: U): U = x // not overriding ok
18+
19+
// overriding default
20+
@uncheckedOverride def mux(x: String = "nox") = x
21+
22+
def test = mux()
23+
}

0 commit comments

Comments
 (0)