Java-modell

Java-modellen er settet med klasser som modellerer objektene forbundet med opprettelse, redigering og bygging av et Java-program. Java-modellklassene er definert i org.eclipse.jdt.core.  Disse klassene implementerer Java-spesifikk oppførsel for ressurser og oppløser Java-ressursene ytterligere i modellelementer.

Java-elementer

Pakken org.eclipse.jdt.core definerer klassene som modellerer elementene som danner en Java-program. JDT bruker en minnebevart objektmodell til å representere strukturen i et Java-program. Denne strukturen utledes fra prosjektets klassebane. Modellen er hierarkisk. Elementene i et program kan oppløses i underordnede elementer.

Manipulering av Java-elementer likner på manipulering av ressursobjekter.  Når du arbeider med et Java-element, arbeider du faktisk med en referanse til et underliggende modellobjekt.  Du må bruker protokollen exists() til å bestemme om elementet faktisk er til stede i arbeidsområdet. 

Tabellen nedenfor oppsummerer de forskjellige typene Java-elementer.

Element Beskrivelse
IJavaModel Representerer Java-rotelementer, tilsvarende arbeidsområdet. Overordnet over alle prosjekter av Java-natur. Det gir deg også tilgang til prosjektene uten Java-natur.
IJavaProject Representerer et Java-prosjekt i arbeidsområdet. (Underordnet under IJavaModel.)
IPackageFragmentRoot Representerer et sett med pakkefragmenter, og tilordner fragmentene til en underliggende ressurs som er en mappe, JAR eller ZIP-fil. (underordnet under IJavaProject.)
IPackageFragment Representerer den delen av arbeidsområdet som tilsvarer hele pakken, eller en del av pakke. (Underordnet under IPackageFragmentRoot.)
ICompilationUnit Representerer en Java-kildefil (*.java). (Underordnet under IPackageFragment.)
IPackageDeclaration Representerer en pakkedeklarasjon i en kompileringsenhet. (Underordnet under ICompilationUnit.)
IImportContainer Representerer samlingen av pakkeimportdeklarasjoner i en kompileringsenhet. (Underordnet under ICompilationUnit.)
IImportDeclaration Representerer en enkelt pakkeimportdeklarasjon. (Underordnet under IImportContainer.)
IType Representerer en kildetype i en kompileringsenhet eller en binær type i en klassefil.
IField Representerer et felt i en type. (Underordnet under IType.)
IMethod Representerer en metode for konstruktør i en type. (Underordnet under IType.)
IInitializer Representerer en statisk eller forekomstbasert initialiserer i en type. (Underordnet under IType.)
IClassFile Representerer en kompilert (binær) type.  (Underordnet underIPackageFragment.)
ITypeParameter Representerer en typeparameter.   (Ikke underordnet et Java-element, den hentes ved hjelp av IType.getTypeParameter(String) eller IMethod.getTypeParameter(String))
ILocalVariable Representerer en lokal variabel i en metode eller en initialiserer.   (Ikke underordnet et Java-element, det hentes ved hjelp av ICodeAssist.codeSelect(int, int))

Alle Java-elementer støtter grensesnittetIJavaElement.

Noen av elementene vises i Pakker-visningen.  Disse elementene implementerer grensesnittet IOpenable, siden de må åpnes før de kan navigeres.Figuren nedenfor viser hvordan disse elementene representeres i Pakker-visningen.

Pakker-visning med elementer som implementerer grensesnittet IOpenable

Java-elementene som implementerer IOpenable, opprettes primært på grunnlag av informasjon som finnes i de underliggende ressursfilene.  De samme elementene er representert generisk i ressursnavigatorvisningen.

Ressursnavigator som viser elementer sin implementerer grensesnittet IOpenable

Andre elementer tilsvarerer elementer som utgjør en Java-kompileringsenhet. Figuren nedenfor viser en Java-kompileringsenhet og en innholdsdisposisjon som viser kildeelementene i kompileringsenheten.

Et redigeringsprogram og en innholdsdisposisjon som illustrerer forholdet mellom tilsvarende kildeelementer

Disse elementene implementerer grensesnittet ISourceReference, siden de kan sørge for tilsvarende kildekode. (Siden disse elementene velges i innholdsdisposisjonen, vises deres tilsvarende kildekode i Java-redigeringsprogrammet.)

Java-elementer og deres ressurser

Mange Java-elementer tilsvarer generiske ressurser i arbeidsområdet.  Når du vil opprette Java-elementer på grunnlag av en generisk ressurs, er klassen JavaCore det beste startpunktet.Følgende kodesnutt viser hvordan du henter Java-elementer fra sine tilsvarende ressurser:

    
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        IJavaProject myJavaProject= JavaCore.create(myProject);
        if (myJavaProject == null)
            // Prosjektet konfigureres ikke for Java (har ingen Java-natur)
            return;
            
        // Hent pakkefragment eller pakkefragmentrot
        IJavaElement myPackageFragment= JavaCore.create(myFolder);
        
        // Hent en *.java (kompileringsenhet), *.class (klassefil) eller
        // *.jar (pakkefragmentrot)
        IJavaElement myJavaFile = JavaCore.create(myFile);
    }

Når du har et Java-element, kan du bruke JDT-APIet til å gjennomgå og spørre om modellen.  Du kan kanskje også ønske å spørre om ikke-Java-ressurser i et Java-element. 

         private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        ...
        // Hent ikke-Java-ressurser i mitt prosjekt.
        Object[] nonJavaChildren = myJavaProject.getNonJavaResources();
        ...
            

Java-prosjekter

Når du oppretter et Java-prosjekt ut fra et enkelt prosjekt, vil JavaCore kontrollere om prosjektet er konfigurert med Java-natur.  JDT-plugin-modulen bruker en prosjektnatur til å definere et prosjekt som fremvisende Java-oppførsel.  Denne naturen (org.eclipse.jdt.core.JavaCore#NATURE_ID) tilordnes til et prosjekt når veiviseren "Nytt Java-prosjekt" oppretter et prosjekt.  Hvis Java-naturen ikke er konfigurert for et prosjekt, vil JavaCore returnere null når den blir bedt om å opprette prosjektet.

JavaCore brukes også til å vedlikeholde Java-klassebanen, inkludert plasseringer for å finne kildekode og biblioteker, og plasseringer for generering av binære utdatafiler (*.class).

Hva er Java-prosjektenes unike egenskaper? De registrerer sin klassebane i en "*.classpath"-fil og legger til en trinnvise Java-prosjektbyggeren i prosjektets byggespesifikasjoner.  Ellers er de helt vanlige prosjekter, og kan konfigureres med andre naturer (og andre trinnvise byggere) av plugin-moduler.Plugin-moduler som ønsker å konfigurere prosjekter med Java-oppførsel i tillegg til sin egen oppførsel, bruker typisk NewJavaProjectWizardPage for å tilordne Java-natur til prosjektet i tillegg til sin egen tilpassede natur eller oppførsel.

IJavaModel kan anses som overordnet over alle prosjekter i arbeidsområdet som har Java-prosjektnatur (og kan dermed behandles som et IJavaProject).