Java構文要素のカップリング

時刻 t1 でのファイル A.java と、時刻 t2 (> t1) でのファイル A.java の内容を関連付ける。

class C1 implements Serializeable {
	private static final long serialVersionUID = 1L;
}

class C2 {
	public static void main(String...args) {
	}
}

class C3 implements Serializeable {
	private static final long serialVersionUID = 1L;
}
class C1Dash implements Serializeable {
	private static final long serialVersionUID = 1L;
	
	@Override
	public String toString() {
		return "C1Dash";
	}
}

class C2Dash {
	public static void main(String...args) {
		System.out.println("Hello, world!");
	}
	
	@Override
	public String toString() {
		return "C2Dash";
	}
}

class C3Dash {
	
	@Override
	public String toString() {
		return "C3Dash";
	}
}

先日のSEDを使って、

操作 t1 t2
変更 C1 C1Dash
変更 C2 C2Dash
削除 C3 -
追加 - C3Dash

こんな感じで追跡できるように。ただし、SEDをそのまま使うのではなく、Javaの開発に即した感じでやってます。

  • テキストベースではなく、Javaの構文構造に対してSEDを計算
  • Insert方向にかなりバイアス (追加はエディット距離を短めに)

C3 から C3Dash はSED閾値によって同一の系列とみなしてません。最終的にはこの辺がかなりヒューリスティックになりそうです。