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.
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);
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.
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.
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());
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) {
}