Kódsegéd végrehajtása Java kódon

A JDT API lehetővé teszi, hogy bedolgozók kódsegédet és kódkijelölést hajtsanak végre Java elemeken. Az ilyen kezelést lehetővé tevő elemeknek az ICodeAssist felületet valósítják meg.

Kétféle kezelés van:

A Java modellben két olyan elem van, ami megvalósítja ezt a felületet: IClassFile és ICompilationUnit.  A kódkiegészítés és kódkijelölés egy osztályfájl esetében csak akkor tér vissza eredménnyel, ha a fájlnak csatolt forrása van.

Kódkiegészítés

Kódkiegészítés végrehajtása

Az egyetlen módszer, hogy programozási eljárással kódkiegészítést hajtson végre, az ICodeAssist.codeComplete meghívása. Határozza meg az eltolást a fordítási egységben, ami után a kódkiegészítést szeretné. A lehetséges kiegészítések elfogadásához szükség van az ICompletionRequestor egy példányára is.

Az ICompletionRequestor minden egyes metódusa eltérő ajánlásokat fogad el a kódkiegészítéshez. Minden metódus paraméterei közt van szöveg is, ami leírja a javasolt elemet (nevét, deklarált típusát, stb.), a javasolt beillesztési helyet a fordítási egységbe, és az ajánlás jelentőségét.  

Egy kiegészítés kérelmező sok különböző típusú kiegészítést fogadhat el, beleértve a következő elemek beillesztését is:

A kiegészítés kérelmezőnek képesnek kell lennie fordítási hibákat elfogadni.  

Ha a bedolgozó számára nem minden típusú kódkiegészítés kívánatos, akkor egy CompletionRequestorAdapter illesztőt használhat annak érdekében, hogy csak a bedolgozó számára hasznos kiegészítések legyenek megvalósítva.  A következő példa egy olyan illesztőt mutat be, ami csak osztály kiegészítéseket fogad el.

   // Fordítási egység megadása
   ICompilationUnit unit = ...;
   
   // Eltolás megadása
   int offset = ...;
   
   // Kérelmező létrehozása
   ICompletionRequestor requestor = new CompletionRequestorAdapter() {
      public void acceptClass(
         char[] packageName,
         char[] className,
         char[] completionName,
         int modifiers,
         int completionStart,
         int completionEnd,
         int relevance) {
         System.out.println("ajánlott osztály neve: " + new
String(className));
      }
   };
   
   // ajánlatok számítása
   unit.codeComplete(offset, requestor);

Kiegészítés jelentősége

Mivel több különböző kiegészítés lehetséges, ezért a rendszer a jelentőség fogalmát használja a javasolt kiegészítés összehasonlítására más ajánlatokkal. A jelentőséget egy pozitív egész szám képviseli. Az értéknek nincs önmagában jelentése, hanem relatív értékként használatos más ajánlatokhoz viszonyítva.  Egy lehetséges kódkiegészítés jelentőségére hatással lehet, hogy a kifejezés várható típusa hogyan viszonyul a körülvevő kód típusához, úgy mint változó típusok, átalakító típusok, visszatérési típusok, stb.  Egy várható előtag vagy utótag jelenléte a kiegészítésben is befolyásolja a kiegészítés jelentőségét.

Kódkiegészítés beállításai

A JDT törzs bedolgozó beállítási lehetőségeket ad, amelyek a kódkiegészítés viselkedését határozzák meg. Ezeket a beállításokat más bedolgozók módosíthatják.  

További beállítások teszik lehetővé előtag és utótag megadását javasolt kiegészítő mező, statikus mező, helyi változók és metódus argumentum nevekhez.  

A kódsegéd beállításairól és az alapértékekről további információkat a   JDT törzs kódsegéd beállítások szakaszban tudhat meg.

Kódkijelölés

Kódkijelölés végrehajtása

A kódkijelölés egy fordítási egységben egy szövegtartomány (tipikusan a kijelölt szöveg) által képviselt Java elem megtalálására használható. A kódkiválasztás végrehajtása programozási eljárással az ICodeAssist.codeSelect meghívásával lehetséges. Meg kell adnia a kijelölés kezdő index helyszínét és hosszát.Az eredmény egy Java elemekből álló tömb. Legtöbbször csak egy elem van a tömbben, de ha a kiválasztás nem egyértelmű, akkor az eredményben minden lehetséges elem megjelenik.

A következő példában a fordítási egységre kódkijelölés kerül meghívásra.

      // Fordítási egység megadása
   ICompilationUnit unit = ...;
   
   // Az eltolás és a hossz megadása
   int offset = ...;
   int length = ...;
   
   // kiválasztás végrehajtása
   IJavaElement[] elements = unit.codeSelect(offset, length);
   System.out.println("a kijelölt elem: " +
element[0].getElementName());

Kijelölés a kurzor helyzeténél

Ha a megadott kijelölés hossz 0, akkor a megadott eltolást magába foglaló teljes jelsor kijelölésre kerül.  Gondoljon a következő példa metódusra:

   public void fooMethod(Object) {
   }

Ha az eltolást a fooMethod első karaktere után adja meg és a megadott hossz 0 karakter , akkor a kiválasztás az egész fooMethod jelsort magába foglalja. Ha ehelyett a megadott hossz 5 karakter, akkor a kiválasztás ooMet lesz.