Java-hakuohjelman käyttö

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ää.

Haun valmistelu

Haku käyttää sekä mallia haun luonteen kuvaamiseen että käyttöaluetta tutkinnan alueen rajoittamiseen.

Java-hakumallin luonti

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:

Java-hakualueen luonti

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();

Etsiminen

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.

Hakutulosten keruu

Hakutulokset ilmoitetaan acceptSearchMatch(SearchMatch)-metodin avulla. Seuraavissa kappaleissa esitellään joitakin SearchMatch-luokan tuoteominaisuuksia.

Resurssit ja Java-elementit

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

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ä.

Tarkat ja epätarkat hakutulokset

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: