bug icon indicating copy to clipboard operation
bug copied to clipboard

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

Open xuwei-k opened this issue 5 years ago • 4 comments

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

xuwei-k avatar Sep 30 '20 13:09 xuwei-k

https://github.com/scala/scala/pull/9228

xuwei-k avatar Sep 30 '20 14:09 xuwei-k

it would make sense to tackle this and #12159 together

SethTisue avatar Jan 29 '21 14:01 SethTisue

Volunteer to pick up https://github.com/scala/scala/pull/9228 and run with it?

SethTisue avatar Mar 21 '21 16:03 SethTisue

Note that on JDK 17, --enable-preview isn't necessary to use sealed.

The non-preview version of the JEP is at https://openjdk.org/jeps/409

SethTisue avatar Aug 10 '22 12:08 SethTisue