ファイルの 2 つのバージョンの違いに対してコード違反チェッカーを実行する Eclipse プラグインを開発しています。現在、 diff.exeを使用して 2 つのファイルの違いを取得しています。しかし、diff.exe は外部アプリであるため、Eclipse 組み込みの比較ツールを使用してファイルの差分を取得する方がよいことに気付きました。そこで、 org.eclipse.compareを使用して、この時点に到達しました。
public static List<Patch> compare(String old, String recent) {
try{
IRangeComparator left = new TokenComparator(old); //what exactly to be passed in this constructor, a file path, a literal value or something else?
IRangeComparator right = new TokenComparator(recent);
RangeDifference[] diffs = RangeDifferencer.findDifferences(left, right); // This line is throwing NPE
//..
// Process RangeDifferences into Collection of Patch collection
//..
}catch(Exception e){}
//Returns a collection of file differences.
return null;
}
ここでの問題は、コンストラクタTokenComparator(String)で正確に何を渡すべきかわからないことです。ドキュメントには、この コンストラクターが指定された文字列の TokenComparator を作成すると書かれています。しかし、このコンストラクターで渡される正確なもの、ファイルパス、リテラル値、またはその他の何かが書かれていませんか? ファイル パスまたは文字列リテラルを渡すと、違いを見つける次の行で NullPointerException が発生します。
java.lang.NullPointerException
at org.eclipse.compare.internal.core.LCS.isCappingDisabled(LCS.java:98)
at org.eclipse.compare.internal.core.LCS.longestCommonSubsequence(LCS.java:55)
at org.eclipse.compare.rangedifferencer.RangeComparatorLCS.longestCommonSubsequence(RangeComparatorLCS.java:186)
at org.eclipse.compare.rangedifferencer.RangeComparatorLCS.findDifferences(RangeComparatorLCS.java:31)
at org.eclipse.compare.rangedifferencer.RangeDifferencer.findDifferences(RangeDifferencer.java:98)
at org.eclipse.compare.rangedifferencer.RangeDifferencer.findDifferences(RangeDifferencer.java:82)
at org.eclipse.compare.rangedifferencer.RangeDifferencer.findDifferences(RangeDifferencer.java:67)
at com.dassault_systemes.eclipseplugin.codemonview.util.CodeMonDiff.compare(CodeMonDiff.java:48)
at com.dassault_systemes.eclipseplugin.codemonview.util.CodeMonDiff.main(CodeMonDiff.java:56)
誰か、正しい進め方を教えてください。