Skip to content

REPL crashes when Java class name given as input #12346

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
griggt opened this issue May 6, 2021 · 2 comments · Fixed by #13704
Closed

REPL crashes when Java class name given as input #12346

griggt opened this issue May 6, 2021 · 2 comments · Fixed by #13704
Labels
Milestone

Comments

@griggt
Copy link
Contributor

griggt commented May 6, 2021

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
@som-snytt
Copy link
Contributor

I hope they reset the clock on "shortest crasher", as this must be a contender. I bet Dotty does better prizes for shortest crashers, too.

@nicolasstucki
Copy link
Contributor

Here is a shoter one

scala> Class                                                                    
[error] (run-main-2) java.lang.NoClassDefFoundError: java/lang/Class$
[error] java.lang.NoClassDefFoundError: java/lang/Class$
[error] 	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
[error] 	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3325)
[error] 	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2466)
[error] 	at dotty.tools.repl.Rendering.valueOf(Rendering.scala:102)
[error] 	at dotty.tools.repl.Rendering.renderVal(Rendering.scala:141)
[error] 	at dotty.tools.repl.ReplDriver.$anonfun$13(ReplDriver.scala:323)
[error] 	at scala.collection.immutable.List.flatMap(List.scala:293)
[error] 	at scala.collection.immutable.List.flatMap(List.scala:79)
[error] 	at dotty.tools.repl.ReplDriver.extractAndFormatMembers$1(ReplDriver.scala:323)
[error] 	at dotty.tools.repl.ReplDriver.renderDefinitions$$anonfun$2(ReplDriver.scala:346)
[error] 	at scala.Option.map(Option.scala:242)
[error] 	at dotty.tools.repl.ReplDriver.renderDefinitions(ReplDriver.scala:349)
[error] 	at dotty.tools.repl.ReplDriver.compile$$anonfun$2(ReplDriver.scala:268)
[error] 	at scala.util.Either.fold(Either.scala:189)
[error] 	at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:285)
[error] 	at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:212)
[error] 	at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:145)
[error] 	at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:148)
[error] 	at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:167)
[error] 	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:148)
[error] 	at xsbt.ConsoleInterface.run(ConsoleInterface.java:52)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
[error] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
[error] 	at sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:329)
[error] 	at sbt.internal.inc.AnalyzingCompiler.console(AnalyzingCompiler.scala:233)
[error] 	at sbt.Console.console0$1(Console.scala:64)
[error] 	at sbt.Console.$anonfun$apply$5(Console.scala:74)
[error] 	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] 	at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:17)
[error] 	at sbt.TrapExit$App.run(TrapExit.scala:258)
[error] 	at java.base/java.lang.Thread.run(Thread.java:832)
[error] Caused by: java.lang.ClassNotFoundException: java.lang.Class$
[error] 	at dotty.tools.repl.AbstractFileClassLoader.findClass$$anonfun$1(AbstractFileClassLoader.scala:44)
[error] 	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
[error] 	at scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
[error] 	at scala.collection.immutable.List.foreach(List.scala:333)
[error] 	at dotty.tools.repl.AbstractFileClassLoader.findClass(AbstractFileClassLoader.scala:46)
[error] 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:589)
[error] 	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
[error] 	at dotty.tools.repl.AbstractFileClassLoader.loadClass(AbstractFileClassLoader.scala:55)
[error] 	at java.base/java.lang.Class.getDeclaredMethods0(Native Method)
[error] 	at java.base/java.lang.Class.privateGetDeclaredMethods(Class.java:3325)
[error] 	at java.base/java.lang.Class.getDeclaredMethods(Class.java:2466)
[error] 	at dotty.tools.repl.Rendering.valueOf(Rendering.scala:102)
[error] 	at dotty.tools.repl.Rendering.renderVal(Rendering.scala:141)
[error] 	at dotty.tools.repl.ReplDriver.$anonfun$13(ReplDriver.scala:323)
[error] 	at scala.collection.immutable.List.flatMap(List.scala:293)
[error] 	at scala.collection.immutable.List.flatMap(List.scala:79)
[error] 	at dotty.tools.repl.ReplDriver.extractAndFormatMembers$1(ReplDriver.scala:323)
[error] 	at dotty.tools.repl.ReplDriver.renderDefinitions$$anonfun$2(ReplDriver.scala:346)
[error] 	at scala.Option.map(Option.scala:242)
[error] 	at dotty.tools.repl.ReplDriver.renderDefinitions(ReplDriver.scala:349)
[error] 	at dotty.tools.repl.ReplDriver.compile$$anonfun$2(ReplDriver.scala:268)
[error] 	at scala.util.Either.fold(Either.scala:189)
[error] 	at dotty.tools.repl.ReplDriver.compile(ReplDriver.scala:285)
[error] 	at dotty.tools.repl.ReplDriver.interpret(ReplDriver.scala:212)
[error] 	at dotty.tools.repl.ReplDriver.loop$1(ReplDriver.scala:145)
[error] 	at dotty.tools.repl.ReplDriver.runUntilQuit$$anonfun$1(ReplDriver.scala:148)
[error] 	at dotty.tools.repl.ReplDriver.withRedirectedOutput(ReplDriver.scala:167)
[error] 	at dotty.tools.repl.ReplDriver.runUntilQuit(ReplDriver.scala:148)
[error] 	at xsbt.ConsoleInterface.run(ConsoleInterface.java:52)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[error] 	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
[error] 	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[error] 	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
[error] 	at sbt.internal.inc.AnalyzingCompiler.invoke(AnalyzingCompiler.scala:329)
[error] 	at sbt.internal.inc.AnalyzingCompiler.console(AnalyzingCompiler.scala:233)
[error] 	at sbt.Console.console0$1(Console.scala:64)
[error] 	at sbt.Console.$anonfun$apply$5(Console.scala:74)
[error] 	at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error] 	at sbt.util.InterfaceUtil$$anon$1.get(InterfaceUtil.scala:17)
[error] 	at sbt.TrapExit$App.run(TrapExit.scala:258)
[error] 	at java.base/java.lang.Thread.run(Thread.java:832)

@anatoliykmetyuk anatoliykmetyuk added Spree Suitable for a future Spree exp:intermediate labels Jul 21, 2021
@BarkingBad BarkingBad linked a pull request Oct 6, 2021 that will close this issue
This was referenced Oct 6, 2021
BarkingBad added a commit to dotty-staging/dotty that referenced this issue Oct 7, 2021
olsdavis pushed a commit to olsdavis/dotty that referenced this issue Apr 4, 2022
@Kordyjan Kordyjan added this to the 3.1.1 milestone Aug 2, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

5 participants