Closed
Description
Compiler version
3.4.0-RC4
Minimized code
cs launch scalac:3.4.0-RC4 -- InnerClass.java RawTypes.java TestInnerClasses.scala TestRawTypes.scala
// InnerClass.java
package lib;
public class InnerClass {
public class Inner<U> {
public U innerField;
public Inner(U innerField) {
this.innerField = innerField;
}
public U getInnerField() { return innerField; }
}
public <U> Inner<U> createInner(U innerField) {
return new Inner<>(innerField);
}
public static <U> InnerClass.Inner<U> createInnerStatic(U innerField) {
var innerClass = new InnerClass();
return innerClass.new Inner<>(innerField);
}
}
// RawTypes.java
package lib;
public class RawTypes {
public class C<T> {
public class D<U> {}
}
public static void mii_Raw_Raw(C.D d) {}
}
// TestInnerClasses.scala
import lib.InnerClass
object testInnerClasses extends scala.App {
val ici: InnerClass = new InnerClass()
val ici_inner1: ici.Inner[Long] = ici.createInner[Long](47L) // ok, but should error
val ici_inner2: InnerClass#Inner[Long] = ici.createInner[Long](47L)
val ici_inner3: InnerClass#Inner[Long] = InnerClass.createInnerStatic[Long](47L) // error
}
// TestRawTypes.scala
package tastytest
import lib.RawTypes
object TestRawTypes extends scala.App {
val rt: RawTypes = new RawTypes()
val c: RawTypes#C[String] = new rt.C[String]()
val cd_ii: RawTypes#C[String]#D[String] = new c.D[String]()
RawTypes.mii_Raw_Raw(cd_ii) // error
}
Output
-- [E007] Type Mismatch Error: TestInnerClasses.scala:7:77 ---------------------
4 | val ici_inner3: InnerClass#Inner[Long] = InnerClass.createInnerStatic[Long](47L) // error
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
| Found: lib.InnerClass.Inner[Long]
| Required: lib.InnerClass#Inner[Long]
|
| longer explanation available when compiling with `-explain`
-- [E007] Type Mismatch Error: TestRawTypes.scala:11:23 ------------------------
11 | RawTypes.mii_Raw_Raw(cd_ii)
| ^^^^^
|Found: (tastytest.TestRawTypes.cd_ii : lib.RawTypes#C[String]#D[String])
|Required: lib.RawTypes.C.D[?]
|
| longer explanation available when compiling with `-explain`
2 errors found
Expectation
ici_inner1
should fail to type because from java classfiles it doesn't work. (more forgivable because scala 2 has same behavior)
ici_inner3
should be correctly typed (as when reading from class files), It is incorrectly typed as a static selection of lib.InnerClass.Inner[Long]
when it should be lib.InnerClass#Inner[Long]
as when reading from class files
mii_Raw_Raw(cd_ii)
should be correctly typed (as when reading from class files), It is incorrectly typed as a static selection of lib.RawTypes.C.D[?]
when it should be lib.RawTypes#C#D[?]
as when reading from class files