如何在Eclipse RCP中实现内容辅助文档弹出窗口

时间:2009-05-20 10:43:31

标签: eclipse-rcp code-completion eclipse-pde

我已经实现了自己的编辑器并为其添加了代码完成功能。我的内容助手在源查看器配置中注册,如下所示:

public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
    if (assistant == null) {
        assistant = new ContentAssistant();
        assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
        assistant.setContentAssistProcessor(getMyAssistProcessor(),
                MyPartitionScanner.DESIRED_PARTITION_FOR_MY_ASSISTANCE);
        assistant.enableAutoActivation(true);
        assistant.setAutoActivationDelay(500);
        assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);
        assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
    }
    return assistant;
}

当我在所需分区内按 Ctrl + SPACE 时,将显示完成弹出窗口并按预期工作。

这是我的问题..如何实现/注册完成弹出窗口旁边显示的文档弹出窗口? (例如在java编辑器中)

2 个答案:

答案 0 :(得分:3)

好吧,

我会自己回答这个问题; - )

您必须添加此行

assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));

到上面的配置。然后在创建 CompletionProposals 时,构造函数的第八个(最后一个)名为 additionalProposalInfo 的参数是文本,它将显示在文档弹出窗口中。

new CompletionProposal(replacementString,
                          replacementOffset,
                          replacementLength,
                          cursorPosition,
                          image,
                          displayString,
                          contextInformation,
                          additionalProposalInfo);

可以找到有关here的更多信息。

很简单,不是吗......如果你知道该怎么做;)

答案 1 :(得分:3)

对于样式信息框(就像在JDT中一样)。

Styled additionnal information


  • DefaultInformationControl个实例需要收到HTMLTextPresenter
  • import org.eclipse.jface.internal.text.html.HTMLTextPresenter;
    
    public class MyConfiguration extends SourceViewerConfiguration {
    
    
        [...]
        public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
            if (assistant == null) {
                [...]
                assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
            }
            return assistant;
        }
    
        @Override
        public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
            return new IInformationControlCreator() {
                public IInformationControl createInformationControl(Shell parent) {
                    return new DefaultInformationControl(parent,new HTMLTextPresenter(false));
                }
            };
        }
    }
    

  • 然后,提案可以使用方法getAdditionalProposalInfo()的字符串中的基本HTML标记。
  • public class MyProposal implements ICompletionProposal {
        [...]
        @Override
        public String getAdditionalProposalInfo() {
            return "<b>Hello</b> <i>World</i>!";
        }
    }