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.
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.
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.
Andre elementer tilsvarerer elementer som utgjør en Java-kompileringsenhet. Figuren nedenfor viser en Java-kompileringsenhet og en innholdsdisposisjon som viser kildeelementene i kompileringsenheten.
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.)
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();
...
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).