2016-03-08 8 views
1

J'ai découvert comment changer les modèles par défaut dans IntelliJ lors de la génération des implémentations toString et hashCode/equals mais je ne trouve aucune documentation appropriée sur les variables accessibles. La saisie semi-automatique aide mais elle ne me montre aucune option.Comment demander la classe externe dans la langue de template d'IntelliJ?

Fondamentalement, je veux changer le modèle toString pour générer un préfixe de Foo.Bar pour la classe interne

class Foo { 
    class Bar { } 
} 

suivant où il met maintenant simplement Bar sans le préfixe. Je fais pas voulez ajouter le nom du paquet! Questions supplémentaires: Comment puis-je définir les paramètres globaux? J'essaie également de changer le nom du paramètre du modèle equals de o à object.

Répondre

1

Une documentation sur les variables accessibles dans le modèle peut être trouvée ici: Documentation of the toString settings dialog.

Malheureusement, je ne peux pas trouver quelque chose de variable comme class.hasOuterClass, class.outerClassName ou quelque chose de similaire. Après un peu de recherche, j'ai trouvé une solution laide, mais cela fonctionne, si votre nom de classe commence par une lettre majuscule et vos noms de paquets sont tous en minuscules.

Mettre le suivant au début de votre modèle:

#set($classname = $FQClassname.substring($StringUtil.indexOfAny($FQClassname, "ABCDEFGHIJKLMNOPQRSTUVWXYZ")))

Question bonus:

Je n'ai pas trouvé une documentation similaire pour le modèle equals/hashCode mais je regardé le code source du equalsHelper.vm sur GitHub.

Si vous mettez #set($baseParamName = "object") avant la #parse("equalsHelper.vm") la $paramName sera alors nommé object s'il n'y aura pas d'autre variable locale avec ce nom. Cela se produit si vous avez une variable membre avec ce nom.

enter image description here

+0

Salut, merci beaucoup. La chose avec le changement de nom de * o * en * objet * a fonctionné, mais j'ai dû mettre l'instruction après l'instruction * parse *. Dans le même temps, Velocity n'accepte pas la manipulation de chaînes pour la méthode 'toString'. Au lieu de cela, il émet une erreur. –

+0

Le remplacement de '$ classname' fonctionne pour moi. Quel est le message d'erreur, quelle version d'idée utilisez-vous et quel modèle avez-vous utilisé? – Peter