Google Analytics

martes, 24 de enero de 2012

Porque no se cancelan las operaciones en Eclipse

Ya llevamos muchos días del nuevo año y no he escrito nada en el blog, pero hoy el amigo @kinisoftware ha escrito un tweet que me ha dado la clave para escribir un artículo breve, pero curioso. Muchas gracias amigo, has venido al rescate en el momento justo :-D
¿Por qué tendrá Eclipse un botón "Cancelar" en las ventajas de acciones en ejecución que si lo pulsas te ignora? Quítalo directamente xD by @kinisoftware
Cuando leí este tweet no tuve más remedio que reírme por la razón que tiene Kini, pero también me vino a la cabeza aquellos tiempos en los que estuve trabajando en un plugin para Eclipse, que tampoco fue en la era del Jurásico, debió ser allá por la versión 3.5 de Eclipse. Mientras leía el libro que teníamos de referencia y me peleaba con el código, llegué a una interfaz llamada IProgressMonitor, ahora verás para que sirve esta interfaz tan curiosa.

La biblia del desarrollo de plugins para Eclipse
IProgressMonitor es la interfaz que deben implementar las actividades para poder aparecer en la pestaña esa tan molona que tiene el Eclipse, sí esa en la que aparece el progreso de cada actividad que esta en ejecución. Esa en la que Kini y todos nosotros apretamos el cuadradito rojo y no pasa nada de nada. Si vamos a la página de la API de Eclipse que contiene la información de IProgressMonitor, podemos leer lo siguiente.
"A request to cancel an operation can be signaled using the setCanceled method. Operations taking a progress monitor are expected to poll the monitor (using isCanceled) periodically and abort at their earliest convenience. Operation can however choose to ignore cancelation requests."
Lo que viene a decir eso es que Eclipse provee una forma para cancelar las tareas, pero se deja a elección de los desarrolladores del plugin de turno como hacerlo, intuyo que se decantan por esa parte de "Operation can however choose to ignore cancellation requests". Esta claro que la cancelación no siempre es posible o la lógica es tremendamente complicada, pero seamos serios, un gran porcentaje de plugins hacen lo siguiente.

class MiActividad ... implements IProcessMonitor { 
   ... 


   public boolean isCanceled() {} 


   public void setCanceled(boolean value) {} 


   ... 
}

Y a grandes rasgos esta es la razón por la que no funciona el botón de cancelar en Eclipse ... porque no está implementada :-)

3 comentarios:

Kinisoftware dijo...

:D Que grande eres! :D

Si está claro que mucho esfuerzo algunas veces no ponen... hay un botón que no hace nada pero sigue estando ahí, eso solo lo podían hacer desarrolladores para desarrolladores. Lo peor es cuando lo siguen haciendo desarrolladores para usuarios en aplicaciones Web o de escritorio de uso general... en fin, historias para no dormir ;)

Abrazote!

Yeray Darias Camacho dijo...

Efectivamente amigo. Hay que cuidar los detalles con los usuarios.

Un abrazo.

Alberto Garrido dijo...

Te refieres al boton rojo en la pestaña "Console" ? si es ese tanto en Swing (con el windowBuilder) como Android sí que funciona :P