Skip to content

Conversation

@FlorianKroiss
Copy link
Contributor

Handle case null for Diagnostic::severity. We encountered several NPEs due to this:

ERROR 2026-01-13 16:28:43.442 [Text Viewer Hover Presenter] org.eclipse.equinox.logger - Unexpected runtime error while computing a text hover
java.lang.NullPointerException: Cannot invoke "org.eclipse.lsp4j.DiagnosticSeverity.ordinal()" because the return value of "org.eclipse.lsp4j.Diagnostic.getSeverity()" is null
	at org.eclipse.lsp4e.operations.diagnostics.DiagnosticAnnotation.getType(DiagnosticAnnotation.java:32)
	at org.eclipse.ui.texteditor.AnnotationPreferenceLookup.getAnnotationPreference(AnnotationPreferenceLookup.java:51)
	at org.eclipse.ui.internal.genericeditor.AnnotationHoverDelegate$1.isIncluded(AnnotationHoverDelegate.java:44)
	at org.eclipse.jface.text.DefaultTextHover.getHoverInfo(DefaultTextHover.java:60)
	at org.eclipse.ui.internal.genericeditor.AnnotationHoverDelegate.getHoverInfo(AnnotationHoverDelegate.java:68)
	at org.eclipse.ui.internal.genericeditor.hover.CompositeTextHover.getHoverInfo2(CompositeTextHover.java:60)
	at org.eclipse.jface.text.TextViewerHoverManager$1.run(TextViewerHoverManager.java:155)

and

java.lang.NullPointerException: Cannot invoke "org.eclipse.lsp4j.DiagnosticSeverity.ordinal()" because the return value of "org.eclipse.lsp4j.Diagnostic.getSeverity()" is null
	at org.eclipse.lsp4e.operations.diagnostics.DiagnosticAnnotation.getType(DiagnosticAnnotation.java:32)
	at org.eclipse.jface.text.source.OverviewRuler$InternalListener.modelChanged(OverviewRuler.java:108)
	at org.eclipse.jface.text.source.AnnotationModel.fireModelChanged(AnnotationModel.java:592)
	at org.eclipse.jface.text.source.AnnotationModel$InternalModelListener.modelChanged(AnnotationModel.java:256)
	at org.eclipse.jface.text.source.AnnotationModel.fireModelChanged(AnnotationModel.java:592)
	at org.eclipse.jface.text.source.AnnotationModel.fireModelChanged(AnnotationModel.java:558)
	at org.eclipse.jface.text.source.AnnotationModel.replaceAnnotations(AnnotationModel.java:409)
	at org.eclipse.jface.text.source.AnnotationModel.replaceAnnotations(AnnotationModel.java:374)
	at org.eclipse.lsp4e.operations.diagnostics.LSPDiagnosticsToMarkers.updateEditorAnnotations(LSPDiagnosticsToMarkers.java:137)
	at org.eclipse.lsp4e.operations.diagnostics.LSPDiagnosticsToMarkers.accept(LSPDiagnosticsToMarkers.java:102)
	at org.eclipse.lsp4e.operations.diagnostics.LSPDiagnosticsToMarkers.accept(LSPDiagnosticsToMarkers.java:1)
	at org.eclipse.lsp4e.client.DefaultLanguageClient.publishDiagnostics(DefaultLanguageClient.java:110)
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at java.base/java.lang.reflect.Method.invoke(Method.java:580)
	at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.lambda$recursiveFindRpcMethods$0(GenericEndpoint.java:65)
	at org.eclipse.lsp4j.jsonrpc.services.GenericEndpoint.notify(GenericEndpoint.java:160)
	at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.handleNotification(RemoteEndpoint.java:231)
	at org.eclipse.lsp4j.jsonrpc.RemoteEndpoint.consume(RemoteEndpoint.java:198)
	at org.eclipse.lsp4e.LanguageServerWrapper.lambda$3(LanguageServerWrapper.java:449)
	at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.handleMessage(StreamMessageProducer.java:185)
	at org.eclipse.lsp4j.jsonrpc.json.StreamMessageProducer.listen(StreamMessageProducer.java:97)
	at org.eclipse.lsp4j.jsonrpc.json.ConcurrentMessageProcessor.run(ConcurrentMessageProcessor.java:114)
	at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
	at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
	at java.base/java.lang.Thread.run(Thread.java:1583)

@FlorianKroiss
Copy link
Contributor Author

FlorianKroiss commented Jan 13, 2026

I redirected the case for null to super.getType() which should always return org.eclipse.text.annotation.unknown. I just had another look at the LSP Spec, which actually says that an absent severity should be treated as error severity. Should we use that instead?

@rubenporras
Copy link
Contributor

I redirected the case for null to super.getType() which should always return org.eclipse.text.annotation.unknown. I just had another look at the LSP Spec, which actually says that an absent severity should be treated as error severity. Should we use that instead?

Yes, I would follow the spec.

Copy link
Contributor

@rubenporras rubenporras left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

let us follow the spec and use error.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants