7
votes

Préfixer les champs existants avec m

J'essaie de remplacer le remplacement structurel de mon projet. J'ai un package avec plus de 100 classes, chacun avec 1-20 champs. Notre projet migre vers la notation hongroise, ce qui signifie que tous les champs privés doivent être préfixés avec M.

Je sais que Intellij peut ajouter des préfixes pour de nouveaux champs, mais je ne connais pas la recette pour faire un refacteur de lot-> Renommer pour tous les champs.

Regex ne fonctionne pas car lesdits champs sont utilisés à travers l'application dans toutes sortes de contextes, d'appels de méthode, d'affections, de OPS arithmétiques ...

Quelle serait la meilleure approche qui n'est pas manuelle?


12 commentaires

Vous pouvez écrire un programme pour le faire ...


J'ai vu beaucoup de temps de déchets dans des projets, mais déplacer à la notation hongroise est probablement le gagnant.


Perte de temps? J'appellerais ça pire que ça! Javaranch.com/stylong.jsp#hungarian , Stackoverflow.com/Questtions/111933/... , etcetera.


@ BRSO05 - Oui ... un grand programme velu et compliqué.


Je ne pense pas que Intellij puisse le faire sortir de la boîte puisque le refactoring est généralement localisé. À moins que vous ne vouliez vraiment pas écrire un code pour le faire, la seule façon de penser est laide: en utilisant la recherche structurelle, recherchez Tous les champs de la classe . Cela devrait renvoyer tous les champs que vous avez sur votre projet et vous essayez d'utiliser une macro pour faire le refactoring (ce que je ne suis pas sûr de fonctionner avec des boîtes de dialogue) ou d'utiliser des macros de clavier pour insérer une combinaison de touches de frappe représentant les raccourcis requis. faire ça pour vous.


Si vous voulez vraiment faire cela. Regardez sur Javaparser qui fournit une AST modifiable de vos fichiers source.


Personnellement, je suis d'accord avec de nombreux autres commentaires (que c'est probablement une mauvaise idée), mais nous devons parfois faire ce que nous avons dit. Je pense que c'est une question valable et ne comprenez pas les bowvotes.


Je suis d'accord aussi mais ce n'est pas mon choix.


Donc, vous ne pensez pas que les Regex vous aideront, mais vous avez ajouté une étiquette de regex ...


Paramètres | Style de code | Java | Génération de code -> Le préfixe de nom peut être un lieu de démarrage.


Oui, cela le fait pour de nouveaux champs, mais pas pour les anciens.


Notation hongroise? en Java ?! En 2016?!?!


3 Réponses :


0
votes

Eclipse fournit une boîte à outils JDT qui permet à la manipulation du code source Java et fournit également une boîte à outils LTK pour automatiser le refactoring. Ont utilisé beaucoup de JDT et est naturel (facile) à utiliser, peut assumer que LTK est également. https://eclipse.org/articles/article-ltk/ltk.html Plus d'informations sur LTK sont disponibles sur le site Web de Eclipse.

Ne peut pas parler aux capacités de refactorisation automatisées d'Intellij.


0 commentaires

1
votes

Basé sur les réponses à des questions similaires ( Ici , ici et ici < / a>) Je suppose que vous pouvez utiliser Javaparser et créer un petit utilitaire pour faire le refacteur pour vous.

Voici quelque chose pour vous aider à démarrer: xxx

ceci renommera les champs mais pas this.field occurrences (mais c'est un début).


2 commentaires

Cela renomme les champs, mais pas les occurrences à travers le code. La recherche structurelle dans Intellij fait cela encore plus trivialement.


@ MlProgrammer-CIM recherche structurelle et remplacer est un outil Awesome , mais je n'ai pas réussi à le faire faire avec elle ... (Peut-être que vous pouvez lui donner un aller ?)



-1
votes

Ce n'est pas une réponse complète, mais une idée:

  1. Écrivez une inspection qui trouve des noms de champs non hongrois.
    Vous pouvez utiliser une regex probablement, y compris (? (look-derrière-derrière), ou simplement un simple ! StartSwith . Notez que cela serait également utile À l'avenir, informer Devs sur le projet qu'ils nomment «faux».
  2. Faites cette inspection avoir une solution rapide
    Il devrait être assez simple de mettre en œuvre une transformation de nom pour les types de base, car je suppose que vous avez un guide sur la façon de les nommer. par exemple. nom de chaîne -> szname
  3. analyser> Exécuter l'inspection par nom ...
  4. Exécutez la solution pour toutes les occurrences de inspection vue.

    Malheureusement, je ne sais pas comment écrire des plugins d'idées ou des inspections, mais je voulais partager l'idée. Après une recherche rapide dans le code des idées, je suppose que ce serait de bons candidats à partir de:


1 commentaires

Souhaitez-vous expliquer pourquoi le bowvote? C'est une solution partielle que les autres.