Il modello Java è l'insieme delle classi che modellano gli oggetti associati alla creazione, alla modifica e alla build di un programma Java. Le classi di modello Java sono definite nei pacchetti 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. Questo modello è gerarchico. Gli elementi di un programma possono essere decomposti in elementi secondari.
Gli elementi Java assomigliano molto agli 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 nell'area di lavoro è necessario utilizzare il protocollo exists().
La tabella seguente riepiloga i diversi tipi di elementi Java.
Elemento |
Descrizione |
---|---|
Rappresenta l'elemento Java radice, corrispondente all'area di lavoro. La base di tutti i progetti Java. |
|
Rappresenta un progetto Java nell'area di lavoro. Costituisce un elemento secondario di IJavaModel. |
|
Rappresenta una serie di frammenti di pacchetto e associa i frammenti a una risorsa sottostante che corrisponde a una cartella, un file JAR o un file ZIP. Costituisce un elemento secondario di IJavaProject. |
|
Rappresenta la porzione dell'area di lavoro che corrisponde ad un intero pacchetto, oppure una porzione del pacchetto. Costituisce un elemento secondario di IPackageFragmentRoot. |
|
Rappresenta un file di origine Java (.java). |
|
Rappresenta una dichiarazione di pacchetto in un'unità di compilazione. Costituisce un elemento secondario di ICompilationUnit. |
|
Rappresenta l'insieme delle dichiarazioni di importazione del pacchetto in un'unità di compilazione. Costituisce un elemento secondario di ICompilationUnit. |
|
Rappresenta una singola dichiarazione di importazione del pacchetto. Costituisce un elemento secondario di IImportContainer. |
|
Rappresenta un tipo di origine all'interno di un'unità di compilazione oppure un tipo binario all'interno di un file di classe. |
|
Rappresenta un campo all'interno di un tipo. Costituisce un elemento secondario di IType. |
|
Rappresenta un metodo o un costruttore all'interno di un tipo. Costituisce un elemento secondario di IType. |
|
Rappresenta un inizializzatore statico o di istanza all'interno di un tipo. Costituisce un elemento secondario di IType. |
|
Rappresenta un tipo compilato (binario). Costituisce un elemento secondario di IPackageFragment. |
Tutti gli elementi Java supportano l'interfaccia IJavaElement.
Alcuni degli elementi vengono mostrati nella visualizzazione 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 visualizzazione 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 visualizzazione navigator delle risorse.
Altri elementi corrispondono alle voci che formano un'unità di compilazione Java (file .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é presentano un codice sorgente corrispondente. Quando questi elementi vengono selezionati nella funzione di struttura del contenuto, il rispettivo codice sorgente corrispondente viene visualizzato nell'editor Java.
Molti degli elementi Java corrispondono a risorse generiche nell'area di lavoro. La classe JavaCore è il posto in cui iniziare quando si desidera creare elementi Java da una risorsa generica. 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)
// il progetto non è configurato per
Java (non ha una natura Java)
return;
// richiamare un frammento di pacchetto o una radice del frammento di pacchetto
IJavaElement myPackageFragment = JavaCore.create(myFolder);
// richiamare un file .java (unità di compilazione), .class (file di classe) oppure
// .jar (radice del frammento di pacchetto)
IJavaElement myJavaFile = JavaCore.create(myFile);
}
JavaCore è anche utilizzato per conservare il percorso classi Java, incluse le posizioni per localizzare il codice sorgente e le librerie, nonché le posizioni per la creazione di file binari di output (.class).
Quando si crea un progetto Java da un progetto base, JavaCore verifica se il progetto è configurato con la natura Java. Il plug-in JDT utilizza una natura di progetto per attribuire allo stesso progetto una funzionalità Java. Tale natura (org.eclipse.jdt.core.javanature) viene assegnata al progetto quando la creazione guidata "Nuovo progetto Java" crea un progetto. Se la natura Java non è configurata su un progetto, JavaCore restituisce un valore nullo quando riceve la richiesta di creazione del progetto.
La differenza con un progetto Java consiste nel fatto che i progetti Java registrano il rispettivo percorso classi in un file ".classpath" e aggiungono il generatore incrementale di progetto Java nella specifica di build del progetto. Diversamente, rappresentano solo progetti regolari e possono essere configurati con altre nature (e altri generatori incrementali) attraverso plug-in. I plug-in che configurano progetti con funzionalità Java in aggiunta alla propria funzionalità, utilizzano generalmente la pagina della creazione guidata "Nuovo progetto java" 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 nell'area di lavoro che presentano una natura di progetto Java (e quindi possono essere trattati come IJavaProject).