Skip to content

Commit 819c625

Browse files
Test stdlib-bootstrpped ScalaNumericConversions.underlying (#18086)
2 parents 6367318 + 5e5735b commit 819c625

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

project/TastyMiMaFilters.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,9 @@ object TastyMiMaFilters {
6363
// Problem? Very complicated signature
6464
ProblemMatcher.make(ProblemKind.IncompatibleTypeChange, "scala.collection.generic.IsMap.mapOpsIsMap"),
6565

66-
// Problem: Overriding java method (`public abstract Object underlying();` with `def underlying: Object`)
66+
// Probably OK: Overriding java method (`public abstract Object underlying();` with `def underlying: Object`)
67+
// Calls to the underlying seem to link correctly.
68+
// Tested in stdlib-bootstrapped/test/Main.scala
6769
ProblemMatcher.make(ProblemKind.MissingTermMember, "scala.math.Big*.underlying"),
6870
ProblemMatcher.make(ProblemKind.NewAbstractMember, "scala.math.ScalaNumericConversions.underlying"),
6971

stdlib-bootstrapped-tasty-tests/src/Main.scala

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ object HelloWorld:
1616
testScala2UnapplySignatures()
1717
testScala2ObjectParents()
1818
testScala2CaseClassUnderscoreMembers()
19+
testScalaNumberUnderlying()
1920
}
2021

2122
def testScala2UnapplySignatures() = {
@@ -37,3 +38,32 @@ object HelloWorld:
3738
val some: Some[Int] = Some(1)
3839
// FIXME: assert(!typeChecks("some._1"))
3940
}
41+
42+
def testScalaNumberUnderlying() = {
43+
import scala.math.{ScalaNumericConversions, ScalaNumber}
44+
45+
val _: java.math.BigInteger = BigInt(1).underlying
46+
val _: Object = (BigInt(1): ScalaNumericConversions).underlying
47+
val _: Object = (BigInt(1): ScalaNumber).underlying
48+
49+
// val _: java.math.BigDecimal = BigDecimal(1).underlying // FIXME: inferred result type of non-private method
50+
val _: Object = (BigDecimal(1): ScalaNumericConversions).underlying
51+
val _: Object = (BigDecimal(1): ScalaNumber).underlying
52+
53+
class MyNumber1(override val underlying: BigInt) extends ScalaNumericConversions {
54+
def doubleValue: Double = ???; def floatValue: Float = ???;
55+
def intValue: Int = ???; def longValue: Long = ???
56+
def isWhole: Boolean = ???
57+
}
58+
val _: BigInt = MyNumber1(1).underlying
59+
val _: Object = (MyNumber1(1): ScalaNumericConversions).underlying
60+
val _: Object = (MyNumber1(1): ScalaNumber).underlying
61+
62+
class MyNumber2(override val underlying: Object) extends ScalaNumber {
63+
def doubleValue: Double = ???; def floatValue: Float = ???;
64+
def intValue: Int = ???; def longValue: Long = ???
65+
def isWhole: Boolean = ???
66+
}
67+
val _: Object = MyNumber2(BigInt(1)).underlying
68+
val _: Object = (MyNumber2(BigInt(1)): ScalaNumber).underlying
69+
}

0 commit comments

Comments
 (0)