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