quarta-feira, 10 de setembro de 2008

Adicionando Itens aos Menus de Lançamento do Eclipse (XXX as)

A lógica de adicionar um novo item a um menu de Eclipse de lançamento (Run As, Debug As) deve ser feita de modo diferente de adicionar um item a um outro qualquer menu (seja menu, toolbal ou popupmenu).

Um item a ser colocado num menu de lançamento tem de estender

Forçar um Plug-In de Eclipse a Ser Carregado

Quando se desenvolve um plug-in para Eclipse (versão 3.3 ou superior) que necessita de adicionar itens a menus, e o estado destes itens dependem de condições (por exemplo a opção estar activa ou não), então, estas condições só serão verificadas se o plug-in já estiver sido carregado.

Para não obrigar o plug-in a ser carregado cada vez que o Eclipse é iniciado (gastando recursos sem necessidade), existem 2 opções que permitem que as condições sejam verificadas, mesmo se o plug-in ainda não estiver sido carregado, quando os itens têm de ser mostrados em menus:
- Uma é ter activa a opção - Activate this plug-in when one of its classes is loaded
- Outra é ter a opção na condição forcePlugInActivation a true

A opção forcePluginActivation só aparece para condições do tipo test. Se os menus estiverem a ser mal disponibilizados, pode-se forçar a criação de um teste "dummy" só para obrigar a carregar o plug-in, fazendo com que a partir daí os menus sejam correctamente disponibilizados.

Criação de Acções (Comandos) em Plug-Ins de Eclipse a Partir da Versão 3.3

As acções no Eclipse permitem estender os menus existentes, adicionar novos menus, criar botões nas toolbars, menus de popup, etc., que por sua vez podem (ou não) levar à execução de código.

As acções são essenciais na criação de novos plug-ins.

A partir da versão 3.3 do Eclipse (Europa), o mecanismo de criação de acções mudou radicalmente. Embora o mecanismo anterior de criação de acções através de actionSets ainda se mantenha, este por ser bastante limitado deve ser abandonado.

A partir de agora deve-se utilizar o mecanismo que foi baptizado de commands.

Os commands além de permitirem a separação real entre a definição de um comando e o código que o comando executa, alarga de sobremaneira as condições associadas ao comando. Estas condições permitem definir por exemplo quando um comando está visível, quando está activo, quando está acessível, etc. Os commands permitem também a reutilização em larga escala da definição do comando (coisa que com actionSets é impossível).

É necessário ter bastante cuidado quando se segue um tutorial para criação de um plug-in em Eclipse. Se já se está a desenvolver um plug-in para a versão 3.3 ou superior, então convém seguir tutoriais e exemplos que já utilizem a noção de comandos. Não é que tutoriais mais antigos eventualmente não funcionem, mas os comandos alargam e facilitam em larga escala o desenvolvimento.

Convém também notar que entre a versão 3.3 (Europa) e a 3.4 (Ganymede) a API dos comandos (e não só) sofreu alterações.

No link seguinte explica-se a noção de comandos:

http://www.ibm.com/developerworks/library/os-eclipse-3.3menu/index.html

terça-feira, 2 de setembro de 2008

Como criar um Plug-In de Eclipse

Eis um bom tutorial de como criar um plug-in de Eclipse:

http://www.javabeat.net/articles/26-introduction-to-eclipse-plugin-architecture-1.html

Uma boa referência, diria mesmo imprescindível, para começar a construir plug-ins em Eclipse de real qualidade, é o livro Eclipse: Building Commercial-Quality Plug-ins.

O próprio Eclipse vem com um conjunto de templates e exemplos pré-definidos que ajudam bastante no desenvolvimento de novos plug-ins.

Neste caso em particular, é bom aprender por exemplo, pois o desenvolvimento de novos plug-ins é bastante complexo e sem ser através de exemplos, tinha-se de saber bastante sobre a framework.

Para desenvolver novos plug-ins tem de se ter instalado o PDE (Plugin Development Environment)

O Eclipse na secção Help->Help Contents->Platform Plug-in Developer Guide, contém uma referência sobre o PDE e também a API completa do PDE. Esta referência é bastante útil durante o desenvolvimento de novos plug-ins.