-
Notifications
You must be signed in to change notification settings - Fork 11
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[#70] Add hover provider for debugging
Adds a hover provider which delegates to the cdt debug hover mechanism.
- Loading branch information
1 parent
ac75bcb
commit aa2d76b
Showing
4 changed files
with
62 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
48 changes: 48 additions & 0 deletions
48
bundles/org.eclipse.cdt.lsp/src/org/eclipse/cdt/lsp/editor/DebugHoverProvider.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters