Skip to content

scalac should respect JEP 409 "Sealed Classes" at compile time #12171

Closed
@xuwei-k

Description

@xuwei-k

reproduction steps

java --version

openjdk 15 2020-09-15
OpenJDK Runtime Environment (build 15+36-1562)
OpenJDK 64-Bit Server VM (build 15+36-1562, mixed mode, sharing)

A.java

package foo;

public sealed class A{}

final class B extends A{}

Main.scala

package foo

class C extends A

object Main {
  def main(args: Array[String]): Unit = {
    new C
  }
}

build.sbt

javacOptions ++= Seq("--enable-preview", "--release", "15")
scalaVersion := "2.13.3"
// https://github.com/scala/bug/issues/12159
compileOrder := CompileOrder.JavaThenScala

project/build.properties

sbt.version=1.3.13

problem

runtime error 😢

sbt -J--enable-preview run

[info] running foo.Main 
[error] (run-main-0) java.lang.IncompatibleClassChangeError: class foo.C cannot inherit from sealed class foo.A
[error] java.lang.IncompatibleClassChangeError: class foo.C cannot inherit from sealed class foo.A
[error] 	at java.base/java.lang.ClassLoader.defineClass1(Native Method)
[error] 	at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
[error] 	at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
[error] 	at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:514)
[error] 	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:422)
[error] 	at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:416)
[error] 	at java.base/java.security.AccessController.doPrivileged(AccessController.java:691)
[error] 	at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:415)
[error] stack trace is suppressed; run last Compile / bgRun for the full output
[error] Nonzero exit code: 1
[error] (Compile / run) Nonzero exit code: 1

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions