Mit der JDT-API können andere Plug-ins die Unterstützung für den Code oder die Codeauswahl für einige Java-Elemente ausführen. Elemente, die diese Bearbeitung zulassen, sollten ICodeAssist implementieren.
Es gibt zwei Typen der Bearbeitung:
Im Java-Modell gibt es zwei Elemente, die diese Schnittstelle implementieren: IClassFile und ICompilationUnit. Die Codefertigstellung und die Codeauswahl geben Ergebnisse für eine Klassendatei nur dann an, wenn die betreffende Klassendatei über eine zugeordnete Quelle verfügt.
Eine Möglichkeit die Codefertigstellung über das Programm auszuführen besteht darin, ICodeAssist.codeComplete aufzurufen. Sie geben die relative Position in der Kompiliereinheit an, nach der die Codefertigstellung erfolgen soll.Sie müssen ferner eine Instanz von CompletionRequestor zur Verfügung stellen, um mögliche Fertigstellungen zu akzeptieren.
Die Methode in CompletionRequestor.accept akzeptiert alle Arten von Vorschlägen für die Codefertigstellung.Die Methoden von CompletionProposal machen Angaben, die das vorgeschlagene Element (sein Name, Deklarierungstyp, etc.), seine vorgeschlagene Einfügeposition in der Kompiliereinheit und seine Relevanz beschreiben.
Ein Fertigstellungsrequester kann viele verschiedene Arten der Fertigstellung akzeptieren. Die Art wird durch CompletionProposal.getKind angegeben.
Die vollständige Liste möglicher Fertigstellungsarten können Sie unter CompletionProposal ansehen. Einige mögliche Fertigstellungsarten sind:
Die Komponente, die die Fertigstellung anfordert, muss außerdem in der Lage sein, Kompilierungsfehler zu akzeptieren.
Da unter Umständen viele verschiedene Typen der Fertigstellung möglich sein können, wird eine vorgeschlagene Fertigstellung anhand der Relevanz mit anderen Vorschlägen verglichen. Die Relevanz wird durch eine positive ganze Zahl dargestellt. Der Wert hat keine implizite Bedeutung. Er wird lediglich in Relation zu den Werten anderer Vorschläge verwendet, um diese miteinander vergleichbar zu machen. Die Relevanz einer vorgeschlagenen Codefertigstellung kann durch den erwarteten Ausdruckstyp beeinflusst werden, da sich dieser auf die Typen im umgebenden Code bezieht (z. B. Variablentypen, Umsetzungsausdruckstypen, Rückgabetypen usw.). Das Vorhandensein eines erwarteten Präfixes oder Suffixes in einer Fertigstellung wirkt sich ebenfalls auf deren Relevanz aus.
Das JDT-Kern-Plug-in (JDT = Java-Entwicklungstools) definiert Optionen, die das Verhalten der Codefertigstellung steuern. Diese Optionen können durch andere Plug-ins geändert werden.
Weitere Optionen ermöglichen Ihnen, Präfixe und Suffixe für die vorgeschlagenen Fertigstellungsnamen für Felder, statische Felder, lokale Variablen und Methodenargumente anzugeben.
Weitere Informationen zu den Optionen und Standardwerten der Unterstützung für Code können Sie unter JDT-Kernoptionen der Unterstützung für Code nachlesen.
Mit der Codeauswahl wird das Java-Element gesucht, das durch einen Textbereich (normalerweise den ausgewählten Text) in einer Kompiliereinheit dargestellt ist. Um die Codeauswahl über das Programm durchzuführen, müssen Sie ICodeAssist.codeSelect aufrufen. Sie müssen die Ausgangsindexposition der Auswahl und die Länge der Auswahl angeben. Das Ergebnis besteht in einem Bereich von Java-Elementen. Meistens befindet sich in dem Bereich nur ein Element. Wenn die Auswahl jedoch mehrdeutig ist, werden alle möglichen Elemente zurückgegeben.
Im folgenden Beispiel wird die Codeauswahl für eine Kompiliereinheit aufgerufen:
// Kompiliereinheit abrufen
ICompilationUnit unit = ...;
// Offset und Länge abrufen
int offset = ...;
int length = ...;
// Auswahl ausführen
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("the selected element is " + element[0].getElementName());
Wenn für die Auswahllänge 0 angegeben wird, wird eine Auswahl berechnet, indem das vollständige Token gesucht wird, das den angegebenen Bereich einschließt. Nehmen wir an, die folgende Beispielmethode wird verwendet:
public void fooMethod(Object) {
}