Skip to content

Runtime errors when implementing non-sealed java interface #23479

Open
@PhoenixmitX

Description

@PhoenixmitX

Compiler version

  • 3.7.1
  • 3.nightly

Minimized code

#!/usr/bin/env scala
//> using scala "3.7.1"
// //> using scala 3.nightly also tried with nightly
//> using repository "https://repo.papermc.io/repository/maven-public/"
//> using dep "com.velocitypowered:velocity-api:3.4.0-SNAPSHOT"

import com.velocitypowered.api.command.RawCommand
import com.velocitypowered.api.command.RawCommand.Invocation

class CrashCommand() extends RawCommand:
	override def execute(invocation: Invocation): Unit =
		()

object Main:
	def main(args: Array[String]): Unit =
		val command = CrashCommand()

Not tried, but i think the java library can be minimized to:

public non-sealed interface RawCommand extends InvocableCommand {}
public sealed interface InvocableCommand permits RawCommand {}

Output

When RUNNING this code the jvm throws an error

Downloading 2 dependencies
Compiling project (Scala 3.7.1, JVM (21))
Compiled project (Scala 3.7.1, JVM (21))
Exception in thread "main" java.lang.IncompatibleClassChangeError: class Crash$_$CrashCommand cannot implement sealed interface com.velocitypowered.api.command.InvocableCommand
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1027)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:862)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:760)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:681)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:639)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
        at Crash$_$Main$.main(Crash.sc:16)
        at Crash_sc$.main(Crash.sc:35)
        at Crash_sc.main(Crash.sc)

Expectation

no error is thrown

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions