我已经实现了自己的编辑器并为其添加了代码完成功能。我的内容助手在源查看器配置中注册,如下所示:
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编辑器中)
答案 0 :(得分:3)
好吧,
我会自己回答这个问题; - )
您必须添加此行
assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
到上面的配置。然后在创建 CompletionProposals 时,构造函数的第八个(最后一个)名为 additionalProposalInfo 的参数是文本,它将显示在文档弹出窗口中。
new CompletionProposal(replacementString,
replacementOffset,
replacementLength,
cursorPosition,
image,
displayString,
contextInformation,
additionalProposalInfo);
可以找到有关here的更多信息。
很简单,不是吗......如果你知道该怎么做;)
答案 1 :(得分:3)
对于样式信息框(就像在JDT中一样)。
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));
}
};
}
}
public class MyProposal implements ICompletionProposal {
[...]
@Override
public String getAdditionalProposalInfo() {
return "<b>Hello</b> <i>World</i>!";
}
}