Skip to content

AbstractMethodError when overriding java method with default implementation which implementation is "muted" in inherited interface #12224

Open
@unkarjedy

Description

@unkarjedy

reproduction steps

using Scala (2.13.3),

public interface BaseRootJava {
    default boolean startInWriteAction() {
        return true;
    }
}
public interface BaseIntermidiateJava extends BaseRootJava {
    String getText();

    @Override
    boolean startInWriteAction();
}
class ChildScala extends BaseIntermidiateJava {
  override def getText: String = ""
}
object Main {
  def main(args: Array[String]): Unit = {
    val action = new ChildScala
    println(action.startInWriteAction())
  }
}

problem

This code compiles but throws an error at runtime:

Exception in thread "main" java.lang.AbstractMethodError: Method MyIntentionActionScala.startInWriteAction()Z is abstract
	at MyIntentionActionScala.startInWriteAction(MyIntentionActionScala.scala)
	at Main$.main(Main.scala:5)
	at Main.main(Main.scala)

java analog will not compile

public class ChildJava implements BaseIntermidiateJava {
    @Override
    public String getText() { return null; }
}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions