From 36098a146b7a94682b08d7e950c8e8cc90eea785 Mon Sep 17 00:00:00 2001 From: nsingh Date: Fri, 4 May 2018 16:38:37 -0700 Subject: [PATCH] Show live hover highlights on all open editors --- .../commons/STS4LanguageClientImpl.java | 49 ++++++++++++------- 1 file changed, 30 insertions(+), 19 deletions(-) diff --git a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageClientImpl.java b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageClientImpl.java index c4b8fc7d6..6f952f589 100644 --- a/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageClientImpl.java +++ b/eclipse-language-servers/org.springframework.tooling.ls.eclipse.commons/src/org/springframework/tooling/ls/eclipse/commons/STS4LanguageClientImpl.java @@ -35,6 +35,7 @@ import org.eclipse.lsp4e.LanguageServiceAccessor; import org.eclipse.lsp4e.LanguageServiceAccessor.LSPDocumentInfo; import org.eclipse.lsp4j.Range; import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; @@ -74,31 +75,41 @@ public class STS4LanguageClientImpl extends LanguageClientImpl implements STS4La if (ww!=null) { IWorkbenchPage page = ww.getActivePage(); if (page!=null) { - IEditorPart editorPart = page.getActiveEditor(); - if (editorPart instanceof AbstractTextEditor) { - try { - Method m = AbstractTextEditor.class.getDeclaredMethod("getSourceViewer"); - m.setAccessible(true); - ISourceViewer sourceViewer = (ISourceViewer) m.invoke(editorPart); - if (sourceViewer!=null) { - IAnnotationModel annotationModel = sourceViewer.getAnnotationModel(); - if (annotationModel!=null) { - IDocument doc = sourceViewer.getDocument(); - if (sourceViewer!=null) { - if (doc!=null && annotationModel instanceof IAnnotationModelExtension) { - updateAnnotations(target, doc, (IAnnotationModelExtension) annotationModel); - } - } - } - } - } catch (Exception e) { - //ignore reflection errors + IEditorReference[] references = page.getEditorReferences(); + if (references != null) { + boolean restore = false; + for (IEditorReference reference : references) { + IEditorPart editorPart = reference.getEditor(restore); + updateEditorPart(editorPart); } } } } return Status.OK_STATUS; } + + protected void updateEditorPart(IEditorPart editorPart) { + if (editorPart instanceof AbstractTextEditor) { + try { + Method m = AbstractTextEditor.class.getDeclaredMethod("getSourceViewer"); + m.setAccessible(true); + ISourceViewer sourceViewer = (ISourceViewer) m.invoke(editorPart); + if (sourceViewer!=null) { + IAnnotationModel annotationModel = sourceViewer.getAnnotationModel(); + if (annotationModel!=null) { + IDocument doc = sourceViewer.getDocument(); + if (sourceViewer!=null) { + if (doc!=null && annotationModel instanceof IAnnotationModelExtension) { + updateAnnotations(target, doc, (IAnnotationModelExtension) annotationModel); + } + } + } + } + } catch (Exception e) { + //ignore reflection errors + } + } + } }; /**