Question

J'ai un assez grand nombre de fichiers source dont j'ai besoin d'analyser et d'extraire tous les littéraux de chaîne, puis de les placer dans un fichier en mode play old java constant.
Par exemple:

Label l = new Label("Cat");

Deviendrait:

Label l = new Label(Constants.CAT);

Et dans Constants.java , j'aurais:

public final static String CAT = "Cat";

Je ne souhaite pas que les chaînes soient externalisées dans un fichier texte de propriété.
Une des raisons est la cohérence et la lisibilité du code.
L’autre est que notre code client utilise GWT , qui ne prend pas en charge le mécanisme de fichier texte de propriété Java.

Je pourrais écrire une sorte d’analyseur (en utilisant antempl tâche, par exemple)?
Mais je me demandais si un IDE faisait déjà ce genre de chose automatiquement.

Était-ce utile?

La solution

Pour compléter la réponse de Peter Kelley, vous pouvez envisager pour eclipse IDE la solution AST .

Vous pouvez ensuite écrire un programme AST qui analyse votre code source et fait ce que vous voulez.

Un exemple complet est disponible dans ce coin eclipse article , ainsi que plus de détails dans Aide eclipse .
Et vous pouvez trouver quelques exemples dans Listing 5 de la section " Mise en oeuvre de la méthode in situ traduction " de Automatisation de l'intégration de langues spécifiques à un domaine dans Eclipse JDT , ainsi que plusieurs exemples dans les projets GitHub .

Autres conseils

Eclipse le fait automatiquement. Cliquez avec le bouton droit sur le fichier, choisissez "Source", puis "Externaliser les chaînes"

.

Cela ne fait pas exactement ce que vous avez demandé (avoir les chaînes dans un fichier Constants.java en tant que chaînes), mais la méthode utilisée est vraiment très puissante. Il les déplace dans un fichier de propriétés qui peut être chargé dynamiquement en fonction de vos paramètres régionaux. Les avoir dans un fichier source Java séparé, comme vous le suggérez, signifie que vous aurez simultanément TOUTES les langues dans votre application ou que vous enverrez différentes applications en fonction de la localisation.

Nous l'utilisons pour nos applications où même les éléments de base doivent être livrés en anglais et en japonais - nos applications plus complexes sont livrées en 12 langues - nous ne sommes en aucun cas une petite entreprise de développement de logiciels: -).

Si vous voulez dans un fichier Java, malgré les inconvénients déjà mentionnés, il est beaucoup plus facile d'écrire un programme pour transformer le fichier de propriétés en fichier source Java que d'essayer. extraire les chaînes à partir d'une source Java de forme libre.

Il suffit ensuite de modifier la classe Accessor pour utiliser les chaînes intégrées (dans la classe séparée) plutôt que de les charger au moment de l'exécution.

Il y a de bonnes raisons pour lesquelles vous ne voudriez pas faire cela. Mis à part le fait que ces fichiers générés (je ne connaissais pas la fonction eclipse) ne feront pas la distinction entre les chaînes que vous définissez, par exemple, comme arguments de constructeur dans les classes de test et les éléments que vous souhaitez réellement utiliser. constantes, le plus gros problème est que toutes vos finales statiques publiques vont être compilées dans vos classes, et si vous souhaitez modifier le comportement des classes, vous devez modifier non seulement la classe contenant les constantes, mais tout ce qui y fait référence.

Je reconnais pleinement ce que Pax Diablo a dit. Nous utilisons aussi cette fonction.

Lorsqu’elle est appliquée à un fichier de classe, la fonction "Externaliser les chaînes". créera deux fichiers, une classe Messages.class et un fichier de propriétés messages.properties. Il redirigera ensuite toutes les utilisations directes des littéraux de chaîne vers un appel à Messages.get (clé de chaîne) et en utilisant la clé que vous avez entrée pour la chaîne dans le champ "Ext. Chaîne " sorcier.

BTW: Quel est le problème avec les fichiers de propriétés? Comme il l'a dit, vous pouvez simplement modifier le fichier de propriétés sans avoir à changer de classe si vous devez modifier le texte.

Un autre avantage est celui-ci: la méthode d'extraction des littéraux de chaîne dans un fichier de propriétés vous permet de traduire la langue source dans la langue de votre choix sans modifier le code . Le chargeur de fichiers de propriétés charge automatiquement le fichier de langue cible en utilisant le fichier correspondant avec le code iso de langue. Pour que vous n'ayez pas à vous soucier de la plate-forme sur laquelle votre code est exécuté, il sélectionnera (presque) automatiquement la langue appropriée. Voir la documentation de la classe ResourceBundle pour comment cela fonctionne en détail.

Vous pouvez consulter le moteur de transformation de source Jackpot dans NetBeans qui vous permettrait de créer un script de votre transformations de source.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top