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