Skip to content

Commit b7cc68a

Browse files
authored
Merge pull request #11186 from lrytz/revert-ordering
Revert "[backport] Tweak variance of Ordering.min and .max"
2 parents f843123 + 1ddafac commit b7cc68a

File tree

2 files changed

+14
-10
lines changed

2 files changed

+14
-10
lines changed

src/library/scala/math/Ordering.scala

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@ package scala
1414
package math
1515

1616
import java.util.Comparator
17-
import scala.annotation.unchecked.uncheckedOverride
18-
import scala.language.{higherKinds, implicitConversions}
17+
import scala.language.{implicitConversions, higherKinds}
1918

2019
/** Ordering is a trait whose instances each represent a strategy for sorting
2120
* instances of a type.
@@ -104,10 +103,10 @@ trait Ordering[T] extends Comparator[T] with PartialOrdering[T] with Serializabl
104103
override def equiv(x: T, y: T): Boolean = compare(x, y) == 0
105104

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

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

112111
/** Return the opposite ordering of this one. */
113112
override def reverse: Ordering[T] = new Ordering.Reverse[T](this)
@@ -176,8 +175,8 @@ object Ordering extends LowPriorityOrderingImplicits {
176175
override def lt(x: T, y: T): Boolean = outer.lt(y, x)
177176
override def gt(x: T, y: T): Boolean = outer.gt(y, x)
178177
override def equiv(x: T, y: T): Boolean = outer.equiv(y, x)
179-
override def max[U <: T](x: U, y: U): U = outer.min(x, y)
180-
override def min[U <: T](x: U, y: U): U = outer.max(x, y)
178+
override def max(x: T, y: T): T = outer.min(x, y)
179+
override def min(x: T, y: T): T = outer.max(x, y)
181180

182181
override def equals(obj: scala.Any): Boolean = obj match {
183182
case that: AnyRef if this eq that => true
@@ -302,8 +301,8 @@ object Ordering extends LowPriorityOrderingImplicits {
302301
override def lt(x: Float, y: Float): Boolean = x < y
303302
override def gt(x: Float, y: Float): Boolean = x > y
304303
override def equiv(x: Float, y: Float): Boolean = x == y
305-
override def max[U <: Float](x: U, y: U): U = math.max(x, y).asInstanceOf[U]
306-
override def min[U <: Float](x: U, y: U): U = math.min(x, y).asInstanceOf[U]
304+
override def max(x: Float, y: Float): Float = math.max(x, y)
305+
override def min(x: Float, y: Float): Float = math.min(x, y)
307306
}
308307
implicit object Float extends FloatOrdering
309308

@@ -315,8 +314,8 @@ object Ordering extends LowPriorityOrderingImplicits {
315314
override def lt(x: Double, y: Double): Boolean = x < y
316315
override def gt(x: Double, y: Double): Boolean = x > y
317316
override def equiv(x: Double, y: Double): Boolean = x == y
318-
override def max[U <: Double](x: U, y: U): U = math.max(x, y).asInstanceOf[U]
319-
override def min[U <: Double](x: U, y: U): U = math.min(x, y).asInstanceOf[U]
317+
override def max(x: Double, y: Double): Double = math.max(x, y)
318+
override def min(x: Double, y: Double): Double = math.min(x, y)
320319
}
321320
implicit object Double extends DoubleOrdering
322321

test/files/pos/t13127.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,8 @@ trait Sub[T] extends Base[T] {
2121

2222
def test = mux()
2323
}
24+
25+
// this fails to compile on Java 26, see https://github.com/scala/scala/pull/11175#issuecomment-3526694773
26+
trait OverrideOrdering[T] extends scala.math.Ordering[T] {
27+
override def max(x: T, y: T): T = x
28+
}

0 commit comments

Comments
 (0)