A bedolgozó használhatja a JDT API felületet, hogy a munkaterületen található Java projektekben olyan Java elemeket keressen, mint metódus hivatkozások, mező deklarációk, egy felület megvalósítóit, stb.
A Java keresés belépési pontja a SearchEngine osztály. Kereshet bizonyos mintákat Java elemekben és szűkíteti a keresést bizonyos elemekre. Kereséséi mintákat a createPattern metódussal hozhat létre. Mintát a createJavaSearchScope használatával szűkíthet. A minta és a hatókör meghatározása után a search metódussal lehet az eredményeket összegyűjteni.
A keresés eredményéről a SearchRequestor kap jelentést, ezért ki kell terjeszteni az eredmények eléréséhez.
A keresési művelet egyaránt használ egy mintát a keresés természetének leírásához és egy hatókört a vizsgálat tartományának szűkítésére.
A keresési minta meghatározza a keresés módszerét. Keresési minta létrehozható Java elemből (lásd createPatternPattern(IJavaElement, int)) vagy karaktersorozatból (lásd createPattern(String, int, int, int).) Az utóbbi módszer támogatja a helyettesítő karaktereket (pl. '*') és a keresés eredményének szélesítésére használható.
Például adott metódus hivatkozásainak kereséséhez a következő módon lehet keresési mintát létrehozni:
// Metódus megadása IMethod method = ...; // Keresési minta létrehozása SearchPattern pattern = SearchPattern.createPattern(method, IJavaSearchConstants.REFERENCES);
Vagy keresési minta létrehozása minden olyan típusdeklarációra, ami az "Obj" karaktersorral kezdődik:
// Keresési minta létrehozása SearchPattern pattern = SearchPattern.createPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE);
Az alábbiakban a támogatott keresési minták láthatók:
Ha csak adott projektben vagy csomagban találhaó keresési eredmények érdeklik, vagy ha tudja, hogy a keresési eredmények csak egy adott típus hierarchiájában lehetnek, akkor létrehozhatja the megfelelő keresési hatókört a createJavaSearchScope(IJavaElement[]) vagy a createHierarchyScope(IType) használatával.
Például egy adott csomagra a következőképpen készíthet keresési hatókört:
// Csomag megadása IPackageFragment pkg = ...; // Keresési hatókör létrehozása IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {pkg});
Vagy egy adott típus hierarchiájára a következőképpen készíthet keresési hatókört:
// Típus megadása IType type = ...; // Keresési hatókör létrehozása IJavaSearchScope scope = SearchEngine.createHierarchyScope(type);
Végül pedig létrehozhat a createWorkspaceScope metódussal létrehozhat egy, a teljes munkaterületet magában foglaló keresési hatókört:
// Keresési hatókör létrehozása IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
Ha a keresési minta és a keresési hatókör elkészült, valamint a SearchRequestor ki lett terjesztve, akkor a következőképpen indíthat egy keresési lekérdezést:
// Keresési minta megadása SearchPattern pattern = ...; // Keresési hatókör megadása IJavaSearchScope scope = ...; // Keresési kérelmező megadása SearchRequestor requestor = ...; // Keresés SearchEngine searchEngine = new SearchEngine(); searchEngine.search(pattern, new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, scope, requestor, null);
A keresés elindulásáról a keresés kérelmező értesítést kap a beginReporting metódus használatával. Majd a rendszer minden keresési eredményt jelent az acceptSearchMatch metódus használatával.Végezetül az endReporting mutatja, hogy a keresés véget ért.
A keresési eredmények jelentés a acceptSearchMatch(SearchMatch) metódussal történik. A lenti bekezdések a SearchMatch egyes jellemzőit emelik ki.
A keresési eredmény kapcsolódhat egy Java elemhez (pl. egy típus deklarációhoz), vagy egy Java elem tartalmazhatja a keresési eredményt (pl. hivatkozás egy típusra egy metódusban). A keresőmotor mindig megpróbálja megtalálni a legbelső Java elemet, amely kapcsolódik a keresési eredményhez, vagy tartalmazza azt. Például, ha a rendszer hivatkozásokat keres egy metódusban, akkor ilyen hivatkozást találhat egy inicializálóban is. Az inicializáló, amely tartalmazza a metódus hivatkozást, lesz a keresési eredmény egy eleme.
A keresőmotor megpróbálja megkeresni a Java elemet tartalmazó erőforrást is. Ha a Java elem egy fordítási egységben vagy osztályfájlban van, akkor a vonatkozó IFile lesz az erőforrás. Ha a Java elem egy .jar fájlban van, ami a munkaterületen található, akkor a visszatérített erőforrás az a .jar fájl lesz, egyébként pedig null.
A getOffset és getLength forráspozíciók a keresési eredményt tartalmazó fordítási egységhez képest relatívan vannak megadva. Ha a keresési eredmény egy .jar fájlban található, akkor a forrás pozíciók relatívak a mellékelt forráshoz. A pozíciók (-1, -1), ha a .jar fájlhoz nincs forrás mellékelve.
A legtöbb esetben a keresési eredmény pontos, ami azt jelenti, hogy a keresőmotor képes volt meghatározni, hogy a találat megegyezik a keresett elemekkel. Ennek ellenére bizonyos esetekben a keresőmotor nem képes megtalálni a keresett elemet, ilyenkor a keresés pontatlan. Néhány ok, amiért a keresés pontatlan lehet: