Skip to content

Compilation error when subclassing a class with methods inherited from a trait with mixin from Java #11512

@raboof

Description

@raboof

Not sure if the title correctly summarizes the problem, but the following compiled with 2.13.0-M5, but not on RC1:

Scala:

trait SuiteMixin { this: Suite =>
  def rerunner: Option[String]
}
trait Suite {
  def rerunner: Option[String] = ???
}
abstract class JournalSpec extends Suite with SuiteMixin

Java:

class MyJournalSpecTest extends JournalSpec {
}

Compiler error:

[error] /home/aengelen/dev/scala-2.13-repro/src/main/java/MyJournalSpecTest.java:1:1: MyJournalSpecTest is not abstract and does not override abstract method rerunner() in SuiteMixin
[error] class MyJournalSpecTest extends JournalSpec {
[error] (Compile / compileIncremental) javac returned non-zero exit code

Looking at the generated classes, Suite and SuiteMixin are the same between M5 and RC1:

Compiled from "Suite.scala"
public interface Suite {
  public static scala.Option rerunner$(Suite);
  public scala.Option<java.lang.String> rerunner();
  public static void $init$(Suite);
}

Compiled from "SuiteMixin.scala"
public interface SuiteMixin {
  public abstract scala.Option<java.lang.String> rerunner();
}

But JournalSpec is different: on RC1 it is missing the <java.lang.String> generic on the rerunner return type:

javap ./target/scala-2.13.0-RC1/classes/JournalSpec.class
Compiled from "JournalSpec.scala"
public abstract class JournalSpec implements Suite,SuiteMixin {
  public scala.Option rerunner();
  public JournalSpec();
}

javap ./target/scala-2.13.0-M5/classes/JournalSpec.class
Compiled from "JournalSpec.scala"
public abstract class JournalSpec implements Suite,SuiteMixin {
  public scala.Option<java.lang.String> rerunner();
  public JournalSpec();
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions