2009-05-25 8 views
3

Je veux obtenir un diff entre deux versions d'un fichier de code (de la variété Java/C#) - et d'obtenir une liste de méthodes (noms) impactées. Est-ce que cela a été mis en œuvreObtenir la version du fichier de code diff montrant les méthodes (noms) impactées

Je présume que cela nécessiterait une analyse AST des lignes qui reviennent de la diff. Le but de ceci serait d'affiner checkstyle/findbugs pour simplement travailler sur les méthodes touchées lors d'un sprint.

J'ai eu un coup d'oeil au processus d'éclipse pour faire une diff:

http://dev.eclipse.org/viewsvn/index.cgi/org.eclipse.compare.tests/src/org/eclipse/compare/tests/

On dirait qu'il fonctionne sur le numéro de ligne - pas AST réelle. Je suis intéressé par le mappage de la ligne # => methodName.

Répondre

1

Vous pouvez utiliser l'API de comparaison d'eclipse, même sans utiliser Eclipse elle-même. Recherche org.eclipse.compare

+0

En regardant l'API sous-jacente dans org.eclipse.compare, il semble que cela ne fasse que des numéros de ligne - pas des noms de méthodes réels – hawkeye

1

Je ne sais pas si cela peut/peut vous aider, mais la différence/comparer dans Eclipse fait cela dans son panneau supérieur (ci-dessous qui sont les deux fichiers/versions côte à côte). Graphique, oui, mais peut-être y a-t-il une API quelque part pour un usage «public»?

+0

regardant l'API sous-jacente org.eclipse.compare il semble que cela ne vient les numéros de ligne - noms de méthode ne réels – hawkeye

+0

Vous pouvez le voir ici: http://dev.eclipse.org/viewsvn/ index.cgi/org.eclipse.compare.tests/src/org/eclipse/compare/tests/ – hawkeye

0

J'sais si son œuvre ailleurs.

Mais vous avez raison, vous avez besoin d'AST, juste pour décider ce que les corps de méthode sont, mais vous devez également le nom et le type de résolution + appel graphique pour décider si deux méthodes nommées SAM sont en fait dans la même classe et sont ainsi des "versions" les unes des autres. Notre boîte à outils DMS Software Reengineering Toolkit a des analyseurs Java et construit résolution de nom/type et un graphique d'appel complet, de sorte qu'il peut être utilisé pour déterminer "méthodes correspond". (Bien sûr, vous pourriez tricher et décider que si les noms de méthodes étaient les mêmes, ils doivent être des variantes, mais vous obtiendriez beaucoup de faux positifs sur Get et Set, etc. et si vous l'avez fait un beaucoup, ces faux positifs seraient très distrayant). Après avoir décidé lesquels "correspondent", leur texte pourrait être déplacé. Cela serait utile si vous aviez beaucoup de fichiers API à comparer.

Une alternative serait d'appliquer SD "Smart Diff" aux paires de fichiers Java dont vous savez qu'ils sont la version originale et la version modifiée. Il compare les AST et trouve les modifications minimales pour mapper l'une dans l'autre. Si l'ancienne et la nouvelle méthodes sont toutes similaires, il découvrira cela et vous dira comment on a été édité pour obtenir l'autre. Voir http://www.semdesigns.com/Products/SmartDifferencer/index.html

Questions connexes