Test d'IntelliJ IDEA v13

Premières impressions sur la nouvelle version de l'éditeur IntelliJ IDEA de JetBrains

Romain Linsolas

Cet article a pour but de montrer les nouveautés apportées par la 13e version d'IntelliJ IDEA de JetBrains, et de présenter quelques-unes de ses forces en tant qu'outil de développement. Commentez

- Titre : Test d'IntelliJ IDEA v13

- Auteur : Romain Linsolas

- Parution : 4 février 2014

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2014 Romain Linsolas. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Qu'est-ce qu'IntelliJ

- I-A. Introduction

- I-B. Versions et prix

- I-C. Principales fonctionnalités

- I-C-1. Langages et framework supportés

- I-C-2. Gestionnaires de sources

- I-C-3. Outils de construction

- I-C-4. Développement et autres fonctions

- II. Les nouveautés de la version 13

- II-A. Android Studio

- II-B. Support de JavaEE 7 et Spring

- II-C. Langages alternatifs

- II-D. Développement web

- II-E. Autres fonctionnalités

- III. Ce qui fait la force d'IntelliJ

- III-A. L'autocomplétion

- III-B. Analyse et inspections

- III-C. Outils de refactoring

- III-D. SSR, ou Structural Search and Replace

- III-E. Petits conseils pour bien migrer vers IntelliJ IDEA

- IV. Conclusion

- V. Remerciements

- VI. Références

I - Qu'est-ce qu'IntelliJ

Faisons en premier lieu un rapide tour de l'outil.

I-A - Introduction

Depuis janvier 2001, la société JetBrains édite le logiciel IntelliJ IDEA. Il s'agit d'un EDI (ou IDE en anglais), à savoir un Environnement de Développement Intégré (Integrated Development Environment), autrement dit un ensemble d'outils destinés au développement logiciel. IDEA est ainsi à mettre au même niveau - toutes proportions gardées - d'Eclipse ou encore de NetBeans.

Pour information, IntelliJ fait référence à la plateforme commune de JetBrains pour tous leurs outils de développement, IDEA étant l'EDI de développement Java. Il est donc plus juste de dire « je travaille sur IDEA » que « je travaille sur IntelliJ », bien que ce soit souvent la seconde phrase qui soit la plus courante.

I-B - Versions et prix

IDEA existe en deux versions : Community et Ultimate. Pour faire simple, la version Community, gratuite, est avant tout destinée au développement d'applications « lourdes » Java, Scala et Android. Dès qu'il s'agit de développer des applications web, il faut se tourner vers l'édition Ultimate. Son prix, pour une licence personnelle, est de 179 € (hors promotion ou prix de mise à jour).

Un comparatif complet des deux éditions est visible ici.

Vous pouvez télécharger l'une des deux versions sur la page dédiée. Notez au passage qu'IntelliJ IDEA est compatible Windows, Mac et Linux.

I-C - Principales fonctionnalités

Je ne vais pas détailler ici toutes les fonctionnalités d'IDEA, il me faudrait un livre entier pour cela. Je passe toutefois en revue les principales fonctionnalités et langages, frameworks ou outils supportés.

I-C-1 - Langages et framework supportés

La version Community gère nativement les langages suivants : Java, Scala, Groovy, Clojure et XML, XSD et DTD. Avec la version Ultimate s'ajoutent les langages dédiés au développement web, à savoir le HTML, CSS, JavaScript, CoffeeScript, ActionScript. Viennent également le support du Freemarker, de Velocity, du XSL, XPath, SQL, Ruby et JRuby, Python ou encore PHP.

Certains de ces langages nécessitent toutefois l'ajout de plugins gratuits.

Avec la version Ultimate vient également le support des frameworks les plus courants pour le développement autour de l'écosystème de la JVM ou du web. On citera par exemple Spring, Play! framework, JavaEE 6, GWT, Hibernate, Struts, Grails, Griffon, Sass, LESS, Rails, Django, Node.js, etc.

I-C-2 - Gestionnaires de sources

Si vous travaillez sur CVS (désolé pour vous), SVN, Mercurial ou Git (ou GitHub), alors la version Community sera suffisante pour vous. Si vous avez Team Foundation Server, Perforce, ClearCase ou encore Visual SourceSafe, c'est vers la version Ultimate qu'il vous faudra vous tourner.

I-C-3 - Outils de construction

Les principaux outils de construction d'applications sont présents dans les deux éditions d'IDEA. On y retrouve ainsi Maven, Grandle, Ant et Gant Build Tools.

I-C-4 - Développement et autres fonctions

Pour ce qui concerne le développement à proprement parler, IDEA offre une excellente intégration des outils de tests (JUnit, TestNG, Spock ou encore Cucumber), un historique local des modifications de fichiers, une interopérabilité avec Eclipse, ou encore un gestionnaire de contexte. Ce dernier permet de travailler sur un ticket JIRA (ou n'importe quel autre gestionnaire de tickets) et d'y associer un contexte. Ainsi, lorsque l'on rouvre un ticket JIRA sur lequel on avait déjà commencé à travailler, IDEA va rouvrir les fichiers qui étaient ouverts lorsque le contexte de ce ticket avait été précédemment fermé. Si vous êtes adeptes de Mylynsur Eclipse, cette fonction devrait vous intéresser. Vous pouvez voir ici pour plus de détails (en anglais).

À ce propos, IDEA s'interface sans problème avec les plus populaires des systèmes de tickets : JIRA, YouTrack, Lighthouse, GitHub, Redmine, Trac, etc.

Si vous possédez la version Ultimate, vous disposerez également d'un gestionnaire complet de base de données (éditeur SQL, définition de schémas, diagrammes, etc.), d'un outil de modélisation UML, d'outils de couverture de code, du « Structural Search and Replace » (voir le chapitre dédié plus loin).

Il est possible de générer le diagramme des tables grâce à IDEA

L'intégralité des fonctionnalités d'IDEA est à trouver sur cette page.

II - Les nouveautés de la version 13

Comme à chaque fin d'année, JetBrains publie sa nouvelle version majeure de son EDI. 2013 n'échappe pas à la règle, et a vu la version 13 de l'outil sortir. Quelles sont les principales nouveautés de cette version ? C'est ce que nous allons voir.

II-A - Android Studio

Les développeurs d'applications mobiles pour Android vont être contents. Annoncé lors du Google I/O de 2013, IDEA est désormais l'EDI standard pour le développement d'applications mobiles pour l'OS de Google.

L'Android Studio

Cet Android Studio se compose de différents éléments :

- éditeur visuel pour la partie graphique des applications ;

- émulateur d'appareils Android ;

- meilleure intégration de Gradle, l'outil de construction des applications Android ;

- éditeur XML dédié à Android ;

- outil d'inspection Lint, pour analyser la qualité du code.

Autre bonne nouvelle, l'Android Studio est proposé dès la version Community.

II-B - Support de JavaEE 7 et Spring

Attention, ces nouveautés ne sont disponibles que pour la version Ultimate. La 13e édition d'IDEA dispose d'un support complet des spécifications JavaEE 7, ce qui implique :

- gestion du framework web Java Server Faces (JSF) 2.2 ;

- support du Contexts and Dependency Injection (CDI) 1.1 ;

- introduction des nouvelles annotations de JAX-RS 2.0 pour les web services RESTful ;

- amélioration du client REST intégré ;

- présence des annotations utilisées pour les Web Sockets ;

- intégration des nouvelles versions des serveurs d'applications : Glassfish 4.0, WildFly 8, Tomcat 8, etc.

Le client REST intégré

Pour ce qui est de Spring, le support déjà bien présent dans les précédentes versions est encore amélioré. On y retrouve une meilleure gestion de Spring MVC permettant une navigation aisée entre les contrôleurs et les pages HTML associées, la détection des contextes non mappés et annotés avec @Context, ou encore des améliorations sur la performance, la documentation ou les fenêtres spécifiques à Spring (telle que celle de la vue des beans).

II-C - Langages alternatifs

Déjà bien supporté dans la précédente version, le support pour Scala ou Groovy s'améliore encore.

Pour Groovy, différentes fonctionnalités de refactoring ont été mises en place, comme l'introduction de variables ou de constantes. IDEA propose désormais la possibilité de créer des tests avec la bibliothèque Spock. Différents nouveaux inspecteurs ont également été introduits.

Concernant Scala, IDEA offre le support de l'outil sbt, des options de réorganisation du code ou encore la génération de méthodes de base (telles que hashCode ou equals).

Le réorganisateur de code Scala

II-D - Développement web

Vous l'aurez deviné, les fonctionnalités propres au développement web ne sont disponibles que pour la version Ultimate. Les nouveautés sont entre autres :

- débogueur JavaScript amélioré, en particulier pour Google Chrome et Node.js ;

- amélioration du refactoring CSS ;

- support de la bibliothèque de test Karma ;

- support de la version 1.0 de Dart ;

- début de l'intégration du futur standard des composants web ;

- gestion des langages de templating comme Mustache ou Handlebars.

II-E - Autres fonctionnalités

Pour ce qui est des gestionnaires de sources, différentes améliorations sont apportées pour Git ou Mercurial. On notera ainsi l'ajout d'une fonctionnalité de « pull-request » pour GitHub.

Pour celles et ceux qui sont encore sur Subversion (SVN), ils seront heureux d'apprendre qu'IDEA est enfin compatible avec Subversion 1.8.

Concernant l'interface graphique, différentes améliorations ont été apportées, les thèmes Darcula et Light étant toujours présents. À noter la présence d'un mode « Présentation » qui ravira celles et ceux qui font des présentations techniques et qui doivent montrer du code.

Dans l'optique d'avoir tout sous la main dans un même outil, IDEA intègre désormais la possibilité d'exécuter des commandes shell localement ou à distance (via une connexion SSH) directement par la vue « Ligne de commandes ».

Un terminal complètement intégré à IDEA

Pour améliorer la productivité, la nouvelle fonction de recherche permet d'accéder à pratiquement tout à travers la même fenêtre : classe, méthode, action, paramétrage, etc.

IDEA propose des recherches vraiment complètes

Vous pouvez retrouver toutes ces nouveautés, et bien plus encore sur la page dédiée du site de JetBrains.

III - Ce qui fait la force d'IntelliJ

On reproche souvent à IntelliJ IDEA d'être payant et d'avoir un prix relativement élevé. Une licence unique coûte 179 € si elle est personnelle, 449 € s'il s'agit d'une licence d'entreprise. Pour cette dernière, cela représente généralement moins d'une journée de prestation et cela risque de lui en faire gagner bien plus.

Ceux qui ont vraiment goûté à cet EDI, comme moi, n'ont plus envie de faire machine arrière et ne peuvent plus se passer de l'outil. Voyons dans ce chapitre quelques pistes permettant d'expliquer ceci.

III-A - L'autocomplétion

L'autocomplétion est une fonctionnalité absolument indispensable à tout bon outil de développement. IDEA non seulement n'échappe pas à la règle, mais propose sans aucun doute la plus puissante dans sa catégorie. Tout d'abord, la complétion « basique » qui consiste à aider le développeur à écrire son code Java fonctionne sans faille. Mais avec IDEA, elle va plus loin. Elle est capable d'aider à compléter le nom des variables ou des classes par exemple. Elle prend également en considération le contexte actuel, ne proposant ainsi que les types qui sont compatibles dans le contexte de la ligne de code courante. IntelliJ IDEA peut ainsi aider le développeur à compléter les requêtes HQL présentes dans des chaînes de caractères dans le code Java.

Une autocomplétion vraiment puissante

La puissance de l'autocomplétion ne se borne pas au langage Java, puisqu'il supporte sans broncher les langages web - HTML, CSS ou JavaScript -, le XML (il est par exemple capable de compléter les noms des classes Java dans les fichiers Spring), Scala, Groovy, etc. En fait, il n'y a pratiquement aucun endroit où IDEA n'est pas à même de proposer une autocomplétion efficace.

Si le sujet vous intéresse, vous pouvez lire l'article 20 code completions in IntelliJ IDEA (en anglais), ou encore visualiser la vidéo disponible sur la page du site de JetBrains consacrée à l'autocomplétion.

III-B - Analyse et inspections

IntelliJ IDEA analyse en temps réel et en permanence votre code, à la recherche de problèmes potentiels. À chaque fois qu'il détecte une erreur, IDEA va surligner le problème, et proposera parfois même une solution. De même, lorsqu'IDEA détecte une inconsistance quelconque dans le code, il va proposer, grâce au principe des inspections, la meilleure correction possible. Ces inspections sont classées selon leur nature. Nous trouvons ainsi des inspections dédiées au style de codage, aux problèmes de performances ou de sécurité, d'autres dédiées à des langages précis (HTML, XML, Groovy, etc.) ou encore à des frameworks particuliers (Guice, GWT, Less, Maven, etc.).

Il existe plusieurs centaines d'inspections disponibles dans IDEA, difficile de les résumer ici, mais en voici quelques exemples :

- ajout d'un test de non-nullité, permettant d'éviter l'apparition de NullPointerException ;

- Une condition est toujours fausse (par exemple en testant la nullité d'un objet que l'on a initialisé plus tôt), mettant ainsi en avant du code mort ;

- possibilité de simplifier des expressions booléennes ;

- erreur dans la définition d'une entité Hibernate, par exemple des champs non présents dans la base de données ;

- code inutilisé : imports, variables globales, méthodes privées, propriété d'un fichier .properties inutilisée dans l'application, etc. ;

- copie manuelle de tableaux non optimisée ;

- dépendances dupliquées dans les pom.xml de Maven

- vérification de la validité des sélecteurs utilisés dans jQuery ;

- détection de problèmes dans la configuration des beans de Spring.

Un exemple de code potentiellement erroné détecté par IDEA

Il est toujours possible d'exécuter une inspection sur l'ensemble du projet, et parfois même de faire exécuter automatiquement la correction si celle-ci existe. Par exemple, je peux demander à IDEA tous les endroits où j'ai un size() == 0 qui pourrait être remplacé par un isEmpty(). IDEA va alors me lister tous les endroits où il trouve uneListe.size() == 0, mais aussi là où il va trouver uneListe.size() > 0 et me proposer de le remplacer par un uneListe.isEmpty() (ou !uneListe.isEmpty() dans le deuxième cas). Tout cela en un seul clic !

Il est possible d'exécuter toutes les inspections sur l'ensemble du projet

IDEA va devenir votre ami préféré pour écrire du joli code bien propre…

III-C - Outils de refactoring

Les fonctionnalités de refactoring proposées par IDEA en font également sa force. Il est ainsi possible de réaliser en un clic - ou une combinaison de touches - ce genre de choses :

- déplacement d'un morceau de code sélectionné vers une nouvelle méthode ;

- extraction d'une partie d'une classe vers une nouvelle, pour alléger la première ;

- inversion de conditions booléennes ;

- suppression sécurisée de composants. Lors de la suppression d'une méthode par exemple, IDEA va s'assurer qu'elle n'est plus utilisée dans le projet, et avertira le développeur le cas échéant.

Comme souvent, ces fonctionnalités puissantes ne se limitent pas au langage Java, et sont également présentes pour d'autres langages, comme le XML. On pourra ainsi renommer des nœuds ou des attributs, convertir des nœuds en attributs, etc.

Vous trouverez plus d'informations sur le refactoring sur cette page.

III-D - SSR, ou Structural Search and Replace

Le Structural Search and Replace (autrement dit la recherche et remplacement structurels) est un outil qui n'est pas toujours facile à manier, mais diablement efficace. Il n'est d'ailleurs disponible que dans la version Ultimate.

Il est parfois nécessaire de faire une recherche un peu complexe dans tout le code de son application. Cela peut-être une classe (class A implements B { }), une déclaration (a = b), un commentaire (// TODO A faire) ou une expression (new MaClasse();). Bref, des choses qu'une simple recherche n'est pas capable de trouver. Et bien c'est le rôle du SSR. On ne lui donne pas un texte à chercher, mais plutôt un template.

Prenons un exemple : je souhaite utiliser la bibliothèque AssertJ pour rendre mes assertions plus expressives dans mes tests unitaires. Avec JUnit, mon assertion s'écrit assertEquals(42, unEntier), alors qu'avec AssertJ, ce sera assertThat(unEntier).isEqualTo(42). Si je souhaite faire un changement automatique de toutes mes assertions en une seule fois, je vais avoir du mal avec une recherche normale. Avec le SSR, je peux faire cela en un clin d'œil. Tout d'abord, je saisis le template suivant :

Template pour le SSR

assertEquals($a$, $b$);

Vous noterez l'utilisation de variables $a$ et $b$. Ensuite, je lui indique par quoi remplacer :

Template pour le SSR

assertThat($b$).isEqualTo($a$);

Et le tour est joué ! Pour être sûr de ne pas faire d'erreur, IDEA me montre une prévisualisation des changements avant de les appliquer.

Pour vous aider, il existe un certain nombre de templates prédéfinis, sur lesquels il sera plus prudent de partir pour arriver à ses fins.

Vous pouvez jeter un œil sur la documentation du SSR.

III-E - Petits conseils pour bien migrer vers IntelliJ IDEA

Fin 2012, j'ai acheté la version 12 d'IntelliJ, bien décidé à m'y mettre pour de vrai. J'avais déjà essayé par le passé d'y jeter un œil, mais mes habitudes sur Eclipse ont eu raison de toutes mes tentatives. Mais cette fois-ci fut la bonne, et je ne voudrais jamais avoir à faire machine arrière ! Pour vous aider à franchir le pas, voilà quelques petites astuces.

Tout d'abord, il faut persévérer un peu. C'est vrai qu'il est parfois déstabilisant de quitter un outil - en l'occurrence Eclipse - dans lequel on a pris ses habitudes au fil des ans, mais croyez-moi, cette fois c'est pour votre bien !

Premier point : la vue « Workspace » d'Eclipse disparait. IDEA ne gère qu'un seul projet à la fois par fenêtre (il est toutefois possible d'ouvrir autant de fenêtres d'IDEA que voulu). Finalement, ce n'est guère gênant, sauf si on a l'habitude de travailler sur dix projets en même temps (mais là, il y a sans doute un problème, non ?).

Autre chose : les raccourcis clavier. On ne peut pas travailler efficacement sur un outil sans en connaître les raccourcis clavier, du moins les principaux. IDEA propose une option pour faire correspondre autant que possible les raccourcis clavier à ceux d'Eclipse ou de NetBeans. Pour cela, il faut aller dans Settings > Keymap puis choisir Eclipse ou NetBeans dans le sélecteur Keymaps. Toutefois, je vous conseille vivement de laisser les raccourcis par défaut et de les apprendre. Pour vous aider, vous pouvez télécharger et imprimer un pense-bête (la version pour Mac) ou pourquoi pas vous acheter un t-shirt…

Le t-shirt IDEA avec les principaux raccourcis

Il existe aussi le raccourci « universel », Ctrl + Shift + A, qui vous permet d'exécuter n'importe quelle action en tapant simplement son nom. Enfin, je vous recommande le plugin « Key Promoter » qui détecte quand vous réalisez une action alors qu'un raccourci clavier existe. Dans pareille situation, le plugin va afficher une popup vous indiquant le raccourci à utiliser pour gagner du temps. C'est très pratique.

Si certaines personnes de votre équipe travaillent toujours sur Eclipse (les pauvres !), alors il faudra peut-être penser à ajouter le plugin de formatage d'Eclipse, ce qui vous assurera d'avoir les mêmes conventions que vos camarades. À noter aussi qu'il est possible de demander à IDEA de sauvegarder les métadonnées du projet au format Eclipse (fichier .classpath) plutôt qu'IDEA (fichier *.iml).

Quoi qu'il en soit, si vous vous sentez perdu, n'hésitez pas à consulter la F.A.Q. ou le forum dédié de Developpez.com.

D'autres conseils sur la page dédiée de JetBrains. Une page similaire existe si vous êtes un utilisateur de NetBeans.

IV - Conclusion

Sans être une révolution, cette nouvelle version d'IntelliJ IDEA améliore encore un outil extrêmement bien fait et ultraproductif.

Si vous êtes développeur d'applications Android, alors il ne faut pas hésiter et se jeter (au moins) sur la version Community.

Si vous possédez déjà une version précédente de l'outil, il faudra sans doute fouiller un peu dans la liste des nouveautés pour voir si une mise à jour s'avère nécessaire.

Si vous n'avez encore jamais mis les mains sur cet outil, alors il ne faut vraiment pas manquer l'occasion d'y jeter un œil, soit avec la version Community, soit avec la version d'essai de 30 jours de la version Ultimate.

V - Remerciements

Je tiens à remercier JetBrains pour leur aide et leur magnifique outil, ainsi que la communauté de Developpez.com. Je remercie également Mickael Baron de m'avoir proposé l'opportunité d'écrire cet article. Je remercie enfin Claude Leloup pour sa relecture attentive et ses conseils.

VI - Références

- Site officiel d'IDEA

- Détails des fonctionnalités supportées par IDEA

- Détails des nouveautés de la version 13

- FAQ d'IntelliJ IDEA sur Developpez.com

- Article de présentation de la v12

- Forum IntelliJ de Developpez.com

`