El caso es que tenía la necesidad de crear un simple plugin para eclipse de forma que al pulsar con el botón derecho sobre el código se incluyera en el menú emergente una entrada que al ser pulsada insertara código en el punto donde hemos hecho click. Encontré documentación y ejemplos, pero ninguno valía pues creo que todos eran aplicables a versiones de eclipse inferiores a la 3.6 (no estoy muy seguro del límite) el caso es que al final lo conseguí (tras muuucas pruebas) y la verdad es que sabiendolo hacer no era dificil.
El caso, me salto tan solo bosquejo los pasos normales para la creación de un plugin de menú emergente pues están documentados en varios sitios. Me centraré en los puntos donde veo mayor dificultar. Al lío.
- Crear proyecto de plugin de eclipse.
- Usar el asistentes para la creación del plugin cogiendo la opción de plugin de menú emergente.
- Al terminar de ejecutar el asistente se abrirá automáticamente el fichero plugin.xml pero el título mostrado en la pestaña del editor será el nombre que hayamos puesto al plugin.
- Dentro del editor, seleccionar la pestaña inferior plugin.xml.
- Sustituir la línea:
por
objectClass="org.eclipse.ui.IEditorInput"
nameFilter="*.java"
- Esto hará que nuestro plugin se muestre como submenú dentro del menu emergente al pulsar sobre un editor de un fichero java.
- Cada entrada dentro del submenú será un bloque action dentro del fichero plugin.xml, por lo que deberemos completar dicho fichero según nuestras necesidades. Podremos hacerlos a capón, de forma más bonita desde la pestaña inferior Extensions del mismo editor del fichero plugin.xml
- Dentro de cada bloque action encontramos el campo: id="prueba.newAction" que se pasará como parámetro al método run de la clase accion del plugin.
- Abrir el fichero NewAction.java dentro del package prueba.popup.action. Estos son los nombres que yo he usado para este tutorial. En cualquier caso será el fichero dentro del package action.
- Actualizar el método run(IAction) con el siguiente código:
try {
//Obtención del editor
IEditorPart editorPart = Activator.getDefault().getWorkbench()
.getActiveWorkbenchWindow().getActivePage()
.getActiveEditor();
//Obtención del proveedor de datos del editor
TextFileDocumentProvider textFileDocumentProvider = new TextFileDocumentProvider();
textFileDocumentProvider.connect(editorPart.getEditorInput());
//Obtención del documento asociado
IDocument doc = textFileDocumentProvider.getDocument(editorPart.getEditorInput());
//Posición del cursor
ITextSelection textSelection = (ITextSelection) editorPart
.getSite().getSelectionProvider().getSelection();
int offset = textSelection.getOffset();
//Obtener la instrucción que necesitamos en función de la opción seleccionada.
String texto=obtenerIntrucciones(action.getId());
//Inserción de texto
doc.replace(offset, 0, texto+"\n");
//Desconexión del proveedor de datos
textFileDocumentProvider.disconnect(editorPart.getEditorInput());
} catch (CoreException e) {
e.printStackTrace();
} catch (BadLocationException e) {
e.printStackTrace();
}
}
- A vosotros os dejo el estudio del código, que bien comentado está.
- La línea marcada en amarillo es la que obtiene el texto a usar a partir de una llamada a otro método que es:
* Devuelve el trozo de código asociado al indentificador que se le indica.
* @param Identificador del trozo de código fuente que queremos.
* @return Código fuente asociado al identificador.
*/
private String obtenerIntrucciones(String id) {
int posIni=15;
String cod=id.substring(posIni,id.length());
return (String) identificador.get(cod);
}
- Este método lo que hará será usar el identificador que le pasamos (en realidad un trozo de él, a partir del carácter 15 que es la posición que a mi me interesaba) para buscar el texto a devolver dentro de un hashmap que previamente hemos declarado.
- Declararemos este hashmap al principio de la clase (marcado en amarillo):
private Shell shell;
private HashMap identificador = new HashMap();
private String texto="";
....
- Añadimos en el constructor la carga de datos en el hasmap:
* Constructor for Action1.
*/
public NewAction() {
super();
//Primer texto
texto="Texto 1 a insertar";
identificador.put("identificador1",texto);
//Texto 2
texto="Texto 2 a insertar";
identificador.put("identificador2", texto);
}
- El primer valor que se mete en el hashmap ha de corresponderse con el final de cada uno de los identificadores que hayamos usado en cada bloque action del plugin.xml. El segundo valor será el texto que insertaremos.
- Probamos y ampliamos debidamente nuestro plugin y cuando estemos ya contentos con el resultado exportamos el proyecto seleccionando la opción export->Plugin development->Deployable plugin and fragments.
- Para instalar el plugin, el jar obtenido hemos de ponerlo dentro del fichero plugin de la instalación de eclipse y reiniciar el ecplise.
Espero sea útil.
=:)
No hay comentarios:
Publicar un comentario