Skip to content

Commit

Permalink
[#70] Add hover provider for debugging
Browse files Browse the repository at this point in the history
Adds a hover provider which delegates to the cdt debug hover mechanism.
  • Loading branch information
ddscharfe authored and ghentschke committed Jul 3, 2023
1 parent ac75bcb commit aa2d76b
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 2 deletions.
3 changes: 2 additions & 1 deletion bundles/org.eclipse.cdt.lsp/META-INF/MANIFEST.MF
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.debug.ui,
org.eclipse.lsp4j,
org.eclipse.lsp4j.jsonrpc,
org.eclipse.cdt.codan.core
org.eclipse.cdt.codan.core,
org.eclipse.cdt.debug.ui
Bundle-RequiredExecutionEnvironment: JavaSE-17
Automatic-Module-Name: org.eclipse.cdt.lsp
Bundle-ActivationPolicy: lazy
Expand Down
10 changes: 10 additions & 0 deletions bundles/org.eclipse.cdt.lsp/plugin.xml
Original file line number Diff line number Diff line change
Expand Up @@ -237,5 +237,15 @@
</action>
</editorContribution>
</extension>

<extension
point="org.eclipse.ui.genericeditor.hoverProviders">
<hoverProvider
class="org.eclipse.cdt.lsp.editor.DebugHoverProvider"
contentType="org.eclipse.core.runtime.text"
id="org.eclipse.cdt.lsp.editor.DebugHoverProvider"
isBefore="org.eclipse.lsp4e.operations.hover.LSPTextHover">
</hoverProvider>
</extension>
</plugin>

Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package org.eclipse.cdt.lsp.editor;

import java.util.Objects;
import java.util.Optional;

import org.eclipse.cdt.ui.text.c.hover.ICEditorTextHover;
import org.eclipse.debug.ui.DebugUITools;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextHoverExtension;
import org.eclipse.jface.text.ITextHoverExtension2;
import org.eclipse.jface.text.ITextViewer;

/**
* Delegates hover to the text hover implementation of cdt.
*/
public class DebugHoverProvider implements ITextHover, ITextHoverExtension, ITextHoverExtension2 {
@Override
public IInformationControlCreator getHoverControlCreator() {
return getDelegate(ITextHoverExtension.class).map(ITextHoverExtension::getHoverControlCreator).orElse(null);
}

@SuppressWarnings("deprecation")
@Override
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
return getDelegate(ITextHover.class).map(delegate -> delegate.getHoverInfo(textViewer, hoverRegion))
.orElse(null);
}

@Override
public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
return getDelegate(ITextHover.class).map(delegate -> delegate.getHoverRegion(textViewer, offset)).orElse(null);
}

@Override
public Object getHoverInfo2(ITextViewer textViewer, IRegion hoverRegion) {
return getDelegate(ITextHoverExtension2.class).map(delegate -> delegate.getHoverInfo2(textViewer, hoverRegion))
.orElse(null);
}

private <T> Optional<T> getDelegate(Class<T> clazz) {
return Optional.ofNullable(DebugUITools.getDebugContext())
.map(adaptable -> adaptable.getAdapter(ICEditorTextHover.class)).filter(Objects::nonNull)
.filter(clazz::isInstance).map(clazz::cast);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<repository location="https://download.eclipse.org/tools/cdt/releases/11.2/" />
<unit id="org.eclipse.cdt.feature.group" version="0.0.0" />
<unit id="org.eclipse.cdt.platform.feature.group" version="0.0.0" />
</location>
<location includeAllPlatforms="false" includeConfigurePhase="true" includeMode="planner" includeSource="true" type="InstallableUnit">
<repository location="https://download.eclipse.org/tools/orbit/downloads/drops/R20230302014618/repository/" />
Expand All @@ -48,4 +49,4 @@
<unit id="org.mockito.mockito-core" version="0.0.0"/>
</location>
</locations>
</target>
</target>

0 comments on commit aa2d76b

Please sign in to comment.