Lisäosa voi hakea JDT-sovellusohjelmaliittymän avulla työtilan Java-projekteista Java-elementtejä, kuten metodin viitteitä, kenttien esittelyjä, rajapinnan toteuttajia jne.
Java-haun tulokohta on SearchEngine-luokka. Voit hakea tiettyjä malleja Java-elementin sisältä ja rajata haun tiettyihin elementteihin. Hakumalleja voi luoda createPattern-metodin avulla. Mallin hakualue rajataan createJavaSearchScope-metodilla. Kun malli ja käyttöalue on määritetty, tulokset kerätään search-metodin avulla.
Haun tulokset ilmoitetaan SearchRequestor-luokkaan, joka on laajennettava, että tuloksia voi käyttää.
Haku käyttää sekä mallia haun luonteen kuvaamiseen että käyttöaluetta tutkinnan alueen rajoittamiseen.
Hakumalli määrittää, miten tulokset löydetään. Voit luoda hakumallin joko Java-elementistä (katso createPatternPattern(IJavaElement, int)) tai merkkijonosta (katso createPattern(String, int, int, int).) Viimeinen metodi tukee yleismerkkejä (eli '*'), ja sen avulla voidaan laajentaa haun tuloksia.
Esimerkiksi hakumalli, jolla haetaan viittauksia tiettyyn metodiin, luodaan seuraavasti:
// Hae metodi IMethod method = ...; // Luo hakumalli SearchPattern pattern = SearchPattern.createPattern(method, IJavaSearchConstants.REFERENCES);
Vaihtoehtoisesti hakumallin luonti kaikkien sellaisten tyyppien esittelyjen hakemista varten, joiden alussa on "Obj":
// Luo hakumalli SearchPattern pattern = SearchPattern.createPattern("Obj*", IJavaSearchConstants.TYPE, IJavaSearchConstants.DECLARATIONS, SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE);
Seuraavat hakumallit ovat tuettuja:
Jos olet kiinnostunut tietyn projektin tai jopa tietyn paketin hakutuloksista tai tiedät, että hakutuloksia voi olla vain tietyn tyypin hierarkiassa, voit luoda sopivan hakualueen createJavaSearchScope(IJavaElement[])- tai createHierarchyScope(IType)-metodin avulla.
Esimerkiksi tietyn paketin kattava hakualue luodaan seuraavasti:
// Hae paketti IPackageFragment pkg = ...; // Luo hakualue IJavaSearchScope scope = SearchEngine.createJavaSearchScope(new IJavaElement[] {pkg});
Vaihtoehtoisesti tietyn tyypin hierarkian kattava hakualue luodaan seuraavasti:
// Hae tyyppi IType type = ...; // Luo hakualue IJavaSearchScope scope = SearchEngine.createHierarchyScope(type);
Lopuksi voit luoda koko työtilan kattavan hakualueen metodin createWorkspaceScope avulla:
// Luo hakualue IJavaSearchScope scope = SearchEngine.createWorkspaceScope();
Kun hakumalli ja hakualue on luotu ja SearchRequestor-luokka on laajennettu, voit aloittaa hakukyselyn seuraavasti:
// Hae hakumalli SearchPattern pattern = ...; // Hae hakualue IJavaSearchScope scope = ...; // Hae haun pyytäjä SearchRequestor requestor = ...; // Hae SearchEngine searchEngine = new SearchEngine(); searchEngine.search(pattern, new SearchParticipant[] {SearchEngine.getDefaultSearchParticipant()}, scope, requestor, null);
Haun alkamisesta kertova ilmoitus lähetetään haun pyytäjään beginReporting-metodin avulla. Tämän jälkeen jokainen hakutulos ilmoitetaan acceptSearchMatch-metodilla.Lopuksi endReporting osoittaa, että haku on päättynyt.
Hakutulokset ilmoitetaan acceptSearchMatch(SearchMatch)-metodin avulla. Seuraavissa kappaleissa esitellään joitakin SearchMatch-luokan tuoteominaisuuksia.
Hakutulos voi vastata Java-elementtiä (esim. tyypin esittelyä) tai se voi sisältyä Java-elementtiin (esim. viittaus tyyppiin metodin sisällä). Hakuohjelma yrittää aina löytää sisimmän Java-elementin, joka vastaa hakua tai sisältää hakutuloksen. Jos esimerkiksi haetaan viittauksia metodiin, haku voi löytää tällaisen viitteen aloitusmetodista. Tämän metodin viitteen sisältävä alustustoiminto on hakuvastineen elementti.
Hakuohjelma yrittää löytää myös resurssin, joka sisältää Java-elementin. Jos Java-elementti sisältyy käännösyksikköön tai luokkatiedostoon, resurssi on vastaava IFile. Jos Java-elementti sisältyy .jar-tiedostoon, palautuva resurssi on kyseinen .jar-tiedosto, jos se on työtilassa. Muussa tapauksessa palautuva resurssi on tyhjä.
Lähdesijainnit getOffset ja getLength ilmoitetaan suhteessa hakutuloksen sisältävään käännösyksikköön. Jos hakutulos sisältyy .jar-tiedostoon, lähdesijainnit ovat suhteessa liitettyyn lähteeseen. Ne ovat (-1, -1), jos .jar-tiedostoon ei ole liitetty lähdettä.
Useimmissa tapauksissa hakutulokset ovat tarkkoja, eli hakuohjelma on pystynyt selvittämään, että sen tarjoama vastine on pyydetty. Joissakin tapauksissa hakuohjelma ei kuitenkaan pysty tekemään tätä, jolloin vastine on epätarkka. Joitakin mahdollisia syitä vastineen epätarkkuuteen ovat seuraavat: