Java源码示例:org.eclipse.compare.rangedifferencer.RangeDifference

示例1
@Override
public boolean accept(Commit commit) {

	if (super.accept(commit)) {
		int nbHunks = 0;
		List<FileCommit> javaFiles = commit.getJavaFileCommits();

		for (FileCommit fileCommit : javaFiles) {

			List<RangeDifference> hunks = getNumberChanges(fileCommit.getPreviousVersion(),
					fileCommit.getNextVersion());
			nbHunks += hunks.size();
		}

		if (nbHunks >= min_included && nbHunks <= max_included) {
			return true;
		}

	}

	return false;

}
 
示例2
/**
 *
 * @param previousVersion
 * @param nextVersion
 * @return
 */
protected List<RangeDifference> getNumberChanges(String previousVersion, String nextVersion) {
	List<RangeDifference> ranges = new ArrayList<RangeDifference>();

	Fragmentable fPreviousVersion = comparator.createFragmentable(previousVersion);
	Fragmentable fNextVersion = comparator.createFragmentable(nextVersion);
	RangeDifference[] results = comparator.compare(fPreviousVersion, fNextVersion);

	for (RangeDifference diff : results) {
		if (diff.kind() != RangeDifference.NOCHANGE) {
			int length = diff.rightEnd() - diff.rightStart();
			if (length <= ComingProperties.getPropertyInteger("max_lines_per_hunk"))
				ranges.add(diff);

		}
	}

	return ranges;
}
 
示例3
public List<String> getAfterDifferences(Fragmentable sbefore, Fragmentable safter)  {
	    RangeDifference[] results = RangeDifferencer.findRanges(new LCSSettings(), sbefore, safter); 
	    List<String> l = new ArrayList<String>();
//	    System.err.println("Diffs: " + results.length);
	    

	    for (RangeDifference diff : results) {
	      if (diff.kind() != RangeDifference.NOCHANGE) {
//	        System.err.println("####change " + diff.toString());

//	        for (int i = diff.leftStart(); i < diff.leftEnd(); i++) {
//	          System.err.println("before:" + sbefore.getFragment(i));
//	        }
	        for (int i = diff.rightStart(); i < diff.rightEnd(); i++) {
	          l.add(safter.getFragment(i));
	        }

	      }
	    }
	    return l;

	  }
 
示例4
protected HunkDiff getNumberChanges(String previousVersion, String nextVersion) {
	HunkDiff ranges = new HunkDiff();

	Fragmentable fPreviousVersion = comparator.createFragmentable(previousVersion);
	Fragmentable fNextVersion = comparator.createFragmentable(nextVersion);
	RangeDifference[] results = comparator.compare(fPreviousVersion, fNextVersion);

	for (RangeDifference diffInfo : results) {
		if (diffInfo.kind() != RangeDifference.NOCHANGE /* && diffInfo.kind() != RangeDifference.ANCESTOR */) {
			// TODO: for the moment, ignoring here hunk filtering
			// int length = diff.rightEnd() - diff.rightStart();
			// if (length <= ComingProperties.getPropertyInteger("max_lines_per_hunk"))
			ranges.add(diffInfo);
			String left = "";
			String right = "";

			if (diffInfo.ancestorStart() == 0 && diffInfo.ancestorEnd() == 0
					|| diffInfo.ancestorStart() == 1 && diffInfo.ancestorLength() == 0)
				continue;

			for (int i = diffInfo.ancestorStart(); i < diffInfo.ancestorEnd(); i++) {
				left += fPreviousVersion.getFragment(i) + "\n";
			}

			for (int i = diffInfo.rightStart(); i < diffInfo.rightEnd(); i++) {

				right += fNextVersion.getFragment(i) + "\n";
			}

			ranges.getHunkpairs().add(new HunkPair(left, right));

		}
	}

	return ranges;
}
 
示例5
public RangeDifference[] compare(String file1, String file2) {
  Fragmentable sbefore = createFragmentable(file1);
  Fragmentable safter = createFragmentable(file2);
  return compare(sbefore, safter);
}
 
示例6
public RangeDifference[] compare(Fragmentable sbefore, Fragmentable safter) {
  RangeDifference[] results = RangeDifferencer.findRanges(new LCSSettings(), sbefore, safter, safter);
  return results;
}
 
示例7
/**
 * Return all the changed lines.
 * 
 * @param oldDocument a document containing the old content
 * @param currentDocument a document containing the current content
 * @return the changed regions
 * @throws BadLocationException if fetching the line information fails
 */
public static int[] getChangedLines(IDocument oldDocument, IDocument currentDocument) throws BadLocationException {
    /*
     * Do not change the type of those local variables. We use Object
     * here in order to prevent loading of the Compare plug-in at load
     * time of this class.
     */
    Object leftSide = new LineComparator(oldDocument);
    Object rightSide = new LineComparator(currentDocument);

    RangeDifference[] differences = RangeDifferencer.findDifferences((IRangeComparator) leftSide,
            (IRangeComparator) rightSide);

    //It holds that:
    //1. Ranges are sorted:
    //     forAll r1,r2 element differences: indexOf(r1)<indexOf(r2) -> r1.rightStart()<r2.rightStart();
    //2. Successive changed lines are merged into on RangeDifference
    //     forAll r1,r2 element differences: r1.rightStart()<r2.rightStart() -> r1.rightEnd()<r2.rightStart

    ArrayList<Integer> regions = new ArrayList<Integer>();
    for (int i = 0; i < differences.length; i++) {
        RangeDifference curr = differences[i];
        if (curr.kind() == RangeDifference.CHANGE && curr.rightLength() > 0) {
            int startLine = curr.rightStart();
            int endLine = curr.rightEnd() - 1;

            if (startLine == endLine) {
                regions.add(startLine);
            } else {
                for (int iLine = startLine; iLine <= endLine; iLine++) {
                    regions.add(iLine);
                }
            }
        }
    }

    int size = regions.size();
    int[] ret = new int[size];
    for (int i = 0; i < size; i++) {
        ret[i] = regions.get(i);
    }
    return ret;
}
 
示例8
/**
 * Compute and return an array of {@link RangeDifference}s for two given strings.
 * 
 * @param left
 * @param right
 * @return An array of {@link RangeDifference}s.
 */
public static RangeDifference[] getDiff(String left, String right)
{
	IRangeComparator leftRangeComparator = new TokenComparator(left);
	IRangeComparator rightRangeComparator = new TokenComparator(right);
	return RangeDifferencer.findRanges(leftRangeComparator, rightRangeComparator);
}