Skip to content

classToSymbol crashes for an anonymous class declared in <init> or <clinit> #7922

@scabug

Description

@scabug
public class Foo {
  {
    new Thread (
      new Runnable() {
        public void run() {}
      }
    ).start();
  }
}
import scala.reflect.runtime.universe._
import scala.reflect.runtime.{currentMirror => cm}

object Test extends App {
  val jclass = Class.forName("Foo$1")
  val gem = jclass.getClass.getDeclaredMethod("getEnclosingMethod0")
  gem.setAccessible(true)
  println(gem.invoke(jclass).asInstanceOf[Array[Object]].toList)
  val sclass = cm.classSymbol(jclass)
  println(sclass.owner)
}

{code}
20:23 ~/Projects/210x/sandbox (2.10.x)$ rmc && javac Foo.java && scalac Test.scala && r
List(class Foo, null, null)
java.lang.AssertionError: assertion failed: not a type: symbol
loaded from class Foo$1 in package with name $1 and classloader scala.tools.nsc.util.ScalaClassLoader$URLClassLoader@5462a19d
at scala.Predef$.assert(Predef.scala:179)
at scala.reflect.runtime.JavaMirrors$JavaMirror.scala$reflect$runtime$JavaMirrors$JavaMirror$$classToScala1(JavaMirrors.scala:976)
at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:935)
at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$classToScala$1.apply(JavaMirrors.scala:935)
at scala.reflect.runtime.JavaMirrors$JavaMirror$$anonfun$toScala$1.apply(JavaMirrors.scala:104)
at scala.reflect.runtime.TwoWayCache.toScala(TwoWayCache.scala:38)
at scala.reflect.runtime.JavaMirrors$JavaMirror.toScala(JavaMirrors.scala:102)
at scala.reflect.runtime.JavaMirrors$JavaMirror.classToScala(JavaMirrors.scala:935)
at scala.reflect.runtime.JavaMirrors$JavaMirror.classSymbol(JavaMirrors.scala:206)
at scala.reflect.runtime.JavaMirrors$JavaMirror.classSymbol(JavaMirrors.scala:65){code}

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions