Java Model

Java Model je sada tříd, které modelují objekty spojené s vytvářením, editací a sestavováním programu Java. Třídy modelu java jsou definovány v org.eclipse.jdt.core.  Tyto třídy implementují chování prostředků specifické pro platformu Java a dále rozčleňují prostředky Java na prvky modelu.

Prvky Java

Balíček org.eclipse.jdt.core definuje třídy, jež modelují prvky, ze kterých se skládá program Java. Nástroje JDT k reprezentaci struktury programu Java používají paměťový model objektu. Tato struktura se odvozuje z cesty ke třídě projektu. Model je hierarchický. Prvky programu lze rozkládat na podřízené prvky.

Manipulace s prvky Java je obdobná manipulaci s objekty prostředků.  Pracujete-li s prvkem Java, máte v rukou ve skutečnosti popisovač určitého základního objektu modelu.  Musíte pomocí protokolu exists() určit, zda je prvek skutečně přítomen v pracovním prostoru. 

Následující tabulka uvádí souhrn různých typů prvků Java.

Prvek Popis
IJavaModel Představuje kořenový prvek Java, který odpovídá pracovnímu prostoru. Nadřazený prvek všech projektů povahy Java. Rovněž poskytuje přístup k projektům, jež nemají povahu Java.
IJavaProject Představuje projekt Java v pracovním prostoru. (Podřízený prvek prvku IJavaModel)
IPackageFragmentRoot Představuje sadu fragmentů balíčku a mapuje fragmenty na základní prostředky, tj. na složku, soubor JAR nebo na soubor ZIP. (Podřízený prvek prvku IJavaProject)
IPackageFragment Představuje část pracovního prostoru, která odpovídá celému balíčku nebo části balíčku. (Podřízený prvek prvku IPackageFragmentRoot)
ICompilationUnit Představuje zdrojový soubor Java (.java). (Podřízený prvek prvku IPackageFragment)
IPackageDeclaration Představuje deklaraci balíčku v kompilační jednotce. (Podřízený prvek prvku ICompilationUnit)
IImportContainer Představuje kolekci deklarací importu balíčku v kompilační jednotce. (Podřízený prvek prvku ICompilationUnit)
IImportDeclaration Představuje deklaraci importu samostatného balíčku. (Podřízený prvek prvku IImportContainer)
IType Představuje typ zdroje uvnitř kompilační jednotky nebo binární typ uvnitř souboru třídy.
IField Představuje pole uvnitř typu. (Podřízený prvek prvku IType)
IMethod Představuje metodu nebo konstruktor uvnitř typu. (Podřízený prvek prvku IType)
IInitializer Představuje statický inicializátor nebo inicializátor instance uvnitř typu. (Podřízený prvek prvku IType)
IClassFile Představuje kompilovaný (binární) typ.  (Podřízený prvek prvku IPackageFragment)

Všechny prvky Java podporují rozhraní IJavaElement.

Některé z prvků se zobrazují v pohledu Balíčky.  Tyto prvky implementují rozhraní IOpenable , protože musejí být otevírány dříve, než je lze vyhledat. Následující obrázek uvádí způsob zobrazení těchto prvků v pohledu Balíčky.

Pohled Balíčky zobrazující prvky implementující rozhraní IOpenable

Prvky Java implementující IOpenable se vytvářejí především z informace nalezené v souborech základního prostředku.  Tytéž prvky se zobrazují běžným způsobem v pohledu Navigátor prostředků.

Navigátor prostředků zobrazující prvky implementující rozhraní IOpentable

Ostatní prvky odpovídají položkám, ze kterých se skládá kompilační jednotka. Následující obrázek znázorňuje kompilační jednotku Java a prohlížeč osnovy obsahu, který zobrazuje zdrojové prvky v kompilační jednotce.

Editor a prohlížeč osnovy obsahu zobrazují vzájemné vztahy příslušných zdrojových prvků

Tyto prvky implementují rozhraní ISourceReference, a proto mohou poskytovat příslušný zdrojový kód. (Po volbě těchto prvků v prohlížeči osnovy obsahu se příslušný zdrojový kód zobrazuje v editoru Java).

Prvky Java a jejich prostředky

Řada prvků Java odpovídá obecným prostředkům pracovního prostoru.  Chcete-li vytvářet prvky Java z obecného prostředku, doporučujeme začít použitím třídy JavaCore. Následující úsek kódu znázorňuje způsob získání prvků Java s příslušných prostředků.

    
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        IJavaProject myJavaProject= JavaCore.create(myProject);
        if (myJavaProject == null)
            // projekt není konfigurován pro Javu (nejde o javovský projekt)
            return;
            
        // získat fragment balíčku nebo kořen fragmentu
        IJavaElement myPackageFragment= JavaCore.create(myFolder);
        
        // získat .java (kompilační jednotka), .class (soubor třídy) nebo
        // .jar (kořen fragmentu balíčku)
        IJavaElement myJavaFile = JavaCore.create(myFile);
    }

Po získání prvku Java můžete k procházení modelem a jeho dotazování použít rozhraní API JDT.  Rovněž můžete provádět dotazy na nejavovské prostředky kombinované s prvkem Java. 

         private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) {
        ...
        // získat nejavovské prostředky obsažené v projektu.
        Object[] nonJavaChildren = myJavaProject.getNonJavaResources();
        ...
            

Projekty Java

Vytvoříte-li projekt Java z jednoduchého projektu, JavaCore ověří, zda je projekt konfigurován jako javovský.  Modul plug-in JDT používá povahu projektu k určení, zda projekt sdílí chování prostředí Java.  Tato povaha (org.eclipse.jdt.core.JavaCore#NATURE_ID ) se přiřazuje projektu při vytvoření projektu průvodcem "Nový projekt Java".  Není-li pro projekt nastavena povaha Java, JavaCore na výzvu k vytvoření projektu vrací nulový objekt.

JavaCore se používá rovněž k údržbě cesty ke třídě Java včetně umístění k prohledávání zdrojového kódu a knihoven a včetně umístění pro generování výstupních binárních souborů (.class).

V čem spočívají jedinečné vlastnosti projektů Java? Ukládají svou cestu ke třídě do souboru ".classpath" a přidávají do specifikací sestavení projektu přírůstkového tvůrce projektů Java.  Jinak jde o skutečné projekty, jež lze konfigurovat s ostatními typy (a ostatními přírůstkovými tvůrci) prostřednictvím modulů plug-in. Moduly plug-in, které konfigurují projekty s chováním Java, a doplňují tak jejich vlastní chování, v běžném případě používají NewJavaProjectWizardPage k přiřazení povahy Java projektu, tj. k doplnění uživatelských povah či chování projektu.

IJavaModel lze považovat za prvek nadřazený všem projektům v pracovním prostoru, jež mají povahu Java (a s nimi proto manipulovat jako s objektem IJavaProject).