Il modello Java è l'insieme delle classi che modellano gli oggetti associati alla creazione, alla modifica e alla generazione di un programma Java. Le classi di modello Java sono definite in org.eclipse.jdt.core. Tali classi implementano funzionalità specifiche Java per le risorse e scompongono ulteriormente le risorse Java in elementi di modello.
Il pacchetto org.eclipse.jdt.core definisce le classi che modellano gli elementi che compongono un programma Java. JDT utilizza un modello di oggetto in memoria per rappresentare la struttura di un programma Java. Questa struttura deriva dal percorso classi del progetto. Il modello è gerarchico. Gli elementi di un programma possono essere decomposti in elementi secondari.
La gestione degli elementi Java è simile alla gestione degli oggetti risorse. Quando si utilizza un elemento Java, in realtà si gestisce un handle di alcuni oggetti di modelli sottostanti. Per determinare se l'elemento è effettivamente presente nello spazio di lavoro è necessario utilizzare il protocollo exists().
La tabella seguente riepiloga i diversi tipi di elementi Java.
Elemento | Descrizione |
---|---|
IJavaModel | Rappresenta l'elemento Java principale, corrispondente allo spazio di lavoro. È la base di tutti i progetti di natura Java. Fornisce inoltre l'accesso ai progetti che non presentano la natura java. |
IJavaProject | Rappresenta un progetto Java nello spazio di lavoro. (Elemento secondario di IJavaModel ) |
IPackageFragmentRoot | Rappresenta un insieme di frammenti di pacchetto e associa i frammenti a una risorsa sottostante che corrisponde a una cartella, un file JAR o un file ZIP. (Elemento secondario di IJavaProject ) |
IPackageFragment | Rappresenta la porzione dello spazio di lavoro che corrisponde ad un intero pacchetto, oppure una porzione del pacchetto. (Elemento secondario di IPackageFragmentRoot ) |
ICompilationUnit | Rappresenta un file di origine Java (.java). (Elemento secondario di IPackageFragment ) |
IPackageDeclaration | Rappresenta una dichiarazione di pacchetto in un'unità di compilazione. (Elemento secondario di ICompilationUnit ) |
IImportContainer | Rappresenta l'insieme delle dichiarazioni di importazione del pacchetto in un'unità di compilazione. (Elemento secondario di ICompilationUnit ) |
IImportDeclaration | Rappresenta una singola dichiarazione di importazione del pacchetto. (Elemento secondario di IImportContainer ) |
IType | Rappresenta un tipo di origine all'interno di un'unità di compilazione oppure un tipo binario all'interno di un file di classe. |
IField | Rappresenta un campo all'interno di un tipo. (Elemento secondario di IType ) |
IMethod | Rappresenta un metodo o un costruttore all'interno di un tipo. (Elemento secondario di IType ) |
IInitializer | Rappresenta un inizializzatore statico o di istanza all'interno di un tipo. (Elemento secondario di IType ) |
IClassFile | Rappresenta un tipo compilato (binario). (Elemento secondario di IPackageFragment) |
Tutti gli elementi Java supportano l'interfaccia IJavaElement.
Alcuni degli elementi vengono mostrati nella vista Pacchetti. Tali elementi implementano l'interfaccia IOpenable poiché devono essere aperti prima di poterli esplorare. La figura seguente mostra il modo in cui tali elementi vengono rappresentati nella vista Pacchetti.
Gli elementi Java che implementano IOpenable sono creati principalmente in base alle informazioni contenute nei file di risorse sottostanti. Gli stessi elementi sono rappresentati genericamente nella vista di selezione risorse.
Altri elementi corrispondono alle voci che formano un'unità di compilazione Java. La figura seguente mostra un'unità di compilazione e una funzione di struttura del contenuto che visualizza gli elementi di origine nell'unità di compilazione.
Questi elementi implementano l'interfaccia ISourceReference poiché possono fornire un codice di origine corrispondente. Quando questi elementi vengono selezionati nella funzione di struttura del contenuto, il rispettivo codice di origine corrispondente viene visualizzato nell'editor Java.
Molti degli elementi Java corrispondono a risorse generiche nello spazio di lavoro. Quando si desidera creare elementi Java da una risorsa generica, la classe JavaCore è il punto di partenza ideale. Il seguente frammento di codice mostra come ottenere elementi Java dalle risorse corrispondenti.
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); }
Dato un elemento Java, è possibile utilizzare l'API JDT per attraversare e interrogare il modello. È possibile inoltre interrogare le risorse non Java contenute in un elemento Java.
private void createJavaElementsFrom(IProject myProject, IFolder myFolder, IFile myFile) { ... // get the non Java resources contained in my project. Object[] nonJavaChildren = myJavaProject.getNonJavaResources(); ...
Quando si crea un progetto Java da un progetto semplice, JavaCore verificherà che il progetto sia configurato per Java. Il plugin JDT utilizza la natura del progetto per designare un progetto con un comportamento Java. Questa natura (org.eclipse.jdt.core.JavaCore#NATURE_ID) è assegnata ad un progetto quando la procedura guidata "Nuovo progetto Java" crea un progetto. Se nel progetto non è configurata la natura Java, JavaCore restituisce un valore nullo quando riceve la richiesta di creazione del progetto.
JavaCore è anche utilizzato per conservare il percorso classi Java, inclusi i percorsi per localizzare il codice di origine e le librerie, nonché i percorsi per la generazione di file binari di output (.class).
Quali sono le caratteristiche uniche dei progetti Java? I progetti Java registrano il rispettivo percorso classi in un file ".classpath" e aggiungono il programma di generazione incrementale di progetto Java nella specifica di generazione del progetto. Diversamente, rappresentano solo progetti regolari e possono essere configurati con altre nature (e altri programmi di generazione incrementali) attraverso plugin. I plugin che configurano progetti con funzionalità Java in aggiunta alla propria funzionalità utilizzano generalmente NewJavaProjectWizardPage per assegnare la natura Java al progetto in aggiunta alle proprie specifiche nature o funzionalità.
IJavaModel può essere considerato l'elemento principale di tutti i progetti dello spazio di lavoro che presentano una natura di progetto Java (e quindi possono essere trattati come IJavaProject).