Como implementar o assistente de conteúdo do pop-up de documentação em Eclipse RCP
-
23-08-2019 - |
Pergunta
Eu tenho implementado o meu próprio editor e acrescentou uma funcionalidade de conclusão de código para ele. Meu assistente de conteúdo é registrado na configuração visualizador de fonte como esta:
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;
}
Ao pressionar Ctrl + Espaço dentro da partição desejada, aparece conclusão popup e funciona como esperado.
E aqui está a minha pergunta .. Como faço para implementar / registrar um pop-up de documentação que aparece ao lado pop-up conclusão? (Por exemplo, no editor de java)
Solução
Bem,
Vou answear a pergunta me; -)
Você tem que adicionar esta linha
assistant.setInformationControlCreator(getInformationControlCreator(sourceViewer));
para a configuração acima. Em seguida, ao criar CompletionProposals , o parâmetro oitavo (último) chamado additionalProposalInfo do construtor é o texto que será mostrado no pop-up de documentação.
new CompletionProposal(replacementString,
replacementOffset,
replacementLength,
cursorPosition,
image,
displayString,
contextInformation,
additionalProposalInfo);
Mais informações sobre podem ser encontrados aqui .
Fácil, não é .. se você sabe como fazê-lo;)
Outras dicas
Para a caixa de informações com estilo (tal como no 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>!";
}
}