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.
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.
De Java-element som implementerar IOpenable skapas främst från information som hittas i de underliggande resursfilerna. Samma element representeras generiskt i resursnavigeringsvyn.
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.
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).
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(); ...
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).