O suporte a focalização é fornecido na estrutura de texto da plataforma, permitindo implementar focalizações informativas (ou infopops) sobre o texto e as réguas mostradas em seu editor.
O suporte a focalização é opcional. Por padrão, SourceViewerConfiguration não instala o comportamento de focalização pois não há informações úteis gerais a serem mostradas. Para fornecer focalização de texto ou régua, a configuração do visualizador de origem do seu editor deve ser configurada para definir um objeto de focalização conectável.
Vejamos novamente JavaSourceViewerConfiguration para consultar quais métodos definem o comportamento de focalização:
public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) {
return new JavaTextHover();
}
public IAnnotationHover getAnnotationHover(ISourceViewer sourceViewer) {
return new JavaAnnotationHover();
}
As classes de assistente de focalização também podem ser instaladas dinamicamente utilizando o protocolo SourceViewer (setTextHover e setAnnotationHover). Não há benefício em tempo de execução específico algum em se fazer de determinada maneira, mas colocar todas as substituições de comportamento conectáveis em uma subclasse de SourceViewerConfiguration fornece a vantagem de consolidar todas as definições em apenas um lugar.
Vejamos as peculiaridades no fornecimento de ambos os tipos de focalização.
A focalização de texto permite fornecer texto informativo sobre o texto mostrado no editor. Isso é feito utilizando a interface ITextHover. Uma focalização de texto é responsável pela computação da região que deveria ser usada como a origem das informações de focalização, dado um deslocamento no documento. Ela também é responsável pelo fornecimento de texto informativo sobre uma região específica. O JavaTextHover é bastante simples. Ele verifica se o deslocamento fornecido para a focalização está contido na seleção de texto. Se estiver, ele fornece o intervalo da seleção como uma região de focalização.
public class JavaTextHover implements ITextHover {
...
public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
Point selection= textViewer.getSelectedRange();
if (selection.x <= offset && offset < selection.x + selection.y)
return new Region(selection.x, selection.y);
return new Region(offset, 0);
}
}
Dada sua própria região de focalização computada, obtém o texto selecionado de seu documento e o retorna como as informações de focalização.
public class JavaTextHover implements ITextHover {
public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
if (hoverRegion != null) {
try {
if (hoverRegion.getLength() > -1)
return textViewer.getDocument().get(hoverRegion.getOffset(), hoverRegion.getLength());
} catch (BadLocationException x) {
}
}
return JavaEditorMessages.getString("JavaTextHover.emptySelection");
}
...
}
Com toda a certeza, podemos ver que se focalizamos sobre uma seleção no editor, o texto de focalização mostra a seleção.

Informações de contexto mais complexas podem ser utilizadas para computar informações úteis de focalização. Exemplos relacionados podem ser localizados no JavaTextHover implementado com o editor JDT.
A focalização na régua vertical é útil para mostrar informações orientadas por linhas. A classe de focalização é configurada como descrito acima. IAnnotationHover é a interface para objetos de focalização de régua. Embora o nome sugira que a focalização foi projetada para anotações na régua, na verdade compete a um editor específico determinar o que é apropriado. Uma focalização de régua é responsável por retornar a cadeia de informações associada a um número de linha específico, independentemente da presença de marcadores nessa linha.
O JavaAnnotationHover do editor Java de exemplo implementa a focalização para todas as linhas. Ele utiliza o número da linha para obter todo o texto na linha de focalização e retorná-lo como a cadeia de informações.
public String getHoverInfo(ISourceViewer sourceViewer, int lineNumber) {
IDocument document= sourceViewer.getDocument();
try {
IRegion info= document.getLineInformation(lineNumber);
return document.get(info.getOffset(), info.getLength());
} catch (BadLocationException x) {
}
return null;
}

Como a focalização possui acesso ao documento e ao visualizador de origem, ela possui todo o contexto necessário para tomar decisões contextuais mais complexas sobre as informações que devem ser mostradas. Por exemplo, o modelo de anotação poderia ser recuperado do visualizador de origem para fornecer informações de focalização para quaisquer anotações mostradas na régua vertical. O JavaAnnotationHover fornecido pelo editor JDT fornece essa capacidade.