Rozhraní API JDT poskytuje ostatním modulům plug-in službu Usnadnění práce s kódem nebo Výběr kódu pro určité prvky Java. Prvky umožňující takovouto manipulaci by měly implementovat ICodeAssist.
K dispozici jsou dva typy prováděných úkonů:
V modelu Java jsou dva prvky implementující toto rozhraní: IClassFile a ICompilationUnit. Dokončování kódu a výběr kódu poskytují výsledky pro soubor třídy pouze, pokud je připojen ke zdroji.
Jediným způsobem dokončování kódu z programu je spuštění ICodeAssist.codeComplete. Zadáte počáteční polohu té části kompilační jednotky, ve které chcete dokončení kódu provést. Rovněž musíte zřídit instanci ICompletionRequestor, jež zajistí přijetí možných dokončení.
Jednotlivé metody v ICompletionRequestor akceptují různé typy návrhů dokončení kódu. Textové parametry jednotlivých metod popisují navrhovaný prvek (název, typ deklarace atd.), navrhovanou polohu jeho vložení do kompilační jednotky a jeho relevanci.
Žadatel dokončení může přijímat různé typy dokončování včetně vkládání následujících prvků:
Žadatel dokončení musí být rovněž schopen přijímat chyby kompilace.
Pokud váš modul plug-in nebude některý ze způsobů dokončování kódu používat, můžete CompletionRequestorAdapter použít k výběrové implementaci pouze takových typů dokončování, o které máte skutečně zájem. Následující příklad předvádí adaptér, který je určen pouze k přijímání dokončování tříd.
// Získat kompilační jednotku ICompilationUnit unit = ...; // Získat ofset int offset = ...; // Vytvořit žadatele ICompletionRequestor requestor = new CompletionRequestorAdapter() { public void acceptClass( char[] packageName, char[] className, char[] completionName, int modifiers, int completionStart, int completionEnd, int relevance) { System.out.println("navrhnout třídu s názvem " + new String(className)); } }; // Výpočet návrhů unit.codeComplete(offset, requestor);
Protože může být k dispozici více možných a vzájemně odlišných dokončení, používáme pojem relevance k porovnávání doporučeného dokončení s ostatními návrhy. Relevance je reprezentována kladným celým číslem. Hodnota nemá žádný implicitní význam a je určena výlučně k porovnávání s hodnotami ostatních návrhů. Relevance kandidáta na dokončení kódu může být ovlivněna očekávaným typem výrazu, protože se vztahuje k typům použitým v okolním kódu, např. k typům proměnných, přetypovaným typům, návratovým typům atd. Relevanci ovlivňuje rovněž přítomnost očekávané předpony či přípony v dokončení.
Modul plug-in JDT Core definuje volby, které ovládají chování dokončování kódu. Tyto volby lze měnit jinými moduly plug-in.
Další volby umožňují zadávání předpon a přípon pro navržené dokončovací názvy polí, statických polí, lokálních proměnných a argumentů metod.
Další informace o volbách Usnadnění práce s kódem a o jejich výchozích hodnotách naleznete v tématu Volby usnadnění práce s kódem JDT Core.
Výběr kódu se používá k vyhledání prvku Java představovaného úsekem textu (v typickém případě zvoleného textu) v kompilační jednotce. Chcete-li provést výběr textu v programu, musíte spustit ICodeAssist.codeSelect. Musíte poskytnout počáteční polohu a délku výběru. Výsledkem je pole prvků Java. Většinu času je v poli pouze jediný prvek. Je-li však volba nejednoznačná, vrací všechny možné prvky.
V následujícím příkladu je volán výběr kódu pro kompilační jednotku. // Získat kompilační jednotku
ICompilationUnit unit = ...;
// Získat ofset a délku
int offset = ...;
int length = ...;
// Provést volbu
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("vybrán je prvek" + element[0].getElementName());
Je-li zvolena nulová délka výběru, bude výběr vypočten vyhledáním kompletního tokenu, jehož délka se shoduje se zadaným ofsetem. Podívejte se na následující metodu:
public void fooMethod(Object) {
}