El conector puede utilizar la API de JDT para crear clases o interfaces, añadir métodos a tipos existentes o modificar los métodos de los tipos.
La forma más fácil de modificar objetos de Java es utilizar la API de elementos (element) de Java. Para trabajar con el código fuente sin procesar de un elemento de Java pueden utilizarse procedimientos más generales.
La forma más fácil de generar desde programa una unidad de compilación es utilizando IPackageFragment.createCompilationUnit. Debe especificarse el nombre y el contenido de la unidad de compilación. Se creará la unidad de compilación en el paquete y se devolverá la unidad de compilación ICompilationUnit nueva.
Una unidad de compilación puede crearse de forma genérica creando un recurso de archivo con extensión ".java" en la carpeta apropiada que le corresponda al directorio del paquete. La utilización de las API de recursos genéricas ocurre "a espaldas" de las herramientas de Java, por lo que el modelo de Java no se actualiza hasta que se notifica a los escuchas genéricos de cambios en los recursos y los escuchas de JDT actualizan el modelo de Java con la unidad de compilación nueva.
Las modificaciones más sencillas del código fuente de Java pueden llevarse a cabo utilizando la API de elementos de Java.
Por ejemplo, desde una unidad de compilación puede consultarse un tipo. Después de obtener el tipo IType, pueden utilizarse protocolos como createField, createInitializer, createMethod o createType para añadir al tipo miembros de código fuente. En estos métodos se proporciona el código fuente e información sobre la ubicación de los miembros.
La interfaz ISourceManipulation define las manipulaciones del código fuente más habituales para los elementos de Java. Entre otros se incluyen métodos para cambiar el nombre de un miembro del tipo, moverlo, copiarlo o eliminarlo.
Algunas modificaciones del código fuente no son posibles mediante la API de elementos de Java. Un procedimiento más general de editar el código fuente (como, por ejemplo, cambiar el código fuente de elementos existentes) consiste en utilizar el código fuente sin procesar de la unidad de compilación y la DOM de Java.
Estos procedimientos son:
// Obtener el fuente para una unidad de compilación
String contents = myCompilationUnit.getBuffer().getContents();
// Crear un JDOM editable
myJDOM = new DOMFactory();
myDOMCompilationUnit = myJDOM.createCompilationUnit(contents, "MyClass");
// Recorrer y editar la estructura de la unidad de compilación utilizando
// el protocolo de nodo de JDOM.
...
// Después de haber realizado las modificaciones en todos los nodos
// devolver el fuente del nodo DOM de la unidad de compilación.
String newContents = myDOMCompilationUnit.getContents();
// Devolver este código al elemento de la unidad de compilación
myCompilationUnit.getBuffer().setContents(newContents);
// Guardar el almacenamiento intermedio en el archivo.
myCompilationUnit.save();
Este procedimiento puede dar lugar a que algunos marcadores de problemas se asocien con números de línea incorrectos, porque los elementos de Java no se han actualizado directamente.
El modelo de elementos de Java no es mejor que los métodos y los campos. El árbol de sintaxis abstracta (AST) utilizado por el compilador no está disponible como API, de modo que los procedimientos utilizados por JDT para analizar el código fuente en estructuras programadas no están disponibles actualmente en forma de API.
Si un conector tiene que saber que ha ocurrido un cambio en un elemento de Java después de producirse, con JavaCore puede registrarse un escucha IElementChangedListener de Java.
JavaCore.addElementChangedListener(new MyJavaElementChangeReporter());.
Los escuchas de cambios en los elementos de Java se parecen conceptualmente a los escuchas de cambios en los recursos (que se describen en el apartado rastrear los cambios en los recursos). El fragmento de código siguiente implementa un informador de cambios en los elementos de Java que imprime los deltas del elemento en la consola del 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);
}
}
)
El delta IJavaElementDelta incluye el elemento que ha cambiado y distintivos que describen el tipo de cambio producido.