Codeunterstützung für Java-Code ausführen

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.

Codefertigstellung

Codefertigstellung ausführen

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.  

Fertigstellungsrelevanz

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.

Optionen der Codefertigstellung

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.

Codeauswahl

Codeauswahl ausführen

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());

Auswahl an der Cursorposition

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) {
   }

Falls Sie nach dem ersten Zeichen von fooMethod eine relative Position sowie die Länge 0 angeben, wird die  Auswahl so berechnet, dass das gesamte Token fooMethod eingeschlossen ist. Geben Sie stattdessen die Länge mit dem Wert 5 an, wird die Auswahl ooMet verwendet.