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 a 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 a teljes munkaterületre is készíthet egy 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és eredményeiről jelentés az acceptSearchMatch használatával készül. Az alábbi bekezdések részletezik a keresési találatot.
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. Tehát, ha a Java elem egy fordítási egység metódusa, akkor a vonatkozó IFile lesz az erőforrás. Ha az elem egy .jar fájlban található, akkor .jar fájl az erőforrás, ha a .jar fájl a munkaterületen van. Ha ez egy külső .jar fájl, akkor az erőforrás null.
A forrás pozíciók a keresési eredményt tartalmazó fordítási egységhez 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: