Eclipse Auto Complete: Java 1.7 Generics Diamond

Je viens de passer à Luna (de Kepler) et j’ai remarqué un petit problème (encore agaçant):
La complétion automatique ne permet pas de générer des diamants “” pour les génériques déjà spécifiés en initialisation de variable. Par exemple, lorsque je tape:

Set mySet = new HashSet 

Je m’attendrais à ce qu’il soit complété automatiquement

 Set mySet = new HashSet(); 

plutôt que

 Set mySet = new HashSet(); 

J’utilise JDK 1.7 et le niveau de conformité est défini sur 1.7 également.

Il est également très étrange que lorsque j’appuie plusieurs fois sur STRG + Space pendant l’auto-complétion jusqu’à atteindre à nouveau l’auto-complétion Java, puis que j’appuie sur Entrée, les diamants attendus sont livrés.

Cela ressemble beaucoup à un bug pour moi.
Ce bogue est-il “connu” et existe-t-il une solution de contournement à ce problème? Impossible de trouver quoi que ce soit lié à ce sujet.

Vous avez probablement installé le plug-in Code Recommenders . Malheureusement, ce plug-in est affecté par le bogue n ° 435597 qui rompt cette fonctionnalité.

Ce bogue ne semble se produire que si certains types de propositions sont activés dans la « liste d’assistance de contenu par défaut » ( Préférences Eclipse> Java> Editeur> Assistant de contenu> Avancé ). Par exemple, je pourrais obtenir le comportement correct en désactivant les types de proposition suivants:

  • Propositions de base
  • Propositions de l’APP
  • Modèles de propositions

(le dernier est probablement le plus ennuyeux si vous utilisez des modèles de code…)

Lorsque vous utilisez Ctrl + Espace , vous atteignez réellement les « propositions Java » (au lieu des « propositions Java intelligentes (recommandations de code) »), qui ne sont pas affectées par ce bogue.

Ce bogue est prévu pour la version 2.2.0 en juin 2015. Le mieux que vous puissiez faire pour le moment est:

  • Jouez avec les propositions pour vérifier celles qui déclenchent le bogue (prenez peut-être une capture d’écran de votre configuration actuelle avant de le faire);
  • Votez pour le bogue n ° 435597 et le bogue n ° 435660 pour les corriger ;
  • Proposer des correctifs pour corriger ces bugs 🙂

Set est une interface plutôt qu’une implémentation, de sorte que l’EDI ne peut que supposer que vous souhaitez un type interne anonyme qui requirejs toujours le paramètre de type générique. Vous pourriez faire

 Set mySet = new HashSet + CTRL + SPACE 

Cette fonctionnalité est introduite dans jdk 1.8 et ne fonctionne pas avec jdk 1.7.
C’est donc la nouvelle fonctionnalité introduite par Oracle.

Ainsi, cela ne dépend que de la version de jdk sur votre ordinateur et non de la version de ide.