En développant vos plug-ins, vous avez peut-être un jour été confronté à une erreur, à première vue obscure, due à une directive singleton soit disant manquante…
En effet, le PDE lève une erreur lorsqu’un plug-in qui n’est pas “singleton” souhaite définir des extensions ou des points d’extension.
Pourquoi, et qu’est-ce au juste que cette directive ?
|
Bundle-SymbolicName: com.acme.module.test; singleton:=true |
Dans la norme OSGi, il est indiqué que “singleton” (renseigné dans l’entrée de MANIFEST Bundle-SymbolicName) doit être placé à true lorsque l’on souhaite interdire la résolution par le framework de plusieurs versions d’un même bundle.
C’est donc tout à fait logique qu’un plug-in amenant des extensions ou des points d’extension soit impérativement un singleton ; car il serait sans cela très difficile, voire impossible, de gérer les différentes versions résolues au runtime…
Imaginez simplement un plug-in amenant une vue, que l’on pourrait déployer dans deux, trois, … versions différentes au sein du même Eclipse : à quoi devrait-on s’attendre lors de l’affichage du menu “Show View > Other…” ???
Dans le cas où on écrit un plug-in n’amenant ni extension ni point d’extension —un plug-in de librairies, par exemple—, on sera en revanche ravi de pouvoir dire que ce n’est pas un singleton (c’est le comportement par défaut), et ainsi faire coexister différentes versions de nos librairies dans le même Eclipse. C’est d’ailleurs exactement ce qui se passe avec les plug-ins ICU, Ant ou log4j, dont les utilisateurs viennent dépendre en venant préciser le numéro (ou l’intervalle) de version qui les intéresse…
Ça y est, Eclipse 3.4 est à nos portes puisque le milestone qui sort aujourd’hui est le 7ème du nom ; ce qui, dans le cycle de développement Eclipse, veut dire que toutes les nouvelles fonctionnalités ont été implémentées (feature complete) !
Les prochaines versions livrées seront des releases candidates, au nombre de quatre d’ici fin juin, et n’apporteront donc que des corrections de bugs.
Voici comme à chaque fois les nouveautés à noter, sachant que, pour une M7, on est plutôt gâtés !
Le New & Noteworthy complet est ici !
Et pour le téléchargement, c’est par là !
Avec quelques jours de retard (il semblerait que l’intégration de p2 ait été assez laborieuse…) voici la cuvée M6 d’Eclipse 3.4 !
Comme pour chaque milestone, voici les nouveautés qui ont particulièrement retenu mon attention :
Beaucoup de sous-projets qui étaient jusqu’alors en incubation ont été gradés et font donc maintenant partie du projet Equinox “officiel”, et sont ainsi accessibles aux utilisateurs du SDK Eclipse. Parmi ces projets :
@noreference lorsque l’on veut indiquer qu’une méthode (définie dans une classe abstraite, par exemple) ne doit pas être appelée par les “clients”. A l’heure actuelle, ce genre de contrainte était tant bien que mal explicité dans la javadoc de la méthode (”Clients must not call this method” …), et le moins qu’on puisse dire c’est que ce n’était pas très formel, et encore moins exploitable de manière automatique.StyledCellLabelProvider est la classe abstraite à étendre pour avoir le support de cette nouvelle fonctionnalité ; IStyledLabelProvider permettant de venir enrichir un LabelProvider qui auraient déjà une super-classe. A noter que cela ne se résume pas qu’aux couleurs d’avant et d’arrière-plan puisque l’on peut également souligner, encadrer, mettre en gras, … certains tronçons de son label !IStyledLabelProvider).MessageFormat.Pour les curieux, le New & Noteworthy complet est ici !
Kudos to the Eclipse PDE UI Team (and more specifically to Chris Aniszczyk) for their incredible work on a long-awaited feature in PDE : “type safety” for ID references!
So, what is it all about ?
Imagine you want to contribute to the org.eclipse.ui.perspectiveExtensions extension point, in order to plug your own views on a given, existing perspective.
Your perspective extension is going to be relative to… a perspective, right?
This perspective is identified by an ID, right?
But what is the actual ID of the perspective you want to extend? And what happens when, even knowing the exact ID of the perspective, you make a spelling mistake? Let me guess… You lose at least one hour of work in the so-called “id hell”
That’s exactly why the PDE Manifest builder (i.e. the compiler of your plugin.xml against extension points schema and workspace/target platform plugins) will now handle a new kind of extension attribute : the ID!
When you want to add an “idref” attribute into an extension point, you just have to declare the attribute as “identifier”, and you then tell which identifier you want to refer to. And voilà !
The patch has not been committed on HEAD yet, but you can find the patch in the attachments of bug #181515.
Sebz, this new feature is for you
…Welcome in ID heaven!