Skip to content

Scala 3.3 handling of recursive types in Java differ from javac and Scala 2.13 #17763

Closed
@andrzejressel

Description

@andrzejressel

Repro repo: https://github.com/andrzejressel/dotty-resursive-java-types

Compiler version

3.3.0

Minimized code

// CopyableBuilder.java
public interface CopyableBuilder<B extends CopyableBuilder<B, T>, T extends ToCopyableBuilder<B, T>> {
}
// ToCopyableBuilder.java
public interface ToCopyableBuilder<B extends CopyableBuilder<B, T>, T extends ToCopyableBuilder<B, T>> {
}
// Crash.scala
// For some reason empty scala class is required? Is sbt invoking javac when there are only java files?
class Crash

Output

[IJ]compile
[info] compiling 1 Scala source and 2 Java sources to D:\MojeProgramy\scala33-crash\target\scala-3.3.0\classes ...
[error] -- [E057] Type Mismatch Error: D:\MojeProgramy\scala33-crash\src\main\java\test\ToCopyableBuilder.java:1:45
[error] 1 |public interface ToCopyableBuilder<B extends CopyableBuilder<B, T>, T extends ToCopyableBuilder<B, T>> {
[error]   |                                             ^
[error]   |Type argument T does not conform to upper bound ToCopyableBuilder[B, T] in subpart CopyableBuilder[B, T] of inferred type  <: CopyableBuilder[B, T]
[error]   |
[error]   | longer explanation available when compiling with `-explain`
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed 4 cze 2023, 16:42:52

Expectation

[IJ]compile
[info] compiling 1 Scala source and 2 Java sources to D:\MojeProgramy\scala33-crash\target\scala-2.13\classes ...
[info] done compiling
[success] Total time: 0 s, completed 4 cze 2023, 16:43:17

Interesting thing is that when these files are ported to Scala they are working fine.

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions