我正在开发一个eclipse插件,用于对文件的两个版本的区别运行代码违例检查器。现在我正在使用diff.exe来获取这两个文件之间的区别。但是,由于diff.exe是一个extrenal应用程序,我意识到最好使用eclipse内置比较工具来获取文件差异。 所以我用org.eclipse.compare最多时达到了这一点:如何在eclipse中以编程方式比较文件?
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(字符串)传递。 document表示这个构造函数为给定的字符串创建一个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)
有人告诉什么是进行正确的方式。
我在我的插件的Manifest.MF的依赖性选项卡中添加了org.eclipse.compare.core(3.5.200),但我仍然面临相同的NPE问题。我错过了什么吗? – Peeyush
你是否将此作为eclipse RCP /插件运行? – codejammer
请参阅评论Kellindil的答案。 – Peeyush