El conector del núcleo de las herramientas de desarrollo Java (JDT) proporciona una API que le permite crear, suprimir y modificar programáticamente los elementos Java. En el tema que explica cómo manipular el código Java hallará una introducción a la API proporcionada por el núcleo de las herramientas de desarrollo Java (JDT).
Un importante concepto del modelo Java es la utilización de una copia en memoria de una unidad de compilación, llamada "copia de trabajo" (IWorkingCopy). La utilización de una copia de trabajo le permite cambiar programáticamente una unidad de compilación antes de comprometer los cambios en el recurso subyacente.
En la interfaz de usuario Java, entra en juego un concepto paralelo que consiste en permitir al usuario editar extensamente un recurso antes de comprometer la copia de trabajo en el sistema de archivos. Mediante una copia, la implementación de la UI puede permitir al usuario ya sea guardar el contenido del editor Java en disco o bien revertirlo a su contenido original.
La interfaz IWorkingCopyManager gestiona las copias de trabajo de las unidades de compilación Java utilizadas dentro de un editor. Cuando desea modificar una unidad de compilación en un editor, debe obtener una copia de trabajo conectando el elemento de entrada del editor con el gestor de las copias de trabajo. Las operaciones de edición se realizan en la copia de trabajo.
A continuación figura un fragmento de código que indica la utilización de un gestor de copias de trabajo con un editor de unidades de compilación:
void modifyCompilationUnit(ICompilationUnit cunit) throws PartInitException, CoreException { IEditorPart editor= JavaUI.openInEditor(cunit); IEditorInput input= editor.getEditorInput(); IWorkingCopyManager manager= JavaUI.getWorkingCopyManager(); manager.connect(input); try { ICompilationUnit workingCopy= manager.getWorkingCopy(input); // hacer las modificaciones en workingCopy con la API del núcleo de JDT habitual. } finally { manager.disconnect(input); } // conservar el editor desechable o utilizar editor.doSave(IProgressMonitor monitor) // para guardar los cambios programáticamente. }