Il plug-in dell'utente può utilizzare l'API JDT per creare classi o interfacce, aggiungere metodi a tipi esistenti o modificare il metodo per i tipi.
Il modo più semplice per modificare oggetti Java consiste nell'utilizzo dell'API di elemento Java. Altre tecniche generiche possono essere utilizzate per gestire il codice sorgente primitivo di un elemento Java.
Il modo più semplice per creare in modo programmatico un'unità di compilazione consiste nell'utilizzo di IPackageFragment.createCompilationUnit. L'utente specifica il nome e il contenuto dell'unità di compilazione. L'unità verrà creata all'interno del pacchetto e verrà restituito la nuova ICompilationUnit.
Un'unità di compilazione può essere creata genericamente mediante la creazione di una risorsa file con estensione ".java" nella cartella appropriata corrispondente alla directory del pacchetto. L'utilizzo di API di risorse generiche si colloca "alle spalle" della strumentazione Java, in modo che il modello Java non verrà aggiornato fino a quando i listener di modifica delle risorse generiche non ricevono la notifica e i listener JDT non aggiornano il modello Java con la nuova unità di compilazione.
Le modifiche più semplici al codice sorgente Java possono essere apportate utilizzando l'API di elemento Java.
Ad esempio, è possibile eseguire la query di un tipo da un'unità di compilazione. Una volta ottenuto l'IType, è possibile utilizzare un protocollo come createField, createInitializer, createMethod o createType per aggiungere membri di codice sorgente al tipo. Il codice sorgente e le informazioni relative alla posizione del membro vengono forniti in questi metodi.
L'interfaccia ISourceManipulation definisce modifiche comuni del codice sorgente per elementi java. Sono compresi metodi per la ridenominazione, lo spostamento, la copia o la cancellazione del membro di un tipo.
Alcune modifiche del codice sorgente non sono fornite attraverso l'API di elemento Java. Un modo più generico per modificare il codice sorgente (ad esempio modificando il codice sorgente di elementi esistenti) consiste nell'utilizzo del codice sorgente primitivo dell'unità di compilazione e del DOM Java.
Tali tecniche comprendono quanto segue:
// ottenere il codice sorgente per un'unità di compilazione
String contents = myCompilationUnit.getBuffer().getContents();
// Creare un JDOM modificabile
myJDOM = new DOMFactory();
myDOMCompilationUnit = myJDOM.createCompilationUnit(contents, "MyClass");
// Esplorare e modificare la struttura dell'unità di compilazione utilizzando
// il protocollo dei nodi JDOM.
...
// Una volta apportate le modifiche a tutti i nodi
// richiamare il codice sorgente dal nodo DOM dell'unità di compilazione.
String newContents = myDOMCompilationUnit.getContents();
// Impostare nuovamente questo codice nell'elemento unità di compilazione
myCompilationUnit.getBuffer().setContents(newContents);
// Salvare il buffer in un file.
myCompilationUnit.save();
Questa tecnica potrebbe determinare l'associazione di indicatori di problemi a numeri di riga non corretti dato che gli elementi Java non sono stati aggiornati direttamente.
Il modello di elemento Java non differisce troppo dai metodi e dai campi. La struttura di sintassi astratta (AST) utilizzata dal compilatore non è disponibile come API, quindi le tecniche utilizzate da JDT per esaminare il codice in strutture programmatiche non sono correntemente disponibili come API.
Se il plug-in dell'utente deve essere a conoscenza delle modifiche apportate a elementi Java, è possibile registrare un IElementChangedListener Java con JavaCore.
JavaCore.addElementChangedListener(new MyJavaElementChangeReporter());.
I listener di modifiche degli elementi Java assomigliano concettualmente ai listener di modifiche delle risorse (descritti nella sezione relativa alla traccia delle modifiche delle risorse). Il frammento di codice seguente implementa un reporter di modifiche degli elementi Java che stampa i delta dell'elemento nella console di sistema.
public class MyJavaElementChangeReporter implements IElementChangedListener {
public void elementChanged(ElementChangedEvent event) {
IJavaElementDelta delta= event.getDelta();
if (delta != null) {
System.out.println("delta received: ");
System.out.print(delta);
}
}
)
IJavaElementDelta include l'elemento che è stato modificato e i contrassegni che descrivono il tipo di modifica effettuata.