JDK-8325936 : jshell - crash on 'new Object().""'
  • Type: Bug
  • Component: tools
  • Sub-Component: jshell
  • Affected Version: 22,23
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • Submitted: 2024-02-15
  • Updated: 2024-04-21
  • Resolved: 2024-04-21
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 23
23Resolved
Related Reports
Duplicate :  
Relates :  
Description
After JDK-8315457, jshell crashes when the target of a StringTemplate is not a processor type:

jshell> new Object().""Fatal Error: Unable to find method process

Fatal Error: Unable to find method process
Exception in thread "main" java.lang.InternalError: Exception during analyze - com.sun.tools.javac.util.FatalError: Fatal Error: Unable to find method process
        at jdk.jshell/jdk.jshell.TaskFactory$AnalyzeTask.analyze(TaskFactory.java:420)
        at jdk.jshell/jdk.jshell.TaskFactory$AnalyzeTask.<init>(TaskFactory.java:411)
        at jdk.jshell/jdk.jshell.TaskFactory.lambda$analyze$1(TaskFactory.java:183)
        at jdk.jshell/jdk.jshell.TaskFactory.lambda$runTask$4(TaskFactory.java:218)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskPool.getTask(JavacTaskPool.java:193)
        at jdk.jshell/jdk.jshell.TaskFactory.runTask(TaskFactory.java:211)
        at jdk.jshell/jdk.jshell.TaskFactory.analyze(TaskFactory.java:180)
        at jdk.jshell/jdk.jshell.TaskFactory.analyze(TaskFactory.java:166)
        at jdk.jshell/jdk.jshell.TaskFactory.analyze(TaskFactory.java:155)
        at jdk.jshell/jdk.jshell.ExpressionToTypeInfo.expressionInfo(ExpressionToTypeInfo.java:240)
        at jdk.jshell/jdk.jshell.Eval.processExpression(Eval.java:615)
        at jdk.jshell/jdk.jshell.Eval.lambda$sourceToSnippets$1(Eval.java:223)
        at jdk.jshell/jdk.jshell.TaskFactory.lambda$parse$6(TaskFactory.java:260)
        at jdk.jshell/jdk.jshell.TaskFactory.lambda$runTask$4(TaskFactory.java:218)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskPool.getTask(JavacTaskPool.java:193)
        at jdk.jshell/jdk.jshell.TaskFactory.runTask(TaskFactory.java:211)
        at jdk.jshell/jdk.jshell.TaskFactory.parse(TaskFactory.java:145)
        at jdk.jshell/jdk.jshell.TaskFactory.parse(TaskFactory.java:245)
        at jdk.jshell/jdk.jshell.Eval.sourceToSnippets(Eval.java:197)
        at jdk.jshell/jdk.jshell.Eval.eval(Eval.java:133)
        at jdk.jshell/jdk.jshell.JShell.eval(JShell.java:513)
        at jdk.jshell/jdk.internal.jshell.tool.JShellTool.processSource(JShellTool.java:3633)
        at jdk.jshell/jdk.internal.jshell.tool.JShellTool.processSourceCatchingReset(JShellTool.java:1353)
        at jdk.jshell/jdk.internal.jshell.tool.JShellTool.processInput(JShellTool.java:1251)
        at jdk.jshell/jdk.internal.jshell.tool.JShellTool.run(JShellTool.java:1222)
        at jdk.jshell/jdk.internal.jshell.tool.JShellTool.start(JShellTool.java:1005)
        at jdk.jshell/jdk.internal.jshell.tool.JShellToolBuilder.start(JShellToolBuilder.java:261)
        at jdk.jshell/jdk.internal.jshell.tool.JShellToolProvider.main(JShellToolProvider.java:120)
Caused by: java.lang.IllegalStateException: com.sun.tools.javac.util.FatalError: Fatal Error: Unable to find method process
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.analyze(JavacTaskImpl.java:383)
        at jdk.jshell/jdk.jshell.TaskFactory$AnalyzeTask.analyze(TaskFactory.java:417)
        ... 27 more
Caused by: com.sun.tools.javac.util.FatalError: Fatal Error: Unable to find method process
        at jdk.compiler/com.sun.tools.javac.comp.Resolve.resolveInternalMethod(Resolve.java:2863)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.getProcessMethodType(Attr.java:5019)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitStringTemplate(Attr.java:5003)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCStringTemplate.accept(JCTree.java:2528)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:662)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitReturn(Attr.java:2490)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCReturn.accept(JCTree.java:1728)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:662)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:736)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStats(Attr.java:755)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitBlock(Attr.java:1440)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCBlock.accept(JCTree.java:1092)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:662)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:736)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.visitMethodDef(Attr.java:1229)
        at jdk.compiler/com.sun.tools.javac.tree.JCTree$JCMethodDecl.accept(JCTree.java:916)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribTree(Attr.java:662)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribStat(Attr.java:736)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClassBody(Attr.java:5635)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5523)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attribClass(Attr.java:5347)
        at jdk.compiler/com.sun.tools.javac.comp.Attr.attrib(Attr.java:5286)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1358)
        at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.attribute(JavaCompiler.java:1331)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.analyze(JavacTaskImpl.java:404)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$analyze$1(JavacTaskImpl.java:379)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152)
        at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.analyze(JavacTaskImpl.java:379)
        ... 28 more

This is because javac tries to look up the process method whether it is present or not.

Running javac on invalid code also results in a FatalError, but only afterwards:
$ javac --enable-preview --release 22 Simple2.java
Simple2.java:3: error: not a processor type: String
        System.out.println(e."\{e}");
                           ^
Simple2.java:3: error: cannot find symbol
        System.out.println(e."\{e}");
                             ^
  symbol:   method process(StringTemplate)
  location: class String
Note: Simple2.java uses preview features of Java SE 22.
Note: Recompile with -Xlint:preview for details.
2 errors
Fatal Error: Unable to find method process

Code:
void main() {
        String e = "!";
        System.out.println(e."\{e}");
}

I don't know if this should count as a javac bug or a jshell bug, feel free to change accordingly.
Comments
Crash only happened due to String Templates
21-04-2024

A pull request was submitted for review. URL: https://git.openjdk.org/jdk/pull/17876 Date: 2024-02-15 16:55:31 +0000
15-02-2024