Skip to content

Latest commit

 

History

History
123 lines (86 loc) · 3.58 KB

README_JP.md

File metadata and controls

123 lines (86 loc) · 3.58 KB

EN JP

Graftast

GumTreeの検出対象を複数のファイルに拡張します。

Graft(接木) ---複数のASTをまとめて1つのASTを構築する、という手法から"ASTの接木"→"Graft AST"の名前がつきました。


インストール方法

バイナリをダウンロード

Zipファイルをこちらからダウンロードしてください。

Gradleでビルド

プロジェクトをクローンします。

$ git clone [email protected]:kusumotolab/Graftast.git

gradle.properties をプロジェクトルート直下に以下の内容で作成してください。

GITHUB_USER = XXXXXX
GUTHUB_TOKEN = YYYYYY

GumTreeはGitHub Packageで公開されているためgradle.propertiesにGitHubのアクセストークンを記載します。アクセストークンについての詳しい情報はこちらをご覧ください。

次に以下のコマンドを実行します。

$ cd Graftast
$ ./gradlew build

build/distributions以下にZipファイルが生成されるので解凍して利用してください。


使用方法

ダウンロードまたはビルドしたZipファイルを解凍し、binフォルダ内のファイルを実行します。

Graftast (diff|webdiff) dir1 dir2 fileType
  • dir1dir2以下に含まれるファイルで、拡張子がfileTypeに一致するものを抽出し差分を計算します。
  • fileTypeの例:.java, .c, .py

オプション

  • diff:差分をテキストで出力します。
  • webdiff:差分をwebブラウザを使って視覚的に表示できます。GumTreeで実装されているClassicViewのみに対応しています。

APIの使用方法

Graftastの機能の一部を使用することが可能です。JDK11以上が必要です。

プロジェクト全体のASTの構築

Run.initGenerators();
String srcDir = "";
String dstDir = "";
Pair<Tree, Tree> projectTrees = new ProjectTreeGenerator(srcDir, dstDir, ".java");
Tree srcTree = projectTrees.first;
Tree dstTree = projectTrees.second;

mappingの取得

GraftastMain graftastMain = new GraftastMain();
String srcDir = "";
String dstDir = "";
Pair<Tree, Tree> projectTrees = new ProjectTreeGenerator(srcDir, dstDir, ".java");
MappingStore mappingStore = graftastMain.getMappings(projectTrees);

または

Run.initGenerators();
String srcDir = "";
String dstDir = "";
Pair<Tree, Tree> projectTrees = new ProjectTreeGenerator(srcDir, dstDir, ".java");
Tree srcTree = projectTrees.first;
Tree dstTree = projectTrees.second;
MappingStore mappingStore = new ProjectMatcher().match(srcTree, dstTree);

差分の計算

GraftastMain graftastMain = new GraftastMain();
String srcDir = "";
String dstDir = "";
Pair<Tree, Tree> projectTrees = new ProjectTreeGenerator(srcDir, dstDir, ".java");
EditScript editScript = graftastMain.calcurateEditScript(projectTrees);

または

Run.initGenerators();
String srcDir = "";
String dstDir = "";
Pair<Tree, Tree> projectTrees = new ProjectTreeGenerator(srcDir, dstDir, ".java");
Tree srcTree = projectTrees.first;
Tree dstTree = projectTrees.second;
MappingStore mappingStore = new ProjectMatcher().match(srcTree, dstTree);
EditScriptGenerator editScriptGenerator = new ChawatheScriptGenerator();
EditScript editScript = editScriptGenerator.computeActions(mappingStore);