Java-malli

Java-malli on joukko luokkia, jotka mallintavat Java-ohjelman luontiin, muokkaukseen ja koontiin liittyvät objektit. Java-malliluokat on kuvattu ohjeaiheessa org.eclipse.jdt.core.  Nämä luokat toteuttavat Java-toiminnot resursseille ja jakavat Java-resurssit edelleen mallielementteihin.

Java-elementit

Paketti org.eclipse.jdt.core määrittää luokat, jotka mallintavat Java-ohjelman muodostavat elementit. JDT käyttää muistinsisäistä objektimallia Java-ohjelman rakenteen esittämiseen. Tämä rakenne tulee projektin luokkapolusta. Malli on hierarkkinen. Ohjelman elementit voi jakaa alielementteihin.

Java-elementtien käsittely on samankaltaista kuin resurssiobjektien käsittely.  Kun käsittelet Java-elementtiä, käsittelet tosiasiallisesti kahvaa johonkin perustana olevaan malliobjektiin.  On käytettävä exists()-käytäntöä sen määrittämiseen, onko elementti todella työtilassa. 

Seuraavassa taulukossa on tiivistelmä erilaisista Java-elementeistä:

Elementti Kuvaus
IJavaModel Kuvaa Java-juurielementtiä, joka vastaa työtilaa. Kaikkien Java-luonteisten projektien pääobjekti. Sen avulla voi käyttää myös projekteja, joilla ei ole Java-luonnetta.
IJavaProject Kuvaa työtilan Java-projektia. (Elementin IJavaModel alielementti)
IPackageFragmentRoot Kuvaa joukkoa pakettifragmentteja ja määrittää fragmenttien vastaavuuden perustana olevaan resurssiin, joka on kansio, JAR- tai ZIP-tiedosto. (Elementin IJavaProject alielementti)
IPackageFragment Kuvaa työtilan osaa, joka vastaa koko pakettia tai paketin osaa. (Elementin IPackageFragmentRoot alielementti)
ICompilationUnit Kuvaa Java-lähdetiedostoa (.java). (Elementin IPackageFragment alielementti)
IPackageDeclaration Kuvaa käännösyksikön paketin esittelyä. (Elementin ICompilationUnit alielementti)
IImportContainer Kuvaa käännösyksikön pakettien tuontiesittelyjen kokoelmaa. (Elementin ICompilationUnit alielementti)
IImportDeclaration Kuvaa yksittäisen paketin tuontiesittelyä. (Elementin IImportContainer alielementti)
IType Kuvaa joko käännösyksikön sisällä olevaa lähdetyyppiä tai luokkatiedoston sisällä olevaa binaarista tyyppiä.
IField Kuvaa tyypin sisässä olevaa kenttää. (Elementin IType alielementti)
IMethod Kuvaa tyypin sisässä olevaa metodia tai konstruktoria. (Elementin IType alielementti)
IInitializer Kuvaa tyypin sisässä olevaa staattista tai ilmentymän alustustoimintoa. (Elementin IType alielementti)
IClassFile Kuvaa käännettyä (binaarista) tyyppiä.  (Elementin IPackageFragment alielementti)
ITypeParameter Kuvaa tyypin parametria.  (Tämä ei ole minkään Java-elementin alielementti, vaan se noudetaan metodin IType.getTypeParameter(String) tai IMethod.getTypeParameter(String) avulla)
ILocalVariable Kuvaa paikallismuuttujaa metodissa tai alustusmetodissa.  (Tämä ei ole minkään Java-elementin alielementti, vaan se noudetaan metodin ICodeAssist.codeSelect(int, int) avulla)

Kaikki Java-elementit tukevat IJavaElement-rajapintaa.

Jotkin elementit näkyvät Paketit-näkymässä.  Nämä elementit toteuttavat IOpenable -rajapinnan, koska ne on avattava, ennen kuin niihin voi siirtyä. Seuraava kuva osoittaa, miten nämä elementit esitetään Paketit-näkymässä.

Paketit-näkymä, jossa näkyvät IOpenable-rajapinnan toteuttavat elementit

IOpenable -rajapinnan toteuttavat Java-elementit luodaan ensisijaisesti perustana olevien resurssitiedostojen tiedoista.  Samat elementit esitetään yleisesti resurssien navigaattorinäkymässä.

Resurssien navigaattorinäkymä, jossa näkyvät IOpenable-rajapinnan toteuttavat elementit

Muut elementit vastaavat Java-käännösyksikön muodostavia objekteja. Seuraavassa kuvassa on Java-käännösyksikkö ja sisällön jäsentelytoiminto, joka näyttää käännösyksikössä olevat lähde-elementit.

Muokkausohjelma ja sisällön jäsentelytoiminto, jotka kuvaavat vastaavien lähde-elementtien suhdetta

Nämä elementit toteuttavat ISourceReference-rajapinnan, sillä ne voivat toimittaa vastaavan lähdekoodin. (Koska nämä elementit valitaan sisällön jäsentelytoiminnossa, niiden vastaava lähdekoodi näkyy Java-muokkausohjelmassa).

Java-elementit ja niiden resurssit

Monet Java-elementit vastaavat työtilan yleisiä resursseja.  Kun haluat luoda Java-elementtejä yleisestä resurssista, paras lähtökohta on JavaCore-luokka. Seuraava koodikatkelma kuvaa, miten Java-elementit haetaan niitä vastaavista resursseista.

    
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        IJavaProject myJavaProject= JavaCore.create(myProject);
        if (myJavaProject == null)
            // projektia ei ole määritetty Javalle (sillä ei ole Java-luonnetta)
            return;
            
        // hae pakettifragmentti tai pakettifragmentin juuri
        IJavaElement myPackageFragment= JavaCore.create(myFolder);
        
        // hae .java (käännösyksikkö), .class (luokkatiedosto) tai
        // .jar (pakettifragmentin juuri)
        IJavaElement myJavaFile = JavaCore.create(myFile);
    }

Kun sinulla on Java-elementti, voit siirtyä mallissa ja tehdä siihen kyselyjä JDT-sovellusohjelmaliittymän avulla.  Voit tehdä kyselyjä myös Java-elementin sisältämään resurssiin, joka ei ole Java-resurssi. 

         private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        ...
        // hae omaan projektiin sisältyvät ei-Java-resurssit.
        Object[] nonJavaChildren = myJavaProject.getNonJavaResources();
        ...
            

Java-projektit

Kun luot Java-projektin yksinkertaisesta projektista, JavaCore tarkistaa, onko projektille määritetty Java-luonnetta.  JDT-lisäosa osoittaa projektin Java-luonteiseksi projektin luonteen avulla.  Tämä luonne (org.eclipse.jdt.core.JavaCore#NATURE_ID ) osoitetaan projektille, kun ohjattu "Uusi Java-projekti" -toiminto luo projektin.  Jos projektille ei ole määritetty Java-luonnetta, JavaCore palauttaa arvon null, kun sitä pyydetään luomaan projekti.

JavaCore-lisäosan avulla voi myös ylläpitää Java-luokkapolkua, myös lähdekoodin hakusijainteja ja kirjastoja, sekä binaaristen tulostustiedostojen (.class) muodostussijainteja.

Mitkä ovat Java-projektien ainutlaatuiset ominaisuudet? Ne tallentavat luokkapolkunsa ".classpath"-tiedostoon ja lisäävät projektin koontimäärityksiin Javan täydentävän projektin koontitoiminnon.  Muuten ne ovat vain tavallisia projekteja ja niille voi määrittää lisäosilla muita luonteita (ja muita täydentäviä koontitoimintoja). Lisäosat, jotka haluavat määrittää projekteille Java-luonteen niiden oman toiminnan lisäksi, osoittavat tavallisesti NewJavaProjectWizardPage -luokan avulla projektille Java-luonteen niiden oman mukautetun luonteen tai toiminnan lisäksi.

IJavaModel-elementtiä voi pitää kaikkien työtilan sellaisten projektien pääobjektina, joilla on Java-projektiluonne (ja joita voidaan näin ollen käsitellä IJavaProject-elementteinä).