Skip to content

subclassing a java annotation generates an invalid classfile #9400

Closed
scala/scala
#6869
@scabug

Description

@scabug

JavaAnnot.java:

public @interface JavaAnnot { }

Test.scala:

class C extends JavaAnnot {
  def annotationType: Class[_ <: java.lang.annotation.Annotation] = null
}

object Test extends App {
  new C
}

There is also a (mostly) spurious warning emitted:

➜  sandbox git:(t9393) ✗ javac JavaAnnot.java
➜  sandbox git:(t9393) ✗ scalac Test.scala
Test.scala:1: warning: Implementation restriction: subclassing Classfile does not
make your annotation visible at runtime.  If that is what
you want, you must write the annotation class in Java.
class C extends JavaAnnot {
      ^
one warning found
➜  sandbox git:(t9393) ✗ scala Test
java.lang.IncompatibleClassChangeError: class C has interface JavaAnnot as super class
	at java.lang.ClassLoader.defineClass1(Native Method)

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions