Skip to content

REPL crashes when Java class name given as input #12346

Closed
@griggt

Description

@griggt

Compiler version

3.0.0

Minimized code

scala> String

Output

scala> String
Exception in thread "main" java.lang.NoClassDefFoundError: java/lang/String$
	at java.lang.Class.getDeclaredMethods0(Native Method)
	at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
	at java.lang.Class.getDeclaredMethods(Class.java:1975)
	at dotty.tools.repl.Rendering.valueOf(Rendering.scala:102)
	at dotty.tools.repl.Rendering.renderVal(Rendering.scala:141)
	at dotty.tools.repl.ReplDriver.$anonfun$13(ReplDriver.scala:323)
	at scala.collection.immutable.List.flatMap(List.scala:293)
	at scala.collection.immutable.List.flatMap(List.scala:79)
	at dotty.tools.repl.ReplDriver.extractAndFormatMembers$1(ReplDriver.scala:323)
	at dotty.tools.repl.ReplDriver.renderDefinitions$$anonfun$2(ReplDriver.scala:346)
	at scala.Option.map(Option.scala:242)
	at dotty.tools.repl.ReplDriver.renderDefinitions(ReplDriver.scala:349)
	at dotty.tools.repl.ReplDriver.compile$$anonfun$2(ReplDriver.scala:268)
	at scala.util.Either.fold(Either.scala:189)
	at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:285)
	at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:212)
	at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:145)
	at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:148)
	at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:167)
	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:148)
	at dotty.tools.repl.ReplDriver.tryRunning(ReplDriver.scala:114)
	at dotty.tools.repl.Main$.main(Main.scala:6)
	at dotty.tools.repl.Main.main(Main.scala)
Caused by: java.lang.ClassNotFoundException: java.lang.String$
	at dotty.tools.repl.AbstractFileClassLoader.findClass$$anonfun$1(AbstractFileClassLoader.scala:44)
	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
	at scala.collection.immutable.List.foreach(List.scala:333)
	at dotty.tools.repl.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:46)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
	at dotty.tools.repl.AbstractFileClassLoader.loadClass(AbstractFileClassLoader.scala:55)
	... 23 more

Expectation

An error message rather than a crash:

scala> String
1 |String
  |^^^^^^
  |Java defined class String is not a value

Notes

Behaves as expected on 3.0.0-RC1, crashes on 3.0.0-RC2 and later apparently due to #11431

Behaves as expected if the class has been previously referenced:

scala> "foo"
val res0: String = foo

scala> String
1 |String
  |^^^^^^
  |Java defined class String is not a value

Also:

scala> import scala.compiletime.testing.typeChecks

scala> typeChecks("String")
val res0: Boolean = true

scala> "foo"
val res1: String = foo

scala> typeChecks("String")
val res2: Boolean = false

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions