3

(Java / C#の)コードファイルの2つのバージョン間の差分を取得したいのですが、そこから影響を受けるメソッド(名前)のリストを取得します。これは実装されていますか?

これには、差分から戻ってくる線のAST分析が必要になると思います。

これのポイントは、checkstyle / findbugsを改良して、スプリント中に触れられたメソッドでのみ機能するようにすることです。

差分を実行するための日食のプロセスを確認しました。

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

実際のASTではなく、行番号でのみ機能するようです。line#=>methodNameマッピングに興味があります。

4

3 に答える 3

1

Eclipse自体を使用しなくても、Eclipseのcompareapiを使用できます。org.eclipse.compareを検索します

于 2009-05-25T09:28:34.737 に答える
1

これがあなたを助けるかどうかはわかりませんが、Eclipseのdiff / compareはそのトップパネルでこれを行います(その下には2つのファイル/バージョンが並んでいます)。グラフィカルですが、おそらく「パブリック」に使用するためのAPIがどこかにありますか?

于 2009-05-25T07:03:38.697 に答える
0

どこかに実装されている場合はDunno。

しかし、あなたは正しいです。メソッド本体が何であるかを決定するためだけにASTが必要ですが、SAMという名前の2つのメソッドが実際に同じクラスにあり、したがって「バージョン」であるかどうかを決定するために、名前とタイプの解決+コールグラフも必要です。お互いの。

DMS Software Reengineering ToolkitにはJavaパーサーがあり、名前/タイプの解決と完全なコールグラフを作成するため、「メソッドの一致」を判断するために使用できます。(もちろん、不正行為をして、メソッド名が同じである場合はバリアントである必要があると判断する場合もありますが、GetやSetなどで多くの誤検知が発生し、これを頻繁に行うと、誤検知は非常に気が散るでしょう)。どれが「一致する」かを決定したら、それらのテキストを表示することができます。これは、比較するAPIファイルがたくさんある場合に役立ちます。

別の方法は、SDの「SmartDiff」を、元のバージョンと変更されたバージョンであることがわかっているJavaファイルのペアに適用することです。ASTを比較し、相互にマッピングするための最小限の編集を見つけます。古い方法と新しい方法がまったく似ている場合は、それを検出し、一方を編集してもう一方を取得する方法を示します。http://www.semdesigns.com/Products/SmartDifferencer/index.htmlを参照してください

于 2009-06-17T10:22:39.617 に答える