Assistência ao Conteúdo

A assistência ao conteúdo permite fornecer preenchimento contextual do conteúdo a pedido do usuário.  Esta funcionalidade é implementada pela estrutura de texto da plataforma em org.eclipse.jface.text.contentassist.  As janelas pop-up (infopops) são utilizadas para sugerir possíveis opções de texto para completar uma frase.  O usuário pode selecionar estas opções para inserção no texto.  A assistência ao conteúdo também suporta infopops textuais para fornecer ao usuário informações que estão relacionadas à posição atual no documento. 

A implementação da assistência ao conteúdo é opcional.  Por padrão, SourceViewerConfiguration não instala uma assistência ao conteúdo pois não conhece o modelo de documento utilizado para um determinado editor e não possui comportamento genérico para a assistência ao conteúdo. 

Para implementar a assistência ao conteúdo, a configuração do visualizador de origem do editor deve ser configurada para definir uma assistência ao conteúdo.  Isso é feito no exemplo do editor Java dentro do JavaSourceViewerConfiguration.

public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {

	ContentAssistant assistant= new ContentAssistant();
	assistant.setContentAssistProcessor(new JavaCompletionProcessor(), IDocument.DEFAULT_CONTENT_TYPE);
	assistant.setContentAssistProcessor(new JavaDocCompletionProcessor(), JavaPartitionScanner.JAVA_DOC);

	...
	return assistant;
}

O comportamento da assistência ao conteúdo é definido na interface IContentAssistant.  Configurar um assistente de conteúdo é semelhante a configurar o realce da sintaxe.  O assistente deve ser configurado com diferentes estratégias de preenchimento de frase para diferentes tipos de conteúdo do documento. As estratégias de preenchimento são implementadas utilizando  IContentAssistProcessor.  Um processador sugere preenchimentos e computa informações de contexto para um deslocamento no tipo específico de conteúdo.

Processadores de Assistência ao Conteúdo

Nem todos os tipos de conteúdo precisam ter assistência ao conteúdo.  No editor de exemplo Java, os processadores de assistência ao conteúdo são fornecidos para o tipo padrão de conteúdo e javadoc, mas não para comentários de várias linhas.  Vamos examinar cada um desses processadores.

O JavaCompletionProcessor é bem simples.  Ele pode apenas sugerir palavras-chave como candidatas a preenchimento.  As palavras-chave são definidas em um campo, fgProposals, e essas palavras-chave são sempre sugeridas como candidatas:

public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) {
	ICompletionProposal[] result= new ICompletionProposal[fgProposals.length];
	for (int i= 0; i < fgProposals.length; i++) {
		IContextInformation info= new ContextInformation(fgProposals[i], MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.Proposal.ContextInfo.pattern"), new Object[] { fgProposals[i] })); //$NON-NLS-1$
		result[i]= new CompletionProposal(fgProposals[i], documentOffset, 0, fgProposals[i].length(), null, fgProposals[i], info, MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.Proposal.hoverinfo.pattern"), new Object[] { fgProposals[i]})); //$NON-NLS-1$
	}
	return result;
}

O preenchimento pode ser acionado a pedido do usuário ou pode ser acionado automaticamente quando o caractere "(" ou "." é digitado:

public char[] getCompletionProposalAutoActivationCharacters() {
	return new char[] { '.', '(' };
}

Além de sugerir preenchimentos, o JavaCompletionProcessor define informações de contexto que podem ser solicitadas pelo usuário.  As informações de contexto incluem uma descrição dos fragmento de informações disponíveis em um determinado contexto e a mensagem com informações detalhadas.  

No exemplo de editor Java, as informações não são realmente contextuais.  Uma matriz contendo cinco objetos similares de informações de contexto é computada para o deslocamento atual quando o usuário solicita informações de contexto. Todos esses objetos de informações de contexto definem um contexto que contém os cinco caracteres na frente do deslocamento e os cinco após o deslocamento. Se uma dessas cinco sugestões for selecionada, as informações detalhadas aparecerão próximas ao cursor e permanecerão enquanto o cursor estiver no contexto dos cinco caracteres em torno do deslocamento.

public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) {
	IContextInformation[] result= new IContextInformation[5];
	for (int i= 0; i < result.length; i++)
		result[i]= new ContextInformation(
			MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.ContextInfo.display.pattern"), new Object[] { new Integer(i), new Integer(documentOffset) }),
			MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.ContextInfo.value.pattern"), new Object[] { new Integer(i), new Integer(documentOffset - 5), new Integer(documentOffset + 5)}));
	return result;
}

 

Estas informações de contexto são mostradas automaticamente quando o caractere "#" é digitado:

public char[] getContextInformationAutoActivationCharacters() {
	return new char[] { '#' };
}

Configuração de Assistência ao Conteúdo

A aparência e o comportamento da assistência ao conteúdo podem ser configurados utilizando IContentAssistant.  Por exemplo, você pode configurar o tempo de limite de ativação automática e a orientação e cor dos popups de informações.

public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {

	ContentAssistant assistant= new ContentAssistant();
	...
	assistant.enableAutoActivation(true);
	assistant.setAutoActivationDelay(500);
	assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);
	assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
	assistant.setContextInformationPopupBackground(JavaEditorEnvironment.getJavaColorProvider().getColor(new RGB(150, 150, 0)));

	return assistant;
}

 

Copyright IBM Corporation e outros 2000, 2003.