eclipse-jdt / eclipse.jdt.core

Eclipse Public License 2.0
161 stars 129 forks source link

Parser: SelectionOnSuperReference cannot be cast to class MethodDeclaration #1865

Open jukzi opened 9 months ago

jukzi commented 9 months ago

Unexpected runtime error while computing a text hover seem to have happend during Java Hover. Don't know how to reproduce, found it in my log today eclipse.buildId=4.31.0.I20240111-0700 java.version=21.0.1

java.lang.ClassCastException: class org.eclipse.jdt.internal.codeassist.select.SelectionOnSuperReference cannot be cast to class org.eclipse.jdt.internal.compiler.ast.MethodDeclaration (org.eclipse.jdt.internal.codeassist.select.SelectionOnSuperReference is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @13c2fb5b; org.eclipse.jdt.internal.compiler.ast.MethodDeclaration is in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @361f6b42)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeMethodDeclaration(Parser.java:5213)
    at org.eclipse.jdt.internal.codeassist.impl.AssistParser.consumeMethodDeclaration(AssistParser.java:793)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:7119)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:13241)
    at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:2115)
    at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1951)
    at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:352)
    at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:315)
    at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1082)
    at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:167)
    at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:389)
    at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:382)
    at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getJavaElementsAt(AbstractJavaEditorTextHover.java:121)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.lambda$0(JavadocHover.java:667)
    at org.eclipse.jdt.internal.core.JavaModelManager.cacheZipFiles(JavaModelManager.java:5821)
    at org.eclipse.jdt.internal.core.JavaModelManager.callReadOnlyUnchecked(JavaModelManager.java:5809)
    at org.eclipse.jdt.internal.core.JavaModelManager.callReadOnly(JavaModelManager.java:5797)
    at org.eclipse.jdt.core.JavaCore.callReadOnly(JavaCore.java:6016)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:667)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:663)
    at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
    at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:130)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:89)
    at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)
jukzi commented 1 month ago

similar exception during hover:

java.lang.ClassCastException: class org.eclipse.jdt.internal.compiler.ast.IfStatement cannot be cast to class org.eclipse.jdt.internal.compiler.ast.LambdaExpression (org.eclipse.jdt.internal.compiler.ast.IfStatement and org.eclipse.jdt.internal.compiler.ast.LambdaExpression are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @bf53e25)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeLambdaExpression(Parser.java:8578)
    at org.eclipse.jdt.internal.codeassist.select.SelectionParser.consumeLambdaExpression(SelectionParser.java:1048)
    at org.eclipse.jdt.internal.compiler.parser.Parser.consumeRule(Parser.java:7634)
    at org.eclipse.jdt.internal.compiler.parser.Parser.parse(Parser.java:12684)
    at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:2112)
    at org.eclipse.jdt.internal.codeassist.impl.AssistParser.parseBlockStatements(AssistParser.java:1948)
    at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:350)
    at org.eclipse.jdt.internal.codeassist.impl.Engine.parseBlockStatements(Engine.java:313)
    at org.eclipse.jdt.internal.codeassist.SelectionEngine.select(SelectionEngine.java:1080)
    at org.eclipse.jdt.internal.core.Openable.codeSelect(Openable.java:166)
    at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:382)
    at org.eclipse.jdt.internal.core.CompilationUnit.codeSelect(CompilationUnit.java:375)
    at org.eclipse.jdt.internal.ui.text.java.hover.AbstractJavaEditorTextHover.getJavaElementsAt(AbstractJavaEditorTextHover.java:121)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.lambda$0(JavadocHover.java:713)
    at org.eclipse.jdt.internal.core.JavaModelManager.cacheZipFiles(JavaModelManager.java:5770)
    at org.eclipse.jdt.internal.core.JavaModelManager.callReadOnly(JavaModelManager.java:5759)
    at org.eclipse.jdt.core.JavaCore.callReadOnly(JavaCore.java:6188)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.internalGetHoverInfo(JavadocHover.java:713)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavadocHover.getHoverInfo2(JavadocHover.java:709)
    at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:163)
    at org.eclipse.jdt.internal.ui.text.java.hover.BestMatchHover.getHoverInfo2(BestMatchHover.java:130)
    at org.eclipse.jdt.internal.ui.text.java.hover.JavaEditorTextHoverProxy.getHoverInfo2(JavaEditorTextHoverProxy.java:89)
    at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)
stephan-herrmann commented 1 month ago

similar exception during hover:

hover over what source?

jukzi commented 1 month ago

hover over what source?

good question - i don't know. Would it help to enrich the error message to quote the source?

stephan-herrmann commented 1 month ago

hover over what source?

good question - i don't know. Would it help to enrich the error message to quote the source?

ClassCastException doesn't seem able to do that ;-P

I just hoped that hovering is an activity where you know what source code is involved.

jukzi commented 1 month ago

i never hover intentional. it just happens that when i rewrite code sometimes i later find such exceptions in the log. Probably deeper in the stacktrace - like AbstractJavaEditorTextHover - it would be possible to catch exceptions and enrich the message with code.