Java-modell

Java-modellen är en uppsättning klasser som modellerar de objekt som är associerade till att skapa, redigera och bygga ett Java-program. Java-modellklasserna definieras i org.eclipse.jdt.core.  Dessa klasser implementerar Java-specifika beteenden för resurser och delar ytterligare upp Java-resurser i modellelement.

Java-element

Paketet org.eclipse.jdt.core definierar de klasser som modellerar de element som utgör ett Java-program. JDT använder en i minnet-objektmodell som betecknar strukturen för ett Java-program. Denna struktur härstammar från projektets classpath. Modellen är hierarkisk. Element i ett program kan delas upp ytterligare i underordnade element.

Manipulering av Java-element liknar manipulering av resursobjekt. När du arbetar med ett Java-element arbetar du egentligen med ett handtag till underliggande modellobjekt. Du måste använda protokollet exists() till att fastställa huruvida elementet verkligen finns i arbetsytan. 

Följande tabell summerar de olika typerna av Java-element.

Element Beskrivning
IJavaModel Betecknar rot-Java-elementet, motsvarande arbetsyta. Det överordnade objektet för alla projekt med Java-naturen. Det dig även åtkomst till projekten utan java-naturen.
IJavaProject Betecknar ett Java-projekt i arbetsytan. (Underordnat objekt för IJavaModel)
IPackageFragmentRoot Betecknar en uppsättning paketfragment och anpassar fragmenten till en underliggande resurs som antingen är en mapp, JAR- eller ZIP-fil. (Underordnat objekt för IJavaProject)
IPackageFragment Betecknar den del av arbetsytan som motsvarar ett helt paket, eller en del av paketet. (Underordnat objekt för IPackageFragmentRoot)
ICompilationUnit Betecknar en Java-källfil (.java). (Underordnat objekt för IPackageFragment)
IPackageDeclaration Betecknar en paketdeklaration i en kompileringsenhet. (Underordnat objekt för ICompilationUnit)
IImportContainer Betecknar samlingen av paketimportdeklarationer i en kompileringsenhet. (Underordnat objekt för ICompilationUnit)
IImportDeclaration Betecknar en enstaka paketimportdeklaration. (Underordnat objekt för IImportContainer)
IType Betecknar antingen källtyp i en kompileringsenhet eller en binär typ i en klassfil.
IField Betecknar ett fält i en typ. (Underordnat objekt för IType)
IMethod Betecknar en metod eller konstruktör i en typ. (Underordnat objekt för IType)
IInitializer Betecknar en statisk eller förekomstinitierare i en typ. (Underordnat objekt för IType)
IClassFile Betecknar en kompilerad (binär) typ.  (Underordnat objekt för IPackageFragment )
ITypeParameter Betecknar en typparameter.  (Inte underordnad något Java-element. Den hämtas med IType.getTypeParameter(String) eller IMethod.getTypeParameter(String))
ILocalVariable Betecknar en lokal variabel i en metod eller en initierare.  (Inte underordnad något Java-element. Den hämtas med ICodeAssist.codeSelect(int, int))

Alla Java-element stöder gränssnittet IJavaElement.

Vissa av elementen visas i paketvyn.  Dessa element implementerar gränssnittet IOpenable eftersom de måste öppnas innan det går att navigera i dem. Bilden ovan visar hur dessa element betecknas i paketvyn.

Paketvy som visar element som implementerar gränssnittet IOpenable

De Java-element som implementerar IOpenable skapas främst från information som hittas i de underliggande resursfilerna.  Samma element representeras generiskt i resursnavigeringsvyn.

Resursnavigator med element som implementerar gränssnittet IOpenable

Andra element motsvarande de objekt som utgör en Java-kompileringsenhet. Bilden nedan visar en Java-kompileringsenhet och en innehållsöversikt med källelementen i kompileringsenheten.

En redigerare och en innehållsöversikt som illustrerar förhållandet mellan motsvarande källelement

Dessa element implementerar gränssnittet ISourceReference eftersom de kan tillhandahålla motsvarande källkod. (Eftersom dessa element väljs i innehållsöversikten visas deras motsvarande källkod i Java-redigeraren).

Java-element och deras resurser

Många av Java-elementen motsvarar generiska resurser i arbetsytan.  När du vill skapa Java-element från en generisk resurs är klassen JavaCore den bästa startpunkten. Följande kodstycke visar hur du får Java-element från deras motsvarande resurser.

    
        private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        IJavaProject myJavaProject= JavaCore.create(myProject);
        if (myJavaProject == null)
            // the project is not configured for Java (has no Java nature)
            return;
            
        // get a package fragment or package fragment root
        IJavaElement myPackageFragment= JavaCore.create(myFolder);
        
        // get a .java (compilation unit), .class (class file), or
        // .jar (package fragment root)
        IJavaElement myJavaFile = JavaCore.create(myFile);
    }

När du har ett Java-element kan du använda JDT-APIt till att stega igenom och ställa frågor till modellen.  Du kan också ställa frågor till icke-Java-resurser i ett Java-element. 

                 private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        ...
        // get the non Java resources contained in my project.
        Object[] nonJavaChildren = myJavaProject.getNonJavaResources();
        ...
            

Java-projekt

När du skapar ett Java-projekt från ett enstaka projekt, kontrollerar JavaCore om projektet är konfigurerat med Java-naturen.  JDT-insticksprogrammet använder en projektnatur till att utforma ett projekt att ha Java-beteende.  Denna natur (org.eclipse.jdt.core.JavaCore#NATURE_ID ) tilldelas ett projekt när guiden "Nytt Java-projekt" skapar ett projekt.  Om Java-naturen inte konfigureras på ett projekt, returnerar JavaCore null när den uppmanas skapa projektet.

JavaCore används också till att underhålla Java-classpath, inklusive platser för källkod och bibliotek samt platser för generering av utgående binära filer (.class).

Vilka är de unika egenskaperna för Java-projekt? De registrerar deras classpath i en ".classpath"-fil och lägger till den inkrementella Java-projektbyggaren i projektets byggspecifikation.  I annat fall är de bara vanliga projekt och kan konfigureras med andra naturer (och andra inkrementella byggare) via insticksprogram. Insticksprogram som vill konfigurera projekt med Java-beteende vid sidan av deras eget beteende använder vanligen NewJavaProjectWizardPage till att tilldela Java-naturen till projektet förutom deras egna anpassade naturer eller beteenden.

IJavaModel kan anses vara överordnad alla projekt i arbetsytan som har Java-projektnaturen (och kan därför behandlas som ett IJavaProject).