Blog

Eclipse 2020-09

Suivant son cycle de releases trimestrielles, la fondation Eclipse a diffusé la version 2020-09 (4.17) de son IDE. Cet article propose une revue des principales nouveautés générales et du JDT.

 

Java 11 est requis pour l’exécution

C’est un gros changement car pour exécuter Eclipse version 2020-09 : il faut obligatoirement un Java 11 minimum. Si ce n’est pas le cas, Eclipse ne démarre pas.

eclipse-2020-09-002

Le JDT d’Eclipse sera capable de compiler des classes pour les versions antérieures de Java mais son exécution requière maintenant un Java 11 minimum.

 

Support de Java 15

Eclipse 2020-09 est sortie la veille de Java 15. Il ne propose donc pas de support de Java 15 sans installer un plug-in supplémentaire via le Marketplace.

eclipse-2020-09-003

Ce plugin permet notamment de mettre en œuvre plusieurs évolutions dans la syntaxe de Java 15, sous réserve que l’option preview soit activée dans les propriétés « Java compiler » du projet :

 

Les éditeurs de texte

Précédemment l’éditeur offrait la fonctionnalité « Last Edit Location » qui permettait de revenir à l’emplacement de la dernière modification. Maintenant, elle est capable de revenir sur les 15 derniers emplacements de modifications grâce à deux options du menu « Navigate » :

eclipse-2020-09-004

 

L’exécution des tests JUnit

Dans la vue JUnit, le menu contextuel est enrichi de deux nouvelles options pour étendre ou réduire les tests d’une classe de tests.

eclipse-2020-09-005

La vue JUnit permet d’afficher les résultats d’exécution selon plusieurs ordres : ordre d’exécution, temp d’exécution ou ordre alphabétique des noms de méthodes. Par défaut, les résultats sont affichés dans leur ordre d’exécution.

Une fois tous les tests exécutés, pour afficher les résultats dans l’ordre de leur temps d’exécution, il faut utiliser l’option Sort By > Execution Time dans le menu de la vue JUnit.

Exemple :

eclipse-2020-09-006

Les résultats sont alors affichés dans leur ordre de temps d’exécution décroissant.

eclipse-2020-09-007

 

L’éditeur de code Java

L’assistant Content Assist prend désormais entièrement en charge les correspondances de sous-chaînes et de sous-mots pour les types :

eclipse-2020-09-008

Les correspondances avec la sous-chaine sont toujours affichées. L’affichage des correspondances avec les sous-mots est configurable dans les Preferences : Java > Editor > Content Assist.

eclipse-2020-09-009

Si l’option est décochée, les correspondances avec les sous-mots ne sont plus affichées.

eclipse-2020-09-010

Dans un éditeur de code Java, le code mining peut être activé/désactivé en utilisant le menu « Find Actions » (Ctrl +3).

eclipse-2020-09-011

Un nouveau quickfix propose de remplacer la concaténation de chaînes et de valeurs par l’utilisation de la méthode statique String::format

Exemple :

eclipse-2020-09-012

Le résultat de l’application du quickfix est :

eclipse-2020-09-013

Un nouveau quickfix propose de créer une méthode manquante invoquée via une référence de méthodes.

eclipse-2020-09-014

Une fois le quickfix appliqué, la méthode est créée :

eclipse-2020-09-015

Attention : cette fonctionnalité ne peut être mise en œuvre que dans la classe courante et pour des cas simples.

 

Les options de clean up

Elles possèdent un nouvel onglet « Optimization » qui regroupe deux options relatives à la performance d’exécution.

eclipse-2020-09-016

Une nouvelle fonctionnalité de nettoyage (clean up) a été ajoutée pour optimiser l’exécution des expressions régulières en les précompilant avec java.util.regex.Pattern. L’expression régulière doit être utilisée explicitement plusieurs fois pour être sûr que le nettoyage est utile.

Pour l’activer, il faut cocher « Precompile reused regular expressions » dans l’onglet « Optimization » d’un profil personnalisé.

eclipse-2020-09-017

Une nouvelle opération de clean up a été ajoutée pour utiliser la méthode Objects::equals() dans la redéfinition d’une méthode equals() afin de permettre de réduire la quantité de code requise. Elle n’est utilisable qu’à partir de Java 7.

Cette option est activable dans l’onglet « Unnecessary Code » d’une configuration personnalisée du « Clean up »

eclipse-2020-09-018

Sans l’option activée

Avec l’option activée

package com.oxiane;

import java.time.Duration;

public class Formation {

  String titre; 
  Duration duree; 
  String code;
  String description;
  int prix;

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Formation other = (Formation) obj;
    if (code == null) {
      if (other.code != null) 
        return false;
    } else if (!code.equals(other.code))
      return false;
    if (description == null) {
      if (other.description != null)
        return false;
    } else if (!description.equals(other.description))
      return false;
    if (duree == null) {
      if (other.duree != null)
        return false;
    } else if (!duree.equals(other.duree))
      return false;
    if (prix != other.prix)
      return false;
    if (titre == null) {
      if (other.titre != null)
        return false;
    } else if (!titre.equals(other.titre))
      return false;
    return true;
  }
  
  // ...
}
package com.oxiane;

import java.time.Duration;
import java.util.Objects;

public class Formation {

  String titre; 
  Duration duree; 
  String code;
  String description;
  int prix;

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    Formation other = (Formation) obj;
    if (!Objects.equals(code, other.code)) {
      return false;
    }
    if (!Objects.equals(description, other.description)) {
      return false;
    }
    if (!Objects.equals(duree, other.duree)) {
      return false;
    }
    if (prix != other.prix)
      return false;
    if (!Objects.equals(titre, other.titre)) {
      return false;
    }
    return true;
  }
  
  // ...
}

 

Le formatage du code Java

Une nouvelle option permet de formater les instructions assert.

Editer les options de formatage de code Java d’un profile : Preferences > Java > Code Style > Formatter.

Sélectionner « Line Wrapping > Wrapping Settings > Statements > ‘assert’ message » pour configurer le formatage des asserts.

eclipse-2020-09-019

 

Le débogage

Les configurations d’exécution proposent dans l’onglet Arguments une case à cocher « Use the -XX:+ShowCodeDetailsInExceptionMessages argument when launching » qui permet d’activer l’option proposée par la JEP 358 (Helpful NullPointerExceptions) pour avoir des messages d’erreurs détaillés lors de NullPointerExceptions.

eclipse-2020-09-020

Cette case à cocher est cochée par défaut si Java 14 ou supérieur est utilisé.

La vue « Variables», lorsque l’option « Show type names » est activée, affiche le type actuel d’une valeur au lieu de son type déclaré.

Pour activer cette option, il faut que le mode colonne (column mode) soit désactivé.

eclipse-2020-09-021

Exemple :

eclipse-2020-09-022

Avec Eclipse 2020-06

eclipse-2020-09-023

Avec Eclipse 2020-09

eclipse-2020-09-024

 

Le thème dark

Quelques petites adaptations sont apportées au thème dark.

Le style des menus a changé dans le thème dark.

Eclipse 2020-06 Eclipse 2020-09
eclipse-2020-09-025 eclipse-2020-09-026

Le style des listes déroulantes (ComboBox) a aussi changé dans le thème dark.

Eclipse 2020-06 Eclipse 2020-09
eclipse-2020-09-027 eclipse-2020-09-028

 

Conclusion

Eclipse poursuit son rythme de release tous les 3 mois. La grande nouveauté de cette version 2020-09 est qu’elle requière un Java 11 pour s’exécuter. Cela encouragera peut-être à migrer vers Java 11 dont l’adoption est faible malgré la sortie l’année prochaine de Java 17. Elle ajoute aussi quelques petites fonctionnalités.

Jean-Michel Doudoux

Written by

CTO OXiane