3

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

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 编辑器中)

4

2 回答 2

3

好,

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

您必须添加此行

assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));

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

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

更多信息可以在这里找到。

容易,不是吗..如果你知道怎么做;)

于 2009-05-20T14:08:21.213 回答
3

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

样式化的附加信息


  • 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>!";
        }
    }
    
    于 2012-03-04T05:33:11.157 回答