Skip to content

Commit edd3b69

Browse files
committed
Generate static forwarders for object members in companion interface
Same change implemented five years ago in Scala 2: scala/scala#5131 Fixes #13572. This PR was backported to 3.1.0-RC3 in #13616, this lets us bump the previousDottyVersion to make the mima checks pass even though this PR introduces new public member (and while we're at it, we can reset the mima filter list).
1 parent f633884 commit edd3b69

File tree

7 files changed

+17
-45
lines changed

7 files changed

+17
-45
lines changed

compiler/src/dotty/tools/backend/jvm/BCodeSkelBuilder.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ trait BCodeSkelBuilder extends BCodeHelpers {
292292
emitAnnotations(cnode, claszSymbol.annotations ++ ssa)
293293

294294
if (!isCZStaticModule && !isCZParcelable) {
295-
val skipStaticForwarders = (claszSymbol.isInterface || claszSymbol.is(Module) || ctx.settings.XnoForwarders.value)
295+
val skipStaticForwarders = (claszSymbol.is(Module) || ctx.settings.XnoForwarders.value)
296296
if (!skipStaticForwarders) {
297297
val lmoc = claszSymbol.companionModule
298298
// add static forwarders if there are no name conflicts; see bugs #363 and #1735

compiler/test/dotc/run-test-pickling.blacklist

+4
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
## Many of these tests fail because CompilationTests.pickling does not handle
2+
## tests containing java files correctly
3+
14
derive-generic.scala
25
eff-dependent.scala
36
enum-java
@@ -38,3 +41,4 @@ i12753
3841
t6138
3942
t6138-2
4043
i12656.scala
44+
trait-static-forwarder

project/Build.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ object Build {
8181
* set to 3.1.3. If it is going to be 3.1.0, it must be set to the latest
8282
* 3.0.x release.
8383
*/
84-
val previousDottyVersion = "3.0.2"
84+
val previousDottyVersion = "3.1.0-RC3"
8585

8686
object CompatMode {
8787
final val BinaryCompatible = 0

project/MiMaFilters.scala

-43
Original file line numberDiff line numberDiff line change
@@ -4,48 +4,5 @@ import com.typesafe.tools.mima.core.ProblemFilters._
44

55
object MiMaFilters {
66
val Library: Seq[ProblemFilter] = Seq(
7-
// Experimental API for saferExceptions
8-
exclude[MissingClassProblem]("scala.CanThrow"),
9-
exclude[MissingClassProblem]("scala.CanThrow$package"),
10-
exclude[MissingClassProblem]("scala.CanThrow$package$"),
11-
exclude[MissingClassProblem]("scala.unsafeExceptions"),
12-
exclude[MissingClassProblem]("scala.unsafeExceptions$"),
13-
exclude[MissingFieldProblem]("scala.runtime.stdLibPatches.language#experimental.saferExceptions"),
14-
exclude[MissingClassProblem]("scala.runtime.stdLibPatches.language$experimental$saferExceptions$"),
15-
16-
// New APIs that will be introduced in 3.1.0
17-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.Wildcard"),
18-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.WildcardTypeTest"),
19-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SourceFileMethods.getJPath"),
20-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SourceFileMethods.name"),
21-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SourceFileMethods.path"),
22-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SourceFileMethods.getJPath"),
23-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SourceFileMethods.name"),
24-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#SourceFileMethods.path"),
25-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#UnapplyModule.apply"),
26-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#UnapplyModule.apply"),
27-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.TypedOrTestTypeTest"),
28-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.TypedOrTest"),
29-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule.TypedOrTestMethods"),
30-
exclude[ReversedMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeReprMethods.isTupleN"),
31-
32-
// TODO: Remove those filters after releasing 3.1.0:
33-
exclude[DirectMissingMethodProblem]("scala.CanEqual.canEqualSeqs"),
34-
exclude[DirectMissingMethodProblem]("scala.CanEqual.canEqualOptions"),
35-
exclude[DirectMissingMethodProblem]("scala.CanEqual.canEqualOption"),
36-
exclude[DirectMissingMethodProblem]("scala.CanEqual.canEqualEither"),
37-
exclude[DirectMissingMethodProblem]("scala.Tuple.canEqualEmptyTuple"),
38-
exclude[DirectMissingMethodProblem]("scala.Tuple.canEqualTuple"),
39-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.WildcardTypeTest"),
40-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.Wildcard"),
41-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.TypedOrTestTypeTest"),
42-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.TypedOrTest"),
43-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule.TypedOrTestMethods"),
44-
exclude[DirectMissingMethodProblem]("scala.quoted.Quotes#reflectModule#TypeReprMethods.isTupleN"),
45-
exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$TypedOrTestMethods"),
46-
exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$TypedOrTestModule"),
47-
exclude[MissingClassProblem]("scala.quoted.Quotes$reflectModule$WildcardModule"),
48-
exclude[MissingClassProblem]("scala.runtime.$throws$package"),
49-
exclude[MissingClassProblem]("scala.runtime.$throws$package$"),
507
)
518
}
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
public final class Test {
2+
public static void main(String... args) {
3+
System.out.println(T.foo());
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
trait T
2+
3+
object T {
4+
def foo = 42
5+
}

0 commit comments

Comments
 (0)