Java-model

Java-modellen er det sæt klasser, der er model for de objekter, som er knyttet til oprettelse, redigering og bygning af et Java-program. Java-modelklasseren defineres i org.eclipse.jdt.core. Klasserne implementerer Java-specifik funktionsmåde for ressourcer og opløser Java-ressourcer i modelelementer.

Java-elementer

Pakken org.eclipse.jdt.core definerer de klasser, som er modeller for de elementer, der danner et Java-program. JDT bruger en objektmodel i hukommelsen til at repræsentere strukturen af et Java-program. Denne struktur stammer fra projektets classpath. Modellen er hierarkisk. Elementer af et program kan opløses i underordnede elementer.

Manipulation af Java-elementer minder om manipulation af ressourceobjekter. Når du arbejder med et Java-element, arbejder du egentlig med en reference til et underliggende modelobjekt. Du skal bruge protokollen exists() til at bestemme, om elementet faktisk er til stedet på arbejdsområdet. 

I nedenstående tabel vises en oversigt over de forskellige slags Java-elementer.

Element Beskrivelse
IJavaModel Repræsenterer Java-rodelementet, der svarer til arbejdsområdet. Det overordnede for alle projekter af Java-natur. Det giver også adgang til projekter uden Java-naturen.
IJavaProject Repræsenterer et Java-projekt i arbejdsområdet. (Underordnet IJavaModel).
IPackageFragmentRoot Repræsenterer et sæt pakkefragmenter og tilknytter fragmenterne vha. mapping til en underliggende ressource, som enten er en folder, en JAR- eller ZIP-fil. (Underordnet i forhold til IJavaProject).
IPackageFragment Repræsenterer den del af arbejdsområdet, som svarer til en fuldstændig pakke eller en del af pakken. (Underordnet i forhold til IPackageFragmentRoot).
ICompilationUnit Repræsenterer en Java-kildefil (.java). (Underordnet i forhold til IPackageFragment).
IPackageDeclaration Repræsenterer en pakkeerklæring i en kompileringsenhed. (Underordnet i forhold til ICompilationUnit).
IImportContainer Repræsenterer samlingen af pakkeimporterklæringer i en kompileringsenhed. (Underordnet i forhold til ICompilationUnit).
IImportDeclaration Repræsenterer en enkelt pakkeimporterklæring. (Underordnet i forhold til IImportContainer).
IType Repræsenterer enten en kildetype i en kompileringsenhed eller en binær type i en klassefil.
IField Repræsenterer et felt i en type. (Underordnet i forhold til IType).
IMethod Repræsenterer en metode eller konstruktør i en type. (Underordnet i forhold til IType).
IInitializer Repræsenterer en statisk initialiseringsfunktion eller en initialiseringsfunktion til en forekomst i en type. (Underordnet i forhold til IType).
IClassFile Repræsenterer en kompileret (binær) type. (Underordnet i forhold til IPackageFragment).
ITypeParameter Repræsenterer en typeparameter. (Ikke underordnet et Java-element, men hentes vha. IType.getTypeParameter(String) eller IMethod.getTypeParameter(String)).
ILocalVariable Repræsenterer en lokal variabel i en metode eller initialiseringsfunktion. (Ikke underordnet et Java-element, men hentes vha. ICodeAssist.codeSelect(int, int)).

Alle Java-elementer understøtter grænsefladen IJavaElement.

Nogle af elementerne vises i pakkeoversigten. Disse elementer implementerer grænsefladen IOpenable, fordi de skal åbnes, før der kan navigeres i dem. Figuren nedenfor viser, hvordan disse elementer repræsenteres i pakkeoversigten.

Pakkeoversigt, hvor de elementer, der implementerer grænsefladen IOpenable, vises

De Java-elementer, der implementerer IOpenable oprettes primært på grundlag af oplysninger, der findes i de underliggende ressourcefiler. De samme elementer repræsenteres generisk i ressourcens navigatoroversigt.

I ressourcenavigatoren vises elementer, der implementerer grænsefladen IOpenable

Andre elementer svarer til de elementer, der udgør en Java-kompileringsenhed. Nedenstående figur viser en Java-kompileringsenhed og en indholdsstruktur, der viser kildeelementerne i kompileringsenheden.

En editor og en indholdsstruktur, der illustrerer forholdet mellem kildeelementer, der svarer til hinanden

Disse elementer implementerer grænsefladen ISourceReference, fordi de kan levere den tilsvarende kildekode. Eftersom disse elementer vælges i indholdsstrukturen, vises deres tilsvarende kildekode i Java-editoren.

Java-elementer og deres ressourcer

Mange af Java-elementerne svarer til generiske ressourcer i arbejdsområdet. Når du vil oprette Java-elementer fra en generisk ressource, er klassen JavaCore det bedste udgangspunkt. Følgende kodestykke viser, hvordan du kan hente Java-elementer fra de tilsvarende ressourcer:

    
        private void createJavaElementsFrom(IProject mitProjekt, IFolder minFolder, IFile myFile) {
        IJavaProject myJavaProject= JavaCore.create(mitProjekt);
        if (myJavaProject == null)
            // projektet er ikke konfigureret til Java (har ikke nogen Java-natur)
            return;
            
        // hent et pakkefragment eller en pakkefragmentrod
        IJavaElement myPackageFragment= JavaCore.create(minFolder);
        
        // hent en .java-fil (kompileringsenhed), .class-fil (klassefil) eller
        // en .JAR-fil (pakkefragmentrod)
        IJavaElement myJavaFile = JavaCore.create(minFil);
    }

Når du har et Java-element, kan du bruge JDT API til at gennemgå og rette forespørgsler om modellen. Du kan også forespørge om de ikke-Java-ressourcer, der er indeholdt i et Java-element. 

                 private void createJavaElementsFrom(IProject mitProjekt, IFolder minFolder, IFile myFile) {
        ...
        // hent den ikke-Java-ressource, der er indeholdt i mit projekt.
        Object[] nonJavaChildren = myJavaProject.getNonJavaResources();
        ...
            

Java-projekter

Når du opretter et Java-projekt fra et enkelt projekt, vil JavaCore kontrollere, om projektet er konfigureret med Java-natur. JDT-plugin bruger en projektnatur til at designe et projekt som et projekt med Java-funktionsmåde. Denne natur (org.eclipse.jdt.core.JavaCore#NATURE_ID) tildeles et projekt, når guiden "Nyt Java-projekt" opretter et projekt. Hvis Java-naturen ikke er konfigureret for et projekt, vil JavaCore returnere NULL ved anmodningen om at oprette projektet.

JavaCore bruges også til at vedligeholde Java-classpath, herunder placeringer til at søge efter kildekode og biblioteker, og placeringer til at generere binære outputfiler (.class).

Hvad kendertegner entydigt Java-projekter? De registrerer deres classpath i en .classpath-fil og tilføjer det trinvise Java-projektbyggeprogram til projektets byggespecifikationer. Ellers er de blot almindelige projekter og kan konfigureres med andre naturer (og andre trinvise byggeprogrammer) via plugins. De plugins, som vil konfigurere projekter med Java-funktionsmåde i tilgift til deres egen funktionsmåde, bruger typisk NewJavaProjectWizardPage til at tildele Java-natur til projektet ud over deres egne tilpassede naturer eller funktionsmåder.

IJavaModel kan betragtes som overordnet for alle projekter i arbejdsområdet, som har Java-projektnatur (og derfor kan behandles som et IJavaProject).