Unterstützung für Inhalt

Mit der Unterstützung für Inhalt können Sie eine kontextbezogene Inhaltsfertigstellung bei Benutzeranforderung bereitstellen.  Diese Funktionalität wird durch das Textgerüst der Plattform in org.eclipse.jface.text.contentassist implementiert.  In kontextbezogenen Fenstern (QuickInfos) werden mögliche Textauswahlen für die Fertigstellung eines Ausdrucks vorgeschlagen.  Der Benutzer kann diese Optionen für das Einfügen im Text auswählen.  Die Unterstützung für Inhalt unterstützt außerdem kontextbezogene QuickInfos, um den Benutzer mit Informationen zu versorgen, die sich auf die aktuelle Position im Dokument beziehen.  

Die Implementierung der Unterstützung für Inhalt ist optional.  In der Standardeinstellung installiertSourceViewerConfiguration keine Unterstützung für Inhalt, da das für einen bestimmten Editor verwendete Dokumentmodell nicht bekannt ist und kein generisches Verhalten für die Unterstützung für Inhalt vorhanden ist.  

Um die Unterstützung für Inhalt zu implementieren muss die Konfiguration für die Quellenanzeigefunktion des Editors so konfiguriert werden, dass eine Unterstützung für Inhalt definiert ist.  Im Beispiel des Java-Editors erfolgt dies innerhalb von 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;
}

Das Verhalten der Unterstützung für Inhalt ist in der SchnittstelleIContentAssistant definiert.  Das Konfigurieren der Unterstützung für Inhalt entspricht etwa dem Einrichten der Syntaxhervorhebung.   Die Unterstützung sollte mit unterschiedlichen Strategien für die Ausdrucksfertigstellung konfiguriert werden, die bei unterschiedlichen Dokumentinhaltstypen zur Anwendung kommen.  Die Fertigstellungsstrategien werden unter Verwendung von  IContentAssistProcessor implementiert.  Ein Prozessor schlägt Fertigstellungen vor und berechnet die Kontextinformationen für eine relative Position in einem bestimmten Inhaltstyp.

Prozessoren der Unterstützung für Inhalt

Nicht alle Inhaltstypen müssen mit einer Unterstützung für Inhalt ausgestattet sein.   Im Java-Beispieleditor werden Prozessoren der Unterstützung für Inhalt für den Standardinhaltstyp und für Javadoc, nicht jedoch für mehrzeilige Kommentare bereitgestellt.  Die einzelnen Prozessoren werden im Folgenden vorgestellt.

Der Prozessor JavaCompletionProcessor ist sehr einfach strukturiert.  Er kann lediglich Schlüsselwörter als Fertigstellungen vorschlagen.  Die Schlüsselwörter sind in einem Feld definiert (fgProposals) und werden immer als Vorschläge verwendet:

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;
}

Die Fertigstellung kann auf Benutzeranforderung hin oder automatisch (bei Eingabe des Zeichens "(" oder ".") ausgelöst werden:

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

Der Prozessor JavaCompletionProcessor schlägt nicht nur Fertigstellungen vor, sondern definiert außerdem Kontextinformationen, die durch den Benutzer angefordert werden können.  Zu den Kontextinformationen gehören eine Beschreibung der Informationsteile, die in einem bestimmten Kontext verfügbar sind, und die ausführliche Informationsnachricht.   

Im Beispiel des Java-Editors sind die Informationen eigentlich nicht kontextbezogen.  Für die aktuelle relative Position wir ein Bereich berechnet, der fünf ähnliche Kontextinformationsobjekte enthält, sobald der Benutzer die Kontextinformationen anfordert. Alle diese Kontextinformationsobjekte definieren einen Kontext, der fünf Zeichen vor der relativen Position und fünf Zeichen nach der relativen Position enthält. Falls einer dieser fünf Vorschläge ausgewählt wird, werden neben dem Cursor ausführliche Informationen angezeigt, und zwar so lange, wie sich der Cursor im Kontext von fünf Zeichen um die relative Position herum befindet.

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;
}

 

Diese Kontextinformationen werden automatisch angezeigt, wenn das Zeichen "#" eingegeben wird:

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

Unterstützung für Inhalt konfigurieren

Die Darstellung und das Verhalten der Unterstützung für Inhalt können unter Verwendung vonIContentAssistant konfiguriert werden.  Beispielsweise können Sie das Zeitlimit für die automatische Aktivierung sowie die Ausrichtung und die Farben der Informationsfenster konfigurieren.

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 und Andere 2000, 2003.