File tree Expand file tree Collapse file tree 7 files changed +66
-1
lines changed
src/reflect/scala/reflect/internal/pickling Expand file tree Collapse file tree 7 files changed +66
-1
lines changed Original file line number Diff line number Diff line change @@ -396,7 +396,7 @@ abstract class UnPickler {
396
396
case NOtpe => NoType
397
397
case NOPREFIXtpe => NoPrefix
398
398
case THIStpe => ThisType (readSymbolRef())
399
- case SINGLEtpe => SingleType (readTypeRef(), readSymbolRef())
399
+ case SINGLEtpe => SingleType (readTypeRef(), readSymbolRef().filter(_.isStable)) // SI-7596 account for overloading
400
400
case SUPERtpe => SuperType (readTypeRef(), readTypeRef())
401
401
case CONSTANTtpe => ConstantType (readConstantRef())
402
402
case TYPEREFtpe => TypeRef (readTypeRef(), readSymbolRef(), readTypes())
Original file line number Diff line number Diff line change
1
+ trait Driver {
2
+ abstract class Table
3
+ }
4
+
5
+ object Config {
6
+ val driver : Driver = ???
7
+ def driver (a : Any ) = ???
8
+ }
9
+
10
+ object Sites extends Config .driver.Table
Original file line number Diff line number Diff line change
1
+ object Test {
2
+ locally {
3
+ Sites : Config .driver.Table
4
+ }
5
+ }
6
+
7
+ // Under separate compilation, the pickler is foiled by the
8
+ // overloaded term `Config.driver`, and results in:
9
+
10
+ // qbin/scalac test/files/pos/t7596/A_1.scala && qbin/scalac -explaintypes test/files/pos/t7596/B_2.scala
11
+ // test/files/pos/t7596/B_2.scala:3: error: type mismatch;
12
+ // found : Sites.type
13
+ // required: Config.driver.Table
14
+ // Sites: Config.driver.Table
15
+ // ^
16
+ // Sites.type <: Config.driver.Table?
17
+ // Driver.this.type = Config.driver.type?
18
+ // false
19
+ // false
Original file line number Diff line number Diff line change
1
+ trait H2Driver {
2
+ abstract class Table [T ]
3
+ }
4
+
5
+ object Config {
6
+ val driver : H2Driver = ???
7
+ def driver (app : Any ): H2Driver = ???
8
+ }
9
+
10
+ class Sites extends Config .driver.Table [String ]
Original file line number Diff line number Diff line change
1
+ class DAOBase [E ]{
2
+ type TableType <: Config .driver.Table [E ]
3
+ }
4
+ class SitesDAO extends DAOBase [String ]{
5
+ type TableType = Sites
6
+ }
Original file line number Diff line number Diff line change
1
+ trait Driver {
2
+ abstract class Table
3
+ }
4
+
5
+ object Config {
6
+ val driver : Driver = ???
7
+ val driverUniqueName : driver.type = driver
8
+ def driver (a : Any ) = ???
9
+ }
10
+
11
+ object Sites extends Config .driver.Table
Original file line number Diff line number Diff line change
1
+ object Test {
2
+ locally {
3
+ Sites : Config .driver.Table
4
+ }
5
+ }
6
+
7
+ // This variation worked by avoiding referring to the
8
+ // overloaded term `Config.driver` in the parent type of
9
+ // Sites
You can’t perform that action at this time.
0 commit comments