redhat-developer / quarkus-ls

Language server for Quarkus tooling
Eclipse Public License 2.0
44 stars 15 forks source link

NPE in QuteHover.doHoverForPropertyPart ("project" is null) #923

Open fbricon opened 11 months ago

fbricon commented 11 months ago

Seen this exception while hovering in qute template, during intellij project startup:

SEVERE: Internal error: java.lang.NullPointerException: Cannot invoke "com.redhat.qute.project.QuteProject.resolveJavaType(com.redhat.qute.parser.expression.Part)" because "project" is null
java.util.concurrent.CompletionException: java.lang.NullPointerException: Cannot invoke "com.redhat.qute.project.QuteProject.resolveJavaType(com.redhat.qute.parser.expression.Part)" because "project" is null
    at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:315)
    at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:320)
    at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1159)
    at java.base/java.util.concurrent.CompletableFuture$Completion.exec(CompletableFuture.java:483)
    at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:373)
    at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1182)
    at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1655)
    at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1622)
    at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:165)
Caused by: java.lang.NullPointerException: Cannot invoke "com.redhat.qute.project.QuteProject.resolveJavaType(com.redhat.qute.parser.expression.Part)" because "project" is null
    at com.redhat.qute.services.QuteHover.doHoverForPropertyPart(QuteHover.java:444)
    at com.redhat.qute.services.QuteHover.doHoverForExpressionPart(QuteHover.java:211)
    at com.redhat.qute.services.QuteHover.doHover(QuteHover.java:105)
    at com.redhat.qute.services.QuteLanguageService.doHover(QuteLanguageService.java:200)
Caused by: java.lang.NullPointerException: Cannot invoke "com.redhat.qute.project.QuteProject.resolveJavaType(com.redhat.qute.parser.expression.Part)" because "project" is null

    at com.redhat.qute.ls.template.TemplateFileTextDocumentService.lambda$hover$10(TemplateFileTextDocumentService.java:202)
    at com.redhat.qute.ls.commons.ModelTextDocuments.lambda$computeModelAsyncCompose$1(ModelTextDocuments.java:144)
    at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1150)
    ... 6 more
angelozerr commented 11 months ago

LSPTextHover should be rewritten because it stores lsp request in the class although this hover is a singleton shared with all files.

fbricon commented 11 months ago

still, qute-ls should be more robust and check for a non-null project

angelozerr commented 11 months ago

I'm not sure but I think the real problem is that when indexinx occurs the, didOpen could be done after hover, codelens, etc since we do a didOpen in smart mode.