Model Java to zestaw klas, które modelują obiekty powiązane z tworzeniem, edytowaniem i budowaniem programu Java. Klasy modelu Java są zdefiniowane w pakiecie org.eclipse.jdt.core. Te klasy implementują specyficzne zachowanie Java dla zasobów i głębiej dekomponują zasoby Java na elementy modelu.
Pakiet org.eclipse.jdt.core definiuje klasy modelujące elementy, z których składa się program Java. Środowisko JDT korzysta z modelu obiektów w pamięci, który reprezentuje strukturę programu Java. Ta struktura pochodzi ze ścieżki klasy projektu. Model jest hierarchiczny. Elementy programu mogą być dekomponowane na elementy potomne.
Manipulowanie elementami Java przypomina manipulowanie obiektami zasobów. Podczas pracy z elementem Java w rzeczywistości pracuje się z uchwytem do bazowego obiektu modelu. Aby określić, czy element jest rzeczywiście obecny w obszarze roboczym, należy użyć protokołu exists().
W poniższej tabeli znajduje się podsumowanie różnych typów elementów Java.
Element | Opis |
---|---|
IJavaModel | Reprezentuje główny element Java odpowiadający obszarowi roboczemu. Element nadrzędny wszystkich projektów natury Java. Umożliwia również dostęp do projektów niemających natury Java. |
IJavaProject | Reprezentuje projekt Java w obszarze roboczym. Element potomny interfejsu IJavaModel. |
IPackageFragmentRoot | Reprezentuje zestaw fragmentów pakietów i odwzorowuje te fragmenty na bazowy zasób, który jest folderem, plikiem JAR lub ZIP. Element potomny interfejsu IJavaProject. |
IPackageFragment | Reprezentuje fragment obszaru roboczego odpowiadający całemu pakietowi lub fragmentowi pakietu. Element potomny interfejsu IPackageFragmentRoot. |
ICompilationUnit | Reprezentuje plik źródłowy Java (.java). Element potomny interfejsu IPackageFragment. |
IPackageDeclaration | Reprezentuje deklarację pakietu w jednostce kompilacji. Element potomny interfejsu ICompilationUnit. |
IImportContainer | Reprezentuje kolekcję deklaracji importu pakietów w jednostce kompilacji. Element potomny interfejsu ICompilationUnit. |
IImportDeclaration | Reprezentuje pojedynczą deklarację importu pakietu. Element potomny interfejsu IImportContainer. |
IType | Reprezentuje typ źródłowy wewnątrz jednostki kompilacji lub typ binarny wewnątrz pliku CLASS. |
IField | Reprezentuje pole wewnątrz typu. Element potomny interfejsu IType. |
IMethod | Reprezentuje metodę lub konstruktor wewnątrz typu. Element potomny interfejsu IType. |
IInitializer | Reprezentuje inicjator static lub inicjator instancji wewnątrz typu. Element potomny interfejsu IType. |
IClassFile | Reprezentuje skompilowany (binarny) typ. Element potomny interfejsu IPackageFragment. |
Wszystkie elementy Java obsługują interfejs IJavaElement.
Niektóre elementy są widoczne w widoku Pakiety. Te elementy implementują interfejs IOpenable , ponieważ muszą one zostać otwarte, zanim można będzie nawigować między nimi. Poniższy rysunek pokazuje sposób wyświetlania tych elementów w widoku Pakiety.
Elementy Java, które implementują interfejs IOpenable, są tworzone głównie na podstawie informacji znajdujących się w bazowych plikach zasobów. Te same elementy są reprezentowane w widoku nawigatora zasobów.
Inne elementy odpowiadają elementom tworzącym jednostkę kompilacji Java. Na poniższym rysunku prezentowana jest jednostka kompilacji Java i schemat treści, który zawiera elementy źródłowe w jednostce kompilacji.
Te elementy implementują interfejs ISourceReference, ponieważ mogą one dostarczać odpowiedni kod źródłowy. Gdy elementy te są wybrane w schemacie treści, odpowiadający im kod źródłowy jest pokazywany w edytorze Java.
Wiele elementów Java odpowiada ogólnym zasobom w obszarze roboczym. Klasa JavaCore jest najlepszym punktem startowym tworzenie nowych elementów Java na podstawie zasobu ogólnego. Poniższy fragment kodu ilustruje sposób pobierania elementów Java z odpowiadających im zasobów.
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { IJavaProject myJavaProject= JavaCore.create(myProject); if (myJavaProject == null) // projekt nie został skonfigurowany dla języka Java (nie ma natury Java) return; // pobierz fragment pakietu lub element główny fragmentu pakietu IJavaElement myPackageFragment= JavaCore.create(myFolder); // pobranie pliku .java (jednostka kompilacji), .class (plik klasy) // lub .jar (element główny fragmentu pakietu) IJavaElement myJavaFile = JavaCore.create(myFile); }
Po pobraniu elementu Java można za pomocą interfejsu API środowiska JDT nawigować po modelu i tworzyć zapytania dotyczące tego modelu. Można również tworzyć zapytania dotyczące zasobów innych niż Java zawartych w elemencie Java.
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { ... // pobranie zasobów innych niż Java znajdujących się w projekcie Object[] nonJavaChildren = myJavaProject.getNonJavaResources(); ...
Podczas tworzenia projektu Java na podstawie prostego projektu klasa JavaCore sprawdza, czy projekt ma skonfigurowaną naturę Java. Moduł dodatkowy JDT używa natury do oznaczania projektu jako projektu Java. Ta natura (org.eclipse.jdt.core.JavaCore#NATURE_ID) jest przypisywana projektowi podczas jego tworzenia za pomocą kreatora Nowy projekt Java. Jeśli dla projektu nie została skonfigurowana natura Java, klasa JavaCore zwróci wartość NULL w odpowiedzi na żądanie utworzenia projektu.
Klasa JavaCore jest również używana do obsługi ścieżki klasy Java, w tym miejsc zawierających kod źródłowy i biblioteki oraz miejsc, w których umieszczane są wyjściowe pliki binarne (.class).
Jakie są unikalne parametry projektów Java? Zapisują one swoją ścieżkę klasy w pliku .classpath i dodają przyrostowy program budujący projekt Java do specyfikacji budowania projektu. Poza tym są one po prostu normalnymi projektami i mogą być konfigurowane z innymi naturami (i innymi przyrostowymi programami budującymi) przez moduły dodatkowe. Moduły dodatkowe, które oprócz własnych funkcji mają konfigurować w projektach zachowania specyficzne dla języka Java zwykle korzystają z klasy NewJavaProjectWizardPage do przypisania projektowi natury Java jako dodatku do ich własnych niestandardowych natur i zachowań.
Interfejs IJavaModel może być uważany za element nadrzędny wszystkich projektów, które mają naturę Java (i mogą być traktowane jako implementacje interfejsu IJavaProject).