Untersützung für Code bei 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 nur Ergebnisse für eine Klassendatei an, wenn diese über eine zugeordnete Quelle verfügt.

Codefertigstellung

Codefertigstellung ausführen

Die einzige Möglichkeit, die Codefertigstellung programmgestützt auszuführen, ist der Aufruf von ICodeAssist.codeComplete. Sie geben die relative Position in der Kompiliereinheit an, nach der die Codefertigstellung erfolgen soll.  Sie müssen außerdem ein Exemplar von ICompletionRequestor zur Verfügung stellen, um die möglichen Fertigstellungen zu akzeptieren.

Jede Methode in ICompletionRequestor akzeptiert einen anderen Vorschlagstyp für die Codefertigstellung.  Die Parameter der Methoden enthalten jeweils Text, der das vorgeschlagene Element (dessen Namen, deklarierenden Typ usw.), seine vorgeschlagene Position für das Einfügen in die Kompiliereinheit sowie seine Relevanz beschreibt.  

Das anfordernde Element einer Fertigstellung kann viele unterschiedliche Typen von Fertigstellungen akzeptieren, die das Einfügen der folgenden Elemente umfassen:

Das Element, das die Fertigstellung anfordert, muss außerdem in der Lage sein, Kompilierungsfehler zu akzeptieren.   

Falls für Ihr Plug-in nicht alle Typen der Codefertigstellung in Frage kommen, kann ein ElementCompletionRequestorAdapter verwendet werden, damit Sie jeweils nur die Typen von Fertigstellungen implementieren müssen, die für Sie von Interesse sind.   Das folgende Beispiel zeigt einen Adapter, mit dem lediglich Klassenfertigstellungen akzeptiert werden:

   // Get the compilation unit
   ICompilationUnit unit = ...;
   
   // Get the offset
   int offset = ...;
   
   // Create the requestor
   ICompletionRequestor requestor = new CompletionRequestorAdapter() {
      public void acceptClass(
         char[] packageName,
         char[] className,
         char[] completionName,
         int modifiers,
         int completionStart,
         int completionEnd,
         int relevance) {
         System.out.println("propose a class named " + new String(className));
      }
   };
   
   // Compute proposals
   unit.codeComplete(offset, requestor);

Fertigstellungsrelevanz

Weil es unter Umständen viele unterschiedliche Fertigstellungen gibt, werden die vorgeschlagenen Fertigstellungen mit anderen Vorschlägen durch die Anwendung der Relevanz verglichen.   Die Relevanz wird durch eine positive ganze Zahl angegeben.  Der Wert hat keine implizite Bedeutung, sondern wird in Relation zu den Werten anderer Vorschläge verwendet.  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 definiert Optionen, die das Verhalten der Codefertigstellung steuern.   Diese Optionen können durch andere Plug-ins geändert werden.  

Über zusätzliche Optionen können Sie Präfixe und Suffixe für die vorgeschlagenen Fertigstellungsnamen für Felder, statische Felder, lokale Variablen und Methodenargumente angeben.   

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 programmgestützt auszuführen, müssen Sie ICodeAssist.codeSelect aufrufen. Sie müssen die Startindexposition der Auswahl und deren Länge angeben.   Das Ergebnis ist ein Bereich von Java-Elementen.  Meistens enthält der Bereich lediglich ein Element, bei einer mehrdeutigen Auswahl werden jedoch alle möglichen Elemente zurückgegeben.

Im folgenden Beispiel wird die Codeauswahl für eine Kompiliereinheit aufgerufen:

      // Get the compilation unit
   ICompilationUnit unit = ...;
   
   // Get the offset and length
   int offset = ...;
   int length = ...;
   
   // perform selection
   IJavaElement[] elements = unit.codeSelect(offset, length);
   System.out.println("the selected element is " + element[0].getElementName());

Auswahl an der Cursorposition

Wenn die Auswahllänge mit dem Wert 0 angegeben ist, wird die Auswahl berechnet, indem das vollständige Token gesucht wird, das die angegebene relative Position 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.

Copyright IBM Corporation und Andere 2000, 2003. Alle Rechte vorbehalten.