Bug 506732 - cleanup trailing spaces in compare plugins

Change-Id: I2ed3512c294b06e85a63fab90a0934e611339e31
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/ComparePlugin.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/ComparePlugin.java
index 916ebb7..3caaef6 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/ComparePlugin.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/ComparePlugin.java
@@ -57,7 +57,7 @@
 
 	/**
 	 * Returns the shared instance
-	 * 
+	 *
 	 * @return the shared instance
 	 */
 	public static ComparePlugin getDefault() {
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java
index 78c3096..e4fcd1b 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/LCS.java
@@ -25,23 +25,23 @@
 
 	private int max_differences; // the maximum number of differences from
 									// each end to consider
-	
+
 	private int length;
 
 	/**
 	 * Myers' algorithm for longest common subsequence. O((M + N)D) worst case
 	 * time, O(M + N + D^2) expected time, O(M + N) space
 	 * (http://citeseer.ist.psu.edu/myers86ond.html)
-	 * 
+	 *
 	 * Note: Beyond implementing the algorithm as described in the paper I have
 	 * added diagonal range compression which helps when finding the LCS of a
 	 * very long and a very short sequence, also bound the running time to (N +
 	 * M)^1.5 when both sequences are very long.
-	 * 
+	 *
 	 * After this method is called, the longest common subsequence is available
 	 * by calling getResult() where result[0] is composed of
 	 * entries from l1 and result[1] is composed of entries from l2
-	 * @param subMonitor 
+	 * @param subMonitor
 	 */
 	public void longestCommonSubsequence(SubMonitor subMonitor) {
 		int length1 = getLength1();
@@ -58,9 +58,9 @@
 		}
 
 		initializeLcs(length1);
-		
+
 		subMonitor.beginTask(null, length1);
-		
+
 		/*
 		 * The common prefixes and suffixes are always part of some LCS, include
 		 * them now to reduce our search space
@@ -102,7 +102,7 @@
 	 * The recursive helper function for Myers' LCS. Computes the LCS of
 	 * l1[bottoml1 .. topl1] and l2[bottoml2 .. topl2] fills in the appropriate
 	 * location in lcs and returns the length
-	 * 
+	 *
 	 * @param l1 The 1st sequence
 	 * @param bottoml1 Index in the 1st sequence to start from (inclusive)
 	 * @param topl1 Index in the 1st sequence to end on (inclusive)
@@ -113,16 +113,16 @@
 	 *            to store furthest reaching D-paths
 	 * @param snake should be allocated as int[3], used to store the beginning
 	 *            x, y coordinates and the length of the latest snake traversed
-	 * @param subMonitor 
+	 * @param subMonitor
 	 * @param lcs should be allocated as TextLine[2][l1.length], used to store
 	 *            the common points found to be part of the LCS where lcs[0]
 	 *            references lines of l1 and lcs[1] references lines of l2.
-	 * 
+	 *
 	 * @return the length of the LCS
 	 */
 	private int lcs_rec(
 			int bottoml1, int topl1,
-			int bottoml2, int topl2, 
+			int bottoml2, int topl2,
 			int[][] V, int[] snake, SubMonitor subMonitor) {
 
 		// check that both sequences are non-empty
@@ -169,7 +169,7 @@
 	private void worked(SubMonitor subMonitor, int work) {
 		if (subMonitor.isCanceled())
 			throw new OperationCanceledException();
-		subMonitor.worked(work);	
+		subMonitor.worked(work);
 	}
 
 	/**
@@ -177,7 +177,7 @@
 	 * l1[bottoml1..topl1] and l2[bottoml2..topl2] The x, y coodrdinates of the
 	 * start of the middle snake are saved in snake[0], snake[1] respectively
 	 * and the length of the snake is saved in s[2].
-	 * 
+	 *
 	 * @param l1 The 1st sequence
 	 * @param bottoml1 Index in the 1st sequence to start from (inclusive)
 	 * @param topl1 Index in the 1st sequence to end on (inclusive)
@@ -189,13 +189,13 @@
 	 * @param snake should be allocated as int[3], used to store the beginning
 	 *            x, y coordinates and the length of the middle snake
 	 * @subMonitor subMonitor
-	 * 
+	 *
 	 * @return The number of differences (SES) between l1[bottoml1..topl1] and
 	 *         l2[bottoml2..topl2]
 	 */
 	private int find_middle_snake(
 			int bottoml1, int topl1,
-			int bottoml2, int topl2, 
+			int bottoml2, int topl2,
 			int[][] V, int[] snake,
 			SubMonitor subMonitor) {
 		int N = topl1 - bottoml1 + 1;
@@ -353,7 +353,7 @@
 	 * Takes the array with furthest reaching D-paths from an LCS computation
 	 * and returns the x,y coordinates and progress made in the middle diagonal
 	 * among those with maximum progress, both from the front and from the back.
-	 * 
+	 *
 	 * @param M the length of the 1st sequence for which LCS is being computed
 	 * @param N the length of the 2nd sequence for which LCS is being computed
 	 * @param limit the number of steps made in an attempt to find the LCS from
@@ -444,15 +444,15 @@
 		// return the middle diagonal with maximal progress.
 		return max_progress[num_progress / 2];
 	}
-	
+
 	protected abstract int getLength2();
 
 	protected abstract int getLength1();
-	
+
 	protected abstract boolean isRangeEqual(int i1, int i2);
-	
+
 	protected abstract void setLcs(int sl1, int sl2);
-	
+
 	protected abstract void initializeLcs(int lcsLength);
 
 	public int getLength() {
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/TextLineLCS.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/TextLineLCS.java
index 63a394a..0aa2205 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/TextLineLCS.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/TextLineLCS.java
@@ -47,37 +47,37 @@
 	protected int getLength1() {
 		return this.lines1.length;
 	}
-	
+
 	@Override
 	protected boolean isRangeEqual(int i1, int i2) {
 		return this.lines1[i1].sameText(this.lines2[i2]);
 	}
-	
+
 	@Override
 	protected void setLcs(int sl1, int sl2) {
 		this.lcs[0][sl1] = this.lines1[sl1];
 		this.lcs[1][sl1] = this.lines2[sl2];
 	}
-	
+
 	@Override
 	protected void initializeLcs(int length) {
 		this.lcs = new TextLine[2][length];
 	}
-	
+
 	/**
 	 * This method takes an lcs result interspersed with nulls, compacts it and
 	 * shifts the LCS chunks as far towards the front as possible. This tends to
 	 * produce good results most of the time.
-	 * 
+	 *
 	 * TODO: investigate what to do about comments. shifting either up or down
 	 * hurts them
-	 * 
+	 *
 	 * @param lcsSide A subsequence of original, presumably it is the LCS of it and
 	 *            some other collection of lines
 	 * @param len The number of non-null entries in lcs
 	 * @param original The original sequence of lines of which lcs is a
 	 *            subsequence
-	 * 
+	 *
 	 * @return The subsequence lcs compacted and chunks shifted towards the
 	 *         front
 	 */
@@ -113,7 +113,7 @@
 
 		return result;
 	}
-	
+
 	/**
 	 * Breaks the given text up into lines and returns an array of TextLine
 	 * objects each corresponding to a single line, ordered according to the
@@ -121,7 +121,7 @@
 	 * text (starting from 0) Note: there are 1 more lines than there are
 	 * newline characters in text. Corollary 1: if the last character is
 	 * newline, the last line is empty Corollary 2: the empty string is 1 line
-	 * 
+	 *
 	 * @param text The text to extract lines from
 	 * @return the array of TextLine object each corresponding to a line of text
 	 */
@@ -155,7 +155,7 @@
 	/**
 	 * Returns the index of the next end of line marker ('\n' or '\r') after
 	 * start
-	 * 
+	 *
 	 * @param text The string to examine
 	 * @param start The location in the string to start looking
 	 * @return the index such that text.charAt(index) == '\n' or '\r', -1 if not
@@ -186,7 +186,7 @@
 		/**
 		 * Compares this TextLine to l and returns true if they have the same
 		 * text
-		 * 
+		 *
 		 * @param l the TextLine to compare to
 		 * @return true if this and l have the same text
 		 */
@@ -198,7 +198,7 @@
 
 		/**
 		 * Returns the line number of this line
-		 * 
+		 *
 		 * @return the line number
 		 */
 		public int lineNumber() {
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FileDiffResult.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FileDiffResult.java
index 878e2fc..a5e30b6 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FileDiffResult.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FileDiffResult.java
@@ -39,22 +39,22 @@
 	private List<String> fBeforeLines, fAfterLines;
 	private final PatchConfiguration configuration;
 	private String charset;
-	
+
 	public FileDiffResult(FilePatch2 diff, PatchConfiguration configuration) {
 		super();
 		this.fDiff = diff;
 		this.configuration = configuration;
 	}
-	
+
 	public PatchConfiguration getConfiguration() {
 		return this.configuration;
 	}
-	
+
 	public boolean canApplyHunk(Hunk hunk) {
 		HunkResult result = getHunkResult(hunk);
 		return result.isOK() && !this.fDiffProblem;
 	}
-	
+
 	/**
 	 * Refreshes the state of the diff to {no matches, no problems} and checks to see what hunks contained
 	 * by this Diff can actually be applied.
@@ -169,7 +169,7 @@
 		}
 		this.fAfterLines = lines;
 	}
-	
+
 	public boolean getDiffProblem() {
 		return this.fDiffProblem;
 	}
@@ -188,14 +188,14 @@
 		}
 		return false;
 	}
-	
+
 	public String getLabel() {
 		String label= getTargetPath().toString();
 		if (this.fDiffProblem)
 			return NLS.bind(Messages.FileDiffResult_2, new String[] {label, this.fErrorMessage});
 		return label;
 	}
-	
+
 	@Override
 	public boolean hasMatches() {
 		return this.fMatches;
@@ -243,7 +243,7 @@
 		this.fAfterLines = lines;
 		return highestFuzz;
 	}
-	
+
 	public IPath getTargetPath() {
 		return this.fDiff.getStrippedPath(getConfiguration().getPrefixSegmentStripCount(), getConfiguration().isReversed());
 	}
@@ -281,7 +281,7 @@
 	}
 
 	public HunkResult[] getHunkResults() {
-		// return hunk results in the same order as hunks are placed in file diff 
+		// return hunk results in the same order as hunks are placed in file diff
 		List<HunkResult> results = new ArrayList<HunkResult>();
 		IHunk[] hunks = this.fDiff.getHunks();
 		for (int i = 0; i < hunks.length; i++) {
@@ -339,5 +339,5 @@
 		}
 		return new ByteArrayInputStream(bytes);
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FilePatch2.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FilePatch2.java
index f15997d..4406872 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FilePatch2.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/FilePatch2.java
@@ -40,14 +40,14 @@
 	 * Difference constant (value 3) indicating side changed.
 	 */
 	public static final int CHANGE= 3;
-	
+
 	private IPath fOldPath, fNewPath;
 	private long oldDate, newDate;
 	private List<Hunk> fHunks= new ArrayList<Hunk>();
 	private DiffProject fProject; //the project that contains this diff
 	private String header;
 	private int addedLines, removedLines;
-	
+
 	/**
 	 * Create a file diff for the given path and date information.
 	 * @param oldPath the path of the before state of the file
@@ -61,7 +61,7 @@
 		this.fNewPath= newPath;
 		this.newDate = newDate;
 	}
-	
+
  	/**
  	 * Return the parent project or <code>null</code> if there isn't one.
  	 * @return the parent project or <code>null</code>
@@ -69,7 +69,7 @@
 	public DiffProject getProject() {
 		return this.fProject;
 	}
-	
+
 	/**
 	 * Set the project of this diff to the given project.
 	 * This method should only be called from
@@ -83,10 +83,10 @@
 			this.fProject.remove(this);
 		this.fProject= diffProject;
 	}
-	
+
 	/**
 	 * Get the path of the file diff.
-	 * @param reverse whether the path of the before state or after state 
+	 * @param reverse whether the path of the before state or after state
 	 * should be used
 	 * @return the path of the file diff
 	 */
@@ -102,7 +102,7 @@
 			return this.fOldPath;
 		return this.fNewPath;
 	}
-	
+
 	/**
 	 * Add the hunk to this file diff.
 	 * @param hunk the hunk
@@ -111,7 +111,7 @@
 		this.fHunks.add(hunk);
 		hunk.setParent(this);
 	}
-	
+
 	/**
 	 * Remove the hunk from this file diff
 	 * @param hunk the hunk
@@ -119,7 +119,7 @@
 	protected void remove(Hunk hunk) {
 		this.fHunks.remove(hunk);
 	}
-	
+
 	/**
 	 * Returns the hunks associated with this file diff.
 	 * @return the hunks associated with this file diff
@@ -128,7 +128,7 @@
 	public IHunk[] getHunks() {
 		return this.fHunks.toArray(new IHunk[this.fHunks.size()]);
 	}
-	
+
 	/**
 	 * Returns the number of hunks associated with this file diff.
 	 * @return the number of hunks associated with this file diff
@@ -136,7 +136,7 @@
 	public int getHunkCount() {
 		return this.fHunks.size();
 	}
-	
+
 	/**
 	 * Returns the difference type of this file diff.
 	 * @param reverse whether the patch is being reversed
@@ -164,7 +164,7 @@
 		}
 		return CHANGE;
 	}
-	
+
 	/**
 	 * Return the path of this file diff with the specified number
 	 * of leading segments striped.
@@ -179,7 +179,7 @@
 			path= path.removeFirstSegments(strip);
 		return path;
 	}
-	
+
 	/**
 	 * Return the segment count of the path of this file diff.
 	 * @return the segment count of the path of this file diff
@@ -194,7 +194,7 @@
 			length= Math.min(length, this.fNewPath.segmentCount());
 		return length;
 	}
-	
+
 	@Override
 	public IFilePatchResult apply(ReaderCreator content,
 			PatchConfiguration configuration, IProgressMonitor monitor) {
@@ -255,7 +255,7 @@
 	public void setAddedLines(int addedLines) {
 		this.addedLines = addedLines;
 	}
-	
+
 	public void setRemovedLines(int removedLines) {
 		this.removedLines = removedLines;
 	}
@@ -263,7 +263,7 @@
 	public int getAddedLines() {
 		return this.addedLines;
 	}
-	
+
 	public int getRemovedLines() {
 		return this.removedLines;
 	}
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java
index 358d275..033cf8e 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/Hunk.java
@@ -56,7 +56,7 @@
 		}
 		return new Hunk(parent, hunkType, oldStart, oldLength, newStart, newLength, lines.toArray(new String[lines.size()]));
 	}
-	
+
 	public Hunk(FilePatch2 parent, int hunkType, int oldStart, int oldLength,
 			int newStart, int newLength, String[] lines) {
 		this.fParent = parent;
@@ -70,7 +70,7 @@
 		this.fNewStart = newStart;
 		this.fLines = lines;
 	}
-	
+
     public Hunk(FilePatch2 parent, Hunk toCopy) {
     	this(parent, toCopy.hunkType, toCopy.fOldStart, toCopy.fOldLength, toCopy.fNewStart, toCopy.fNewLength, toCopy.fLines);
     }
@@ -96,7 +96,7 @@
 		}
 		return sb.toString();
 	}
-	
+
 	/*
 	 * Returns a descriptive String for this hunk.
 	 * It is in the form old_start,old_length -> new_start,new_length.
@@ -112,7 +112,7 @@
 		sb.append(Integer.toString(this.fNewLength));
 		return sb.toString();
 	}
-	
+
 	public String getRejectedDescription() {
 		StringBuffer sb= new StringBuffer();
 		sb.append("@@ -"); //$NON-NLS-1$
@@ -126,7 +126,7 @@
 		sb.append(" @@"); //$NON-NLS-1$
 		return sb.toString();
 	}
-	
+
 	public int getHunkType(boolean reverse) {
 		if (reverse) {
 			if (this.hunkType == FilePatch2.ADDITION)
@@ -162,13 +162,13 @@
 			return;
 		if (this.fParent != null)
 			this.fParent.remove(this);
-		this.fParent = diff;	
+		this.fParent = diff;
 	}
 
 	public FilePatch2 getParent() {
 		return this.fParent;
 	}
-	
+
 	/*
 	 * Tries to apply the given hunk on the specified lines.
 	 * The parameter shift is added to the line numbers given
@@ -185,9 +185,9 @@
 			Assert.isTrue(s.length() > 0);
 			String line = s.substring(1);
 			char controlChar = s.charAt(0);
-			
+
 			if (controlChar == ' ') {	// context lines
-				
+
 				if (pos < 0 || pos >= lines.size())
 					return false;
 				contextLines.add(line);
@@ -199,15 +199,15 @@
 					contextLinesMatched = false;
 					pos++;
 					continue;
-				} 
+				}
 				return false;
 			} else if (isDeletedDelimeter(controlChar, reverse)) {
 				// deleted lines
-				
+
 				if (precedingLinesChecked && !contextLinesMatched && contextLines.size() > 0)
 					// context lines inside hunk don't match
 					return false;
-				
+
 				// check following context lines if exist
 				// use the fuzz factor if needed
 				if (!precedingLinesChecked
@@ -218,11 +218,11 @@
 					return false;
 				// else if there is less or equal context line to the fuzz
 				// factor we ignore them all and treat as matching
-				
+
 				precedingLinesChecked = true;
 				contextLines.clear();
 				contextLinesMatched = true;
-				
+
 				if (pos < 0 || pos >= lines.size()) // out of the file
 					return false;
 				if (linesMatch(configuration, line, lines.get(pos))) {
@@ -235,10 +235,10 @@
 				// must be found one by one.
 				return false;
 			} else if (isAddedDelimeter(controlChar, reverse)) {
-				
+
 				if (precedingLinesChecked && !contextLinesMatched && contextLines.size() > 0)
 					return false;
-				
+
 				if (!precedingLinesChecked
 						&& !contextLinesMatched
 						&& contextLines.size() >= fuzz
@@ -249,12 +249,12 @@
 				precedingLinesChecked = true;
 				contextLines.clear();
 				contextLinesMatched = true;
-				
+
 				// we don't have to do anything more for a 'try'
 			} else
 				Assert.isTrue(false, "tryPatch: unknown control character: " + controlChar); //$NON-NLS-1$
 		}
-		
+
 		// check following context lines if exist
 		if (!contextLinesMatched
 				&& fuzz > 0
@@ -262,7 +262,7 @@
 				&& !checkFollowingContextLines(configuration, lines, fuzz, pos,
 						contextLines))
 			return false;
-		
+
 		return true;
 	}
 
@@ -277,7 +277,7 @@
 		}
 		return true;
 	}
-	
+
 	private boolean checkFollowingContextLines(
 			PatchConfiguration configuration, List<String> lines, int fuzz, int pos,
 			List<String> contextLines) {
@@ -291,7 +291,7 @@
 		}
 		return true;
 	}
-	
+
 	public int getStart(boolean after) {
 		if (after) {
 			return this.fNewStart;
@@ -313,14 +313,14 @@
 		}
 		return this.fOldLength;
 	}
-	
+
 	private int getShift(boolean reverse) {
 		if (reverse) {
 			return this.fOldLength - this.fNewLength;
 		}
 		return this.fNewLength - this.fOldLength;
 	}
-	
+
 	int doPatch(PatchConfiguration configuration, List<String> lines, int shift, int fuzz) {
 		boolean reverse = configuration.isReversed();
 		int pos = getStart(reverse) + shift;
@@ -334,7 +334,7 @@
 			Assert.isTrue(s.length() > 0);
 			String line= s.substring(1);
 			char controlChar= s.charAt(0);
-			if (controlChar == ' ') {	
+			if (controlChar == ' ') {
 				// context lines
 					Assert.isTrue(pos < lines.size(), "doPatch: inconsistency in context"); //$NON-NLS-1$
 					contextLines.add(line);
@@ -350,11 +350,11 @@
 					Assert.isTrue(false, "doPatch: context doesn't match"); //$NON-NLS-1$
 //					pos++;
 			} else if (isDeletedDelimeter(controlChar, reverse)) {
-				// deleted lines	
+				// deleted lines
 				if (precedingLinesChecked && !contextLinesMatched && contextLines.size() > 0)
 					// context lines inside hunk don't match
 					Assert.isTrue(false, "doPatch: context lines inside hunk don't match"); //$NON-NLS-1$
-				
+
 				// check following context lines if exist
 				// use the fuzz factor if needed
 				if (!precedingLinesChecked
@@ -365,17 +365,17 @@
 					Assert.isTrue(false, "doPatch: preceding context lines don't match, even though fuzz factor has been used"); //$NON-NLS-1$;
 				// else if there is less or equal context line to the fuzz
 				// factor we ignore them all and treat as matching
-				
+
 				precedingLinesChecked = true;
 				contextLines.clear();
 				contextLinesMatched = true;
-				
+
 				lines.remove(pos);
 			} else if (isAddedDelimeter(controlChar, reverse)) {
 				// added lines
 				if (precedingLinesChecked && !contextLinesMatched && contextLines.size() > 0)
 					Assert.isTrue(false, "doPatch: context lines inside hunk don't match"); //$NON-NLS-1$
-				
+
 				if (!precedingLinesChecked
 						&& !contextLinesMatched
 						&& contextLines.size() >= fuzz
@@ -386,11 +386,11 @@
 				precedingLinesChecked = true;
 				contextLines.clear();
 				contextLinesMatched = true;
-				
+
 				// if the line contains a delimiter, use a proper one
 				if (line.length() > LineReader.length(line))
 					line = line.substring(0, LineReader.length(line)) + lineDelimiter;
-				
+
 				if (getLength(reverse) == 0 && pos+1 < lines.size())
 					lines.add(pos+1, line);
 				else
@@ -405,11 +405,11 @@
 	private boolean isDeletedDelimeter(char controlChar, boolean reverse) {
 		return (!reverse && controlChar == '-') || (reverse && controlChar == '+');
 	}
-	
+
 	private boolean isAddedDelimeter(char controlChar, boolean reverse) {
 		return (reverse && controlChar == '-') || (!reverse && controlChar == '+');
 	}
-	
+
 	/*
 	 * Compares two strings.
 	 * If fIgnoreWhitespace is true whitespace is ignored.
@@ -426,7 +426,7 @@
 		}
 		return line1.equals(line2);
 	}
-	
+
 	private boolean isIgnoreLineDelimiter() {
 		return true;
 	}
@@ -457,7 +457,7 @@
 		}
 		return sb.toString();
 	}
-	
+
 	public String getContents(boolean isAfterState, boolean reverse) {
 		StringBuffer result= new StringBuffer();
 		for (int i= 0; i<this.fLines.length; i++) {
@@ -467,7 +467,7 @@
 			if (c == ' ') {
 				result.append(rest);
 			} else if (isDeletedDelimeter(c, reverse) && !isAfterState) {
-				result.append(rest);	
+				result.append(rest);
 			} else if (isAddedDelimeter(c, reverse) && isAfterState) {
 				result.append(rest);
 			}
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/HunkResult.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/HunkResult.java
index 6b37d90..f73ffa4 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/HunkResult.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/HunkResult.java
@@ -26,7 +26,7 @@
 	 * number of context lines, which is 3.
 	 */
 	private static final int MAXIMUM_FUZZ_FACTOR = 2;
-	
+
 	private Hunk fHunk;
 	private boolean fMatches;
 	private int fShift;
@@ -64,7 +64,7 @@
 			} else {
 				boolean found= false;
 				int oldShift= this.fShift;
-				
+
 				int hugeShift = lines.size();
 				for (int i = 1; i <= hugeShift; i++) {
 					if (this.fHunk.tryPatch(configuration, lines, this.fShift - i, fuzz)) {
@@ -74,7 +74,7 @@
 						break;
 					}
 				}
-				
+
 				if (!found) {
 					for (int i = 1; i <= hugeShift; i++) {
 						if (this.fHunk.tryPatch(configuration, lines, this.fShift + i, fuzz)) {
@@ -85,7 +85,7 @@
 						}
 					}
 				}
-				
+
 				if (found) {
 					if (DEBUG) System.out.println("patched hunk at offset: " + (this.fShift-oldShift)); //$NON-NLS-1$
 					this.fShift+= this.fHunk.doPatch(configuration, lines, this.fShift, fuzz);
@@ -108,7 +108,7 @@
 	 * Calculate the fuzz that will allow the most hunks to be matched. Even
 	 * though we're interested only in the value of the fuzz, the shifting is
 	 * done anyway.
-	 * 
+	 *
 	 * @param lines
 	 *            the lines of the target file
 	 * @param monitor
@@ -129,14 +129,14 @@
 				this.fMatches = true;
 				break;
 			}
-			
+
 			// TODO (tzarna): hugeShift=lines.size() is more than we need.
 			// Lines to the beg/end of a file would be enough but this can still
 			// in matching hunks out of order. Try to shift using only lines
 			// available "between" hunks.
-			int hugeShift = lines.size(); 
-			
-			// shift up 
+			int hugeShift = lines.size();
+
+			// shift up
 			for (int i = 1; i <= hugeShift; i++) {
 				if (monitor.isCanceled()) {
 					throw new OperationCanceledException();
@@ -266,7 +266,7 @@
 	public String getCharset() {
 		return this.fDiffResult.getCharset();
 	}
-	
+
 	public int getFuzz() {
 		return this.fFuzz;
 	}
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/LineReader.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/LineReader.java
index 019874b..43a8437 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/LineReader.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/LineReader.java
@@ -86,7 +86,7 @@
 		}
 		return sb.toString();
 	}
-	
+
 	/*
 	 * Returns the length (excluding a line delimiter CR, LF, CR/LF)
 	 * of the given string.
@@ -105,14 +105,14 @@
 		}
 		return l;
 	}
-	
+
 	private boolean fHaveChar= false;
 	private int fLastChar;
 	private boolean fSawEOF= false;
 	private BufferedReader fReader;
 	private boolean fIgnoreSingleCR= false;
 	private StringBuffer fBuffer= new StringBuffer();
-	
+
 	public LineReader(BufferedReader reader) {
 		this.fReader= reader;
 		Assert.isNotNull(reader);
@@ -121,7 +121,7 @@
 	public void ignoreSingleCR() {
 		this.fIgnoreSingleCR= true;
 	}
-	
+
     /**
      * Reads a line of text. A line is considered to be terminated by any one
      * of a line feed ('\n'), a carriage return ('\r'), or a carriage return
@@ -150,17 +150,17 @@
 					}
 					if (c != '\n') {
 						if (this.fIgnoreSingleCR) {
-							this.fBuffer.append((char)c);	
+							this.fBuffer.append((char)c);
 							continue;
 						}
 						this.fHaveChar= true;
 						this.fLastChar= c;
 					} else
-						this.fBuffer.append((char)c);	
+						this.fBuffer.append((char)c);
 					break;
 				}
 			}
-			
+
 			if (this.fBuffer.length() != 0) {
 				return this.fBuffer.toString();
 			}
@@ -169,7 +169,7 @@
 			this.fBuffer.setLength(0);
 		}
 	}
-	
+
 	void close() {
 		try {
 			this.fReader.close();
@@ -177,7 +177,7 @@
 			// silently ignored
 		}
 	}
-	
+
 	public List<String> readLines() {
 		try {
 			List<String> lines= new ArrayList<>();
@@ -193,7 +193,7 @@
 		}
 		return null;
 	}
-	
+
 	/*
 	 * Returns the number of characters in the given string without
 	 * counting a trailing line separator.
@@ -211,9 +211,9 @@
 		}
 		return length;
 	}
-	
+
 	//---- private
-	
+
 	private int readChar() throws IOException {
 		if (this.fHaveChar) {
 			this.fHaveChar= false;
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/PatchReader.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/PatchReader.java
index 255f503..05a617a 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/PatchReader.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/internal/core/patch/PatchReader.java
@@ -33,7 +33,7 @@
 
 public class PatchReader {
 	private static final boolean DEBUG= false;
-	
+
 	private static final String DEV_NULL= "/dev/null"; //$NON-NLS-1$
 
 	protected static final String MARKER_TYPE= "org.eclipse.compare.rejectedPatchMarker"; //$NON-NLS-1$
@@ -74,7 +74,7 @@
 
 	/**
 	 * Create a patch reader for the given date formats.
-	 * 
+	 *
 	 * @param dateFormats
 	 *            Array of <code>DateFormat</code>s to be used when
 	 *            extracting dates from the patch.
@@ -83,7 +83,7 @@
 		this();
 		this.fDateFormats = dateFormats;
 	}
-	
+
 	public void parse(BufferedReader reader) throws IOException {
 		List<FilePatch2> diffs= new ArrayList<FilePatch2>();
 		HashMap<String, DiffProject> diffProjects= new HashMap<String, DiffProject>(4);
@@ -174,7 +174,7 @@
 		}
 		return nextLine;
 	}
-	
+
 	public void parse(LineReader lr, String line) throws IOException {
 		List<FilePatch2> diffs= new ArrayList<FilePatch2>();
 		boolean reread= false;
@@ -191,7 +191,7 @@
 			reread= false;
 			if (line == null)
 				break;
-								
+
 			// remember some infos
 			if (line.startsWith("Index: ")) { //$NON-NLS-1$
 				fileName= line.substring(7).trim();
@@ -213,19 +213,19 @@
 				diffArgs= fileName= null;
 				reread= true;
 			}
-			
+
 			// Any lines we read here are header lines.
 			// However, if reread is set, we will add them to the header on the next pass through
 			if (!reread) {
 				headerLines.add(line);
 			}
 		}
-		
+
 		lr.close();
-		
+
 		this.fDiffs = diffs.toArray(new FilePatch2[diffs.size()]);
 	}
-	
+
 	private void setHeader(FilePatch2 diff, List<String> headerLines) {
 		String header = LineReader.createString(false, headerLines);
 		diff.setHeader(header);
@@ -243,14 +243,14 @@
 		line= reader.readLine();
 		if (line == null || !line.startsWith("+++ ")) //$NON-NLS-1$
 			return line;
-			
+
 		String[] newArgs= split(line.substring(4));
-	
+
 		FilePatch2 diff = createFileDiff(extractPath(oldArgs, 0, fileName),
 				extractDate(oldArgs, 1), extractPath(newArgs, 0, fileName),
 				extractDate(newArgs, 1));
 		diffs.add(diff);
-				   
+
 		int[] oldRange= new int[2];
 		int[] newRange= new int[2];
 		int remainingOld= -1; // remaining old lines for current hunk
@@ -260,7 +260,7 @@
 		boolean encounteredPlus = false;
 		boolean encounteredMinus = false;
 		boolean encounteredSpace = false;
-		
+
 		try {
 			// read lines of hunk
 			while (true) {
@@ -357,51 +357,51 @@
 				Hunk.createHunk(diff, oldRange, newRange, lines, encounteredPlus, encounteredMinus, encounteredSpace);
 		}
 	}
-	
+
 	/*
 	 * Returns the next line that does not belong to this diff
 	 */
 	private String readContextDiff(List<FilePatch2> diffs, LineReader reader, String line, String args, String fileName) throws IOException {
-		
+
 		String[] oldArgs= split(line.substring(4));
-		
+
 		// read info about new file
 		line= reader.readLine();
 		if (line == null || !line.startsWith("--- ")) //$NON-NLS-1$
 			return line;
-		
+
 		String[] newArgs= split(line.substring(4));
-						
+
 		FilePatch2 diff = createFileDiff(extractPath(oldArgs, 0, fileName),
 				extractDate(oldArgs, 1), extractPath(newArgs, 0, fileName),
 				extractDate(newArgs, 1));
 		diffs.add(diff);
-				   
+
 		int[] oldRange= new int[2];
 		int[] newRange= new int[2];
 		List<String> oldLines= new ArrayList<String>();
 		List<String> newLines= new ArrayList<String>();
 		List<String> lines= oldLines;
-		
+
 
 		boolean encounteredPlus = false;
 		boolean encounteredMinus = false;
 		boolean encounteredSpace = false;
-		
+
 		try {
 			// read lines of hunk
 			while (true) {
-				
+
 				line= reader.readLine();
 				if (line == null)
 					return line;
-				
+
 				int l= line.length();
 				if (l == 0)
 					continue;
 				if (l > 1) {
 					switch (line.charAt(0)) {
-					case '*':	
+					case '*':
 						if (line.startsWith("***************")) {	// new hunk //$NON-NLS-1$
 							// flush old hunk
 							if (oldLines.size() > 0 || newLines.size() > 0) {
@@ -473,7 +473,7 @@
 				Hunk.createHunk(diff, oldRange, newRange, unifyLines(oldLines, newLines), encounteredPlus, encounteredMinus, encounteredSpace);
 		}
 	}
-	
+
 	/*
 	 * Creates a List of lines in the unified format from
 	 * two Lists of lines in the 'classic' format.
@@ -483,29 +483,29 @@
 
 		String[] ol= oldLines.toArray(new String[oldLines.size()]);
 		String[] nl= newLines.toArray(new String[newLines.size()]);
-		
+
 		int oi= 0, ni= 0;
-		
+
 		while (true) {
-			
+
 			char oc= 0;
 			String o= null;
 			if (oi < ol.length) {
 				o= ol[oi];
 				oc= o.charAt(0);
 			}
-			
+
 			char nc= 0;
 			String n= null;
 			if (ni < nl.length) {
 				n= nl[ni];
 				nc= n.charAt(0);
 			}
-			
+
 			// EOF
 			if (oc == 0 && nc == 0)
 				break;
-				
+
 			// deletion in old
 			if (oc == '-') {
 				do {
@@ -517,7 +517,7 @@
 				} while (o.charAt(0) == '-');
 				continue;
 			}
-			
+
 			// addition in new
 			if (nc == '+') {
 				do {
@@ -529,7 +529,7 @@
 				} while (n.charAt(0) == '+');
 				continue;
 			}
-			
+
 			// differing lines on both sides
 			if (oc == '!' && nc == '!') {
 				// remove old
@@ -540,7 +540,7 @@
 						break;
 					o= ol[oi];
 				} while (o.charAt(0) == '!');
-				
+
 				// add new
 				do {
 					result.add('+' + n.substring(2));
@@ -549,10 +549,10 @@
 						break;
 					n= nl[ni];
 				} while (n.charAt(0) == '!');
-				
+
 				continue;
 			}
-			
+
 			// context lines
 			if (oc == ' ' && nc == ' ') {
 				do {
@@ -567,7 +567,7 @@
 				} while (o.charAt(0) == ' ' && n.charAt(0) == ' ');
 				continue;
 			}
-			
+
 			if (oc == ' ') {
 				do {
 					result.add(' ' + o.substring(2));
@@ -589,13 +589,13 @@
 				} while (n.charAt(0) == ' ');
 				continue;
 			}
-			
+
 			Assert.isTrue(false, "unexpected char <" + oc + "> <" + nc + ">"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 		}
-		
+
 		return result;
 	}
-	
+
 	/*
 	 * @return the parsed time/date in milliseconds or IFilePatch.DATE_UNKNOWN
 	 * (0) on error
@@ -607,7 +607,7 @@
 				this.fDateFormats[i].setLenient(true);
 				try {
 					Date date= this.fDateFormats[i].parse(line);
-					return date.getTime();		
+					return date.getTime();
 				} catch (ParseException ex) {
 					// silently ignored
 				}
@@ -616,7 +616,7 @@
 		}
 		return IFilePatch2.DATE_UNKNOWN;
 	}
-	
+
 	/*
 	 * Returns null if file name is "/dev/null".
 	 */
@@ -636,7 +636,7 @@
 		}
 		return null;
 	}
-	
+
 	/*
 	 * Tries to extract two integers separated by a comma.
 	 * The parsing of the line starts at the position after
@@ -672,7 +672,7 @@
 	/*
 	 * Breaks the given string into tab separated substrings.
 	 * Leading and trailing whitespace is removed from each token.
-	 */ 
+	 */
 	private String[] split(String line) {
 		List<String> l= new ArrayList<>();
 		StringTokenizer st= new StringTokenizer(line, "\t"); //$NON-NLS-1$
@@ -699,7 +699,7 @@
 	public FilePatch2[] getDiffs() {
 		return this.fDiffs;
 	}
-	
+
 	public FilePatch2[] getAdjustedDiffs() {
 		if (!isWorkspacePatch() || this.fDiffs.length == 0)
 			return this.fDiffs;
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatch2.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatch2.java
index 17b7be2..308cdce 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatch2.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatch2.java
@@ -15,7 +15,7 @@
 
 /**
  * A representation of a file patch that can be applied to an input stream.
- * 
+ *
  * @noimplement This interface is not intended to be implemented by clients.
  * @since org.eclipse.compare.core 3.5
  */
@@ -31,7 +31,7 @@
 	/**
 	 * Return the target path for this patch. The target path may differ
 	 * depending on whether the patch is being reversed or not.
-	 * 
+	 *
 	 * @param configuration
 	 *            the patch configuration
 	 * @return the target path for this patch
@@ -43,7 +43,7 @@
 	 * Apply this patch to the given contents. The result provides the
 	 * original and patch contents and also indicates whether some portions of
 	 * the patch (called hunks) failed to apply.
-	 * 
+	 *
 	 * @param content
 	 *            the contents
 	 * @param configuration
@@ -58,7 +58,7 @@
 	/**
 	 * Return the header information of the patch or <code>null</code> if there
 	 * was no header text. The header may be multi-line.
-	 * 
+	 *
 	 * @return the header information of the patch or <code>null</code>
 	 */
 	public String getHeader();
@@ -66,7 +66,7 @@
 	/**
 	 * Returns the milliseconds time value of the before date from the patch, or
 	 * DATE_UNKNOWN if the date is unknown.
-	 * 
+	 *
 	 * @return milliseconds time value of the before date from the patch
 	 */
 	public long getBeforeDate();
@@ -74,14 +74,14 @@
 	/**
 	 * Returns the milliseconds time value of the after date from the patch, or
 	 * DATE_UNKNOWN if the date is unknown.
-	 * 
+	 *
 	 * @return milliseconds time value of the after date from the patch
 	 */
 	public long getAfterDate();
 
 	/**
 	 * Returns all the hunks this file patch contains.
-	 * 
+	 *
 	 * @return array of hunks
 	 */
 	public IHunk[] getHunks();
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatchResult.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatchResult.java
index f738a88..993a75e 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatchResult.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IFilePatchResult.java
@@ -17,14 +17,14 @@
 /**
  * A file patch result provides the results of an attempt to apply an
  * {@link IFilePatch2} to the contents of a file. *
- * 
+ *
  * @see IFilePatch2
  * @since 3.3
  * @noimplement This interface is not intended to be implemented by clients.
  *              Clients can obtain patch results from an {@link IFilePatch2}.
  */
 public interface IFilePatchResult {
-	
+
 	/**
 	 * Return a stream the contains the original contents of the file before
 	 * any portions of the patch have been applied.
@@ -33,35 +33,35 @@
 	 * @see #getPatchedContents()
 	 */
 	public InputStream getOriginalContents();
-	
+
 	/**
-	 * Return a stream that contains the file with as much of the patch 
+	 * Return a stream that contains the file with as much of the patch
 	 * applied as possible. if {@link #hasMatches()} returns <code>false</code>
 	 * then the patched contents will match the original contents. Otherwise,
 	 * at least a portion of the patch could be successfully applied. if
 	 * {@link #hasRejects()} returns <code>false</code>, then the entire patch was
 	 * applied. Otherwise, portions could not be applied. The portions that could
 	 * not be applied can be obtained by calling {@link #getRejects()}.
-	 * 
-	 * @return a stream that contains the file with as much of the patch 
+	 *
+	 * @return a stream that contains the file with as much of the patch
 	 * applied as possible.
 	 */
 	public InputStream getPatchedContents();
-	
+
 	/**
 	 * Return whether the patch has portions that were successfully applied.
 	 * @return whether the patch has portions that were successfully applied
 	 * @see #getPatchedContents()
 	 */
 	public boolean hasMatches();
-	
+
 	/**
 	 * Return whether the patch has portions that were not successfully applied.
 	 * @return whether the patch has portions that were not successfully applied
 	 * @see #getPatchedContents()
 	 */
 	public boolean hasRejects();
-	
+
 	/**
 	 * Return the portions of the patch (referred to a hunks) that could not
 	 * be applied.
@@ -70,19 +70,19 @@
 	 * @see #getPatchedContents()
 	 */
 	public IHunk[] getRejects();
-	
+
 	/**
-	 * Returns the name of a charset encoding to be used when decoding the contents 
-	 * of this result into characters. Returns <code>null</code> if a proper 
+	 * Returns the name of a charset encoding to be used when decoding the contents
+	 * of this result into characters. Returns <code>null</code> if a proper
 	 * encoding cannot be determined.
 	 * <p>
 	 * Note that this method does not check whether the result is a supported
-	 * charset name. Callers should be prepared to handle 
-	 * <code>UnsupportedEncodingException</code> where this charset is used. 
+	 * charset name. Callers should be prepared to handle
+	 * <code>UnsupportedEncodingException</code> where this charset is used.
 	 * </p>
 	 *
 	 * @return the name of a charset, or <code>null</code>
-	 * @exception CoreException if an error happens while determining 
+	 * @exception CoreException if an error happens while determining
 	 * the charset. See any refinements for more information.
 	 */
 	public String getCharset() throws CoreException;
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunk.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunk.java
index 41560d3..b32a29a 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunk.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunk.java
@@ -21,7 +21,7 @@
  * this interface is a means to communicate to content merge viewers that one of
  * the sides of a compare input is a patch hunk. Clients can determine which
  * side it is by adapting the side to this interface (see {@link IAdaptable}.
- * 
+ *
  * @since 3.3
  * @noimplement This interface is not intended to be implemented by clients but
  *              can be obtained from an {@link IFilePatchResult}
@@ -33,10 +33,10 @@
 	 * @return a label that can be used to describe the hunk
 	 */
 	public String getLabel();
-	
+
 	/**
 	 * Return the start position of the hunk in the target file.
-	 * 
+	 *
 	 * @return the start position of the hunk in the target file.
 	 */
 	public int getStartPosition();
@@ -51,7 +51,7 @@
 	 * <li> <code>'+'</code> for addition
 	 * <li> <code>'-'</code> for removal
 	 * </ul>
-	 * 
+	 *
 	 * @return hunk's content in the unified format
 	 * @since org.eclipse.compare 3.5
 	 */
@@ -64,7 +64,7 @@
 	 * @return the original contents from which the hunk was generated
 	 */
 	public InputStream getOriginalContents();
-	
+
 	/**
 	 * Return the contents that contain the modifications for this hunk.
 	 * The returned contents usually only represent a portion of the
@@ -72,19 +72,19 @@
 	 * @return the contents that contain the modifications for this hunk
 	 */
 	public InputStream getPatchedContents();
-	
+
 	/**
-	 * Returns the name of a charset encoding to be used when decoding the contents 
-	 * of this hunk into characters. Returns <code>null</code> if a proper 
+	 * Returns the name of a charset encoding to be used when decoding the contents
+	 * of this hunk into characters. Returns <code>null</code> if a proper
 	 * encoding cannot be determined.
 	 * <p>
 	 * Note that this method does not check whether the result is a supported
-	 * charset name. Callers should be prepared to handle 
-	 * <code>UnsupportedEncodingException</code> where this charset is used. 
+	 * charset name. Callers should be prepared to handle
+	 * <code>UnsupportedEncodingException</code> where this charset is used.
 	 * </p>
 	 *
 	 * @return the name of a charset, or <code>null</code>
-	 * @exception CoreException if an error happens while determining 
+	 * @exception CoreException if an error happens while determining
 	 * the charset. See any refinements for more information.
 	 * @deprecated This method can be called before the first attempt to apply
 	 *             the hunk when it is impossible to determine the encoding and
@@ -94,6 +94,6 @@
 	 */
 	@Deprecated
 	public String getCharset() throws CoreException;
-	
-	
+
+
 }
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunkFilter.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunkFilter.java
index 5559734..b7552a4 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunkFilter.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/IHunkFilter.java
@@ -12,14 +12,14 @@
 
 /**
  * Filter that is used to determine if a hunk should be applied or not
- * 
+ *
  * @since org.eclipse.compare.core 3.5
  */
 public interface IHunkFilter {
 
 	/**
 	 * Returns true if the given hunk should be applied
-	 * 
+	 *
 	 * @param hunk
 	 *            the hunk
 	 * @return true if the given hunk should be applied
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchBuilder.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchBuilder.java
index 3dadf08..ac881a0 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchBuilder.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchBuilder.java
@@ -20,10 +20,10 @@
 /**
  * Builder for creating IFilePatch2 and IHunk objects as well as building
  * relationship between them.
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
- * 
+ *
  * @since org.eclipse.compare.core 3.5
  */
 public class PatchBuilder {
@@ -43,7 +43,7 @@
 
 	/**
 	 * Creates an IHunk instance.
-	 * 
+	 *
 	 * @param start
 	 *            the start position in the before file
 	 * @param lines
@@ -72,7 +72,7 @@
 	 * after applying a patch. It is affected by all the hunks that are to be
 	 * applied before a given one. This recalculation is necessary to keep
 	 * IFilePatch2's state coherent.
-	 * 
+	 *
 	 * @param oldPath
 	 *            the path of the before state of the file
 	 * @param oldDate
@@ -103,7 +103,7 @@
 	 * state after applying a patch. It is affected by all the hunks that are to
 	 * be applied before a given one. This recalculation is necessary to keep
 	 * IFilePatch2's state coherent.
-	 * 
+	 *
 	 * @param filePatch
 	 *            a file patch to add hunks to
 	 * @param toAdd
@@ -122,7 +122,7 @@
 	 * state after applying a patch. It is affected by all the hunks that are to
 	 * be applied before a given one. This recalculation is necessary to keep
 	 * IFilePatch2's state coherent.
-	 * 
+	 *
 	 * @param filePatch
 	 *            a file patch to add hunks to
 	 * @param toRemove
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchConfiguration.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchConfiguration.java
index 72dfd0f..8a335e7 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchConfiguration.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchConfiguration.java
@@ -17,7 +17,7 @@
 /**
  * A patch configuration allows clients to set parameters that control how a
  * patch is applied.
- * 
+ *
  * @see IFilePatch2
  * @since 3.3
  * @noextend This class may be instantiated by clients but is not intended to be
@@ -49,9 +49,9 @@
 	}
 
 	/**
-	 * Return the number of prefix segments to be stripped when attempting 
+	 * Return the number of prefix segments to be stripped when attempting
 	 * to apply a patch.
-	 * @return the number of prefix segments to be stripped when attempting 
+	 * @return the number of prefix segments to be stripped when attempting
 	 * to apply a patch
 	 */
 	public int getPrefixSegmentStripCount() {
@@ -59,9 +59,9 @@
 	}
 
 	/**
-	 * Set the number of prefix segments to be stripped when attempting 
+	 * Set the number of prefix segments to be stripped when attempting
 	 * to apply a patch.
-	 * @param stripCount the number of prefix segments to be stripped when attempting 
+	 * @param stripCount the number of prefix segments to be stripped when attempting
 	 * to apply a patch.
 	 */
 	public void setPrefixSegmentStripCount(int stripCount) {
@@ -78,7 +78,7 @@
 	public int getFuzz() {
 		return this.fFuzz;
 	}
-	
+
 	/**
 	 * Set the fuzz factor to be used when applying a patch.
 	 * @param fuzz the fuzz factor to be used when applying a patch.
@@ -94,7 +94,7 @@
 	public boolean isIgnoreWhitespace() {
 		return this.fIgnoreWhitespace;
 	}
-	
+
 	/**
 	 * Set whether whitespace should be ignored
 	 * @param ignoreWhitespace whether whitespace should be ignored
@@ -102,18 +102,18 @@
 	public void setIgnoreWhitespace(boolean ignoreWhitespace) {
 		this.fIgnoreWhitespace = ignoreWhitespace;
 	}
-	
+
 	/**
-	 * Return the property associated with the given key or 
+	 * Return the property associated with the given key or
 	 * <code>null</code> if there is no property for the key.
 	 * @param key the key
-	 * @return the property associated with the given key or 
+	 * @return the property associated with the given key or
 	 * <code>null</code>
 	 */
 	public Object getProperty(String key) {
 		return this.properties.get(key);
 	}
-	
+
 	/**
 	 * Set the property associated with the given key
 	 * @param key the key
@@ -125,7 +125,7 @@
 
 	/**
 	 * Adds a hunk filter.
-	 * 
+	 *
 	 * @param filter the filter
 	 * @since org.eclipse.compare.core 3.5
 	 */
@@ -135,7 +135,7 @@
 
 	/**
 	 * Removes a hunk filter.
-	 * 
+	 *
 	 * @param filter the filter
 	 * @since org.eclipse.compare.core 3.5
 	 */
@@ -146,7 +146,7 @@
 	/**
 	 * Return an array of hunk filters that have been added to this
 	 * configuration.
-	 * 
+	 *
 	 * @return an array of hunk filters that have been added to this configuration
 	 * @since org.eclipse.compare.core 3.5
 	 */
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchParser.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchParser.java
index 37b0d6a..b2113a0 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchParser.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/PatchParser.java
@@ -21,7 +21,7 @@
 
 /**
  * Helper class for parsing patches.
- * 
+ *
  * @since org.eclipse.compare.core 3.5
  */
 public class PatchParser {
@@ -29,7 +29,7 @@
 	/**
 	 * Parse the given patch and return the set of file patches that it
 	 * contains.
-	 * 
+	 *
 	 * @param content
 	 *            a patch reader creator
 	 * @return the set of file patches that the patch contains
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/ReaderCreator.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/ReaderCreator.java
index b7d4433..d65ee01 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/ReaderCreator.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/patch/ReaderCreator.java
@@ -16,7 +16,7 @@
 
 /**
  * Abstract class for creating readers.
- * 
+ *
  * @since org.eclipse.compare.core 3.5
  */
 public abstract class ReaderCreator {
@@ -24,7 +24,7 @@
 	/**
 	 * Creates new reader. The caller is responsible for closing the reader when
 	 * finished.
-	 * 
+	 *
 	 * @return a reader
 	 * @exception CoreException
 	 *                if the reader can't be created
@@ -33,7 +33,7 @@
 
 	/**
 	 * Returns whether the reader can be created.
-	 * 
+	 *
 	 * @return true if the reader can be created, false otherwise
 	 */
 	public boolean canCreateReader() {
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/DifferencesIterator.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
index e446561..a088c04 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/DifferencesIterator.java
@@ -21,14 +21,14 @@
 
 	List fRange;
 	int fIndex;
-	RangeDifference[] fArray;	
+	RangeDifference[] fArray;
 	RangeDifference fDifference;
-	
+
 	/*
 	 * Creates a differences iterator on an array of <code>RangeDifference</code>s.
 	 */
 	DifferencesIterator(RangeDifference[] differenceRanges) {
-		
+
 		this.fArray= differenceRanges;
 		this.fIndex= 0;
 		this.fRange= new ArrayList();
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/IRangeComparator.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/IRangeComparator.java
index c466aa0..31ba1ee 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/IRangeComparator.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/IRangeComparator.java
@@ -18,8 +18,8 @@
  * <p>
  * For example, to compare two text documents and find longest common sequences
  * of matching and non-matching lines, the implementation must break the document
- * into lines. <code>getRangeCount</code> would return the number of lines in the 
- * document, and <code>rangesEqual</code> would compare a specified line given 
+ * into lines. <code>getRangeCount</code> would return the number of lines in the
+ * document, and <code>rangesEqual</code> would compare a specified line given
  * with one in another <code>IRangeComparator</code>.
  * </p>
  * <p>
@@ -31,7 +31,7 @@
 	/**
 	 * Returns the number of comparable entities.
 	 *
-	 * @return the number of comparable entities 
+	 * @return the number of comparable entities
 	 */
 	int getRangeCount();
 
@@ -48,7 +48,7 @@
 
 	/**
 	 * Returns whether a comparison should be skipped because it would be too costly (or lengthy).
-	 * 
+	 *
 	 * @param length a number on which to base the decision whether to return
 	 * 	<code>true</code> or <code>false</code>
 	 * @param maxLength another number on which to base the decision whether to return
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeComparatorLCS.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeComparatorLCS.java
index c4cd878..2e88990 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeComparatorLCS.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeComparatorLCS.java
@@ -20,10 +20,10 @@
 import org.eclipse.core.runtime.SubMonitor;
 
 /* package */ class RangeComparatorLCS extends LCS {
-	
+
 	private final IRangeComparator comparator1, comparator2;
 	private int[][] lcs;
-	
+
 	public static RangeDifference[] findDifferences(AbstractRangeDifferenceFactory factory, IProgressMonitor pm, IRangeComparator left, IRangeComparator right) {
 		RangeComparatorLCS lcs = new RangeComparatorLCS(left, right);
 		SubMonitor monitor = SubMonitor.convert(pm, Messages.RangeComparatorLCS_0, 100);
@@ -35,12 +35,12 @@
 				pm.done();
 		}
 	}
-	
+
 	public RangeComparatorLCS(IRangeComparator comparator1, IRangeComparator comparator2) {
 		this.comparator1 = comparator1;
 		this.comparator2 = comparator2;
 	}
-	
+
 	@Override
 	protected int getLength1() {
 		return this.comparator1.getRangeCount();
@@ -67,7 +67,7 @@
 		this.lcs[0][sl1] = sl1 + 1;
 		this.lcs[1][sl1] = sl2 + 1;
 	}
-	
+
 	public RangeDifference[] getDifferences(SubMonitor subMonitor, AbstractRangeDifferenceFactory factory) {
 		try {
 			List differences = new ArrayList();
@@ -126,25 +126,25 @@
 					// TODO: We need to confirm that this is the proper order
 					differences.add(factory.createRangeDifference(RangeDifference.CHANGE, rightStart, this.comparator2.getRangeCount() - (s2 + 1), leftStart, this.comparator1.getRangeCount() - (s1 + 1)));
 				}
-				
+
 			}
 			return (RangeDifference[]) differences.toArray(new RangeDifference[differences.size()]);
 		} finally {
 			subMonitor.done();
 		}
 	}
-	
+
 	private void worked(SubMonitor subMonitor, int work) {
 		if (subMonitor.isCanceled())
 			throw new OperationCanceledException();
-		subMonitor.worked(work);	
+		subMonitor.worked(work);
 	}
 
 	/**
-	 * This method takes an LCS result interspersed with zeros (i.e. empty slots 
-	 * from the LCS algorithm), compacts it and shifts the LCS chunks as far towards 
+	 * This method takes an LCS result interspersed with zeros (i.e. empty slots
+	 * from the LCS algorithm), compacts it and shifts the LCS chunks as far towards
 	 * the front as possible. This tends to produce good results most of the time.
-	 * 
+	 *
 	 * @param lcsSide A subsequence of original, presumably it is the LCS of it and
 	 *            some other collection of lines
 	 * @param length The number of non-empty (i.e non-zero) entries in LCS
@@ -168,7 +168,7 @@
 			while (lcsSide[j] == 0) {
 				j++;
 			}
-			// Push the difference down as far as possible by comparing the line at the 
+			// Push the difference down as far as possible by comparing the line at the
 			// start of the diff with the line and the end and adjusting if they are the same
 			int nextLine = lcsSide[i - 1] + 1;
 			if (nextLine != lcsSide[j] && comparator.rangesEqual(nextLine - 1, comparator, lcsSide[j] - 1)) {
@@ -183,7 +183,7 @@
 			lcsSide[i] = 0;
 		}
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.internal.LCS#longestCommonSubsequence(org.eclipse.core.runtime.SubMonitor)
 	 */
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifference.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifference.java
index 24bd5f4..cc3ae72 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifference.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifference.java
@@ -59,7 +59,7 @@
 	/**
 	 * the kind of change: NOCHANGE, CHANGE, LEFT, RIGHT, ANCESTOR, CONFLICT,
 	 * ERROR
-	 * 
+	 *
 	 * @since org.eclipse.compare.core 3.5
 	 */
 	protected int kind;
@@ -93,10 +93,10 @@
 	 * @since org.eclipse.compare.core 3.5
 	 */
 	protected int ancestorLength;
-	
+
 	/**
 	 * Creates a new range difference with the given change kind.
-	 * 
+	 *
 	 * @param changeKind
 	 *            the kind of change
 	 * @since org.eclipse.compare.core 3.5
@@ -108,7 +108,7 @@
 	/**
 	 * Creates a new <code>RangeDifference</code> with the given change kind and
 	 * left and right ranges.
-	 * 
+	 *
 	 * @param kind
 	 *            the kind of change
 	 * @param rightStart
@@ -132,7 +132,7 @@
 	/**
 	 * Creates a new <code>RangeDifference</code> with the given change kind and
 	 * left, right, and ancestor ranges.
-	 * 
+	 *
 	 * @param kind
 	 *            the kind of change
 	 * @param rightStart
@@ -256,7 +256,7 @@
 	public int maxLength() {
 		return Math.max(this.rightLength, Math.max(this.leftLength, this.ancestorLength));
 	}
-	
+
 	@Override
 	public boolean equals(Object obj) {
 		if (obj instanceof RangeDifference) {
diff --git a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
index e91a8b4..0937a0b 100644
--- a/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
+++ b/bundles/org.eclipse.compare.core/src/org/eclipse/compare/rangedifferencer/RangeDifferencer.java
@@ -38,28 +38,28 @@
  * @see RangeDifference
  */
 public final class RangeDifferencer {
-	
+
 	private static final RangeDifference[] EMPTY_RESULT= new RangeDifference[0];
-	
+
 	private static final AbstractRangeDifferenceFactory defaultFactory = new AbstractRangeDifferenceFactory() {
 		@Override
 		protected RangeDifference createRangeDifference() {
 			return new RangeDifference(RangeDifference.NOCHANGE);
 		}
 	};
-	
+
 	/* (non Javadoc)
 	 * Cannot be instantiated!
 	 */
 	private RangeDifferencer() {
 		// nothing to do
 	}
-	
+
 	/**
 	 * Finds the differences between two <code>IRangeComparator</code>s.
 	 * The differences are returned as an array of <code>RangeDifference</code>s.
 	 * If no differences are detected an empty array is returned.
-	 * 
+	 *
 	 * @param left the left range comparator
 	 * @param right the right range comparator
 	 * @return an array of range differences, or an empty array if no differences were found
@@ -67,12 +67,12 @@
 	public static RangeDifference[] findDifferences(IRangeComparator left, IRangeComparator right) {
 		return findDifferences((IProgressMonitor)null, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences between two <code>IRangeComparator</code>s.
 	 * The differences are returned as an array of <code>RangeDifference</code>s.
 	 * If no differences are detected an empty array is returned.
-	 * 
+	 *
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param left the left range comparator
 	 * @param right the right range comparator
@@ -82,12 +82,12 @@
 	public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) {
 		return findDifferences(defaultFactory, null, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences between two <code>IRangeComparator</code>s.
 	 * The differences are returned as an array of <code>RangeDifference</code>s.
 	 * If no differences are detected an empty array is returned.
-	 * 
+	 *
 	 * @param factory
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param left the left range comparator
@@ -105,7 +105,7 @@
 	 * If no differences are detected an empty list is returned.
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
-	 * 
+	 *
 	 * @param ancestor the ancestor range comparator or <code>null</code>
 	 * @param left the left range comparator
 	 * @param right the right range comparator
@@ -114,14 +114,14 @@
 	public static RangeDifference[] findDifferences(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {
 		return findDifferences(null, ancestor, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences among three <code>IRangeComparator</code>s.
 	 * The differences are returned as a list of <code>RangeDifference</code>s.
 	 * If no differences are detected an empty list is returned.
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
-	 * 
+	 *
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param ancestor the ancestor range comparator or <code>null</code>
 	 * @param left the left range comparator
@@ -132,14 +132,14 @@
 	public static RangeDifference[] findDifferences(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {
 		return findDifferences(defaultFactory, pm, ancestor, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences among three <code>IRangeComparator</code>s.
 	 * The differences are returned as a list of <code>RangeDifference</code>s.
 	 * If no differences are detected an empty list is returned.
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
-	 * 	 
+	 *
 	 * @param factory
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param ancestor the ancestor range comparator or <code>null</code>
@@ -161,13 +161,13 @@
 			}
 			if (rightAncestorScript == null || leftAncestorScript == null)
 				return null;
-	
+
 			DifferencesIterator myIter= new DifferencesIterator(rightAncestorScript);
 			DifferencesIterator yourIter= new DifferencesIterator(leftAncestorScript);
-	
+
 			List diff3= new ArrayList();
 			diff3.add(factory.createRangeDifference(RangeDifference.ERROR)); // add a sentinel
-	
+
 			int changeRangeStart= 0;
 			int changeRangeEnd= 0;
 			//
@@ -175,7 +175,7 @@
 			//
 			monitor.setWorkRemaining(rightAncestorScript.length + leftAncestorScript.length);
 			while (myIter.fDifference != null || yourIter.fDifference != null) {
-	
+
 				DifferencesIterator startThread;
 				myIter.removeAll();
 				yourIter.removeAll();
@@ -193,7 +193,7 @@
 						startThread= yourIter;
 					} else {
 						if (myIter.fDifference.leftLength == 0 && yourIter.fDifference.leftLength == 0) {
-							//insertion into the same position is conflict. 
+							//insertion into the same position is conflict.
 							changeRangeStart= myIter.fDifference.leftStart;
 							changeRangeEnd= myIter.fDifference.leftEnd();
 							myIter.next();
@@ -210,11 +210,11 @@
 							startThread= myIter;
 						}
 					}
-						
+
 				}
 				changeRangeStart= startThread.fDifference.leftStart;
 				changeRangeEnd= startThread.fDifference.leftEnd();
-	
+
 				startThread.next();
 				monitor.worked(1);
 				//
@@ -233,7 +233,7 @@
 				}
 				diff3.add(createRangeDifference3(factory, myIter, yourIter, diff3, right, left, changeRangeStart, changeRangeEnd));
 			}
-	
+
 			// remove sentinel
 			diff3.remove(0);
 			return (RangeDifference[]) diff3.toArray(EMPTY_RESULT);
@@ -247,7 +247,7 @@
 	 * Finds the differences among two <code>IRangeComparator</code>s.
 	 * In contrast to <code>findDifferences</code>, the result
 	 * contains <code>RangeDifference</code> elements for non-differing ranges too.
-	 * 
+	 *
 	 * @param left the left range comparator
 	 * @param right the right range comparator
 	 * @return an array of range differences
@@ -256,12 +256,12 @@
 			IRangeComparator right) {
 		return findRanges((IProgressMonitor) null, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences among two <code>IRangeComparator</code>s.
 	 * In contrast to <code>findDifferences</code>, the result
 	 * contains <code>RangeDifference</code> elements for non-differing ranges too.
-	 * 
+	 *
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param left the left range comparator
 	 * @param right the right range comparator
@@ -271,12 +271,12 @@
 	public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator left, IRangeComparator right) {
 		return findRanges(defaultFactory, pm, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences among two <code>IRangeComparator</code>s.
 	 * In contrast to <code>findDifferences</code>, the result
 	 * contains <code>RangeDifference</code> elements for non-differing ranges too.
-	 * 
+	 *
 	 * @param factory
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param left the left range comparator
@@ -318,7 +318,7 @@
 	 * contains <code>RangeDifference</code> elements for non-differing ranges too.
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
-	 * 
+	 *
 	 * @param ancestor the ancestor range comparator or <code>null</code>
 	 * @param left the left range comparator
 	 * @param right the right range comparator
@@ -327,14 +327,14 @@
 	public static RangeDifference[] findRanges(IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {
 		return findRanges(null, ancestor, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences among three <code>IRangeComparator</code>s.
 	 * In contrast to <code>findDifferences</code>, the result
 	 * contains <code>RangeDifference</code> elements for non-differing ranges too.
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
-	 * 
+	 *
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param ancestor the ancestor range comparator or <code>null</code>
 	 * @param left the left range comparator
@@ -345,14 +345,14 @@
 	public static RangeDifference[] findRanges(IProgressMonitor pm, IRangeComparator ancestor, IRangeComparator left, IRangeComparator right) {
 		return findRanges(defaultFactory, pm, ancestor, left, right);
 	}
-	
+
 	/**
 	 * Finds the differences among three <code>IRangeComparator</code>s.
 	 * In contrast to <code>findDifferences</code>, the result
 	 * contains <code>RangeDifference</code> elements for non-differing ranges too.
 	 * If the ancestor range comparator is <code>null</code>, a two-way
 	 * comparison is performed.
-	 * 
+	 *
 	 * @param factory
 	 * @param pm if not <code>null</code> used to report progress
 	 * @param ancestor the ancestor range comparator or <code>null</code>
@@ -400,7 +400,7 @@
 	 * Creates a <code>RangeDifference3</code> given the
 	 * state of two DifferenceIterators.
 	 */
-	private static RangeDifference createRangeDifference3(AbstractRangeDifferenceFactory configurator, DifferencesIterator myIter, DifferencesIterator yourIter, List diff3, 
+	private static RangeDifference createRangeDifference3(AbstractRangeDifferenceFactory configurator, DifferencesIterator myIter, DifferencesIterator yourIter, List diff3,
 		IRangeComparator right, IRangeComparator left, int changeRangeStart,  int changeRangeEnd) {
 
 		int rightStart, rightEnd;
@@ -458,7 +458,7 @@
 		}
 		return false;
 	}
-	
+
 	/*
 	 * Tests if two ranges are equal
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
index 6e6e8b1..79922a0 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/BufferedContent.java
@@ -27,22 +27,22 @@
  * (by means of <code>getContents</code>) and the <code>BufferedContent</code> is not modified (with
  * <code>setContent</code>) no buffering takes place.
  * Buffering starts when either method <code>getContent</code> or <code>setContent</code> is called.
- * 
+ *
  * @see IContentChangeNotifier
  * @see IStreamContentAccessor
  */
 public abstract class BufferedContent implements IContentChangeNotifier, IStreamContentAccessor {
-	
+
 	byte[] fContent;
 	private ContentChangeNotifier fChangeNotifier;
-	
+
 	/**
 	 * Creates a buffered stream content accessor.
 	 */
 	protected BufferedContent() {
 		// empty implementation
 	}
-		
+
 	/* (non-Javadoc)
 	 * see IStreamContentAccessor.getContents
 	 */
@@ -62,7 +62,7 @@
 	 * @exception CoreException if the contents could not be accessed
 	 */
 	protected abstract InputStream createStream() throws CoreException;
-	
+
 	/**
 	 * Sets the contents. Registered content change listeners are notified.
 	 *
@@ -72,7 +72,7 @@
 		fContent= contents;
 		fireContentChanged();
 	}
-	
+
 	/**
 	 * Returns the contents as an array of bytes.
 	 *
@@ -97,7 +97,7 @@
 	public void discardBuffer() {
 		fContent= null;
 	}
-	
+
 	/* (non-Javadoc)
 	 * see IContentChangeNotifier.addChangeListener
 	 */
@@ -106,7 +106,7 @@
 			fChangeNotifier= new ContentChangeNotifier(this);
 		fChangeNotifier.addContentChangeListener(listener);
 	}
-	
+
 	/* (non-Javadoc)
 	 * see IContentChangeNotifier.removeChangeListener
 	 */
@@ -117,7 +117,7 @@
 				fChangeNotifier= null;
 		}
 	}
-	
+
 	/**
 	 * Notifies all registered <code>IContentChangeListener</code>s of a content change.
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
index e2f3c15..fb90e0a 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareUI.java
@@ -4,7 +4,7 @@
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
  *  http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -39,17 +39,17 @@
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
 public final class CompareUI {
-	
+
 	/**
 	 * Compare Plug-in ID (value <code>"org.eclipse.compare"</code>).
 	 * @since 2.0
 	 */
 	public static final String PLUGIN_ID= "org.eclipse.compare"; //$NON-NLS-1$
-	
+
 	/**
 	 * The id of the Compare Preference Page
 	 * (value <code>"org.eclipse.compare.internal.ComparePreferencePage"</code>).
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	public static final String PREFERENCE_PAGE_ID= "org.eclipse.compare.internal.ComparePreferencePage"; //$NON-NLS-1$
@@ -69,7 +69,7 @@
 	 * @since 2.0
 	 */
 	public static final ImageDescriptor DESC_ETOOL_NEXT= CompareUIPlugin.getImageDescriptor(ICompareUIConstants.ETOOL_NEXT);
-	
+
 	/**
 	 * Image descriptor for the disabled icon of the 'Previous' tool bar button.
 	 * @since 2.0
@@ -93,15 +93,15 @@
  	 * title bar.
  	 */
 	public static final String COMPARE_VIEWER_TITLE= "org.eclipse.compare.CompareUI.CompareViewerTitle"; //$NON-NLS-1$
-	
+
 	private CompareUI() {
 		// empty implementation
 	}
-	
+
 	public static AbstractUIPlugin getPlugin() {
 		return CompareUIPlugin.getDefault();
 	}
-	
+
 	/**
 	 * Returns this plug-in's resource bundle.
 	 *
@@ -110,7 +110,7 @@
 	public static ResourceBundle getResourceBundle() {
 		return CompareUIPlugin.getDefault().getResourceBundle();
 	}
-	
+
 	/**
 	 * Performs the comparison described by the given input and opens a
 	 * compare editor on the result in the currently active workbench page.
@@ -120,11 +120,11 @@
 	public static void openCompareEditor(CompareEditorInput input) {
 		openCompareEditor(input, true);
 	}
-	
+
 	/**
 	 * Performs the comparison described by the given input and opens a compare
 	 * editor on the result in the currently active workbench page.
-	 * 
+	 *
 	 * @param input
 	 *            the input on which to open the compare editor
 	 * @param activate
@@ -136,7 +136,7 @@
 	public static void openCompareEditor(CompareEditorInput input, boolean activate) {
 		openCompareEditorOnPage(input, null, activate);
 	}
-			
+
 	/**
 	 * Performs the comparison described by the given input and opens a
 	 * compare editor on the result in the given workbench page.
@@ -148,11 +148,11 @@
 	public static void openCompareEditorOnPage(CompareEditorInput input, IWorkbenchPage page) {
 		openCompareEditorOnPage(input, page, true);
 	}
-	
+
 	/**
 	 * Performs the comparison described by the given input and opens a compare
 	 * editor on the result in the given workbench page.
-	 * 
+	 *
 	 * @param input
 	 *            the input on which to open the compare editor
 	 * @param page
@@ -167,7 +167,7 @@
 		if (plugin != null)
 			plugin.openCompareEditor(input, page, null, activate);
 	}
-	
+
 	/**
 	 * Performs the comparison described by the given input and
 	 * shows the result in the given editor.
@@ -179,11 +179,11 @@
 	public static void reuseCompareEditor(CompareEditorInput input, IReusableEditor editor) {
 		reuseCompareEditor(input, editor, true);
 	}
-	
+
 	/**
 	 * Performs the comparison described by the given input and shows the result
 	 * in the given editor.
-	 * 
+	 *
 	 * @param input
 	 *            the input on which to open the compare editor
 	 * @param editor
@@ -198,7 +198,7 @@
 		if (plugin != null)
 			plugin.openCompareEditor(input, null, editor, activate);
 	}
-			
+
 	/**
 	 * Performs the comparison described by the given input and opens a
 	 * modal compare dialog on the result.
@@ -210,7 +210,7 @@
 		if (plugin != null)
 			plugin.openCompareDialog(input);
 	}
-			
+
 	/**
 	 * Registers an image descriptor for the given type.
 	 *
@@ -220,7 +220,7 @@
 	public static void registerImageDescriptor(String type, ImageDescriptor descriptor) {
 		CompareUIPlugin.registerImageDescriptor(type, descriptor);
 	}
-	
+
 	/**
 	 * Returns a shared image for the given type, or a generic image if none
 	 * has been registered for the given type.
@@ -236,7 +236,7 @@
 	public static Image getImage(String type) {
 		return CompareUIPlugin.getImage(type);
 	}
-		
+
 	/**
 	 * Registers the given image for being disposed when this plug-in is shutdown.
 	 *
@@ -245,7 +245,7 @@
 	public static void disposeOnShutdown(Image image) {
 		CompareUIPlugin.disposeOnShutdown(image);
 	}
-	
+
 	/**
 	 * Returns a shared image for the given adaptable.
 	 * This convenience method queries the given adaptable
@@ -263,8 +263,8 @@
 	public static Image getImage(IAdaptable adaptable) {
 		return CompareUIPlugin.getImage(adaptable);
 	}
-		
-	
+
+
 	/**
 	 * Creates a stream merger for the given content type.
 	 * If no stream merger is registered for the given content type <code>null</code> is returned.
@@ -272,7 +272,7 @@
 	 * @param type the type for which to find a stream merger
 	 * @return a stream merger for the given type, or <code>null</code> if no
 	 *   stream merger has been registered
-	 * @deprecated Clients should obtain an <code>org.eclipse.team.core.mapping.IStorageMerger</code> from the 
+	 * @deprecated Clients should obtain an <code>org.eclipse.team.core.mapping.IStorageMerger</code> from the
 	 * <code>org.eclipse.team.core.Team#createMerger(IContentType)</code> method.
 	 */
 	public static IStreamMerger createStreamMerger(IContentType type) {
@@ -286,7 +286,7 @@
 	 * @param type the type for which to find a stream merger
 	 * @return a stream merger for the given type, or <code>null</code> if no
 	 *   stream merger has been registered
-	 * @deprecated Clients should obtain an <code>org.eclipse.team.core.mapping.IStorageMerger</code> from the 
+	 * @deprecated Clients should obtain an <code>org.eclipse.team.core.mapping.IStorageMerger</code> from the
 	 * <code>org.eclipse.team.core.Team#createMerger(String)</code> method.
 	 */
 	public static IStreamMerger createStreamMerger(String type) {
@@ -311,7 +311,7 @@
 
 		return CompareUIPlugin.getDefault().findStructureViewer(oldViewer, input, parent, configuration);
 	}
-	
+
 	/**
 	 * Returns a content compare viewer based on an old viewer and an input object.
 	 * If the old viewer is suitable for showing the input the old viewer
@@ -329,7 +329,7 @@
 			CompareConfiguration configuration) {
 		return CompareUIPlugin.getDefault().findContentViewer(oldViewer, input, parent, configuration);
 	}
-	
+
 	/**
 	 * Returns a content compare viewer based on an old viewer and an input
 	 * object. If the old viewer is suitable for showing the input the old
@@ -350,7 +350,7 @@
 	 */
 	public static Viewer findContentViewer(Viewer oldViewer, Object input, Composite parent,
 			CompareConfiguration configuration) {
-		
+
 		return CompareUIPlugin.getDefault().findContentViewer(oldViewer, input, parent, configuration);
 	}
 
@@ -358,7 +358,7 @@
 	 * Adds an alias for the given type. Subsequent calls to
 	 * <code>findStructureViewer</code> treat alias as a synonym for type and
 	 * return the same viewer.
-	 * 
+	 *
 	 * @param type
 	 *            a type name for which a viewer has been registered
 	 * @param alias
@@ -370,12 +370,12 @@
 	public static void addStructureViewerAlias(String type, String alias) {
 		CompareUIPlugin.getDefault().addStructureViewerAlias(type, alias);
 	}
-	
+
 	/**
 	 * Remove all aliases for the given type. This method does not affect the
 	 * initial binding between type and viewer. If no aliases exist for the
 	 * given type this method does nothing.
-	 * 
+	 *
 	 * @param type
 	 *            the type name for which all synonyms are removed.
 	 * @since 2.0
@@ -385,7 +385,7 @@
 	public static void removeAllStructureViewerAliases(String type) {
 		CompareUIPlugin.getDefault().removeAllStructureViewerAliases(type);
 	}
-	
+
 	/**
 	 * Retrieve a document for the given input or return <code>null</code> if
 	 * no document has been registered for the input.
@@ -415,7 +415,7 @@
 	public static void unregisterDocument(IDocument document) {
 		DocumentManager.remove(document);
 	}
-	
+
 	/**
 	 * Create and return a structure creator for the given typed element.
 	 * Return <code>null</code> if an appropriate structure creator could
@@ -431,6 +431,6 @@
 		}
 		return null;
 	}
-	
+
 }
 
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
index 7b362a4..fc040e1 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerPane.java
@@ -48,10 +48,10 @@
  * (if there is one).
  * If more <code>Splitters</code> are nested maximizing walks up and
  * maximizes to the outermost <code>Splitter</code>.
- * 
+ *
  * @since 2.0
  */
-public class CompareViewerPane extends ViewForm implements ISelectionProvider, 
+public class CompareViewerPane extends ViewForm implements ISelectionProvider,
 		IDoubleClickListener, ISelectionChangedListener, IOpenListener, IAdaptable {
 	private ToolBarManager fToolBarManager;
 	private Object fInput;
@@ -72,16 +72,16 @@
 	 * @exception org.eclipse.swt.SWTException <ul>
 	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
 	 * </ul>
-	 */		
+	 */
 	public CompareViewerPane(Composite container, int style) {
 		super(container, style);
-		
+
 		marginWidth= 0;
 		marginHeight= 0;
-		
+
 		Control topLeft = createTopLeft(this);
 		setTopLeft(topLeft);
-		
+
 		MouseAdapter ml= new MouseAdapter() {
 			@Override
 			public void mouseDoubleClick(MouseEvent e) {
@@ -92,11 +92,11 @@
 				if (parent instanceof Splitter)
 					((Splitter)parent).setMaximizedControl(CompareViewerPane.this);
 			}
-		};	
-				
+		};
+
 		addMouseListener(ml);
 		getTopLeft().addMouseListener(ml);
-		
+
 		addDisposeListener(new DisposeListener() {
 			@Override
 			public void widgetDisposed(DisposeEvent e) {
@@ -110,7 +110,7 @@
 			}
 		});
 	}
-	
+
 	/**
 	 * @param parent
 	 *            a widget which will be the parent of the control (cannot be
@@ -129,23 +129,23 @@
 		};
 		return label;
 	}
-	
+
 	/**
 	 * Set the pane's title text.
 	 * The value <code>null</code> clears it.
-	 * 
+	 *
 	 * @param label the text to be displayed in the pane or null
 	 */
 	public void setText(String label) {
 		CLabel cl= (CLabel) getTopLeft();
 		if (cl != null && !cl.isDisposed())
-			cl.setText(label);		
+			cl.setText(label);
 	}
-	
+
 	/**
 	 * Set the pane's title Image.
 	 * The value <code>null</code> clears it.
-	 * 
+	 *
 	 * @param image the image to be displayed in the pane or null
 	 */
 	public void setImage(Image image) {
@@ -153,11 +153,11 @@
 		if (cl != null)
 			cl.setImage(image);
 	}
-	
+
 	/**
 	 * Returns a <code>ToolBarManager</code> if the given parent is a
 	 * <code>CompareViewerPane</code> or <code>null</code> otherwise.
-	 * 
+	 *
 	 * @param parent a <code>Composite</code> or <code>null</code>
 	 * @return a <code>ToolBarManager</code> if the given parent is a <code>CompareViewerPane</code> otherwise <code>null</code>
 	 */
@@ -171,7 +171,7 @@
 
 	/**
 	 * Clears tool items in the <code>CompareViewerPane</code>'s control bar.
-	 * 
+	 *
 	 * @param parent a <code>Composite</code> or <code>null</code>
 	 */
 	public static void clearToolBar(Composite parent) {
@@ -181,9 +181,9 @@
 			tbm.update(true);
 		}
 	}
-	
+
 	//---- private stuff
-	
+
 	private ToolBarManager getToolBarManager() {
 		if (fToolBarManager != null && fToolBarManager.getControl() == null)
 			return null;
@@ -208,29 +208,29 @@
 		}
 		return fToolBarManager;
 	}
-	
+
 	/**
 	 * Returns the current input of this pane or null if the pane has no input.
-	 * 
+	 *
 	 * @return an <code>Object</code> that is the input to this pane or null if the pane has no input.
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public Object getInput() {
 		return fInput;
 	}
-	
+
 	/**
-	 * Sets the input object of this pane. 
-	 * 
+	 * Sets the input object of this pane.
+	 *
 	 * @param input the new input object or <code>null</code>
 	 * @since 3.3
-	 */ 
+	 */
 	public void setInput(Object input) {
 		if (fInput != input)
 			fInput= input;
 	}
-	
+
 	@Override
 	public void addSelectionChangedListener(ISelectionChangedListener l) {
 		fSelectionListeners.add(l);
@@ -240,24 +240,24 @@
 	public void removeSelectionChangedListener(ISelectionChangedListener l) {
 		fSelectionListeners.remove(l);
 	}
-	
+
 	@Override
 	public ISelection getSelection() {
 		return null;
 	}
-	
+
 	@Override
 	public void setSelection(ISelection s) {
 		// Default is to do nothing
 	}
-	
+
 	@Override
 	public void selectionChanged(SelectionChangedEvent ev) {
 		for (ISelectionChangedListener listener : fSelectionListeners) {
 			listener.selectionChanged(ev);
 		}
 	}
-	
+
 	@Override
 	public void doubleClick(DoubleClickEvent event) {
 		for (IDoubleClickListener listener : fDoubleClickListener) {
@@ -277,7 +277,7 @@
 	}
 
 	/**
-	 * Remove a double-click listener. Removing a listener that is not 
+	 * Remove a double-click listener. Removing a listener that is not
 	 * registered has no effect.
 	 * @param listener the listener
 	 * @since 3.3
@@ -298,7 +298,7 @@
 	}
 
 	/**
-	 * Remove an open listener. Removing a listener that is not 
+	 * Remove an open listener. Removing a listener that is not
 	 * registered has no effect.
 	 * @param listener the listener
 	 * @since 3.3
@@ -306,14 +306,14 @@
 	public void removeOpenListener(IOpenListener listener) {
 		fOpenListener.remove(listener);
 	}
-	
+
 	@Override
 	public void open(OpenEvent event) {
 		Object[] listeners= fOpenListener.getListeners();
 		for (int i= 0; i < listeners.length; i++)
 			((IOpenListener) listeners[i]).open(event);
 	}
-	
+
 	@Override
 	public <T> T getAdapter(Class<T> adapter) {
 		return Platform.getAdapterManager().getAdapter(this, adapter);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
index eea4162..ceffe67 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/CompareViewerSwitchingPane.java
@@ -31,7 +31,7 @@
 
 /**
  * A custom <code>CompareViewerPane</code> that supports dynamic viewer switching.
- * 
+ *
  * <p>
  * Clients must implement the viewer switching strategy by implementing
  * the <code>getViewer(Viewer, Object)</code> method.
@@ -39,7 +39,7 @@
  * If a property with the name <code>CompareUI.COMPARE_VIEWER_TITLE</code> is set
  * on the top level SWT control of a viewer, it is used as a title in the <code>CompareViewerPane</code>'s
  * title bar.
- * 
+ *
  * @since 2.0
  */
 public abstract class CompareViewerSwitchingPane extends CompareViewerPane {
@@ -47,7 +47,7 @@
 	private boolean fControlVisibility;
 	private String fTitle;
 	private String fTitleArgument;
-	
+
 	/**
 	 * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the
 	 * specified SWT style bits.
@@ -61,11 +61,11 @@
 	 * @exception org.eclipse.swt.SWTException <ul>
 	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
 	 * </ul>
-	 */		
+	 */
 	public CompareViewerSwitchingPane(Composite parent, int style) {
 		this(parent, style, false);
 	}
-	
+
 	/**
 	 * Creates a <code>CompareViewerSwitchingPane</code> as a child of the given parent and with the
 	 * specified SWT style bits.
@@ -80,14 +80,14 @@
 	 * @exception org.eclipse.swt.SWTException <ul>
 	 *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li>
 	 * </ul>
-	 */		
+	 */
 	public CompareViewerSwitchingPane(Composite parent, int style, boolean visibility) {
 		super(parent, style);
 
 		fControlVisibility= visibility;
-		
+
 		setViewer(new NullViewer(this));
-		
+
 		addDisposeListener(
 			new DisposeListener() {
 				@Override
@@ -104,25 +104,25 @@
 			}
 		);
 	}
-	
+
 	/**
 	 * Returns the current viewer.
-	 * 
+	 *
 	 * @return the current viewer
 	 */
 	public Viewer getViewer() {
 		return fViewer;
 	}
-	
+
 	private void setViewer(Viewer newViewer) {
 		if (newViewer == fViewer)
 			return;
-				
+
 		boolean oldEmpty= isEmpty();
 
 		if (fViewer != null) {
 			fViewer.removeSelectionChangedListener(this);
-				 
+
 			if (fViewer instanceof StructuredViewer) {
 				StructuredViewer sv= (StructuredViewer) fViewer;
 				sv.removeDoubleClickListener(this);
@@ -131,9 +131,9 @@
 
 			Control content= getContent();
 			setContent(null);
-			
+
 			fViewer.setInput(null);
-								
+
 			if (content != null && !content.isDisposed())
 				content.dispose();
 		} else {
@@ -160,13 +160,13 @@
 				sv.addDoubleClickListener(this);
 				sv.addOpenListener(this);
 			}
-			
+
 			if (oldEmpty != newEmpty) {	// re-layout my container
 				Composite parent= getParent();
 				if (parent instanceof Splitter)
 					((Splitter)parent).setVisible(this, fControlVisibility ? !newEmpty : true);
 			}
-				
+
 			layout(true);
 		}
 	}
@@ -175,7 +175,7 @@
 	 * Returns the optional title argument that has been set with
 	 * <code>setTitelArgument</code> or <code>null</code> if no optional title
 	 * argument has been set.
-	 * 
+	 *
 	 * @return the optional title argument or <code>null</code>
 	 * @noreference This method is for internal use only. Clients should not
 	 *              call this method.
@@ -189,7 +189,7 @@
 	/**
 	 * Returns <code>true</code> if no viewer is installed or if the current viewer
 	 * is a <code>NullViewer</code>.
-	 * 
+	 *
 	 * @return <code>true</code> if no viewer is installed or if the current viewer is a <code>NullViewer</code>
 	 */
 	public boolean isEmpty() {
@@ -208,7 +208,7 @@
 		if (fViewer != null)
 			 fViewer.setSelection(s);
 	}
-	
+
 	private boolean hasFocus2() {
 		// do we have focus?
 		Display display= getDisplay();
@@ -218,7 +218,7 @@
 					return true;
 		return false;
 	}
-	
+
 	/**
 	 * @param input the input
 	 * @return true, if the input is considered as changed
@@ -229,9 +229,9 @@
 	protected boolean inputChanged(Object input) {
 		return getInput() != input;
 	}
-		
+
 	/**
-	 * Sets the input object of this pane. 
+	 * Sets the input object of this pane.
 	 * For this input object a suitable viewer is determined by calling the abstract
 	 * method <code>getViewer(Viewer, Object)</code>.
 	 * If the returned viewer differs from the current one, the old viewer
@@ -241,16 +241,16 @@
 	 * <code>setInput(Object)</code> is called.
 	 * If the input is <code>null</code> the pane is cleared,
 	 * that is the current viewer is disposed.
-	 * 
+	 *
 	 * @param input the new input object or <code>null</code>
-	 */ 
+	 */
 	@Override
 	public void setInput(Object input) {
 		if (!inputChanged(input))
 			return;
 
 		boolean hadFocus = hasFocus2();
-		
+
 		super.setInput(input);
 
 		// viewer switching
@@ -263,7 +263,7 @@
 				return;
 			newViewer= new NullViewer(this);
 		}
-		
+
 		setViewer(newViewer);
 
 		// set input
@@ -276,8 +276,8 @@
 		if (!(fViewer instanceof NullViewer) && input instanceof ICompareInput)
 			image= ((ICompareInput)input).getImage();
 		setImage(image);
-		
-		String title= null;	
+
+		String title= null;
 		if (fViewer != null) {
 			Control c= fViewer.getControl();
 			if (c != null) {
@@ -286,16 +286,16 @@
 					title= (String) data;
 				if (hadFocus)
 					c.setFocus();
-			}	
+			}
 		}
-			
+
 		fTitle= title;
 		updateTitle();
 	}
-	
+
 	/**
 	 * Sets an additional and optional argument for the pane's title.
-	 * 
+	 *
 	 * @param argument
 	 *            an optional argument for the pane's title
 	 * @noreference This method is for internal use only. Clients should not
@@ -311,11 +311,11 @@
 	private void updateTitle() {
 		if (fTitle != null) {
 			if (fTitleArgument != null) {
-				String format= CompareMessages.CompareViewerSwitchingPane_Titleformat;	
+				String format= CompareMessages.CompareViewerSwitchingPane_Titleformat;
 				String t= MessageFormat.format(format, fTitle, fTitleArgument);
 				setText(t);
 			} else
-				setText(fTitle);			
+				setText(fTitle);
 		} else {
 			setText("");	//$NON-NLS-1$
 		}
@@ -355,7 +355,7 @@
 		}
 		return super.getAdapter(adapter);
 	}
-	
+
 	@Override
 	public boolean setFocus() {
 		Viewer v= getViewer();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
index 7e35a35..71bf31e 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/HistoryItem.java
@@ -34,9 +34,9 @@
  * @noextend This class is not intended to be subclassed by clients.
  */
 public class HistoryItem implements IEncodedStreamContentAccessor, ITypedElement, IModificationDate, IResourceProvider {
-	
+
 	private ITypedElement fBase;
-	private IFileState fFileState; 
+	private IFileState fFileState;
 
 	/**
 	 * Creates a <code>HistoryItem</code> object which combines the given <code>IFileState</code>
@@ -50,21 +50,21 @@
 		fBase= base;
 		fFileState= fileState;
 	}
-	
+
 	/* (non-Javadoc)
 	 * see ITypedElement.getName
 	 */
 	public String getName() {
 		return fBase.getName();
 	}
-	
+
 	/* (non-Javadoc)
 	 * see ITypedElement.getImage
 	 */
 	public Image getImage() {
 		return fBase.getImage();
 	}
-	
+
 	/* (non-Javadoc)
 	 * see ITypedElement.getType
 	 */
@@ -78,7 +78,7 @@
 	public long getModificationDate() {
 		return fFileState.getModificationTime();
 	}
-	
+
 	/* (non-Javadoc)
 	 * see IStreamContentAccessor.getContents
 	 */
@@ -90,7 +90,7 @@
 	 * @see org.eclipse.compare.IEncodedStreamContentAccessor#getCharset()
 	 */
 	public String getCharset() throws CoreException {
-	    String charset= fFileState.getCharset(); 
+	    String charset= fFileState.getCharset();
 	    if (charset == null) {
 		    IResource resource= getResource();
 		    if (resource instanceof IEncodedStorage)
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareContainer.java
index cde4918..67497d1 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareContainer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareContainer.java
@@ -27,17 +27,17 @@
  * @since 3.3
  */
 public interface ICompareContainer extends IRunnableContext{
-	
+
 	/**
 	 * Register for change events for the given compare input. Although clients can register
-	 * with the compare input directly, registering through the container allows for 
-	 * deterministic and optimized behavior in some cases. Registering multiple times for the 
+	 * with the compare input directly, registering through the container allows for
+	 * deterministic and optimized behavior in some cases. Registering multiple times for the
 	 * same compare input has no effect.
 	 * @param input the compare input
 	 * @param listener the compare input change listener
 	 */
 	public void addCompareInputChangeListener(ICompareInput input, ICompareInputChangeListener listener);
-	
+
 	/**
 	 * Remove the change listener from the given compare input. Removing a listener that is not
 	 * registered has no effect.
@@ -55,20 +55,20 @@
 	 * @param selectionProvider the selection provider
 	 */
 	public void registerContextMenu(MenuManager menu, ISelectionProvider selectionProvider);
-	
+
 	/**
 	 * Set the status message displayed by the container to the given message
 	 * @param message the status message
 	 */
 	public void setStatusMessage(String message);
-	
+
 	/**
 	 * Return the action bars for the container or <code>null</code> if the container
 	 * does not have an action bars.
 	 * @return the action bars for the container or <code>null</code>
 	 */
 	public IActionBars getActionBars();
-	
+
 	/**
 	 * Return the service locator for the container or <code>null</code> if the container
 	 * does not have one.
@@ -82,7 +82,7 @@
 	 * @return the {@link ICompareNavigator} associated with this container or <code>null</code>
 	 */
 	public ICompareNavigator getNavigator();
-	
+
 	/**
 	 * Queue the given task to be run asynchronously. If the given runnable was
 	 * previously queued to run asynchronously and it has not yet run, the task
@@ -91,11 +91,11 @@
 	 * to the end of the queue.
 	 * <p>
 	 * This method should be treated as a request to run the given task asynchronously.
-	 * However, clients should not assume that the code will be run asynchronously. 
+	 * However, clients should not assume that the code will be run asynchronously.
 	 * Depending on the container implementation, a call to this method may or may
 	 * not block the caller until the task is completed. Also, the task may be executed
 	 * in a modal or non-modal fashion.
-	 * 
+	 *
 	 * @param runnable the task to be performed
 	 */
 	public void runAsynchronously(IRunnableWithProgress runnable);
@@ -107,5 +107,5 @@
 	 * <code>null</code>
 	 */
 	public IWorkbenchPart getWorkbenchPart();
-	
+
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareFilter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareFilter.java
index 0c34ae6..7de9324 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareFilter.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareFilter.java
@@ -19,7 +19,7 @@
  * A filter that can be applied during the comparison of documents that can be

  * used to customize the detection of text differences via the compareFilter

  * extension point. Filters are exposed as toggle actions in the compare viewer.

- * 

+ *

  * @noreference This interface is not intended to be referenced by clients

  * @since 3.6

  */

@@ -50,7 +50,7 @@
 

 	/**

 	 * Forwards the current input objects of the compare

-	 * 

+	 *

 	 * @param input

 	 *            the merge viewer input

 	 * @param ancestor

@@ -66,7 +66,7 @@
 	/**

 	 * Identifies the regions of a line of text in a comparison that should be

 	 * ignored for comparison purposes.

-	 * 

+	 *

 	 * @param lineComparison

 	 *            contains values for the keys <CODE>THIS_LINE</CODE>,

 	 *            <CODE>THIS_CONTRIBUTOR</CODE>, <CODE>OTHER_LINE</CODE> and

@@ -78,7 +78,7 @@
 

 	/**

 	 * Returns whether the filter should be enabled when first initialized

-	 * 

+	 *

 	 * @return default enablement

 	 */

 	public boolean isEnabledInitially();

@@ -90,7 +90,7 @@
 	 * line will be the same regardless of what line it is being compared to,

 	 * returning <code>true</code> to this method will cause the ignored region

 	 * calculations to be re-used and improve the performance of the comparison.

-	 * 

+	 *

 	 * @return ignored region results can be cached

 	 */

 	public boolean canCacheFilteredRegions();

diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareInputLabelProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareInputLabelProvider.java
index 1f5fc63..f1aa7cf 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareInputLabelProvider.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareInputLabelProvider.java
@@ -14,11 +14,11 @@
 import org.eclipse.swt.graphics.Image;
 
 /**
- * A label provider that provides the label and image for the left, right and 
+ * A label provider that provides the label and image for the left, right and
  * ancestor sides for a compare input being shown in compare/merge viewers.
  * <p>
  * This interface may be implemented by clients.
- * 
+ *
  * @since 3.3
  */
 public interface ICompareInputLabelProvider extends ILabelProvider {
@@ -31,16 +31,16 @@
 	 * @return the label for the ancestor side or <code>null</code>
 	 */
 	String getAncestorLabel(Object input);
-	
+
 	/**
 	 * Returns the image for the ancestor side of compare/merge viewers.
 	 * This image is typically shown in the title of the ancestor area in a compare viewer.
 	 *
 	 * @param input the input object of a compare/merge viewer or <code>null</code>
 	 * @return the image for the ancestor side or <code>null</code>
-	 */	
+	 */
 	Image getAncestorImage(Object input);
-	
+
 	/**
 	 * Returns the label for the left hand side of compare/merge viewers.
 	 * This label is typically shown in the title of the left side of a compare viewer.
@@ -49,16 +49,16 @@
 	 * @return the label for the left hand side or <code>null</code>
 	 */
 	String getLeftLabel(Object input);
-	
+
 	/**
 	 * Returns the image for the left hand side of compare/merge viewers.
 	 * This image is typically shown in the title of the left side of a compare viewer.
 	 *
 	 * @param input the input object of a compare/merge viewer or <code>null</code>
 	 * @return the image for the left hand side or <code>null</code>
-	 */	
+	 */
 	Image getLeftImage(Object input);
-	
+
 	/**
 	 * Returns the label for the right hand side of compare/merge viewers.
 	 * This label is typically shown in the title of the right side of a compare viewer.
@@ -67,7 +67,7 @@
 	 * @return the label for the right hand side or <code>null</code>
 	 */
 	String getRightLabel(Object input);
-	
+
 	/**
 	 * Returns the image for the right hand side of compare/merge viewers.
 	 * This image is typically shown in the title of the right side of a compare viewer.
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareNavigator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareNavigator.java
index 1a8da97..955078c 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareNavigator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ICompareNavigator.java
@@ -21,15 +21,15 @@
  * <p>
  * Although it is legal for clients to implement this interface, it is better
  * to subclass {@link CompareNavigator}.
- * 
+ *
  * @since 3.0
  */
 public interface ICompareNavigator {
-	
+
 	/**
 	 * Starting from the current selection <code>selectChange</code> selects and reveals the next (previous) change.
 	 * If the end (or beginning) is reached, the method returns <code>true</code>.
-	 * 
+	 *
 	 * @param next if <code>true</code> the next change is selected, otherwise the previous change
 	 * @return returns <code>true</code> if end (beginning) is reached, <code>false</code> otherwise
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
index c45997d..146a4ba 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeListener.java
@@ -11,7 +11,7 @@
 package org.eclipse.compare;
 
 /**
- * An <code>IContentChangeListener</code> is informed about content changes of a 
+ * An <code>IContentChangeListener</code> is informed about content changes of a
  * <code>IContentChangeNotifier</code>.
  * <p>
  * Clients may implement this interface.
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
index f63f970..28a3940 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IContentChangeNotifier.java
@@ -20,7 +20,7 @@
  * @see IContentChangeListener
  */
 public interface IContentChangeNotifier {
-	
+
 	/**
 	 * Adds a content change listener to this notifier.
 	 * Has no effect if an identical listener is already registered.
@@ -28,7 +28,7 @@
 	 * @param listener a content changed listener
 	 */
 	void addContentChangeListener(IContentChangeListener listener);
-	
+
 	/**
 	 * Removes the given content changed listener from this notifier.
 	 * Has no effect if the listener is not registered.
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
index 24adf79..4b38d76 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContent.java
@@ -24,26 +24,26 @@
  * @see IStreamContentAccessor
  */
 public interface IEditableContent {
-	
+
 	/**
 	 * Returns <code>true</code> if this object can be modified.
 	 * If it returns <code>false</code> the other methods of this API must not be called.
-	 * 
+	 *
 	 * @return <code>true</code> if this object can be modified
 	 */
 	boolean isEditable();
-			
+
 	/**
 	 * Replaces the current content with the given new bytes.
-	 * 
+	 *
 	 * @param newContent this new contents replaces the old contents
 	 */
-	void setContent(byte[] newContent); 
+	void setContent(byte[] newContent);
 
 	/**
 	 * This method is called on a parent to add or remove a child,
 	 * or to copy the contents of a child.
-	 * 
+	 *
 	 * What to do is encoded in the two arguments as follows:
 	 * <TABLE>
 	 * <TR>
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContentExtension.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContentExtension.java
index d5af8b9..13a0be4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContentExtension.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEditableContentExtension.java
@@ -25,7 +25,7 @@
  * @since 3.3
  */
 public interface IEditableContentExtension {
-	
+
 	/**
 	 * Return whether the typed element being displayed
 	 * is read-only. a read-only element will require a
@@ -33,13 +33,13 @@
 	 * @return whether the typed element is read-only
 	 */
 	boolean isReadOnly();
-	
+
 	/**
 	 * If the element is read-only, this method should be called
 	 * to attempt to make it writable.
 	 * @param shell a shell used to prompt the user if required.
-	 * @return a status object that is <code>OK</code> if things are fine, 
-	 * otherwise a status describing reasons why modifying the given files is not 
+	 * @return a status object that is <code>OK</code> if things are fine,
+	 * otherwise a status describing reasons why modifying the given files is not
 	 * reasonable. A status with a severity of <code>CANCEL</code> is returned
 	 * if the validation was canceled, indicating the edit should not proceed.
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEncodedStreamContentAccessor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEncodedStreamContentAccessor.java
index e11acb1..33a4b5d 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEncodedStreamContentAccessor.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IEncodedStreamContentAccessor.java
@@ -15,22 +15,22 @@
 /**
  * Extension for <code>IStreamContentAccessor</code>. Extends the original
  * concept of a <code>IStreamContentAccessor</code> to answer the Charset (encoding) used for the stream.
- * 
+ *
  * @since 3.0
  */
 public interface IEncodedStreamContentAccessor extends IStreamContentAccessor {
-	
+
 	/**
-	 * Returns the name of a charset encoding to be used when decoding this 
-	 * stream accessor's contents into characters. Returns <code>null</code> if a proper 
+	 * Returns the name of a charset encoding to be used when decoding this
+	 * stream accessor's contents into characters. Returns <code>null</code> if a proper
 	 * encoding cannot be determined.
 	 * <p>
 	 * <b>Note</b>:  this method does not check whether the result is a supported
-	 * charset name. Callers should be prepared to handle 
-	 * <code>UnsupportedEncodingException</code> where this charset is used. 
+	 * charset name. Callers should be prepared to handle
+	 * <code>UnsupportedEncodingException</code> where this charset is used.
 	 * </p>
 	 * @return the name of a charset, or <code>null</code>
-	 * @exception CoreException if an error happens while determining 
+	 * @exception CoreException if an error happens while determining
 	 * the charset. See any refinements for more information.
 	 * @see IStreamContentAccessor#getContents
 	 * @since 3.0
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
index a1ebef2..34b85a2 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IModificationDate.java
@@ -18,7 +18,7 @@
  * </p>
  */
 public interface IModificationDate {
-	
+
 	/**
 	 * Returns the modification time of this object.
 	 * <p>
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/INavigatable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/INavigatable.java
index 7f5edf6..dfbcc7e 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/INavigatable.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/INavigatable.java
@@ -21,54 +21,54 @@
  * @see ICompareNavigator
  */
 public interface INavigatable {
-	
+
 	/**
-	 * Property key that can be used to associate an instance of this interface with 
-	 * an SWT widget using {@link Widget#setData(String, Object)}. 
+	 * Property key that can be used to associate an instance of this interface with
+	 * an SWT widget using {@link Widget#setData(String, Object)}.
 	 */
 	static final String NAVIGATOR_PROPERTY= "org.eclipse.compare.internal.Navigator"; //$NON-NLS-1$
-	
+
 	/**
 	 * Change flag used to navigate to the next change.
 	 * @see #selectChange(int)
 	 */
 	static final int NEXT_CHANGE= 1;
-	
+
 	/**
 	 * Change flag used to navigate to the previous change.
 	 * @see #selectChange(int)
 	 */
 	static final int PREVIOUS_CHANGE= 2;
-	
+
 	/**
 	 * Change flag used to navigate to the first change.
 	 * @see #selectChange(int)
 	 */
 	static final int FIRST_CHANGE= 3;
-	
+
 	/**
 	 * Change flag used to navigate to the last change.
 	 * @see #selectChange(int)
 	 */
 	static final int LAST_CHANGE= 4;
-	
+
 	/**
 	 * Return the input of the compare pane being navigated or <code>null</code>
-	 * if the pane does not have an input. 
+	 * if the pane does not have an input.
 	 * @return the input of the compare pane being navigated or <code>null</code>
 	 */
 	Object getInput();
-	
+
 	/**
 	 * Starting from the current selection <code>selectChange</code> selects and reveals the specified change.
 	 * If the end (or beginning) is reached, the method returns <code>true</code>.
-	 * 
+	 *
 	 * @param changeFlag the change to be selected. One of <code>NEXT_CHANGE</code>, <code>PREVIOUS_CHANGE</code>,
 	 * <code>FIRST_CHANGE</code> or <code>LAST_CHANGE</code>.
 	 * @return returns <code>true</code> if end (beginning) is reached, <code>false</code> otherwise
 	 */
 	boolean selectChange(int changeFlag);
-	
+
 	/**
 	 * Return whether a call to {@link #selectChange(int)} with the same parameter
 	 * would succeed.
@@ -77,7 +77,7 @@
 	 * would succeed.
 	 */
 	boolean hasChange(int changeFlag);
-	
+
 	/**
 	 * Request that the currently selected change be opened. Return <code>true</code>
 	 * if the request resulted in the change being opened and <code>false</code> if the
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
index 60ca94e..a609a95 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IPropertyChangeNotifier.java
@@ -22,7 +22,7 @@
  * @see org.eclipse.jface.util.IPropertyChangeListener
  */
 public interface IPropertyChangeNotifier {
-	
+
 	/**
 	 * Adds a listener for property changes to this notifier.
 	 * Has no effect if an identical listener is already registered.
@@ -30,7 +30,7 @@
 	 * @param listener a property change listener
 	 */
 	void addPropertyChangeListener(IPropertyChangeListener listener);
-	
+
 	/**
 	 * Removes the given content change listener from this notifier.
 	 * Has no effect if the identical listener is not registered.
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ISharedDocumentAdapter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ISharedDocumentAdapter.java
index 56e8b64..47e0c88 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ISharedDocumentAdapter.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ISharedDocumentAdapter.java
@@ -20,7 +20,7 @@
 /**
  * An <code>ISharedDocumentAdapter</code> is used to map an
  * {@link ITypedElement} to a shared document for the purposes of editing.
- * 
+ *
  * @noimplement Clients are not expected to implement this interface but instead
  *              should subclass {@link SharedDocumentAdapter} or
  *              {@link SharedDocumentAdapterWrapper}.
@@ -34,14 +34,14 @@
 	 * <code>DocumentProviderRegistry</code> and for obtaining the shared
 	 * {@link IDocument} from the document provider. Returns <code>null</code>
 	 * if the element does not have a shared document.
-	 * 
+	 *
 	 * @param element
 	 *            the element being queried for a shared document
 	 * @return the object that acts as the key to obtain a document provider and
 	 *         document or <code>null</code>
 	 */
 	IEditorInput getDocumentKey(Object element);
-	
+
 	/**
 	 * Connect the given element to its document provider. All connections must be performed
 	 * through this adapter so that the adapter can track whether it is connected or not.
@@ -51,17 +51,17 @@
 	 * @see IDocumentProvider#connect(Object)
 	 */
 	void connect(IDocumentProvider provider, IEditorInput documentKey) throws CoreException;
-	
+
 	/**
 	 * Disconnect the element from the document provider. All connects and
-	 * disconnects must occur through the adapter so that the adapter can 
+	 * disconnects must occur through the adapter so that the adapter can
 	 * track whether it is connected or not.
 	 * @param provider the document provider
 	 * @param documentKey the element's key returned from {@link #getDocumentKey(Object)}
 	 * @see IDocumentProvider#disconnect(Object)
 	 */
 	void disconnect(IDocumentProvider provider, IEditorInput documentKey);
-	
+
 	/**
 	 * A helper disconnect method that looks up the appropriate key (using {@link #getDocumentKey(Object)}
 	 * and the appropriate provider and calls {@link #disconnect(IDocumentProvider, IEditorInput)}.
@@ -69,14 +69,14 @@
 	 * @see IDocumentProvider#disconnect(Object)
 	 */
 	void disconnect(Object element);
-	
+
 	/**
 	 * Flush the contents of the given document into the typed element that provided the
 	 * document. This method is invoked by the Compare framework classes
 	 * when a request to flush the viewers has been made. It is up to the implementor to decide
 	 * whether the changes in the buffer should be saved to disk at the time of the flush or
 	 * buffered to be saved at a later time.
-	 * 
+	 *
 	 * @param provider the document provider
 	 * @param documentKey the element's key returned from {@link #getDocumentKey(Object)}
 	 * @param document the document
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamMerger.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamMerger.java
index a59dd74..aaa6eb4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamMerger.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/IStreamMerger.java
@@ -32,24 +32,24 @@
      * Indicates the successful completion of the merge operation (value <code>IStatus.OK</code>)
      */
     public static final int OK= IStatus.OK;
-    
+
     /**
      * Indicates that a change conflict prevented the merge from successful completion (value <code>1</code>)
      */
     public static final int CONFLICT= 1;
-    
+
     /**
      * Status code describing an internal error (value <code>2</code>)
      */
    public static final int INTERNAL_ERROR= 2;
-	
+
     /**
      * Performs a merge operation on the given input streams and writes the merge result to the output stream.
-     * On success a status <code>IStatus.OK</code> is returned, on error a status <code>IStatus.ERROR</code>. 
+     * On success a status <code>IStatus.OK</code> is returned, on error a status <code>IStatus.ERROR</code>.
      * If the merge operation cannot deal with conflicts, the code of the error status has the value <code>IStreamMerger.CONFLICT</code>.
      * For text oriented mergers the encoding for the input and output streams is honored.
-     * It is the responsibility of callers to close input and output streams. 
-     * 
+     * It is the responsibility of callers to close input and output streams.
+     *
      * @param output the byte stream to which the merge result is written; the merger will not close the stream
      * @param outputEncoding the encoding to use when writing to the output stream
      * @param ancestor the byte stream from which the common ancestor is read
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
index 1f7eeef..a1e2983 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/NavigationAction.java
@@ -31,11 +31,11 @@
  * @noextend This class is not intended to be subclassed by clients.
  */
 public class NavigationAction extends Action {
-	
+
 	private boolean fNext;
 	private CompareEditorInput fCompareEditorInput;
-	
-	
+
+
 	/**
 	 * Creates a <code>NavigationAction</code>.
 	 *
@@ -64,7 +64,7 @@
 				boolean atEnd= ((ICompareNavigator)adapter).selectChange(fNext);
 				Shell shell= CompareUIPlugin.getShell();
 				if (atEnd && shell != null) {
-					
+
 					Display display= shell.getDisplay();
 					if (display != null)
 						display.beep();
@@ -72,21 +72,21 @@
 					String title;
 					String message;
 					if (fNext) {
-						title= CompareMessages.CompareNavigator_atEnd_title; 
-						message= CompareMessages.CompareNavigator_atEnd_message; 
+						title= CompareMessages.CompareNavigator_atEnd_title;
+						message= CompareMessages.CompareNavigator_atEnd_message;
 					} else {
-						title= CompareMessages.CompareNavigator_atBeginning_title; 
-						message= CompareMessages.CompareNavigator_atBeginning_message; 
+						title= CompareMessages.CompareNavigator_atBeginning_title;
+						message= CompareMessages.CompareNavigator_atBeginning_message;
 					}
 					MessageDialog.openInformation(shell, title, message);
 				}
 			}
 		}
 	}
-	
+
 	/**
 	 * Sets the <code>CompareEditorInput</code> on which this action operates.
-	 * 
+	 *
 	 * @param input the <code>CompareEditorInput</code> on which this action operates; if <code>null</code> action does nothing
 	 */
 	public void setCompareEditorInput(CompareEditorInput input) {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
index 568ce5d..f0badb4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ResourceNode.java
@@ -32,11 +32,11 @@
 public class ResourceNode extends BufferedContent
 			implements IEncodedStreamContentAccessor, IStructureComparator, ITypedElement,
 							IEditableContent, IModificationDate, IResourceProvider, IEditableContentExtension {
-			
+
 	private IResource fResource;
 	private ArrayList fChildren;
-		
-	
+
+
 	/**
 	 * Creates a <code>ResourceNode</code> for the given resource.
 	 *
@@ -46,7 +46,7 @@
 		fResource= resource;
 		Assert.isNotNull(resource);
 	}
-		
+
 	/**
 	 * Returns the corresponding resource for this object.
 	 *
@@ -55,7 +55,7 @@
 	public IResource getResource() {
 		return fResource;
 	}
-	
+
 	/* (non Javadoc)
 	 * see IStreamContentAccessor.getContents
 	 */
@@ -64,14 +64,14 @@
 			return super.getContents();
 		return null;
 	}
-	
+
 	/* (non Javadoc)
 	 * see IModificationDate.getModificationDate
 	 */
 	public long getModificationDate() {
 		return fResource.getLocalTimeStamp();
 	}
-	
+
 	/* (non Javadoc)
 	 * see ITypedElement.getName
 	 */
@@ -80,7 +80,7 @@
 			return fResource.getName();
 		return null;
 	}
-		
+
 	/* (non Javadoc)
 	 * see ITypedElement.getType
 	 */
@@ -94,7 +94,7 @@
 		}
 		return ITypedElement.UNKNOWN_TYPE;
 	}
-	
+
 	/* (non Javadoc)
 	 * see ITypedElement.getImage
 	 */
@@ -113,7 +113,7 @@
 		}
 		return super.equals(other);
 	}
-	
+
 	/**
 	 * Returns the hash code of the name.
      * @return a hash code value for this object.
@@ -121,7 +121,7 @@
 	public int hashCode() {
 		return getName().hashCode();
 	}
-	
+
 	/* (non Javadoc)
 	 * see IStructureComparator.getChildren
 	 */
@@ -143,7 +143,7 @@
 		}
 		return fChildren.toArray();
 	}
-	
+
 	/**
 	 * This hook method is called from <code>getChildren</code> once for every
 	 * member of a container resource. This implementation
@@ -157,7 +157,7 @@
 	protected IStructureComparator createChild(IResource child) {
 		return new ResourceNode(child);
 	}
-		
+
 	/**
 	 * Returns an open stream if the corresponding resource implements the
 	 * <code>IStorage</code> interface. Otherwise the value <code>null</code> is returned.
@@ -183,14 +183,14 @@
 		}
 		return null;
 	}
-			
+
 	/* (non Javadoc)
 	 * see IEditableContent.isEditable
 	 */
 	public boolean isEditable() {
 		return true;
 	}
-	
+
 	/* (non Javadoc)
 	 * see IEditableContent.replace
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/SharedDocumentAdapter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/SharedDocumentAdapter.java
index 9dade75..4fb836f 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/SharedDocumentAdapter.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/SharedDocumentAdapter.java
@@ -39,7 +39,7 @@
 	public static IDocumentProvider getDocumentProvider(IEditorInput input) {
 		return DocumentProviderRegistry.getDefault().getDocumentProvider(input);
 	}
-	
+
 	@Override
 	public void connect(IDocumentProvider provider, IEditorInput documentKey)
 			throws CoreException {
@@ -52,7 +52,7 @@
 	}
 
 	/**
-	 * Default implementation of {@link #getDocumentKey(Object)} that returns a 
+	 * Default implementation of {@link #getDocumentKey(Object)} that returns a
 	 * {@link FileEditorInput} for the element if the element adapts to {@link IFile}.
 	 * @see org.eclipse.compare.ISharedDocumentAdapter#getDocumentKey(java.lang.Object)
 	 */
@@ -64,7 +64,7 @@
 		}
 		return null;
 	}
-	
+
 	private IFile getFile(Object element) {
 		if (element instanceof IResourceProvider) {
 			IResourceProvider rp = (IResourceProvider) element;
@@ -86,7 +86,7 @@
 
 	/**
 	 * A helper method to save a document.
-	 * 
+	 *
 	 * @param provider the document provider
 	 * @param documentKey the document key
 	 * @param document the document
@@ -105,7 +105,7 @@
 			provider.changed(documentKey);
 		}
 	}
-	
+
 	@Override
 	public void disconnect(Object element) {
 		IEditorInput input = getDocumentKey(element);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
index ca19ffd..57988e4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/Splitter.java
@@ -23,13 +23,13 @@
  * is the last child to become invisible or the first to become visible.</LI>
  * <LI>maximizing a child makes it as large as the topmost enclosing Splitter</LI>
  * </UL>
- * 
+ *
  * @since 2.1
  */
 public class Splitter extends SashForm {
-	
+
 	private static final String VISIBILITY= "org.eclipse.compare.internal.visibility"; //$NON-NLS-1$
-	
+
 	/**
 	 * Constructs a new instance of this class given its parent
 	 * and a style value describing its behavior and appearance.
@@ -56,7 +56,7 @@
 	public Splitter(Composite parent, int style) {
 		super(parent, style);
 	}
-		
+
 	/**
 	 * Sets the visibility of the given child in this Splitter. If this change
 	 * affects the visibility state of the whole Splitter, and if the Splitter
@@ -67,12 +67,12 @@
 	 * @param visible the new visibility state
 	 */
 	public void setVisible(Control child, boolean visible) {
-		
+
 		boolean wasEmpty= isEmpty();
-				
+
 		child.setVisible(visible);
 		child.setData(VISIBILITY, Boolean.valueOf(visible));
-		
+
 		if (wasEmpty != isEmpty()) {
 			// recursively walk up
 			Composite parent= getParent();
@@ -114,7 +114,7 @@
 				return false;
 		return true;
 	}
-	
+
 	/* (non-Javadoc)
 	 * Returns the visibility state of the given child control. If the
 	 * control is a Sash, this method always returns false.
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
index 763cc62..8319535 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/ZipFileStructureCreator.java
@@ -147,7 +147,7 @@
 		public Object[] getChildren() {
 			return null;
 		}
-		
+
 		public InputStream getContents() {
 			if (fContents == null)
 				fContents= new byte[0];
@@ -175,7 +175,7 @@
 	    	}
 		}
 	}
-	
+
 	private String fTitle;
 
 	/**
@@ -184,7 +184,7 @@
 	public ZipFileStructureCreator() {
 		this(Utilities.getString("ZipStructureCreator.name")); //$NON-NLS-1$
 	}
-	
+
 	/**
 	 * Create a new ZipFileStructureCreator with the given title.
 	 * The title is returned by the method <code>getName()</code>.
@@ -201,7 +201,7 @@
 	public IStructureComparator getStructure(Object input) {
 
 		InputStream is= null;
-		
+
 		if (input instanceof IStreamContentAccessor) {
 			IStreamContentAccessor sca= (IStreamContentAccessor) input;
 			try {
@@ -228,16 +228,16 @@
 					if (length >= 0) {
 						byte[] buffer= new byte[length];
 						int offset= 0;
-	
+
 						do {
 							int n= zip.read(buffer, offset, length);
 							offset += n;
 							length -= n;
 						} while (length > 0);
-	
+
 						ze.setBytes(buffer);
 					} else {
-						byte[] buffer= new byte[1024];		
+						byte[] buffer= new byte[1024];
 						int n;
 						do {
 							n= zip.read(buffer, 0, 1024);
@@ -293,29 +293,29 @@
 	public void save(IStructureComparator structure, Object input) {
 		Assert.isTrue(false); // Cannot update zip archive
 	}
-	
+
 	public IStructureComparator locate(Object path, Object source) {
 		return null;
 	}
-		
+
 	/**
 	 * Returns <code>false</code> since this <code>IStructureCreator</code>
 	 * cannot rewrite the diff tree in order to fold certain combinations of
 	 * additions and deletions.
 	 * <p>
-	 * Note: this method is for internal use only. Clients should not call this method. 
+	 * Note: this method is for internal use only. Clients should not call this method.
 	 * @return <code>false</code>
 	 */
 	public boolean canRewriteTree() {
 		return false;
 	}
-	
+
 	/**
 	 * Empty implementation since this <code>IStructureCreator</code>
 	 * cannot rewrite the diff tree in order to fold certain combinations of
 	 * additions and deletions.
 	 * <p>
-	 * Note: this method is for internal use only. Clients should not call this method. 
+	 * Note: this method is for internal use only. Clients should not call this method.
 	 * @param differencer
 	 * @param root
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
index 1b150e3..b6048ed 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ContentMergeViewer.java
@@ -107,7 +107,7 @@
  * <p>
  * Clients may wish to use the standard concrete subclass <code>TextMergeViewer</code>,
  * or define their own subclass.
- * 
+ *
  * @see IMergeViewerContentProvider
  * @see TextMergeViewer
  */
@@ -115,16 +115,16 @@
 					implements IPropertyChangeNotifier, IFlushable, IFlushable2 {
 	/* package */ static final int HORIZONTAL= 1;
 	/* package */ static final int VERTICAL= 2;
-	
+
 	static final double HSPLIT= 0.5;
 	static final double VSPLIT= 0.3;
-	
+
 	private class ContentMergeViewerLayout extends Layout {
 		@Override
 		public Point computeSize(Composite c, int w, int h, boolean force) {
 			return new Point(100, 100);
 		}
-		
+
 		@Override
 		public void layout(Composite composite, boolean force) {
 			if (fLeftLabel == null) {
@@ -154,11 +154,11 @@
 			// determine some derived sizes
 			int headerHeight= fLeftLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y;
 			Rectangle r= composite.getClientArea();
-			
+
 			int centerWidth= getCenterWidth();
 			int width1= (int)((r.width-centerWidth)*getHorizontalSplitRatio());
 			int width2= r.width-width1-centerWidth;
-			
+
 			int height1= 0;
 			int height2= 0;
 			if (fIsThreeWay && fAncestorVisible) {
@@ -168,9 +168,9 @@
 				height1= 0;
 				height2= r.height-headerHeight;
 			}
-							
+
 			int y= 0;
-			
+
 			if (fIsThreeWay && fAncestorVisible) {
 				fAncestorLabel.setBounds(0, y, r.width, headerHeight);
 				fAncestorLabel.setVisible(true);
@@ -181,9 +181,9 @@
 				fAncestorLabel.setVisible(false);
 				handleResizeAncestor(0, 0, 0, 0);
 			}
-			
+
 			fLeftLabel.getSize();	// without this resizing would not always work
-			
+
 			if (centerWidth > 3) {
 				fLeftLabel.setBounds(0, y, width1+1, headerHeight);
 				fDirectionLabel.setVisible(true);
@@ -194,12 +194,12 @@
 				fDirectionLabel.setVisible(false);
 				fRightLabel.setBounds(width1, y, r.width-width1, headerHeight);
 			}
-			
+
 			y+= headerHeight;
-			
+
 			if (fCenter != null && !fCenter.isDisposed())
 				fCenter.setBounds(width1, y, centerWidth, height2);
-					
+
 			handleResizeLeftRight(0, y, width1, centerWidth, width2, height2);
 		}
 
@@ -220,7 +220,7 @@
 	}
 
 	class Resizer extends MouseAdapter implements MouseMoveListener {
-				
+
 		Control fControl;
 		int fX, fY;
 		int fWidth1, fWidth2;
@@ -228,7 +228,7 @@
 		int fDirection;
 		boolean fLiveResize;
 		boolean fIsDown;
-		
+
 		public Resizer(Control c, int dir) {
 			fDirection= dir;
 			fControl= c;
@@ -245,7 +245,7 @@
 				}
 			);
 		}
-				
+
 		@Override
 		public void mouseDoubleClick(MouseEvent e) {
 			if ((fDirection & HORIZONTAL) != 0)
@@ -254,43 +254,43 @@
 				fVSplit= VSPLIT;
 			fComposite.layout(true);
 		}
-		
+
 		@Override
 		public void mouseDown(MouseEvent e) {
 			Composite parent= fControl.getParent();
-			
+
 			Point s= parent.getSize();
 			Point as= fAncestorLabel.getSize();
 			Point ys= fLeftLabel.getSize();
 			Point ms= fRightLabel.getSize();
-			
+
 			fWidth1= ys.x;
 			fWidth2= ms.x;
 			fHeight1= fLeftLabel.getLocation().y-as.y;
 			fHeight2= s.y-(fLeftLabel.getLocation().y+ys.y);
-			
+
 			fX= e.x;
 			fY= e.y;
 			fIsDown= true;
 		}
-		
+
 		@Override
 		public void mouseUp(MouseEvent e) {
 			fIsDown= false;
 			if (!fLiveResize)
 				resize(e);
 		}
-		
+
 		@Override
 		public void mouseMove(MouseEvent e) {
 			if (fIsDown && fLiveResize)
 				resize(e);
 		}
-		
+
 		private void resize(MouseEvent e) {
 			int dx= e.x-fX;
 			int dy= e.y-fY;
-		
+
 			int centerWidth= fCenter.getSize().x;
 
 			if (fWidth1 + dx > centerWidth && fWidth2 - dx > centerWidth) {
@@ -319,14 +319,14 @@
 	private ICompareInputChangeListener fCompareInputChangeListener;
 	private ListenerList<IPropertyChangeListener> fListenerList;
 	boolean fConfirmSave= true;
-	
+
 	private double fHSplit= -1;		// width ratio of left and right panes
 	private double fVSplit= VSPLIT;		// height ratio of ancestor and bottom panes
-	
+
 	private boolean fIsThreeWay;		// whether their is an ancestor
 	private boolean fAncestorVisible;	// whether the ancestor pane is visible
 	private ActionContributionItem fAncestorItem;
-	
+
 	private ActionContributionItem copyLeftToRightItem;	// copy from left to right
 	private ActionContributionItem copyRightToLeftItem;	// copy from right to left
 
@@ -343,11 +343,11 @@
 	private CLabel fAncestorLabel;
 	private CLabel fLeftLabel;
 
-	private boolean fLeftLabelSet= false; // needed for debug output for bug 449558  
+	private boolean fLeftLabelSet= false; // needed for debug output for bug 449558
 	private CLabel fRightLabel;
 	/* package */ CLabel fDirectionLabel;
 	/* package */ Control fCenter;
-		
+
 	//---- SWT resources to be disposed
 	private Image fRightArrow;
 	private Image fLeftArrow;
@@ -370,17 +370,17 @@
 	};
 
 	//---- end
-	
+
 	/**
 	 * Creates a new content merge viewer and initializes with a resource bundle and a
 	 * configuration.
-	 * 
+	 *
 	 * @param style SWT style bits
 	 * @param bundle the resource bundle
 	 * @param cc the configuration object
 	 */
 	protected ContentMergeViewer(int style, ResourceBundle bundle, CompareConfiguration cc) {
-		
+
 		if (Policy.debugContentMergeViewer) {
 			logTrace("constructed (fLeftLabel == null)"); //$NON-NLS-1$
 			logStackTrace();
@@ -388,12 +388,12 @@
 
 		fStyles= style & ~(SWT.LEFT_TO_RIGHT | SWT.RIGHT_TO_LEFT);	// remove BIDI direction bits
 		fBundle= bundle;
-		
+
 		fAncestorVisible= Utilities.getBoolean(cc, ICompareUIConstants.PROP_ANCESTOR_VISIBLE, fAncestorVisible);
 		fConfirmSave= Utilities.getBoolean(cc, CompareEditor.CONFIRM_SAVE_PROPERTY, fConfirmSave);
-		
+
 		fCompareInputChangeListener = (input) -> { if (input == getInput()) handleCompareInputChange(); };
-		
+
 		// Make sure the compare configuration is not null
 		fCompareConfiguration = cc != null ? cc : new CompareConfiguration();
 		fPropertyChangeListener = (event) -> handlePropertyChangeEvent(event);
@@ -401,7 +401,7 @@
 
 		fDefaultContentProvider = new MergeViewerContentProvider(fCompareConfiguration);
 		updateContentProvider();
-		
+
 		fIsLeftDirty = false;
 		fIsRightDirty = false;
 	}
@@ -413,7 +413,7 @@
 	private void logTrace(String string) {
 		System.out.println("ContentMergeViewer " + System.identityHashCode(this) + ": " + string);   //$NON-NLS-1$//$NON-NLS-2$
 	}
-	
+
 	//---- hooks ---------------------
 
 
@@ -425,7 +425,7 @@
 	public String getTitle() {
 		return Utilities.getString(getResourceBundle(), "title"); //$NON-NLS-1$
 	}
-	
+
 	/**
 	 * Creates the SWT controls for the ancestor, left, and right
 	 * content areas of this compare viewer.
@@ -448,7 +448,7 @@
 	 * @param height the height of the ancestor area
 	 */
 	abstract protected void handleResizeAncestor(int x, int y, int width, int height);
-	
+
 	/**
 	 * Lays out the left and right areas of the compare viewer.
 	 * It is called whenever the viewer is resized or when the sashes between
@@ -485,11 +485,11 @@
 	 * @param right the input for the right area
 	 */
 	abstract protected void updateContent(Object ancestor, Object left, Object right);
-		
+
 	/**
 	 * Copies the content of one side to the other side.
 	 * Called from the (internal) actions for copying the sides of the viewer's input object.
-	 * 
+	 *
 	 * @param leftToRight if <code>true</code>, the left side is copied to the right side;
 	 * if <code>false</code>, the right side is copied to the left side
 	 */
@@ -506,7 +506,7 @@
 	abstract protected byte[] getContents(boolean left);
 
 	//----------------------------
-	
+
 	/**
 	 * Returns the resource bundle of this viewer.
 	 *
@@ -515,7 +515,7 @@
 	protected ResourceBundle getResourceBundle() {
 		return fBundle;
 	}
-	
+
 	/**
 	 * Returns the compare configuration of this viewer.
 	 *
@@ -524,7 +524,7 @@
 	protected CompareConfiguration getCompareConfiguration() {
 		return fCompareConfiguration;
 	}
-	
+
 	/**
 	 * The <code>ContentMergeViewer</code> implementation of this
 	 * <code>ContentViewer</code> method
@@ -561,7 +561,7 @@
 			}
 		};
 	}
-	
+
 	/**
 	 * The <code>ContentMergeViewer</code> implementation of this
 	 * <code>Viewer</code> method does nothing. Subclasses may reimplement.
@@ -584,14 +584,14 @@
 		if (key.equals(ICompareUIConstants.PROP_ANCESTOR_VISIBLE)) {
 			fAncestorVisible= Utilities.getBoolean(getCompareConfiguration(), ICompareUIConstants.PROP_ANCESTOR_VISIBLE, fAncestorVisible);
 			fComposite.layout(true);
-			
+
 			updateCursor(fLeftLabel, VERTICAL);
 			updateCursor(fDirectionLabel, HORIZONTAL | VERTICAL);
 			updateCursor(fRightLabel, VERTICAL);
-			
+
 			return;
 		}
-		
+
 		if (key.equals(ICompareUIConstants.PROP_IGNORE_ANCESTOR)) {
 			setAncestorVisibility(false, !Utilities.getBoolean(getCompareConfiguration(), ICompareUIConstants.PROP_IGNORE_ANCESTOR, false));
 			return;
@@ -604,7 +604,7 @@
 			return;
 		}
 	}
-	
+
 	void updateCursor(Control c, int dir) {
 		if (!(c instanceof Sash)) {
 			Cursor cursor= null;
@@ -649,7 +649,7 @@
 	}
 
 	//---- input
-	
+
 	/**
 	 * Return whether the input is a three-way comparison.
 	 * @return whether the input is a three-way comparison
@@ -658,7 +658,7 @@
 	protected boolean isThreeWay() {
 		return fIsThreeWay;
 	}
-	
+
 	/**
 	 * Internal hook method called when the input to this viewer is
 	 * initially set or subsequently changed.
@@ -677,25 +677,25 @@
 			if (lp != null)
 				lp.removeListener(labelChangeListener);
 		}
-		
+
 		if (input != oldInput && oldInput instanceof ICompareInput) {
 			ICompareContainer container = getCompareConfiguration().getContainer();
 			container.removeCompareInputChangeListener((ICompareInput)oldInput, fCompareInputChangeListener);
 		}
-		
+
 		boolean success= doSave(input, oldInput);
-		
+
 		if (input != oldInput && input instanceof ICompareInput) {
 			ICompareContainer container = getCompareConfiguration().getContainer();
 			container.addCompareInputChangeListener((ICompareInput)input, fCompareInputChangeListener);
 		}
-		
+
 		if (input != oldInput && input != null) {
 			ICompareInputLabelProvider lp = getCompareConfiguration().getLabelProvider();
 			if (lp != null)
 				lp.addListener(labelChangeListener);
 		}
-		
+
 		if (success) {
 			setLeftDirty(false);
 			setRightDirty(false);
@@ -704,7 +704,7 @@
 		if (input != oldInput)
 			internalRefresh(input);
 	}
-	
+
 	/**
 	 * This method is called from the <code>Viewer</code> method <code>inputChanged</code>
 	 * to save any unsaved changes of the old input.
@@ -721,11 +721,11 @@
 	 * @since 2.0
 	 */
 	protected boolean doSave(Object newInput, Object oldInput) {
-		
+
 		// before setting the new input we have to save the old
 		if (isLeftDirty() || isRightDirty()) {
-			
-			
+
+
 			if (Utilities.RUNNING_TESTS) {
 				if (Utilities.TESTING_FLUSH_ON_COMPARE_INPUT_CHANGE) {
 					flushContent(oldInput, null);
@@ -733,7 +733,7 @@
 			} else if (fConfirmSave) {
 				// post alert
 				Shell shell= fComposite.getShell();
-				
+
 				MessageDialog dialog= new MessageDialog(shell,
 					Utilities.getString(getResourceBundle(), "saveDialog.title"), //$NON-NLS-1$
 					null, 	// accept the default window icon
@@ -744,7 +744,7 @@
 						IDialogConstants.NO_LABEL,
 					},
 					0);		// default button index
-									
+
 				switch (dialog.open()) {	// open returns index of pressed button
 				case 0:
 					flushContent(oldInput, null);
@@ -762,7 +762,7 @@
 		}
 		return false;
 	}
-		
+
 	/**
 	 * Controls whether <code>doSave(Object, Object)</code> asks for confirmation before saving
 	 * the old input with <code>saveContent(Object)</code>.
@@ -777,7 +777,7 @@
 	public void refresh() {
 		internalRefresh(getInput());
 	}
-	
+
 	private void internalRefresh(Object input) {
 		IMergeViewerContentProvider content= getMergeContentProvider();
 		if (content != null) {
@@ -789,18 +789,18 @@
 				fIsThreeWay= (((ICompareInput)input).getKind() & Differencer.DIRECTION_MASK) != 0;
 			else
 				fIsThreeWay= ancestor != null;
-				
+
 			if (fAncestorItem != null)
 				fAncestorItem.setVisible(fIsThreeWay);
-			
+
 			if (fAncestorVisible && oldFlag != fIsThreeWay)
 				fComposite.layout(true);
-			
-									
+
+
 			Object left= content.getLeftContent(input);
 			Object right= content.getRightContent(input);
 			updateContent(ancestor, left, right);
-			
+
 			updateHeader();
 			if (Utilities.okToUse(fComposite) && Utilities.okToUse(fComposite.getParent())) {
 				ToolBarManager tbm = (ToolBarManager) getToolBarManager(fComposite.getParent());
@@ -812,7 +812,7 @@
 			}
 		}
 	}
-	
+
 	@Override
 	protected void hookControl(Control control) {
 		if (Policy.debugContentMergeViewer) {
@@ -820,9 +820,9 @@
 		}
 		super.hookControl(control);
 	}
-	
+
 	//---- layout & SWT control creation
-		
+
 	/**
 	 * Builds the SWT controls for the three areas of a compare/merge viewer.
 	 * <p>
@@ -845,14 +845,14 @@
 		fComposite.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());
 
 		hookControl(fComposite);	// hook help & dispose listener
-		
+
 		fComposite.setLayout(new ContentMergeViewerLayout());
 		if (Policy.debugContentMergeViewer) {
 			logTrace("Created composite " + System.identityHashCode(fComposite) + " with layout "  //$NON-NLS-1$//$NON-NLS-2$
 					+ System.identityHashCode(fComposite.getLayout()));
 			logStackTrace();
 		}
-		
+
 		int style= SWT.SHADOW_OUT;
 		fAncestorLabel= new CLabel(fComposite, style | Window.getDefaultOrientation());
 
@@ -861,36 +861,36 @@
 			logTrace("fLeftLabel initialized"); //$NON-NLS-1$
 			logStackTrace();
 		}
-		
+
 		fLeftLabelSet= true;
 		new Resizer(fLeftLabel, VERTICAL);
-		
+
 		fDirectionLabel= new CLabel(fComposite, style);
 		fDirectionLabel.setAlignment(SWT.CENTER);
 		new Resizer(fDirectionLabel, HORIZONTAL | VERTICAL);
-		
+
 		fRightLabel= new CLabel(fComposite, style | Window.getDefaultOrientation());
 		new Resizer(fRightLabel, VERTICAL);
-		
+
 		if (fCenter == null || fCenter.isDisposed())
 			fCenter= createCenterControl(fComposite);
-				
+
 		createControls(fComposite);
-		
+
 		fHandlerService= CompareHandlerService.createFor(getCompareConfiguration().getContainer(), fComposite.getShell());
-						
+
 		initializeToolbars(parent);
-	
+
 		return fComposite;
 	}
 
 	/**
 	 * Returns the toolbar manager for this viewer.
-	 * 
+	 *
 	 * Subclasses may extend this method and use either the toolbar manager
 	 * provided by the inherited method by calling
 	 * super.getToolBarManager(parent) or provide an alternate toolbar manager.
-	 * 
+	 *
 	 * @param parent
 	 *            a <code>Composite</code> or <code>null</code>
 	 * @return a <code>IToolBarManager</code>
@@ -899,12 +899,12 @@
 	protected IToolBarManager getToolBarManager(Composite parent) {
 		return CompareViewerPane.getToolBarManager(parent);
 	}
-	
+
 	private void initializeToolbars(Composite parent) {
 		ToolBarManager tbm = (ToolBarManager) getToolBarManager(parent);
 		if (tbm != null) {
 			tbm.removeAll();
-			
+
 			// define groups
 			tbm.add(new Separator("modes"));	//$NON-NLS-1$
 			tbm.add(new Separator("merge"));	//$NON-NLS-1$
@@ -936,7 +936,7 @@
 			};
 			Utilities.initAction(fSwitchLeftAndRight, getResourceBundle(), "action.SwitchLeftAndRight."); //$NON-NLS-1$
 			tbm.appendToGroup("modes", fSwitchLeftAndRight); //$NON-NLS-1$
-			
+
 			final ChangePropertyAction a= new ChangePropertyAction(fBundle, getCompareConfiguration(), "action.EnableAncestor.", ICompareUIConstants.PROP_ANCESTOR_VISIBLE); //$NON-NLS-1$
 			a.setChecked(fAncestorVisible);
 			fAncestorItem= new ActionContributionItem(a);
@@ -946,7 +946,7 @@
 
 			createToolItems(tbm);
 			updateToolItems();
-			
+
 			tbm.update(true);
 		}
 	}
@@ -970,7 +970,7 @@
 	protected boolean handleSetFocus() {
 		return false;
 	}
-	
+
 	/**
 	 * Return the desired width of the center control. This width is used
 	 * to calculate the values used to layout the ancestor, left and right sides.
@@ -982,7 +982,7 @@
 	protected int getCenterWidth() {
 		return 3;
 	}
-	
+
 	/**
 	 * Return whether the ancestor pane is visible or not.
 	 * @return whether the ancestor pane is visible or not
@@ -991,7 +991,7 @@
 	protected boolean isAncestorVisible() {
 		return fAncestorVisible;
 	}
-	
+
 	/**
 	 * Create the control that divides the left and right sides of the merge viewer.
 	 * @param parent the parent composite
@@ -1003,7 +1003,7 @@
 		new Resizer(sash, HORIZONTAL);
 		return sash;
 	}
-	
+
 	/**
 	 * Return the center control that divides the left and right sides of the merge viewer.
 	 * This method returns the control that was created by calling {@link #createCenterControl(Composite)}.
@@ -1019,7 +1019,7 @@
 	public Control getControl() {
 		return fComposite;
 	}
-	
+
 	/**
 	 * Called on the viewer disposal.
 	 * Unregisters from the compare configuration.
@@ -1030,7 +1030,7 @@
 	protected void handleDispose(DisposeEvent event) {
 		if (fHandlerService != null)
 			fHandlerService.dispose();
-		
+
 		Object input= getInput();
 		if (input instanceof ICompareInput) {
 			ICompareContainer container = getCompareConfiguration().getContainer();
@@ -1041,7 +1041,7 @@
 			if (lp != null)
 				lp.removeListener(labelChangeListener);
 		}
-		
+
 		if (fPropertyChangeListener != null) {
 			fCompareConfiguration.removePropertyChangeListener(fPropertyChangeListener);
 			fPropertyChangeListener= null;
@@ -1056,7 +1056,7 @@
 		fDirectionLabel= null;
 		fRightLabel= null;
 		fCenter= null;
-				
+
 		if (fRightArrow != null) {
 			fRightArrow.dispose();
 			fRightArrow= null;
@@ -1086,10 +1086,10 @@
 			fHVSashCursor.dispose();
 			fHVSashCursor= null;
 		}
-		
+
 		super.handleDispose(event);
   	}
-  	
+
 	/**
 	 * Updates the enabled state of the toolbar items.
 	 * <p>
@@ -1098,17 +1098,17 @@
 	 * Subclasses may extend this method, although this is generally not required.
 	 */
 	protected void updateToolItems() {
-										
+
 		IMergeViewerContentProvider content= getMergeContentProvider();
-		
+
 		Object input= getInput();
-		
+
 		if (copyLeftToRightItem != null) {
 			boolean rightEditable = content.isRightEditable(input);
 			copyLeftToRightItem.setVisible(rightEditable);
 			copyLeftToRightItem.getAction().setEnabled(rightEditable);
 		}
-		
+
 		if (copyRightToLeftItem != null) {
 			boolean leftEditable = content.isLeftEditable(input);
 			copyRightToLeftItem.setVisible(leftEditable);
@@ -1119,7 +1119,7 @@
 			fSwitchLeftAndRight.setChecked(getCompareConfiguration().isMirrored());
 		}
 	}
-	
+
 	/**
 	 * Updates the headers of the three areas
 	 * by querying the content provider for a name and image for
@@ -1130,7 +1130,7 @@
 	 * Subclasses may extend this method, although this is generally not required.
 	 */
 	protected void updateHeader() {
-						
+
 		IMergeViewerContentProvider content= getMergeContentProvider();
 		Object input= getInput();
 
@@ -1160,7 +1160,7 @@
 				fRightLabel.setText(LegacyActionTools.escapeMnemonics(rightLabel));
 		}
 	}
-		
+
 	/*
 	 * Calculates the height of the header.
 	 */
@@ -1169,16 +1169,16 @@
 		headerHeight= Math.max(headerHeight, fDirectionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).y);
 		return headerHeight;
 	}
-	
+
 	//---- dirty state & saving state
-	
+
 	@Override
 	public void addPropertyChangeListener(IPropertyChangeListener listener) {
 		if (fListenerList == null)
 			fListenerList= new ListenerList<>();
 		fListenerList.add(listener);
 	}
-	
+
 	@Override
 	public void removePropertyChangeListener(IPropertyChangeListener listener) {
 		if (fListenerList != null) {
@@ -1187,11 +1187,11 @@
 				fListenerList= null;
 		}
 	}
-	
+
 	private void fireDirtyState(boolean state) {
 		Utilities.firePropertyChange(fListenerList, this, CompareEditorInput.DIRTY_STATE, null, Boolean.valueOf(state));
 	}
-	
+
 	/**
 	 * Sets the dirty state of the left side of this viewer.
 	 * If the new value differs from the old
@@ -1208,7 +1208,7 @@
 			fireDirtyState(dirty);
 		}
 	}
-	
+
 	/**
 	 * Sets the dirty state of the right side of this viewer.
 	 * If the new value differs from the old
@@ -1225,7 +1225,7 @@
 			fireDirtyState(dirty);
 		}
 	}
-	
+
 	/**
 	 * Method from the old internal <code>ISavable</code> interface
 	 * Save the viewers's content.
@@ -1238,7 +1238,7 @@
 	public void save(IProgressMonitor monitor) throws CoreException {
 		flush(monitor);
 	}
-	
+
 	/**
 	 * Flush any modifications made in the viewer into the compare input. This method
 	 * calls {@link #flushContent(Object, IProgressMonitor)} with the compare input
@@ -1360,7 +1360,7 @@
 		// before setting the new input we have to save the old
 		Object input = getInput();
 		if (!isSaving() && (isLeftDirty() || isRightDirty())) {
-			
+
 			if (Utilities.RUNNING_TESTS) {
 				if (Utilities.TESTING_FLUSH_ON_COMPARE_INPUT_CHANGE) {
 					flushContent(input, null);
@@ -1368,7 +1368,7 @@
 			} else {
 				// post alert
 				Shell shell= fComposite.getShell();
-				
+
 				MessageDialog dialog= new MessageDialog(shell,
 					CompareMessages.ContentMergeViewer_resource_changed_title,
 					null, 	// accept the default window icon
@@ -1379,7 +1379,7 @@
 						IDialogConstants.NO_LABEL, // 1
 					},
 					0);		// default button index
-									
+
 				switch (dialog.open()) {	// open returns index of pressed button
 				case 0:
 					flushContent(input, null);
@@ -1426,11 +1426,11 @@
 			}
 		}
 		return false;
-	} 
+	}
 
 	/**
 	 * If the inputs are mirrored, this asks the right model value.
-	 * 
+	 *
 	 * @return true if the left viewer is editable.
 	 * @since 3.7
 	 */
@@ -1440,7 +1440,7 @@
 
 	/**
 	 * If the inputs are mirrored, this asks the left model value.
-	 * 
+	 *
 	 * @return true if the right viewer is editable.
 	 * @since 3.7
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
index a58518f..f659bdb 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IDocumentRange.java
@@ -29,7 +29,7 @@
  * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode
  */
 public interface IDocumentRange {
-	
+
 	/**
 	 * The position category typically used for an <code>IDocumentRange</code> position
 	 * (value <code>"DocumentRangeCategory"</code>).
@@ -39,15 +39,15 @@
 
 	/**
 	 * Returns the underlying document.
-	 * 
+	 *
 	 * @return the underlying document
 	 */
 	IDocument getDocument();
-	
+
 	/**
 	 * Returns a position that specifies a subrange in the underlying document,
 	 * or <code>null</code> if this document range spans the whole underlying document.
-	 * 
+	 *
 	 * @return a position that specifies a subrange in the underlying document, or <code>null</code>
 	 */
 	Position getRange();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IFlushable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IFlushable.java
index 3b65924..3516471 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IFlushable.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IFlushable.java
@@ -21,15 +21,15 @@
  * <p>
  * This interface may be implemented by clients.
  * </p>
- * 
+ *
  * @since 3.3
  */
 public interface IFlushable {
-	
+
 	/**
 	 * Request that the view contents be flushed to the underlying compare input.
 	 * Depending on the type of input, this may result in the contents being written
-	 * into the underlying model (e.g. file) as well. 
+	 * into the underlying model (e.g. file) as well.
 	 * @param monitor a progress monitor or <code>null</code> if progress reporting is not desired
 	 */
 	void flush(IProgressMonitor monitor);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
index 3953afc..6461ac9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/IMergeViewerContentProvider.java
@@ -14,17 +14,17 @@
 import org.eclipse.jface.viewers.IContentProvider;
 
 
-/** 
+/**
  * A content provider that mediates between a <code>ContentMergeViewer</code>'s model
  * and the viewer itself.
  * <p>
  * Clients may implement this interface.
  * </p>
- * 
+ *
  * @see ContentMergeViewer
  */
 public interface IMergeViewerContentProvider extends IContentProvider {
-	
+
 	//---- ancestor side
 
 	/**
@@ -60,7 +60,7 @@
 	 * @return <code>true</code> if the ancestor side of the given input element should be shown
 	 */
 	boolean showAncestor(Object input);
-	
+
 	//---- left side
 
 	/**
@@ -94,7 +94,7 @@
 	 * Returns whether the left side is editable.
 	 *
 	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return <code>true</code> if the left side of a <code>ContentMergeViewer</code> is editable	 
+	 * @return <code>true</code> if the left side of a <code>ContentMergeViewer</code> is editable
 	 */
 	boolean isLeftEditable(Object input);
 
@@ -139,7 +139,7 @@
 	 * Returns whether the right side is editable.
 	 *
 	 * @param input the input object of the <code>ContentMergeViewer</code>
-	 * @return <code>true</code> if the right side of a <code>ContentMergeViewer</code> is editable	 
+	 * @return <code>true</code> if the right side of a <code>ContentMergeViewer</code> is editable
 	 */
 	boolean isRightEditable(Object input);
 
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
index 97c0d72..1f3fb21 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/ITokenComparator.java
@@ -20,7 +20,7 @@
  * <p>
  * <code>TextMergeViewer</code> activates the token compare when navigating into
  * a range of differing lines. At first the lines are selected as a block.
- * When navigating into this block the token compare shows for every line 
+ * When navigating into this block the token compare shows for every line
  * the differing token by selecting them.
  * <p>
  * <code>TextMergeViewer</code>'s default token comparator works on characters separated
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
index 9b4db15..fb265eb 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
@@ -251,7 +251,7 @@
  * In 3.5 a new API has been introduced to let clients provide their own source
  * viewers implementation with an option to configure them basing on a
  * corresponding editor input.
- * 
+ *
  * @see org.eclipse.compare.rangedifferencer.RangeDifferencer
  * @see org.eclipse.jface.text.TextViewer
  * @see ITokenComparator
@@ -264,13 +264,13 @@
 	private static final char ANCESTOR_CONTRIBUTOR = MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR;
 	private static final char RIGHT_CONTRIBUTOR = MergeViewerContentProvider.RIGHT_CONTRIBUTOR;
 	private static final char LEFT_CONTRIBUTOR = MergeViewerContentProvider.LEFT_CONTRIBUTOR;
-	
+
 	private static final String DIFF_RANGE_CATEGORY = CompareUIPlugin.PLUGIN_ID + ".DIFF_RANGE_CATEGORY"; //$NON-NLS-1$
 
 	static final boolean DEBUG= false;
-	
+
 	private static final boolean FIX_47640= true;
-	
+
 	private static final String[] GLOBAL_ACTIONS= {
 		ActionFactory.UNDO.getId(),
 		ActionFactory.REDO.getId(),
@@ -293,15 +293,15 @@
 		MergeSourceViewer.FIND_ID,
 		MergeSourceViewer.GOTO_LINE_ID
 	};
-					
+
 	private static final String BUNDLE_NAME= "org.eclipse.compare.contentmergeviewer.TextMergeViewerResources"; //$NON-NLS-1$
-	
+
 	// the following symbolic constants must match the IDs in Compare's plugin.xml
 	private static final String INCOMING_COLOR= "INCOMING_COLOR"; //$NON-NLS-1$
 	private static final String OUTGOING_COLOR= "OUTGOING_COLOR"; //$NON-NLS-1$
 	private static final String CONFLICTING_COLOR= "CONFLICTING_COLOR"; //$NON-NLS-1$
 	private static final String RESOLVED_COLOR= "RESOLVED_COLOR"; //$NON-NLS-1$
-	
+
 	// constants
 	/** Width of left and right vertical bar */
 	private static final int MARGIN_WIDTH= 6;
@@ -316,62 +316,62 @@
 
 	/** line width of change borders */
 	private static final int LW= 1;
-		
+
 	private boolean fShowCurrentOnly= false;
 	private boolean fShowCurrentOnly2= false;
 	private int fMarginWidth= MARGIN_WIDTH;
 	private int fTopInset;
-	
+
 	// Colors
 	private RGB fBackground;
 	private RGB fForeground;
 
 	private boolean fIsUsingSystemForeground= true;
 	private boolean fIsUsingSystemBackground= true;
-	
+
 	private RGB SELECTED_INCOMING;
 	private RGB INCOMING;
 	private RGB INCOMING_FILL;
 	private RGB INCOMING_TEXT_FILL;
-	
+
 	private RGB SELECTED_CONFLICT;
 	private RGB CONFLICT;
 	private RGB CONFLICT_FILL;
 	private RGB CONFLICT_TEXT_FILL;
-	
+
 	private RGB SELECTED_OUTGOING;
 	private RGB OUTGOING;
 	private RGB OUTGOING_FILL;
 	private RGB OUTGOING_TEXT_FILL;
-	
+
 	private RGB RESOLVED;
-	
+
 	private IPreferenceStore fPreferenceStore;
 	private IPropertyChangeListener fPreferenceChangeListener;
-	
+
 	private HashMap<Object, Position> fNewAncestorRanges= new HashMap<>();
 	private HashMap<Object, Position> fNewLeftRanges= new HashMap<>();
 	private HashMap<Object, Position> fNewRightRanges= new HashMap<>();
-	
+
 	private MergeSourceViewer fAncestor;
 	private MergeSourceViewer fLeft;
 	private MergeSourceViewer fRight;
-	
+
 	private int fLeftLineCount;
 	private int fRightLineCount;
-	
+
 	private boolean fInScrolling;
-	
+
 	private int fPts[]= new int[8];	// scratch area for polygon drawing
-	
+
 	private int fInheritedDirection;	// inherited direction
 	private int fTextDirection;			// requested direction for embedded SourceViewer
-	
+
 	private ActionContributionItem fIgnoreAncestorItem;
 	private boolean fHighlightRanges;
-	
+
 	private boolean fShowPseudoConflicts= false;
-	
+
 	private boolean fUseSplines= true;
 	private boolean fUseSingleLine= true;
 	private boolean fHighlightTokenChanges = false;
@@ -382,21 +382,21 @@
 	private ActionContributionItem fPreviousDiff;	// goto previous difference
 	private ActionContributionItem fCopyDiffLeftToRightItem;
 	private ActionContributionItem fCopyDiffRightToLeftItem;
-	
+
 	private CompareHandlerService fHandlerService;
-	
+
 	private boolean fSynchronizedScrolling= true;
-	
+
 	private MergeSourceViewer fFocusPart;
-	
+
 	private boolean fSubDoc= true;
 	private IPositionUpdater fPositionUpdater;
 	private boolean fIsMotif;
 	private boolean fIsCarbon;
 	private boolean fIsMac;
-	
+
 	private boolean fHasErrors;
-		
+
 
 	// SWT widgets
 	private BufferedCanvas fAncestorCanvas;
@@ -407,14 +407,14 @@
 	private Canvas fBirdsEyeCanvas;
 	private Canvas fSummaryHeader;
 	private HeaderPainter fHeaderPainter;
-	
+
 	// SWT resources to be disposed
 	private Map<RGB, Color> fColors;
 	private Cursor fBirdsEyeCursor;
-				
+
 	// points for center curves
 	private double[] fBasicCenterCurve;
-	
+
 	private Button fLeftToRightButton;
 	private Button fRightToLeftButton;
 	private Diff fButtonDiff;
@@ -450,7 +450,7 @@
 	 * Preference key for highlight color of current line.
 	 */
 	private final static String CURRENT_LINE_COLOR= AbstractDecoratedTextEditorPreferenceConstants.EDITOR_CURRENT_LINE_COLOR;
-	
+
 	private List<SourceViewerDecorationSupport> fSourceViewerDecorationSupport = new ArrayList<>(3);
 	// whether enhanced viewer configuration has been done
 	private boolean isConfigured = false;
@@ -473,10 +473,10 @@
 				});
 				v.addSelectionChangedListener(this);
 			}
-				
+
 			return v;
 		}
-		
+
 		@Override
 		public boolean hasViewerFor(Object input) {
 			return true;
@@ -506,7 +506,7 @@
 			}
 			return null;
 		}
-		
+
 	    private Diff findDiff(Position p, boolean left) {
 			for (Iterator<?> iterator = fMerger.rangesIterator(); iterator.hasNext();) {
 				Diff diff = (Diff) iterator.next();
@@ -551,7 +551,7 @@
 		private int fTopIndex = -1;
 		private boolean fNeedsValidation = false;
 		private MergeSourceViewer fSourceViewer;
-		
+
 		public ContributorInfo(TextMergeViewer viewer, Object element, char leg) {
 			fViewer = viewer;
 			fElement = element;
@@ -630,7 +630,7 @@
 			if (fEncoding == null)
 				fEncoding = otherContributor.fEncoding;
 		}
-		
+
 		public IDocument getDocument() {
 			if (fDocumentProvider != null) {
 				IDocument document = fDocumentProvider.getDocument(getDocumentKey());
@@ -645,7 +645,7 @@
 				return DocumentManager.get(fElement);
 			return null;
 		}
-		
+
 		public void setDocument(MergeSourceViewer viewer, boolean isEditable) {
 			// Ensure that this method is only called once
 			Assert.isTrue(fSourceViewer == null);
@@ -664,15 +664,15 @@
 				viewer.getSourceViewer().getTextWidget().addVerifyListener(this);
 			}
 		}
-		
+
 		/*
 		 * Returns true if a new Document could be installed.
 		 */
 		private boolean internalSetDocument(MergeSourceViewer tp) {
-			
+
 			if (tp == null)
 				return false;
-			
+
 			IDocument newDocument = null;
 			Position range= null;
 
@@ -684,7 +684,7 @@
 			} else if (fElement instanceof IDocument) {
 				newDocument= (IDocument) fElement;
 				setupDocument(newDocument);
-				
+
 			} else if (fElement instanceof IStreamContentAccessor) {
 				newDocument= DocumentManager.get(fElement);
 				if (newDocument == null) {
@@ -696,9 +696,9 @@
 					connectToSharedDocument();
 				}
 			} else if (fElement == null) {	// deletion on one side
-				
+
 				ITypedElement parent= this.fViewer.getParent(fLeg);	// we try to find an insertion position within the deletion's parent
-				
+
 				if (parent instanceof IDocumentRange) {
 					newDocument= ((IDocumentRange)parent).getDocument();
 					newDocument.addPositionCategory(DIFF_RANGE_CATEGORY);
@@ -730,7 +730,7 @@
 				newDocument= new Document(""); //$NON-NLS-1$
 				enabled= false;
 			}
-			
+
 			// Update the viewer document or range
 			IDocument oldDoc= tp.getSourceViewer().getDocument();
 			if (newDocument != oldDoc) {
@@ -739,7 +739,7 @@
 				updateViewerDocumentRange(tp, range);
 			}
 			newDocument.addDocumentListener(this);
-			
+
 			tp.setEnabled(enabled);
 
 			return enabled;
@@ -767,7 +767,7 @@
 			unsetDocument(tp);
 			if (document == null)
 				return;
-			
+
 			connectPositionUpdater(document);
 
 			// install new document
@@ -796,7 +796,7 @@
 				document.removePositionUpdater(this.fViewer.fPositionUpdater);
 			document.addPositionUpdater(this.fViewer.fPositionUpdater);
 		}
-		
+
 		private void unsetDocument(MergeSourceViewer tp) {
 			IDocument oldDoc= internalGetDocument(tp);
 			if (oldDoc != null) {
@@ -811,12 +811,12 @@
 				oldDoc.removeDocumentListener(this);
 			}
 		}
-		
+
 		private IDocument createDocument() {
 			// If the content provider is a text content provider, attempt to obtain
 			// a shared document (i.e. file buffer)
 			IDocument newDoc = connectToSharedDocument();
-			
+
 			if (newDoc == null) {
 				IStreamContentAccessor sca= (IStreamContentAccessor) fElement;
 				String s= null;
@@ -863,7 +863,7 @@
 			}
 			return null;
 		}
-		
+
 		private void connect(IDocumentProvider documentProvider, IEditorInput input) throws CoreException {
 			final ISharedDocumentAdapter sda = Adapters.adapt(fElement, ISharedDocumentAdapter.class);
 			if (sda != null) {
@@ -872,7 +872,7 @@
 				documentProvider.connect(input);
 			}
 		}
-		
+
 		private void disconnect(IDocumentProvider provider, IEditorInput input) {
 			final ISharedDocumentAdapter sda = Adapters.adapt(fElement, ISharedDocumentAdapter.class);
 			if (sda != null) {
@@ -888,7 +888,7 @@
 			fDocumentProvider = documentProvider;
 			documentProvider.addElementStateListener(this);
 		}
-		
+
 		public void disconnect() {
 			IDocumentProvider provider = null;
 			IEditorInput input = getDocumentKey();
@@ -926,7 +926,7 @@
 			if (doc != null)
 				DocumentManager.remove(doc);
 		}
-		
+
 		private IDocument internalGetDocument(MergeSourceViewer tp) {
 			IDocument oldDoc= tp.getSourceViewer().getDocument();
 			if (oldDoc == null) {
@@ -934,7 +934,7 @@
 			}
 			return oldDoc;
 		}
-		
+
 		/**
 		 * Return the document key used to obtain a shared document. A <code>null</code>
 		 * is returned in the following cases:
@@ -956,7 +956,7 @@
 			}
 			return null;
 		}
-		
+
 		private IDocumentProvider getDocumentProvider() {
 			if (fDocumentProvider != null)
 				return fDocumentProvider;
@@ -973,17 +973,17 @@
 		private boolean isUsingDefaultContentProvider() {
 			return fViewer.isUsingDefaultContentProvider();
 		}
-		
+
 		private boolean canHaveSharedDocument() {
 			return fViewer.canHaveSharedDocument();
 		}
-		
+
 		boolean hasSharedDocument(Object object) {
 			return (fElement == object &&
 					fDocumentProvider != null
 					&& fDocumentProvider.getDocument(getDocumentKey()) != null);
 		}
-		
+
 		public boolean flush() throws CoreException {
 			if (fDocumentProvider != null) {
 				IEditorInput input = getDocumentKey();
@@ -1005,7 +1005,7 @@
 			}
 			return false;
 		}
-		
+
 		@Override
 		public void elementMoved(Object originalElement, Object movedElement) {
 			IEditorInput input = getDocumentKey();
@@ -1106,7 +1106,7 @@
 				fTopIndex = oldContributor.fTopIndex;
 				fEncoding = oldContributor.fEncoding;
 			}
-				
+
 		}
 
 		public boolean validateChange() {
@@ -1148,12 +1148,12 @@
 				e.doit= false;
 			}
 		}
-		
+
 		@Override
 		public void documentAboutToBeChanged(DocumentEvent e) {
 			// nothing to do
 		}
-		
+
 		@Override
 		public void documentChanged(DocumentEvent e) {
 			boolean dirty = true;
@@ -1168,17 +1168,17 @@
 			}
 		}
 	}
-	
+
 	class HeaderPainter implements PaintListener {
 		private static final int INSET= BIRDS_EYE_VIEW_INSET;
 
 		private RGB fIndicatorColor;
 		private Color fSeparatorColor;
-		
+
 		public HeaderPainter() {
 			fSeparatorColor= fSummaryHeader.getDisplay().getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW);
 		}
-		
+
 		/*
 		 * Returns true on color change
 		 */
@@ -1191,21 +1191,21 @@
 				return !color.equals(oldColor);
 			return true;
 		}
-		
+
 		private void drawBevelRect(GC gc, int x, int y, int w, int h, Color topLeft, Color bottomRight) {
 			gc.setForeground(topLeft);
 			gc.drawLine(x, y, x + w -1, y);
 			gc.drawLine(x, y, x, y + h -1);
-		
+
 			gc.setForeground(bottomRight);
 			gc.drawLine(x + w, y, x + w, y + h);
 			gc.drawLine(x, y + h, x + w, y + h);
 		}
-		
+
 		@Override
 		public void paintControl(PaintEvent e) {
 			Point s= fSummaryHeader.getSize();
-			
+
 			if (fIndicatorColor != null) {
 				Display d= fSummaryHeader.getDisplay();
 				e.gc.setBackground(getColor(d, fIndicatorColor));
@@ -1233,7 +1233,7 @@
 		protected ChildPositionUpdater(String category) {
 			super(category);
 		}
-		
+
 		/*
 		 * Child document ranges cannot be deleted other then by calling
 		 * freeChildDocument.
@@ -1242,7 +1242,7 @@
 		protected boolean notDeleted() {
 			return true;
 		}
-		
+
 		/*
 		 * If an insertion happens at a child document's start offset, the
 		 * position is extended rather than shifted. Also, if something is added
@@ -1255,14 +1255,14 @@
 				int myStart= fPosition.offset;
 				int myEnd=   fPosition.offset + fPosition.length;
 				myEnd= Math.max(myStart, myEnd);
-				
+
 				int yoursStart= fOffset;
 				int yoursEnd=   fOffset + fReplaceLength -1;
 				yoursEnd= Math.max(yoursStart, yoursEnd);
-				
+
 				if (myEnd < yoursStart)
 					return;
-				
+
 				if (myStart <= yoursStart)
 					fPosition.length += fReplaceLength;
 				else
@@ -1272,7 +1272,7 @@
 			}
 		}
 	}
-	
+
 	private class ChangeHighlighter implements ITextPresentationListener {
 		private final MergeSourceViewer viewer;
 
@@ -1314,10 +1314,10 @@
 			}
 			if (length < 0)
 				return null;
-			
+
 			return new StyleRange(start, length, null, cTextFill);
 		}
-		
+
 		private RGB getTextFillColor(Diff diff) {
 			if (isThreeWay() && !isIgnoreAncestor()) {
 				switch (diff.getKind()) {
@@ -1335,7 +1335,7 @@
 			return OUTGOING_TEXT_FILL;
 		}
 	}
-	
+
 	private class FindReplaceTarget implements IFindReplaceTarget, IFindReplaceTargetExtension, IFindReplaceTargetExtension2, IFindReplaceTargetExtension3 {
 		@Override
 		public boolean canPerformFind() {
@@ -1374,7 +1374,7 @@
 			if (findReplaceTarget instanceof IFindReplaceTargetExtension3) {
 				return ((IFindReplaceTargetExtension3) findReplaceTarget).findAndSelect(offset, findString, searchForward, caseSensitive, wholeWord, regExSearch);
 			}
-			
+
 			// fallback like in org.eclipse.ui.texteditor.FindReplaceTarget
 			if (!regExSearch && findReplaceTarget != null)
 				return findReplaceTarget.findAndSelect(offset, findString, searchForward, caseSensitive, wholeWord);
@@ -1388,7 +1388,7 @@
 				((IFindReplaceTargetExtension3) findReplaceTarget).replaceSelection(text, regExReplace);
 				return;
 			}
-			
+
 			// fallback like in org.eclipse.ui.texteditor.FindReplaceTarget
 			if (!regExReplace && findReplaceTarget != null)
 				findReplaceTarget.replaceSelection(text);
@@ -1468,11 +1468,11 @@
 				((IFindReplaceTargetExtension) findReplaceTarget).setReplaceAllMode(replaceAll);
 			}
 		}
-		
+
 	}
 
 	//---- MergeTextViewer
-	
+
 	/**
 	 * Creates a text merge viewer under the given parent control.
 	 *
@@ -1482,7 +1482,7 @@
 	public TextMergeViewer(Composite parent, CompareConfiguration configuration) {
 		this(parent, SWT.NULL, configuration);
 	}
-	
+
 	/**
 	 * Creates a text merge viewer under the given parent control.
 	 *
@@ -1568,7 +1568,7 @@
 				return TextMergeViewer.this.isPatchHunkOk();
 			}
 		});
-		
+
 		int inheritedStyle= parent.getStyle();
 		if ((inheritedStyle & SWT.LEFT_TO_RIGHT) != 0)
 			fInheritedDirection= SWT.LEFT_TO_RIGHT;
@@ -1576,23 +1576,23 @@
 			fInheritedDirection= SWT.RIGHT_TO_LEFT;
 		else
 			fInheritedDirection= SWT.NONE;
-		
+
 		if ((style & SWT.LEFT_TO_RIGHT) != 0)
 			fTextDirection= SWT.LEFT_TO_RIGHT;
 		else if ((style & SWT.RIGHT_TO_LEFT) != 0)
 			fTextDirection= SWT.RIGHT_TO_LEFT;
 		else
 			fTextDirection= SWT.NONE;
-		
+
 		fSymbolicFontName= getSymbolicFontName();
-		
+
 		fIsMotif= Util.isMotif();
 		fIsCarbon= Util.isCarbon();
 		fIsMac= Util.isMac();
-		
+
 		if (fIsMotif)
 			fMarginWidth= 0;
-		
+
 		fPreferenceChangeListener= new IPropertyChangeListener() {
 			@Override
 			public void propertyChange(PropertyChangeEvent event) {
@@ -1603,7 +1603,7 @@
 		fPreferenceStore= createChainedPreferenceStore();
 		if (fPreferenceStore != null) {
 			fPreferenceStore.addPropertyChangeListener(fPreferenceChangeListener);
-			
+
 			fSynchronizedScrolling= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING);
 			fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS);
 			//fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES);
@@ -1611,9 +1611,9 @@
 			fHighlightTokenChanges= fPreferenceStore.getBoolean(ComparePreferencePage.HIGHLIGHT_TOKEN_CHANGES);
 			//fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI);
 		}
-		
+
 		buildControl(parent);
-		
+
 		setColors();
 
 		INavigatable nav= new INavigatable() {
@@ -1639,14 +1639,14 @@
 			}
 		};
 		fComposite.setData(INavigatable.NAVIGATOR_PROPERTY, nav);
-		
+
 		fBirdsEyeCursor= new Cursor(parent.getDisplay(), SWT.CURSOR_HAND);
-		
+
 		JFaceResources.getFontRegistry().addListener(fPreferenceChangeListener);
 		JFaceResources.getColorRegistry().addListener(fPreferenceChangeListener);
 		updateFont();
 	}
-	
+
 	private static class LineNumberRulerToggleAction extends TextEditorPropertyAction {
 		public LineNumberRulerToggleAction(String label, MergeSourceViewer[] viewers, String preferenceKey) {
 			super(label, viewers, preferenceKey);
@@ -1664,7 +1664,7 @@
 		stores.add(EditorsUI.getPreferenceStore());
 		return new ChainedPreferenceStore(stores.toArray(new IPreferenceStore[stores.size()]));
     }
-	
+
 	/**
 	 * Creates a color from the information stored in the given preference store.
 	 * Returns <code>null</code> if there is no such information available.
@@ -1703,7 +1703,7 @@
 		// use text compare font if no font has been registered for subclass
 		return getClass().getName();
 	}
-	
+
 	private void updateFont() {
 		Font f= JFaceResources.getFont(fSymbolicFontName);
 		if (f != null) {
@@ -1715,7 +1715,7 @@
 				fRight.setFont(f);
 		}
 	}
-	
+
 	private void checkForColorUpdate(Display display) {
 		if (fIsUsingSystemBackground) {
 			RGB bg= display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB();
@@ -1724,7 +1724,7 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Sets the viewer's background color to the given RGB value.
 	 * If the value is <code>null</code> the system's default background color is used.
@@ -1736,7 +1736,7 @@
 		fBackground= background;
 		updateColors(null);
 	}
-	
+
 	private RGB getBackground(Display display) {
 		if (fBackground != null)
 			return fBackground;
@@ -1746,7 +1746,7 @@
 
 		return display.getSystemColor(SWT.COLOR_LIST_BACKGROUND).getRGB();
 	}
-	
+
 	/**
 	 * Sets the viewer's foreground color to the given RGB value.
 	 * If the value is <code>null</code> the system's default foreground color is used.
@@ -1758,9 +1758,9 @@
 		fForeground= foreground;
 		updateColors(null);
 	}
-	
+
 	private void updateColors(Display display) {
-		
+
 		if (display == null)
 			display = fComposite.getDisplay();
 
@@ -1785,9 +1785,9 @@
 			fLeft.setForegroundColor(fgColor);
 		if (fRight != null)
 			fRight.setForegroundColor(fgColor);
-		
+
 		ColorRegistry registry= JFaceResources.getColorRegistry();
-		
+
 		RGB bg= getBackground(display);
 		SELECTED_INCOMING= registry.getRGB(INCOMING_COLOR);
 		if (SELECTED_INCOMING == null)
@@ -1802,18 +1802,18 @@
 		OUTGOING= interpolate(SELECTED_OUTGOING, bg, 0.6);
 		OUTGOING_FILL= interpolate(SELECTED_OUTGOING, bg, 0.97);
 		OUTGOING_TEXT_FILL= interpolate(SELECTED_OUTGOING, bg, 0.85);
-		
+
 		SELECTED_CONFLICT= registry.getRGB(CONFLICTING_COLOR);
 		if (SELECTED_CONFLICT == null)
 			SELECTED_CONFLICT= new RGB(255, 0, 0);	// RED
 		CONFLICT= interpolate(SELECTED_CONFLICT, bg, 0.6);
 		CONFLICT_FILL= interpolate(SELECTED_CONFLICT, bg, 0.97);
 		CONFLICT_TEXT_FILL= interpolate(SELECTED_CONFLICT, bg, 0.85);
-	
+
 		RESOLVED= registry.getRGB(RESOLVED_COLOR);
 		if (RESOLVED == null)
 			RESOLVED= new RGB(0, 255, 0);	// GREEN
-					
+
 		updatePresentation();
 	}
 
@@ -1822,7 +1822,7 @@
 		invalidateLines();
 		invalidateTextPresentation();
 	}
-	
+
 	/**
 	 * Invalidates the current presentation by invalidating the three text viewers.
 	 * @since 2.0
@@ -1835,7 +1835,7 @@
 		if (fRight != null)
 			fRight.getSourceViewer().invalidateTextPresentation();
 	}
-	
+
 	/**
 	 * Configures the passed text viewer. This method is called after the three
 	 * text viewers have been created for the content areas. The
@@ -1843,7 +1843,7 @@
 	 * configure the viewer with a {@link SourceViewerConfiguration}.
 	 * Subclasses may reimplement to provide a specific configuration for the
 	 * text viewer.
-	 * 
+	 *
 	 * @param textViewer
 	 *            the text viewer to configure
 	 */
@@ -1867,7 +1867,7 @@
 	protected ITokenComparator createTokenComparator(String line) {
 		return new TokenComparator(line);
 	}
-	
+
 	/**
 	 * Setup the given document for use with this viewer. By default,
 	 * the partitioner returned from {@link #getDocumentPartitioner()}
@@ -1876,7 +1876,7 @@
 	 * {@link #getDocumentPartitioning()} if they wish to be able to use shared
 	 * documents (i.e. file buffers).
 	 * @param document the document to be set up
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	protected void setupDocument(IDocument document) {
@@ -1900,7 +1900,7 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Returns a document partitioner which is suitable for the underlying content type.
 	 * This method is only called if the input provided by the content provider is a
@@ -1918,7 +1918,7 @@
 	protected IDocumentPartitioner getDocumentPartitioner() {
 		return null;
 	}
-	
+
 	/**
 	 * Return the partitioning to which the partitioner returned from
 	 * {@link #getDocumentPartitioner()} is to be associated. Return <code>null</code>
@@ -1929,13 +1929,13 @@
 	 * will not be able to use shared documents.
 	 * @see IDocumentExtension3
 	 * @return a partitioning
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	protected String getDocumentPartitioning() {
 		return null;
 	}
-	
+
 	/**
 	 * Called on the viewer disposal.
 	 * Unregisters from the compare configuration.
@@ -1948,12 +1948,12 @@
 
 		if (fHandlerService != null)
 			fHandlerService.dispose();
-		
+
 		Object input= getInput();
 		removeFromDocumentManager(ANCESTOR_CONTRIBUTOR, input);
 		removeFromDocumentManager(LEFT_CONTRIBUTOR, input);
 		removeFromDocumentManager(RIGHT_CONTRIBUTOR, input);
-		
+
 		if (DEBUG)
 			DocumentManager.dump();
 
@@ -1964,7 +1964,7 @@
 				fPreferenceStore.removePropertyChangeListener(fPreferenceChangeListener);
 			fPreferenceChangeListener= null;
 		}
-		
+
 		fLeftCanvas= null;
 		fRightCanvas= null;
 		fVScrollBar= null;
@@ -1974,22 +1974,22 @@
 		fAncestorContributor.unsetDocument(fAncestor);
 		fLeftContributor.unsetDocument(fLeft);
 		fRightContributor.unsetDocument(fRight);
-		
+
 		disconnect(fLeftContributor);
 		disconnect(fRightContributor);
 		disconnect(fAncestorContributor);
-		
+
 		if (fBirdsEyeCursor != null) {
 			fBirdsEyeCursor.dispose();
 			fBirdsEyeCursor= null;
 		}
-		
+
 		if (showWhitespaceAction != null)
 			showWhitespaceAction.dispose();
-		
+
 		if (toggleLineNumbersAction != null)
 			toggleLineNumbersAction.dispose();
-		
+
 		if (fIgnoreWhitespace != null)
 			fIgnoreWhitespace.dispose();
 
@@ -2005,7 +2005,7 @@
 			fSourceViewerDecorationSupport = null;
 		}
 
-		
+
 		if (fAncestor != null)
 			fAncestor.dispose();
 		fAncestor = null;
@@ -2025,10 +2025,10 @@
 			}
 			fColors= null;
 		}
-		// don't add anything here, disposing colors should be done last		
+		// don't add anything here, disposing colors should be done last
 		super.handleDispose(event);
   	}
-  	  	  				 		
+
 	private void disconnect(ContributorInfo legInfo) {
 		if (legInfo != null)
 			legInfo.disconnect();
@@ -2037,7 +2037,7 @@
 	//-------------------------------------------------------------------------------------------------------------
 	//--- internal ------------------------------------------------------------------------------------------------
 	//-------------------------------------------------------------------------------------------------------------
-	
+
 	/*
 	 * Creates the specific SWT controls for the content areas.
 	 * Clients must not call or override this method.
@@ -2045,7 +2045,7 @@
 	@Override
 	protected void createControls(Composite composite) {
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.TEXT_MERGE_VIEW);
-		
+
 		// 1st row
 		if (fMarginWidth > 0) {
 			fAncestorCanvas= new BufferedCanvas(composite, SWT.NONE) {
@@ -2063,7 +2063,7 @@
 				}
 			);
 		}
-									
+
 		fAncestor= createPart(composite);
 		setEditable(fAncestor.getSourceViewer(), false);
 		fAncestor.getSourceViewer().getTextWidget().getAccessible().addAccessibleListener(new AccessibleAdapter() {
@@ -2073,12 +2073,12 @@
 			}
 		});
 		fAncestor.getSourceViewer().addTextPresentationListener(new ChangeHighlighter(fAncestor));
-		
+
 		fSummaryHeader= new Canvas(composite, SWT.NONE);
 		fHeaderPainter= new HeaderPainter();
 		fSummaryHeader.addPaintListener(fHeaderPainter);
 		updateResolveStatus();
-				
+
 		// 2nd row
 		if (fMarginWidth > 0) {
 			fLeftCanvas= new BufferedCanvas(composite, SWT.NONE) {
@@ -2096,7 +2096,7 @@
 				}
 			);
 		}
-		
+
 		fLeft= createPart(composite);
 		fLeft.getSourceViewer().getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
 		fLeft.getSourceViewer().getTextWidget().getAccessible().addAccessibleListener(new AccessibleAdapter() {
@@ -2106,7 +2106,7 @@
 			}
 		});
 		fLeft.getSourceViewer().addTextPresentationListener(new ChangeHighlighter(fLeft));
-		
+
 		fRight= createPart(composite);
 		fRight.getSourceViewer().getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
 		fRight.getSourceViewer().getTextWidget().getAccessible().addAccessibleListener(new AccessibleAdapter() {
@@ -2116,7 +2116,7 @@
 			}
 		});
 		fRight.getSourceViewer().addTextPresentationListener(new ChangeHighlighter(fRight));
-		
+
 		 IWorkbenchPart part = getCompareConfiguration().getContainer().getWorkbenchPart();
 		 // part is not available for contexts different than editor
 		 if (part != null) {
@@ -2127,7 +2127,7 @@
 				 cesp.setViewers(new SourceViewer[] { fLeft.getSourceViewer(), fRight.getSourceViewer(), fAncestor.getSourceViewer() }, focusSourceViewer);
 			 }
 		 }
-		
+
 		hsynchViewport(fAncestor.getSourceViewer(), fLeft.getSourceViewer(), fRight.getSourceViewer());
 		hsynchViewport(fLeft.getSourceViewer(), fAncestor.getSourceViewer(), fRight.getSourceViewer());
 		hsynchViewport(fRight.getSourceViewer(), fAncestor.getSourceViewer(), fLeft.getSourceViewer());
@@ -2148,11 +2148,11 @@
 				}
 			);
 		}
-		
+
 		fScrollCanvas= new Canvas(composite, SWT.V_SCROLL);
 		Rectangle trim= fLeft.getSourceViewer().getTextWidget().computeTrim(0, 0, 0, 0);
 		fTopInset= trim.y;
-		
+
 		fVScrollBar= fScrollCanvas.getVerticalBar();
 		fVScrollBar.setIncrement(1);
 		fVScrollBar.setVisible(true);
@@ -2165,7 +2165,7 @@
 				}
 			}
 		);
-		
+
 		fBirdsEyeCanvas= new BufferedCanvas(composite, SWT.NONE) {
 			@Override
 			public void doPaint(GC gc) {
@@ -2183,7 +2183,7 @@
 		fBirdsEyeCanvas.addMouseMoveListener(
 			new MouseMoveListener() {
 				private Cursor fLastCursor;
-				
+
 				@Override
 				public void mouseMove(MouseEvent e) {
 					Cursor cursor= null;
@@ -2206,7 +2206,7 @@
 			}
 		}
 	}
-	
+
 	private void hsynchViewport(final TextViewer tv1, final TextViewer tv2, final TextViewer tv3) {
 		final StyledText st1= tv1.getTextWidget();
 		final StyledText st2= tv2.getTextWidget();
@@ -2232,7 +2232,7 @@
 			setCurrentDiff(diff, reveal);
 		}
 	}
-	
+
 	private Diff handleMouseInSides(Canvas canvas, MergeSourceViewer tp, int my) {
 
 		int lineHeight= tp.getSourceViewer().getTextWidget().getLineHeight();
@@ -2262,14 +2262,14 @@
 					continue;
 				if (y >= visibleHeight)
 					break;
-					
+
 				if (my >= y && my < y+h)
 					return diff;
 			}
 		}
 		return null;
 	}
-	
+
 	private Diff getDiffUnderMouse(Canvas canvas, int mx, int my, Rectangle r) {
 
 		if (! fSynchronizedScrolling)
@@ -2331,33 +2331,33 @@
 	private Diff handlemouseInBirdsEyeView(Canvas canvas, int my) {
 		return fMerger.findDiff(getViewportHeight(), fSynchronizedScrolling, canvas.getSize(), my);
 	}
-	
+
 	private void paintBirdsEyeView(Canvas canvas, GC gc) {
-		
+
 		Color c;
 		Rectangle r= new Rectangle(0, 0, 0, 0);
 		int yy, hh;
-		
+
 		Point size= canvas.getSize();
-		
+
 		int virtualHeight= fSynchronizedScrolling ? fMerger.getVirtualHeight() : fMerger.getRightHeight();
 		if (virtualHeight < getViewportHeight())
 			return;
-				
+
 		Display display= canvas.getDisplay();
 		int y= 0;
 		for (Iterator<?> iterator = fMerger.rangesIterator(); iterator.hasNext();) {
 			Diff diff = (Diff) iterator.next();
 			int h= fSynchronizedScrolling ? diff.getMaxDiffHeight()
 										  : diff.getRightHeight();
-							
+
 			if (fMerger.useChange(diff)) {
-				
+
 				yy= (y*size.y)/virtualHeight;
 				hh= (h*size.y)/virtualHeight;
 				if (hh < 3)
 					hh= 3;
-				
+
 				c= getColor(display, getFillColor(diff));
 				if (c != null) {
 					gc.setBackground(c);
@@ -2382,16 +2382,16 @@
 					gc.drawRectangle(r);
 				}
 			}
-			
+
 			y+= h;
 		}
 	}
-	
+
 	private void refreshBirdsEyeView() {
 		if (fBirdsEyeCanvas != null)
 			fBirdsEyeCanvas.redraw();
 	}
-	
+
 	/**
 	 * Override to give focus to the pane that previously had focus or to a suitable
 	 * default pane.
@@ -2427,8 +2427,8 @@
 		}
 		return false;	// could not set focus
 	}
-	
-	
+
+
 	class HoverResizer extends Resizer {
 		Canvas fCanvas;
 		public HoverResizer(Canvas c, int dir) {
@@ -2442,7 +2442,7 @@
 			super.mouseMove(e);
 		}
 	}
-	
+
 	@Override
 	protected final Control createCenterControl(Composite parent) {
 		if (fSynchronizedScrolling) {
@@ -2488,7 +2488,7 @@
 						}
 					}
 			);
-			
+
 			return canvas;
 		}
 		return super.createCenterControl(parent);
@@ -2549,7 +2549,7 @@
 		}
 		return fButtonDiff != null;
 	}
-	
+
 	@Override
 	protected final int getCenterWidth() {
 		if (fSynchronizedScrolling)
@@ -2577,7 +2577,7 @@
 	 * Clients may implement to provide their own type of source viewers. The
 	 * viewer is not expected to be configured with a source viewer
 	 * configuration.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent of the viewer's control
 	 * @param textOrientation
@@ -2589,10 +2589,10 @@
 	protected SourceViewer createSourceViewer(Composite parent, int textOrientation) {
 		return new SourceViewer(parent, new CompositeRuler(), textOrientation | SWT.H_SCROLL | SWT.V_SCROLL);
 	}
-	
+
 	/**
 	 * Tells whether the given text viewer is backed by an editor.
-	 * 
+	 *
 	 * @param textViewer the text viewer to check
 	 * @return <code>true</code> if the viewer is backed by an editor
 	 * @since 3.5
@@ -2605,12 +2605,12 @@
 	 * Returns an editor input for the given source viewer. The method returns
 	 * <code>null</code> when no input is available, for example when the input
 	 * for the merge viewer has not been set yet.
-	 * 
+	 *
 	 * @param sourceViewer
 	 *            the source viewer to get input for
 	 * @return input for the given viewer or <code>null</code> when no input is
 	 *         available
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	protected IEditorInput getEditorInput(ISourceViewer sourceViewer) {
@@ -2626,7 +2626,7 @@
 				return fAncestorContributor.getDocumentKey();
 		return null;
 	}
-	
+
 	/*
 	 * Creates and initializes a text part.
 	 */
@@ -2635,10 +2635,10 @@
 				createSourceViewer(parent, getDirection()),
 				getResourceBundle(), getCompareConfiguration().getContainer());
 		final StyledText te= viewer.getSourceViewer().getTextWidget();
-		
+
 		if (!fConfirmSave)
 			viewer.hideSaveAction();
-		
+
 		te.addPaintListener(
 			new PaintListener() {
 				@Override
@@ -2664,7 +2664,7 @@
 				}
 			}
 		);
-					
+
 		te.addFocusListener(
 			new FocusAdapter() {
 				@Override
@@ -2677,7 +2677,7 @@
 				}
 			}
 		);
-		
+
 		viewer.getSourceViewer().addViewportListener(
 			new IViewportListener() {
 				@Override
@@ -2686,14 +2686,14 @@
 				}
 			}
 		);
-		
+
 		Font font= JFaceResources.getFont(fSymbolicFontName);
 		if (font != null)
 			te.setFont(font);
-		
+
 		if (fBackground != null)	// not default
 			te.setBackground(getColor(parent.getDisplay(), fBackground));
-		
+
 		// Add the find action to the popup menu of the viewer
 		contributeFindAction(viewer);
 
@@ -2733,7 +2733,7 @@
 		action.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_FIND_AND_REPLACE);
 		viewer.addAction(MergeSourceViewer.FIND_ID, action);
 	}
-	
+
 	private void contributeGotoLineAction(MergeSourceViewer viewer) {
 		IAction action = new GotoLineAction((ITextEditor) viewer.getAdapter(ITextEditor.class));
 		action.setActionDefinitionId(ITextEditorActionDefinitionIds.LINE_GOTO);
@@ -2744,7 +2744,7 @@
 		IAction action = new ChangeEncodingAction(getTextEditorAdapter());
 		viewer.addAction(MergeSourceViewer.CHANGE_ENCODING_ID, action);
 	}
-	
+
 	private void contributeDiffBackgroundListener(final MergeSourceViewer viewer) {
 		viewer.getSourceViewer().getTextWidget().addLineBackgroundListener(
 				new LineBackgroundListener() {
@@ -2827,7 +2827,7 @@
 	 * The default implementation does nothing, but clients should override to properly react to
 	 * viewers switching.
 	 * </p>
-	 * 
+	 *
 	 * @param sourceViewer the source viewer
 	 * @param state <code>true</code> if activated
 	 * @since 3.5
@@ -2861,34 +2861,34 @@
 		// The document is not associated with the input of the viewer so try to find the document
 		return Utilities.getDocument(type, element, isUsingDefaultContentProvider(), canHaveSharedDocument());
 	}
-	
+
 	private boolean isUsingDefaultContentProvider() {
 		return getContentProvider() instanceof MergeViewerContentProvider;
 	}
-	
+
 	private boolean canHaveSharedDocument() {
 		return getDocumentPartitioning() != null
 			|| getDocumentPartitioner() == null;
 	}
-	
+
 	private IDocument getDocument(ITypedElement te, ContributorInfo info) {
 		if (info != null && info.getElement() == te)
 			return info.getDocument();
 		return null;
 	}
-	
+
 	IDocument getDocument(char type, Object input) {
 		IDocument doc= getElementDocument(type, input);
 		if (doc != null)
 			return doc;
-			
+
 		if (input instanceof IDiffElement) {
 			IDiffContainer parent= ((IDiffElement)input).getParent();
 			return getElementDocument(type, parent);
 		}
 		return null;
 	}
-	
+
 	/*
 	 * Returns true if the given inputs map to the same documents
 	 */
@@ -2897,7 +2897,7 @@
 		IDocument oldDoc= getDocument(type, oldInput);
 		return newDoc == oldDoc;
 	}
-	
+
 	/**
 	 * Overridden to prevent save confirmation if new input is sub document of current input.
 	 * @param newInput the new input of this viewer, or <code>null</code> if there is no new input
@@ -2917,25 +2917,25 @@
 				return false;
 			}
 		}
-		
+
 		if (DEBUG) System.out.println("***** New docs !!!!");	//$NON-NLS-1$
-		
+
 		removeFromDocumentManager(ANCESTOR_CONTRIBUTOR, oldInput);
 		removeFromDocumentManager(LEFT_CONTRIBUTOR, oldInput);
 		removeFromDocumentManager(RIGHT_CONTRIBUTOR, oldInput);
-		
+
 		if (DEBUG)
 			DocumentManager.dump();
-		
+
 		return super.doSave(newInput, oldInput);
 	}
-	
+
 	private void removeFromDocumentManager(char leg, Object oldInput) {
 		IDocument document= getDocument(leg, oldInput);
 		if (document != null)
 			DocumentManager.remove(document);
 	}
-	
+
 	private ITypedElement getParent(char type) {
 		Object input= getInput();
 		if (input instanceof IDiffElement) {
@@ -2944,7 +2944,7 @@
 		}
 		return null;
 	}
-		
+
 	/*
 	 * Initializes the text viewers of the three content areas with the given input objects.
 	 * Subclasses may extend.
@@ -2959,23 +2959,23 @@
 
 		Position leftRange= null;
 		Position rightRange= null;
-		
+
 		// if one side is empty use container
 		if (FIX_47640 && !emptyInput && (left == null || right == null)) {
 			if (input instanceof IDiffElement) {
 				IDiffContainer parent= ((IDiffElement)input).getParent();
 				if (parent instanceof ICompareInput) {
 				    ICompareInput ci= (ICompareInput) parent;
-				    
+
 				    if (ci.getAncestor() instanceof IDocumentRange
 				            || ci.getLeft() instanceof IDocumentRange
 				            		|| ci.getRight() instanceof IDocumentRange) {
-				    
+
 				        	if (left instanceof IDocumentRange)
 				        	    leftRange= ((IDocumentRange)left).getRange();
 				        	if (right instanceof IDocumentRange)
 				        	    rightRange= ((IDocumentRange)right).getRange();
-					    
+
 					    ancestor= ci.getAncestor();
 					    left= getCompareConfiguration().isMirrored() ? ci.getRight() : ci.getLeft();
 					    right= getCompareConfiguration().isMirrored() ? ci.getLeft() : ci.getRight();
@@ -2985,12 +2985,12 @@
 		}
 
 		fHighlightRanges= left != null && right != null;
-		
+
 		resetDiffs();
 		fHasErrors= false; // start with no errors
-		
+
 		IMergeViewerContentProvider cp= getMergeContentProvider();
-		
+
 		if (cp instanceof MergeViewerContentProvider) {
 			MergeViewerContentProvider mcp= (MergeViewerContentProvider) cp;
 			mcp.setAncestorError(null);
@@ -3003,21 +3003,21 @@
 		ContributorInfo oldLeftContributor = fLeftContributor;
 		ContributorInfo oldRightContributor = fRightContributor;
 		ContributorInfo oldAncestorContributor = fAncestorContributor;
-		
+
 		// Create the new contributor
 		fLeftContributor = createLegInfoFor(left, LEFT_CONTRIBUTOR);
 		fRightContributor = createLegInfoFor(right, RIGHT_CONTRIBUTOR);
 		fAncestorContributor = createLegInfoFor(ancestor, ANCESTOR_CONTRIBUTOR);
-		
+
 		fLeftContributor.transferContributorStateFrom(oldLeftContributor);
 		fRightContributor.transferContributorStateFrom(oldRightContributor);
 		fAncestorContributor.transferContributorStateFrom(oldAncestorContributor);
-		
+
 		// Now disconnect the old ones
 		disconnect(oldLeftContributor);
 		disconnect(oldRightContributor);
 		disconnect(oldAncestorContributor);
-		
+
 		// Get encodings from streams. If an encoding is null, abide by the other one
 		// Defaults to workbench encoding only if both encodings are null
 		fLeftContributor.setEncodingIfAbsent(fRightContributor);
@@ -3029,21 +3029,21 @@
 			configureSourceViewer(fLeft.getSourceViewer(), isLeftEditable() && cp.isLeftEditable(input), fLeftContributor);
 			configureSourceViewer(fRight.getSourceViewer(), isRightEditable() && cp.isRightEditable(input), fRightContributor);
 			isConfigured = true; // configure once
-		} 
+		}
 
 		// set new documents
 		fLeftContributor.setDocument(fLeft, isLeftEditable() && cp.isLeftEditable(input));
 		fLeftLineCount= fLeft.getLineCount();
-		
+
 		fRightContributor.setDocument(fRight, isRightEditable() && cp.isRightEditable(input));
 		fRightLineCount= fRight.getLineCount();
-		
+
 		fAncestorContributor.setDocument(fAncestor, false);
 
 		setSyncScrolling(fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING));
-		
+
 		update(false);
-		
+
 		if (!fHasErrors && !emptyInput && !fComposite.isDisposed()) {
 			if (isRefreshing()) {
 				fLeftContributor.updateSelection(fLeft, !fSynchronizedScrolling);
@@ -3073,7 +3073,7 @@
 				}
 			}
 		}
-		
+
 	}
 
 	private void configureSourceViewer(SourceViewer sourceViewer, boolean editable, ContributorInfo contributor) {
@@ -3102,7 +3102,7 @@
 
 	/**
 	 * Sets the editable state of the given source viewer.
-	 * 
+	 *
 	 * @param sourceViewer
 	 *            the source viewer
 	 * @param state
@@ -3120,7 +3120,7 @@
 	private ContributorInfo createLegInfoFor(Object element, char leg) {
 		return new ContributorInfo(this, element, leg);
 	}
-	
+
 	private boolean updateDiffBackground(Diff diff) {
 
 		if (!fHighlightRanges)
@@ -3142,7 +3142,7 @@
 	 */
 	private void documentChanged(DocumentEvent e, boolean dirty) {
 		final IDocument doc= e.getDocument();
-		
+
 		if (doc == fLeft.getSourceViewer().getDocument()) {
 			setLeftDirty(dirty);
 		} else if (doc == fRight.getSourceViewer().getDocument()) {
@@ -3173,8 +3173,8 @@
 			updateLines(doc);
 		}
 	}
-	
-	
+
+
 	private void saveDiff() {
 			fSavedDiff = fCurrentDiff;
 	}
@@ -3185,8 +3185,8 @@
 		}
 		return fSavedDiff;
 	}
-	
-	
+
+
 	private Diff findNewDiff(Diff oldDiff) {
 		if (oldDiff == null)
 			return null;
@@ -3210,7 +3210,7 @@
 		}
 		return fMerger.findDiff(type, offset, offset + length);
 	}
-	
+
 	/*
 	 * This method is called if a range of text on one side is copied into an empty sub-document
 	 * on the other side. The method returns the position where the sub-document is placed into the base document.
@@ -3224,10 +3224,10 @@
 	 * @since 2.0
 	 */
 	protected int findInsertionPosition(char type, ICompareInput input) {
-			
+
 		ITypedElement other= null;
 		char otherType= 0;
-		
+
 		switch (type) {
 		case ANCESTOR_CONTRIBUTOR:
 			other= input.getLeft();
@@ -3256,7 +3256,7 @@
 		default:
 			break;
 		}
-		
+
 		if (other instanceof IDocumentRange) {
 			IDocumentRange dr= (IDocumentRange) other;
 			Position p= dr.getRange();
@@ -3265,7 +3265,7 @@
 		}
 		return 0;
 	}
-	
+
 	private void setError(char type, String message) {
 		IMergeViewerContentProvider cp= getMergeContentProvider();
 		if (cp instanceof MergeViewerContentProvider) {
@@ -3303,7 +3303,7 @@
 			 * is false. _In most cases_ this means that save has taken place
 			 * outside compare editor. Ask to redo diff calculation when the
 			 * editor gets focus.
-			 * 
+			 *
 			 * However, undoing all the changes made in another editor would
 			 * result in asking for redo diff as well. In this case, we set the
 			 * flag back to false, see
@@ -3325,7 +3325,7 @@
 			return null;
 		}
 	}
-	
+
 	private void addNewRange(char type, Object input, Position range) {
 		switch (type) {
 		case ANCESTOR_CONTRIBUTOR:
@@ -3341,10 +3341,10 @@
 			break;
 		}
 	}
-	
+
 	/**
 	 * Returns the contents of the underlying document as an array of bytes using the current workbench encoding.
-	 * 
+	 *
 	 * @param left if <code>true</code> the contents of the left side is returned; otherwise the right side
 	 * @return the contents of the left or right document or null
 	 */
@@ -3369,29 +3369,29 @@
 		}
 		return null;
 	}
-		
+
 	private IRegion normalizeDocumentRegion(IDocument doc, IRegion region) {
-		
+
 		if (region == null || doc == null)
 			return region;
-			
+
 		int maxLength= doc.getLength();
-		
+
 		int start= region.getOffset();
 		if (start < 0)
 			start= 0;
 		else if (start > maxLength)
 			start= maxLength;
-			
+
 		int length= region.getLength();
 		if (length < 0)
 			length= 0;
 		else if (start + length > maxLength)
 			length= maxLength - start;
-			
+
 		return new Region(start, length);
 	}
-		
+
 	@Override
 	protected final void handleResizeAncestor(int x, int y, int width, int height) {
 		if (width > 0) {
@@ -3401,7 +3401,7 @@
 				fAncestorCanvas.setVisible(true);
 			if (fAncestor.isControlOkToUse())
 				fAncestor.getSourceViewer().getTextWidget().setVisible(true);
-			
+
 			if (fAncestorCanvas != null) {
 				fAncestorCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight);
 				x+= fMarginWidth;
@@ -3427,7 +3427,7 @@
   	protected final void handleResizeLeftRight(int x, int y, int width1, int centerWidth, int width2,  int height) {
   		if (fBirdsEyeCanvas != null)
   			width2-= BIRDS_EYE_VIEW_WIDTH;
-  			
+
 		Rectangle trim= fLeft.getSourceViewer().getTextWidget().computeTrim(0, 0, 0, 0);
 		int scrollbarHeight= trim.height + trim.x;
 
@@ -3439,15 +3439,15 @@
 			x+= fMarginWidth;
 			leftTextWidth-= fMarginWidth;
 		}
-		
+
 		fLeft.setBounds(x, y, leftTextWidth, height);
 		x+= leftTextWidth;
-		
+
 		if (fCenter == null || fCenter.isDisposed())
 			fCenter= createCenterControl(composite);
 		fCenter.setBounds(x, y, centerWidth, height-scrollbarHeight);
 		x+= centerWidth;
-		
+
 		if (!fSynchronizedScrolling) {	// canvas is to the left of text
 			if (fRightCanvas != null) {
 				fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight);
@@ -3456,7 +3456,7 @@
 			}
 			// we draw the canvas to the left of the text widget
 		}
-		
+
 		int scrollbarWidth= 0;
 		if (fSynchronizedScrolling && fScrollCanvas != null) {
 			trim= fLeft.getSourceViewer().getTextWidget().computeTrim(0, 0, 0, 0);
@@ -3468,7 +3468,7 @@
 			rightTextWidth-= fMarginWidth;
 		fRight.setBounds(x, y, rightTextWidth, height);
 		x+= rightTextWidth;
-			
+
 		if (fSynchronizedScrolling) {
 			if (fRightCanvas != null) {	// canvas is to the right of the text
 				fRightCanvas.setBounds(x, y, fMarginWidth, height-scrollbarHeight);
@@ -3477,7 +3477,7 @@
 			if (fScrollCanvas != null)
 				fScrollCanvas.setBounds(x, y, scrollbarWidth, height-scrollbarHeight);
 		}
-		
+
   		if (fBirdsEyeCanvas != null) {
   			int verticalScrollbarButtonHeight= scrollbarWidth;
 			int horizontalScrollbarButtonHeight= scrollbarHeight;
@@ -3490,12 +3490,12 @@
   			y+= verticalScrollbarButtonHeight;
   			fBirdsEyeCanvas.setBounds(x+scrollbarWidth, y, BIRDS_EYE_VIEW_WIDTH, height-(2*verticalScrollbarButtonHeight+horizontalScrollbarButtonHeight));
    		}
-		
+
 		// doesn't work since TextEditors don't have their correct size yet.
 		updateVScrollBar();
 		refreshBirdsEyeView();
 	}
-							
+
 	/*
 	 * Track selection changes to update the current Diff.
 	 */
@@ -3511,9 +3511,9 @@
 			return new Region(position.getOffset(), position.getLength());
 		return null;
 	}
-	
+
 	//---- the differencing
-	
+
 	/**
 	 * Perform a two level 2- or 3-way diff.
 	 * The first level is based on line comparison, the second level on token comparison.
@@ -3539,7 +3539,7 @@
 
 		invalidateTextPresentation();
 	}
-	
+
 	private Diff findDiff(char type, int pos) {
 		try {
 			return fMerger.findDiff(type, pos);
@@ -3551,7 +3551,7 @@
 			return null;
 		}
 	}
-	
+
 	private void resetPositions(IDocument doc) {
 		if (doc == null)
 			return;
@@ -3562,16 +3562,16 @@
 		}
 		doc.addPositionCategory(DIFF_RANGE_CATEGORY);
 	}
-	
+
 	//---- update UI stuff
-	
+
 	private void updateControls() {
 		if (getControl().isDisposed())
 			return;
 
 		boolean leftToRight= false;
 		boolean rightToLeft= false;
-		
+
 		updateStatus(fCurrentDiff);
 		updateResolveStatus();
 
@@ -3584,7 +3584,7 @@
 				}
 			}
 		}
-		
+
 		if (fDirectionLabel != null) {
 			if (fHighlightRanges && fCurrentDiff != null && isThreeWay() && !isIgnoreAncestor()) {
 				fDirectionLabel.setImage(fCurrentDiff.getImage());
@@ -3592,7 +3592,7 @@
 				fDirectionLabel.setImage(null);
 			}
 		}
-		
+
 		if (fCopyDiffLeftToRightItem != null)
 			fCopyDiffLeftToRightItem.getAction().setEnabled(leftToRight);
 		if (fCopyDiffRightToLeftItem != null)
@@ -3631,11 +3631,11 @@
 		Assert.isTrue(false);
 		return false;
 	}
-	
+
 	private void updateResolveStatus() {
-			
+
 		RGB rgb= null;
-		
+
 		if (showResolveUI()) {
 			// we only show red or green if there is at least one incoming or conflicting change
 			int unresolvedIncoming= 0;
@@ -3653,7 +3653,7 @@
 						}
 				}
 			}
-		
+
 			if (unresolvedConflicting > 0)
 				rgb= SELECTED_CONFLICT;
 			else if (unresolvedIncoming > 0)
@@ -3661,22 +3661,22 @@
 			else
 				rgb= RESOLVED;
 		}
-		
+
 		if (fHeaderPainter.setColor(rgb))
 			fSummaryHeader.redraw();
 	}
 
 	private void updateStatus(Diff diff) {
-		
+
 		String diffDescription;
-		
+
 		if (diff == null) {
 			diffDescription= CompareMessages.TextMergeViewer_diffDescription_noDiff_format;
 		} else {
-			
+
 			if (diff.isToken())		// we don't show special info for token diffs
 				diff= diff.getParent();
-		
+
 			String format= CompareMessages.TextMergeViewer_diffDescription_diff_format;
 			diffDescription= MessageFormat.format(format,
 				getDiffType(diff),						// 0: diff type
@@ -3685,14 +3685,14 @@
 				getDiffRange(fRight, diff.getPosition(RIGHT_CONTRIBUTOR))	// 3: left end line
 			);
 		}
-		
+
 		String format= CompareMessages.TextMergeViewer_statusLine_format;
 		String s= MessageFormat.format(format,
 			getCursorPosition(fLeft),	// 0: left column
 			getCursorPosition(fRight),	// 1: right column
 			diffDescription				// 2: diff description
 		);
-	
+
 		getCompareConfiguration().getContainer().setStatusMessage(s);
 	}
 
@@ -3718,7 +3718,7 @@
 		String format= CompareMessages.TextMergeViewer_diffType_format;
 		return MessageFormat.format(format, s, diff.changeType());
 	}
-	
+
 	private String getDiffNumber(Diff diff) {
 		// find the diff's number
 		int diffNumber= 0;
@@ -3732,12 +3732,12 @@
 		}
 		return Integer.toString(diffNumber);
 	}
-	
+
 	private String getDiffRange(MergeSourceViewer v, Position pos) {
 		Point p= v.getLineRange(pos, new Point(0, 0));
 		int startLine= p.x+1;
 		int endLine= p.x+p.y;
-		
+
 		String format;
 		if (endLine < startLine)
 			format= CompareMessages.TextMergeViewer_beforeLine_format;
@@ -3745,33 +3745,33 @@
 			format= CompareMessages.TextMergeViewer_range_format;
 		return MessageFormat.format(format, Integer.toString(startLine), Integer.toString(endLine));
 	}
-	
+
 	/*
 	 * Returns a description of the cursor position.
-	 * 
+	 *
 	 * @return a description of the cursor position
 	 */
 	private String getCursorPosition(MergeSourceViewer v) {
 		if (v != null) {
 			StyledText styledText= v.getSourceViewer().getTextWidget();
-			
+
 			IDocument document= v.getSourceViewer().getDocument();
 			if (document != null) {
 				int offset= v.getSourceViewer().getVisibleRegion().getOffset();
 				int caret= offset + styledText.getCaretOffset();
-				
+
 				try {
 					int line=document.getLineOfOffset(caret);
-					
+
 					int lineOffset= document.getLineOffset(line);
 					int occurrences= 0;
 					for (int i= lineOffset; i < caret; i++)
 						if ('\t' == document.getChar(i))
 							++ occurrences;
-							
+
 					int tabWidth= styledText.getTabs();
 					int column= caret - lineOffset + (tabWidth -1) * occurrences;
-					
+
 					String format= CompareMessages.TextMergeViewer_cursorPosition_format;
 					return MessageFormat.format(format,
 						Integer.toString(line + 1), Integer.toString(column + 1) );
@@ -3786,7 +3786,7 @@
 	@Override
 	protected void updateHeader() {
 		super.updateHeader();
-				
+
 		updateControls();
 	}
 
@@ -3797,7 +3797,7 @@
 	@Override
 	protected void createToolItems(ToolBarManager tbm) {
 		fHandlerService= CompareHandlerService.createFor(getCompareConfiguration().getContainer(), fLeft.getSourceViewer().getControl().getShell());
-		
+
 		final String ignoreAncestorActionKey= "action.IgnoreAncestor.";	//$NON-NLS-1$
 		Action ignoreAncestorAction= new Action() {
 			@Override
@@ -3813,13 +3813,13 @@
 		ignoreAncestorAction.setChecked(isIgnoreAncestor());
 		Utilities.initAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey);
 		Utilities.initToggleAction(ignoreAncestorAction, getResourceBundle(), ignoreAncestorActionKey, isIgnoreAncestor());
-		
+
 		fIgnoreAncestorItem= new ActionContributionItem(ignoreAncestorAction);
 		fIgnoreAncestorItem.setVisible(false);
 		tbm.appendToGroup("modes", fIgnoreAncestorItem); //$NON-NLS-1$
 
 		tbm.add(new Separator());
-		
+
 		Action a= new Action() {
 			@Override
 			public void run() {
@@ -3832,7 +3832,7 @@
 		fNextDiff= new ActionContributionItem(a);
 		tbm.appendToGroup("navigation", fNextDiff); //$NON-NLS-1$
 		// Don't register this action since it is probably registered by the container
-		
+
 		a= new Action() {
 			@Override
 			public void run() {
@@ -3845,7 +3845,7 @@
 		fPreviousDiff= new ActionContributionItem(a);
 		tbm.appendToGroup("navigation", fPreviousDiff); //$NON-NLS-1$
 		// Don't register this action since it is probably registered by the container
-		
+
 		a= new Action() {
 			@Override
 			public void run() {
@@ -3858,7 +3858,7 @@
 		fNextChange= new ActionContributionItem(a);
 		tbm.appendToGroup("navigation", fNextChange); //$NON-NLS-1$
 		fHandlerService.registerAction(a, "org.eclipse.compare.selectNextChange");	//$NON-NLS-1$
-		
+
 		a= new Action() {
 			@Override
 			public void run() {
@@ -3883,7 +3883,7 @@
 		fCopyDiffLeftToRightItem.setVisible(isRightEditable());
 		tbm.appendToGroup("merge", fCopyDiffLeftToRightItem); //$NON-NLS-1$
 		fHandlerService.registerAction(a, "org.eclipse.compare.copyLeftToRight");	//$NON-NLS-1$
-		
+
 		a= new Action() {
 			@Override
 			public void run() {
@@ -3895,14 +3895,14 @@
 		fCopyDiffRightToLeftItem.setVisible(isLeftEditable());
 		tbm.appendToGroup("merge", fCopyDiffRightToLeftItem); //$NON-NLS-1$
 		fHandlerService.registerAction(a, "org.eclipse.compare.copyRightToLeft");	//$NON-NLS-1$
-		
+
 		fIgnoreWhitespace= ChangePropertyAction.createIgnoreWhiteSpaceAction(getResourceBundle(), getCompareConfiguration());
 		fIgnoreWhitespace.setActionDefinitionId(ICompareUIConstants.COMMAND_IGNORE_WHITESPACE);
 		fLeft.addTextAction(fIgnoreWhitespace);
 		fRight.addTextAction(fIgnoreWhitespace);
 		fAncestor.addTextAction(fIgnoreWhitespace);
 		fHandlerService.registerAction(fIgnoreWhitespace, fIgnoreWhitespace.getActionDefinitionId());
-		
+
 		boolean needsLeftPainter= !isEditorBacked(fLeft.getSourceViewer());
 		boolean needsRightPainter= !isEditorBacked(fLeft.getSourceViewer());
 		boolean needsAncestorPainter= !isEditorBacked(fAncestor.getSourceViewer());
@@ -3910,13 +3910,13 @@
 				new MergeSourceViewer[] {fLeft, fRight, fAncestor},
 				new boolean[] {needsLeftPainter, needsRightPainter, needsAncestorPainter });
 		fHandlerService.registerAction(showWhitespaceAction, ITextEditorActionDefinitionIds.SHOW_WHITESPACE_CHARACTERS);
-		
+
 		toggleLineNumbersAction = new LineNumberRulerToggleAction(CompareMessages.TextMergeViewer_16,
 				new MergeSourceViewer[] { fLeft, fRight, fAncestor },
 				AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER);
 		fHandlerService.registerAction(toggleLineNumbersAction, ITextEditorActionDefinitionIds.LINENUMBER_TOGGLE);
 	}
-	
+
 	private void configureCompareFilterActions(Object input, Object ancestor,
 			Object left, Object right) {
 		if (getCompareConfiguration() != null) {
@@ -4055,20 +4055,20 @@
 	@Override
 	protected void handlePropertyChangeEvent(PropertyChangeEvent event) {
 		String key= event.getProperty();
-		
+
 		if (key.equals(CompareConfiguration.IGNORE_WHITESPACE)
 				|| key.equals(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS)
 				|| (key.equals(ChangeCompareFilterPropertyAction.COMPARE_FILTERS) && getCompareConfiguration()
 						.getProperty(
 								ChangeCompareFilterPropertyAction.COMPARE_FILTERS_INITIALIZING) == null)) {
-					
+
 			fShowPseudoConflicts= fPreferenceStore.getBoolean(ComparePreferencePage.SHOW_PSEUDO_CONFLICTS);
-			
+
 			update(true);
 			// selectFirstDiff(true);
 			if (fFocusPart != null)
 				handleSelectionChanged(fFocusPart);
-			
+
 //		} else if (key.equals(ComparePreferencePage.USE_SPLINES)) {
 //			fUseSplines= fPreferenceStore.getBoolean(ComparePreferencePage.USE_SPLINES);
 //			invalidateLines();
@@ -4079,17 +4079,17 @@
 			fBasicCenterCurve= null;
 			updateControls();
 			invalidateLines();
-	
+
 		} else if (key.equals(ComparePreferencePage.HIGHLIGHT_TOKEN_CHANGES)) {
 			fHighlightTokenChanges= fPreferenceStore.getBoolean(ComparePreferencePage.HIGHLIGHT_TOKEN_CHANGES);
 			updateControls();
 			updatePresentation();
-			
+
 //		} else if (key.equals(ComparePreferencePage.USE_RESOLVE_UI)) {
 //			fUseResolveUI= fPreferenceStore.getBoolean(ComparePreferencePage.USE_RESOLVE_UI);
 //			updateResolveStatus();
 //			invalidateLines();
-		
+
 		} else if (key.equals(fSymbolicFontName)) {
 			updateFont();
 			invalidateLines();
@@ -4098,11 +4098,11 @@
 			updateColors(null);
 			invalidateLines();
 			invalidateTextPresentation();
-			
+
 		} else if (key.equals(ComparePreferencePage.SYNCHRONIZE_SCROLLING)) {
 			boolean b= fPreferenceStore.getBoolean(ComparePreferencePage.SYNCHRONIZE_SCROLLING);
 			setSyncScrolling(b);
-		
+
 		} else if (key.equals(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND)) {
 			if (!fIsUsingSystemBackground) {
 				setBackgroundColor(createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND));
@@ -4136,23 +4136,23 @@
 			}
 		} else {
 			super.handlePropertyChangeEvent(event);
-			
+
 			if (key.equals(ICompareUIConstants.PROP_IGNORE_ANCESTOR)) {
 				update(true);
 				selectFirstDiff(true);
 			}
 		}
 	}
-	
+
 	private void selectFirstDiff(boolean first) {
-		
+
 		if (fLeft == null || fRight == null) {
 			return;
 		}
 		if (fLeft.getSourceViewer().getDocument() == null || fRight.getSourceViewer().getDocument() == null) {
 			return;
 		}
-		
+
 		Diff firstDiff= null;
 		if (first)
 			firstDiff= findNext(fRight, -1, -1, false);
@@ -4160,27 +4160,27 @@
 			firstDiff= findPrev(fRight, 9999999, 9999999, false);
 		setCurrentDiff(firstDiff, true);
 	}
-	
-	
-	
+
+
+
 	private void setSyncScrolling(boolean newMode) {
 		if (fSynchronizedScrolling != newMode) {
 			fSynchronizedScrolling= newMode;
-			
+
 			scrollVertical(0, 0, 0, null);
-			
+
 			// throw away central control (Sash or Canvas)
 			Control center= getCenterControl();
 			if (center != null && !center.isDisposed())
 				center.dispose();
-			
+
 			fLeft.getSourceViewer().getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
 			fRight.getSourceViewer().getTextWidget().getVerticalBar().setVisible(!fSynchronizedScrolling);
-	
+
 			fComposite.layout(true);
 		}
 	}
-					
+
 	@Override
 	protected void updateToolItems() {
 		if (fCopyDiffLeftToRightItem != null) {
@@ -4195,7 +4195,7 @@
 		if (!isPatchHunk()){
 			if (fIgnoreAncestorItem != null)
 				fIgnoreAncestorItem.setVisible(isThreeWay());
-			
+
 			if (fCopyDiffLeftToRightItem != null) {
 				IAction a= fCopyDiffLeftToRightItem.getAction();
 				if (a != null)
@@ -4209,13 +4209,13 @@
 		}
 		super.updateToolItems();
 	}
-	
+
 	//---- painting lines
-	
+
 	private void updateLines(IDocument d) {
 		boolean left= false;
 		boolean right= false;
-		
+
 		// FIXME: this optimization is incorrect because
 		// it doesn't take replace operations into account where
 		// the old and new line count does not differ
@@ -4228,7 +4228,7 @@
 			right= fRightLineCount != l;
 			fRightLineCount= l;
 		}
-		
+
 		if (left || right) {
 			if (left) {
 				if (fLeftCanvas != null)
@@ -4245,7 +4245,7 @@
 			refreshBirdsEyeView();
 		}
 	}
-	
+
 	private void invalidateLines() {
 		if (isThreeWay() && isAncestorVisible()) {
 			if (Utilities.okToUse(fAncestorCanvas))
@@ -4253,23 +4253,23 @@
 			if (fAncestor != null && fAncestor.isControlOkToUse())
 				fAncestor.getSourceViewer().getTextWidget().redraw();
 		}
-		
+
 		if (Utilities.okToUse(fLeftCanvas))
 			fLeftCanvas.redraw();
-			
+
 		if (fLeft != null && fLeft.isControlOkToUse())
 			fLeft.getSourceViewer().getTextWidget().redraw();
-			
+
 		if (Utilities.okToUse(getCenterControl()))
 			getCenterControl().redraw();
-			
+
 		if (fRight != null && fRight.isControlOkToUse())
 			fRight.getSourceViewer().getTextWidget().redraw();
-			
+
 		if (Utilities.okToUse(fRightCanvas))
 			fRightCanvas.redraw();
 	}
-	
+
 	private boolean showResolveUI() {
 		if (!isThreeWay() || isIgnoreAncestor())
 			return false;
@@ -4280,13 +4280,13 @@
 		// we only enable the new resolve UI if exactly one side is editable
 		return isLeftEditable() || isRightEditable();
 	}
-	
+
 	private void paintCenter(Canvas canvas, GC g) {
-		
+
 		Display display= canvas.getDisplay();
-		
+
 		checkForColorUpdate(display);
-		
+
 		if (! fSynchronizedScrolling)
 			return;
 
@@ -4297,53 +4297,53 @@
 		Point size= canvas.getSize();
 		int x= 0;
 		int w= size.x;
-				
+
 		g.setBackground(canvas.getBackground());
 		g.fillRectangle(x+1, 0, w-2, size.y);
-		
+
 		if (!fIsMotif) {
 			// draw thin line between center ruler and both texts
 			g.setBackground(display.getSystemColor(SWT.COLOR_WIDGET_NORMAL_SHADOW));
 			g.fillRectangle(0, 0, 1, size.y);
 			g.fillRectangle(w-1, 0, 1, size.y);
 		}
-			
+
 		if (! fHighlightRanges)
 			return;
 
 		if (fMerger.hasChanges()) {
 			int lshift= fLeft.getVerticalScrollOffset();
 			int rshift= fRight.getVerticalScrollOffset();
-					
+
 			Point region= new Point(0, 0);
-		
+
 			for (Iterator<?> iterator = fMerger.changesIterator(); iterator.hasNext();) {
 				Diff diff = (Diff) iterator.next();
 				if (diff.isDeleted())
 					continue;
-				
+
 				if (fShowCurrentOnly2 && !isCurrentDiff(diff))
 					continue;
 
 				fLeft.getLineRange(diff.getPosition(LEFT_CONTRIBUTOR), region);
 				int ly= (region.x * lineHeightLeft) + lshift;
 				int lh= region.y * lineHeightLeft;
-	
+
 				fRight.getLineRange(diff.getPosition(RIGHT_CONTRIBUTOR), region);
 				int ry= (region.x * lineHeightRight) + rshift;
 				int rh= region.y * lineHeightRight;
-	
+
 				if (Math.max(ly+lh, ry+rh) < 0)
 					continue;
 				if (Math.min(ly, ry) >= visibleHeight)
 					break;
-	
+
 				fPts[0]= x;	fPts[1]= ly;	fPts[2]= w;	fPts[3]= ry;
 				fPts[6]= x;	fPts[7]= ly+lh;	fPts[4]= w;	fPts[5]= ry+rh;
-				
+
 				Color fillColor= getColor(display, getFillColor(diff));
 				Color strokeColor= getColor(display, getStrokeColor(diff));
-				
+
 				if (fUseSingleLine) {
 					int w2= 3;
 
@@ -4392,22 +4392,22 @@
 						g.drawLine(fPts[6], fPts[7], fPts[4], fPts[5]);
 					}
 				}
-				
+
 				if (fUseSingleLine && isAnySideEditable()) {
 					// draw resolve state
 					int cx= (w-RESOLVE_SIZE)/2;
 					int cy= ((ly+lh/2) + (ry+rh/2) - RESOLVE_SIZE)/2;
-					
+
 					g.setBackground(fillColor);
 					g.fillRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE);
-					
+
 					g.setForeground(strokeColor);
 					g.drawRectangle(cx, cy, RESOLVE_SIZE, RESOLVE_SIZE);
 				}
 			}
 		}
 	}
-	
+
 	private int[] getCenterCurvePoints(int startx, int starty, int endx, int endy) {
 		if (fBasicCenterCurve == null)
 			buildBaseCenterCurve(endx-startx);
@@ -4431,9 +4431,9 @@
 	}
 
 	private void paintSides(GC g, MergeSourceViewer tp, Canvas canvas, boolean right) {
-		
+
 		Display display= canvas.getDisplay();
-		
+
 		int lineHeight= tp.getSourceViewer().getTextWidget().getLineHeight();
 		int visibleHeight= tp.getViewportHeight();
 
@@ -4441,7 +4441,7 @@
 		int x= 0;
 		int w= fMarginWidth;
 		int w2= w/2;
-			
+
 		g.setBackground(canvas.getBackground());
 		g.fillRectangle(x, 0, w, size.y);
 
@@ -4459,32 +4459,32 @@
 
 		if (fMerger.hasChanges()) {
 			int shift= tp.getVerticalScrollOffset() + (2-LW);
-				
+
 			Point region= new Point(0, 0);
 			char leg = getLeg(tp);
 			for (Iterator<?> iterator = fMerger.changesIterator(); iterator.hasNext();) {
 				Diff diff = (Diff) iterator.next();
 				if (diff.isDeleted())
 					continue;
-				
+
 				if (fShowCurrentOnly2 && !isCurrentDiff(diff))
 					continue;
 
 				tp.getLineRange(diff.getPosition(leg), region);
 				int y= (region.x * lineHeight) + shift;
 				int h= region.y * lineHeight;
-	
+
 				if (y+h < 0)
 					continue;
 				if (y >= visibleHeight)
 					break;
-					
+
 				g.setBackground(getColor(display, getFillColor(diff)));
 				if (right)
 					g.fillRectangle(x, y, w2, h);
 				else
 					g.fillRectangle(x+w2, y, w2, h);
-	
+
 				g.setLineWidth(0 /* LW */);
 				g.setForeground(getColor(display, getStrokeColor(diff)));
 				if (right)
@@ -4494,9 +4494,9 @@
 			}
 		}
 	}
-	
+
 	private void paint(PaintEvent event, MergeSourceViewer tp) {
-		
+
 		if (! fHighlightRanges)
 			return;
 		if (!fMerger.hasChanges())
@@ -4504,37 +4504,37 @@
 
 		Control canvas= (Control) event.widget;
 		GC g= event.gc;
-		
+
 		Display display= canvas.getDisplay();
-		
+
 		int lineHeight= tp.getSourceViewer().getTextWidget().getLineHeight();
 		int w= canvas.getSize().x;
 		int shift= tp.getVerticalScrollOffset() + (2-LW);
 		int maxh= event.y+event.height; 	// visibleHeight
-		
+
 		//if (fIsMotif)
 			shift+= fTopInset;
-				
+
 		Point range= new Point(0, 0);
-		
+
 		char leg = getLeg(tp);
 		for (Iterator<?> iterator = fMerger.changesIterator(); iterator.hasNext();) {
 			Diff diff = (Diff) iterator.next();
 			if (diff.isDeleted())
 				continue;
-			
+
 			if (fShowCurrentOnly && !isCurrentDiff(diff))
 				continue;
 
 			tp.getLineRange(diff.getPosition(leg), range);
 			int y= (range.x * lineHeight) + shift;
 			int h= range.y * lineHeight;
-			
+
 			if (y+h < event.y)
 				continue;
 			if (y > maxh)
 				break;
-			
+
 			g.setBackground(getColor(display, getStrokeColor(diff)));
 			g.fillRectangle(0, y-1, w, LW);
 			g.fillRectangle(0, y+h-1, w, LW);
@@ -4563,10 +4563,10 @@
 		}
 		return selected ? selected_fill : OUTGOING_FILL;
 	}
-	
+
 	private RGB getStrokeColor(Diff diff) {
 		boolean selected= fCurrentDiff != null && fCurrentDiff.getParent() == diff;
-		
+
 		if (isThreeWay() && !isIgnoreAncestor()) {
 			switch (diff.getKind()) {
 			case RangeDifference.RIGHT:
@@ -4586,7 +4586,7 @@
 		}
 		return selected ? SELECTED_OUTGOING : OUTGOING;
 	}
-	
+
 	private Color getColor(Display display, RGB rgb) {
 		if (rgb == null)
 			return null;
@@ -4599,7 +4599,7 @@
 		}
 		return c;
 	}
-			
+
 	static RGB interpolate(RGB fg, RGB bg, double scale) {
 		if (fg != null && bg != null)
 			return new RGB(
@@ -4613,9 +4613,9 @@
 			return bg;
 		return new RGB(128, 128, 128);	// a gray
 	}
-	
+
 	//---- Navigating and resolving Diffs
-	
+
 	private Diff getNextVisibleDiff(boolean down, boolean deep) {
 		Diff diff= null;
 		MergeSourceViewer part= getNavigationPart();
@@ -4637,7 +4637,7 @@
 		}
 		return diff;
 	}
-	
+
 	private Diff internalGetNextDiff(boolean down, boolean deep, MergeSourceViewer part, Point s) {
 		if (fMerger.hasChanges()) {
 			if (down)
@@ -4646,7 +4646,7 @@
 		}
 		return null;
 	}
-	
+
 	private MergeSourceViewer getNavigationPart() {
 		MergeSourceViewer part= fFocusPart;
 		if (part == null)
@@ -4657,7 +4657,7 @@
 	private Diff getWrappedDiff(Diff diff, boolean down) {
 		return fMerger.getWrappedDiff(diff, down);
 	}
-	
+
 	/*
 	 * Returns true if end (or beginning) of document reached.
 	 */
@@ -4682,14 +4682,14 @@
 		}
 		return diff == null;
 	}
-	
+
 	private void endOfDocumentReached(boolean down) {
 		Control c= getControl();
 		if (Utilities.okToUse(c)) {
 			handleEndOfDocumentReached(c.getShell(), down);
 		}
 	}
-	
+
 	private void handleEndOfDocumentReached(Shell shell, boolean next) {
 		IPreferenceStore store = CompareUIPlugin.getDefault().getPreferenceStore();
 		String value = store.getString(ICompareUIConstants.PREF_NAVIGATION_END_ACTION);
@@ -4735,7 +4735,7 @@
 			}
 		}
 	}
-	
+
 	private void performEndOfDocumentAction(Shell shell, IPreferenceStore store, String key, boolean next) {
 		String value = store.getString(key);
 		if (value.equals(ICompareUIConstants.PREF_VALUE_DO_NOTHING)) {
@@ -4751,7 +4751,7 @@
 			selectFirstDiff(next);
 		}
 	}
-	
+
 	private boolean hasNextElement(boolean down) {
 		ICompareNavigator navigator = getCompareConfiguration().getContainer().getNavigator();
 		if (navigator instanceof CompareNavigator) {
@@ -4770,11 +4770,11 @@
 		char contributor = getLeg(tp);
 		return fMerger.findDiff(contributor, rangeStart, rangeEnd);
 	}
-	
+
 	private Diff findNext(MergeSourceViewer tp, int start, int end, boolean deep) {
 		return fMerger.findNext(getLeg(tp), start, end, deep);
 	}
-	
+
 	private Diff findPrev(MergeSourceViewer tp, int start, int end, boolean deep) {
 		return fMerger.findPrev(getLeg(tp), start, end, deep);
 	}
@@ -4787,7 +4787,7 @@
 	private void setCurrentDiff(Diff d, boolean revealAndSelect) {
 		setCurrentDiff(d, revealAndSelect, false);
 	}
-		
+
 	/*
 	 * Set the currently active Diff and update the toolbars controls and lines.
 	 * If <code>revealAndSelect</code> is <code>true</code> the Diff is revealed and
@@ -4805,7 +4805,7 @@
 			fRightToLeftButton.setVisible(false);
 
 		if (d != null && revealAndSelect) {
-			
+
 			// before we set fCurrentDiff we change the selection
 			// so that the paint code uses the old background colors
 			// otherwise selection isn't drawn correctly
@@ -4820,7 +4820,7 @@
 				fLeft.setSelection(new Position(d.getPosition(LEFT_CONTRIBUTOR).offset, 0));
 				fRight.setSelection(new Position(d.getPosition(RIGHT_CONTRIBUTOR).offset, 0));
 			}
-			
+
 			// now switch diffs
 			saveDiff();
 			fCurrentDiff= d;
@@ -4840,7 +4840,7 @@
 	 * Smart determines whether
 	 */
 	private void revealDiff(Diff d, boolean smart) {
-		
+
 		boolean ancestorIsVisible= false;
 		boolean leftIsVisible= false;
 		boolean rightIsVisible= false;
@@ -4850,7 +4850,7 @@
 			// find the starting line of the diff in all text widgets
 			int ls= fLeft.getLineRange(d.getPosition(LEFT_CONTRIBUTOR), region).x;
 			int rs= fRight.getLineRange(d.getPosition(RIGHT_CONTRIBUTOR), region).x;
-			
+
 			if (isThreeWay() && !isIgnoreAncestor()) {
 				int as= fAncestor.getLineRange(d.getPosition(ANCESTOR_CONTRIBUTOR), region).x;
 				if (as >= fAncestor.getSourceViewer().getTopIndex() && as <= fAncestor.getSourceViewer().getBottomIndex())
@@ -4867,7 +4867,7 @@
 		// vertical scrolling
 		if (!leftIsVisible || !rightIsVisible) {
 			int avpos= 0, lvpos= 0, rvpos= 0;
-			
+
 			MergeSourceViewer allButThis= null;
 			if (leftIsVisible) {
 				avpos= lvpos= rvpos= realToVirtualPosition(LEFT_CONTRIBUTOR, fLeft.getSourceViewer().getTopIndex());
@@ -4905,13 +4905,13 @@
 				if (rvpos < 0)
 					rvpos= 0;
 			}
-							
+
 			scrollVertical(avpos, lvpos, rvpos, allButThis);
-			
+
 			if (fVScrollBar != null)
 				fVScrollBar.setSelection(avpos);
 		}
-		
+
 		// horizontal scrolling
 		if (d.isToken()) {
 			// we only scroll horizontally for token diffs
@@ -4925,7 +4925,7 @@
 			hscroll(fRight);
 		}
 	}
-	
+
 	private static void reveal(MergeSourceViewer v, Position p) {
 		if (v != null && p != null) {
 			StyledText st= v.getSourceViewer().getTextWidget();
@@ -4936,7 +4936,7 @@
 			}
 		}
 	}
-	
+
 	private static void hscroll(MergeSourceViewer v) {
 		if (v != null) {
 			StyledText st= v.getSourceViewer().getTextWidget();
@@ -4944,9 +4944,9 @@
 				st.setHorizontalIndex(0);
 		}
 	}
-	
+
 	//--------------------------------------------------------------------------------
-	
+
 	void copyAllUnresolved(boolean leftToRight) {
 		if (fMerger.hasChanges() && isThreeWay() && !isIgnoreAncestor()) {
 			IRewriteTarget target= leftToRight ? fRight.getSourceViewer().getRewriteTarget() : fLeft.getSourceViewer().getRewriteTarget();
@@ -4984,7 +4984,7 @@
 			}
 		}
 	}
-	
+
 	/*
 	 * Copy whole document from one side to the other.
 	 */
@@ -5055,7 +5055,7 @@
 	private void copyDiffRightToLeft() {
 		copy(fCurrentDiff, false, false);
 	}
-		
+
 	/*
 	 * Copy the contents of the given diff from one side to the other.
 	 */
@@ -5076,7 +5076,7 @@
 	 * Returns true if copy was successful.
 	 */
 	private boolean copy(Diff diff, boolean leftToRight) {
-		
+
 		if (diff != null) {
 			if (!validateChange(!leftToRight))
 				return false;
@@ -5099,34 +5099,34 @@
 			info = fLeftContributor;
 		else
 			info = fRightContributor;
-		
+
 		return info.validateChange();
 	}
 
 	//---- scrolling
-	
+
 	/*
 	 * The height of the TextEditors in lines.
 	 */
 	private int getViewportHeight() {
 		StyledText te= fLeft.getSourceViewer().getTextWidget();
-		
+
 		int vh= te.getClientArea().height;
 		if (vh == 0) {
 			Rectangle trim= te.computeTrim(0, 0, 0, 0);
 			int scrollbarHeight= trim.height;
-			
+
 			int headerHeight= getHeaderHeight();
-	
+
 			Composite composite= (Composite) getControl();
 			Rectangle r= composite.getClientArea();
-							
+
 			vh= r.height-headerHeight-scrollbarHeight;
 		}
 
 		return vh / te.getLineHeight();
 	}
-	
+
 	/*
 	 * Returns the virtual position for the given view position.
 	 */
@@ -5135,11 +5135,11 @@
 			return vpos;
 		return fMerger.realToVirtualPosition(contributor, vpos);
 	}
-		
+
 	private void scrollVertical(int avpos, int lvpos, int rvpos, MergeSourceViewer allBut) {
-						
+
 		int s= 0;
-		
+
 		if (fSynchronizedScrolling) {
 			s= fMerger.getVirtualHeight() - rvpos;
 			int height= fRight.getViewportLines()/4;
@@ -5150,7 +5150,7 @@
 		}
 
 		fInScrolling= true;
-				
+
 		if (isThreeWay() && allBut != fAncestor) {
 			if (fSynchronizedScrolling || allBut == null) {
 				int y= virtualToRealPosition(ANCESTOR_CONTRIBUTOR, avpos+s)-s;
@@ -5171,38 +5171,38 @@
 				fRight.vscroll(y);
 			}
 		}
-		
+
 		fInScrolling= false;
-		
+
 		if (isThreeWay() && fAncestorCanvas != null)
 			fAncestorCanvas.repaint();
-		
+
 		if (fLeftCanvas != null)
 			fLeftCanvas.repaint();
-		
+
 		Control center= getCenterControl();
 		if (center instanceof BufferedCanvas)
 			((BufferedCanvas)center).repaint();
-		
+
 		if (fRightCanvas != null)
 			fRightCanvas.repaint();
 	}
-		
+
 	/*
 	 * Updates Scrollbars with viewports.
 	 */
 	private void syncViewport(MergeSourceViewer w) {
-		
+
 		if (fInScrolling)
 			return;
 
 		int ix= w.getSourceViewer().getTopIndex();
 		int ix2= w.getDocumentRegionOffset();
-		
+
 		int viewPosition= realToVirtualPosition(getLeg(w), ix-ix2);
-				
+
 		scrollVertical(viewPosition, viewPosition, viewPosition, w);	// scroll all but the given views
-		
+
 		if (fVScrollBar != null) {
 			int value= Math.max(0, Math.min(viewPosition, fMerger.getVirtualHeight() - getViewportHeight()));
 			fVScrollBar.setSelection(value);
@@ -5213,19 +5213,19 @@
 	/**
 	 */
 	private void updateVScrollBar() {
-		
+
 		if (Utilities.okToUse(fVScrollBar) && fSynchronizedScrolling) {
 			int virtualHeight= fMerger.getVirtualHeight();
 			int viewPortHeight= getViewportHeight();
 			int pageIncrement= viewPortHeight-1;
 			int thumb= (viewPortHeight > virtualHeight) ? virtualHeight : viewPortHeight;
-						
+
 			fVScrollBar.setPageIncrement(pageIncrement);
 			fVScrollBar.setMaximum(virtualHeight);
 			fVScrollBar.setThumb(thumb);
 		}
 	}
-	
+
 	/*
 	 * maps given virtual position into a real view position of this view.
 	 */
@@ -5234,29 +5234,29 @@
 			return v;
 		return fMerger.virtualToRealPosition(contributor, v);
 	}
-	
+
 	@Override
 	void flushLeftSide(Object oldInput, IProgressMonitor monitor){
 		IMergeViewerContentProvider content= getMergeContentProvider();
 		Object leftContent = content.getLeftContent(oldInput);
-		
+
 		if (leftContent != null && getCompareConfiguration().isLeftEditable() && isLeftDirty()) {
 			if (fLeftContributor.hasSharedDocument(leftContent)) {
 				if (flush(fLeftContributor))
 					setLeftDirty(false);
 			}
 		}
-		
+
 		if (!(content instanceof MergeViewerContentProvider) || isLeftDirty()) {
 			super.flushLeftSide(oldInput, monitor);
 		}
 	}
-	
+
 	@Override
 	void flushRightSide(Object oldInput, IProgressMonitor monitor){
 		IMergeViewerContentProvider content= getMergeContentProvider();
 		Object rightContent = content.getRightContent(oldInput);
-		
+
 		if (rightContent != null && getCompareConfiguration().isRightEditable() && isRightDirty()) {
 			if (fRightContributor.hasSharedDocument(rightContent)) {
 				if (flush(fRightContributor))
@@ -5268,7 +5268,7 @@
 			super.flushRightSide(oldInput, monitor);
 		}
 	}
-	
+
 	@Override
 	protected void flushContent(Object oldInput, IProgressMonitor monitor) {
 		flushLeftSide(oldInput, monitor);
@@ -5280,7 +5280,7 @@
 			super.flushContent(oldInput, monitor);
 		}
 	}
-	
+
 	private boolean flush(final ContributorInfo info) {
 		try {
 			return info.flush();
@@ -5353,7 +5353,7 @@
 		}
 		return null;
 	}
-	
+
 	@Override
 	protected void handleCompareInputChange() {
 		try {
@@ -5372,9 +5372,9 @@
 		if (fSynchronizedScrolling) {
 			fSynchronziedScrollPosition = fVScrollBar.getSelection();
 		}
-		
+
 	}
-	
+
 	private void endRefresh() {
 		isRefreshing--;
 		fLeftContributor.cacheSelection(null);
@@ -5386,11 +5386,11 @@
 	private void synchronizedScrollVertical(int vpos) {
 		scrollVertical(vpos, vpos, vpos, null);
 	}
-	
+
 	private boolean isIgnoreAncestor() {
 		return Utilities.getBoolean(getCompareConfiguration(), ICompareUIConstants.PROP_IGNORE_ANCESTOR, false);
 	}
-	
+
 	/* package */ void update(boolean includeControls) {
 		if (getControl().isDisposed())
 			return;
@@ -5399,10 +5399,10 @@
 		} else {
 			doDiff();
 		}
-		
+
 		if (includeControls)
 			updateControls();
-		
+
 		updateVScrollBar();
 		updatePresentation();
 	}
@@ -5420,13 +5420,13 @@
 	private boolean isPatchHunk() {
 		return Utilities.isHunk(getInput());
 	}
-	
+
 	private boolean isPatchHunkOk() {
 		if (isPatchHunk())
 			return Utilities.isHunkOk(getInput());
 		return false;
 	}
-	
+
 	/**
 	 * Return the provided start position of the hunk in the target file.
 	 * @return the provided start position of the hunk in the target file
@@ -5449,13 +5449,13 @@
 		}
 		return 0;
 	}
-	
+
 	private IFindReplaceTarget getFindReplaceTarget() {
 		if (fFindReplaceTarget == null)
 			fFindReplaceTarget= new FindReplaceTarget();
 		return fFindReplaceTarget;
 	}
-	
+
 	/* package */ char getLeg(MergeSourceViewer w) {
 		if (w == fLeft)
 			return LEFT_CONTRIBUTOR;
@@ -5465,7 +5465,7 @@
 			return ANCESTOR_CONTRIBUTOR;
 		return ANCESTOR_CONTRIBUTOR;
 	}
-	
+
 	private boolean isCurrentDiff(Diff diff) {
 		if (diff == null)
 			return false;
@@ -5475,7 +5475,7 @@
 			return true;
 		return false;
 	}
-	
+
 	private boolean isNavigationPossible() {
 		if (fCurrentDiff == null && fMerger.hasChanges())
 			return true;
@@ -5493,7 +5493,7 @@
 	 * {@link ChangeEncodingAction}. It provides implementation of methods that
 	 * are used by the action by delegating them to {@link ContributorInfo} that
 	 * corresponds to the side that has focus.
-	 * 
+	 *
 	 * @return the text editor adapter
 	 */
 	private ITextEditor getTextEditorAdapter() {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TokenComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TokenComparator.java
index e1a30b4..1ceed12 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TokenComparator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TokenComparator.java
@@ -35,20 +35,20 @@
 	 * @param text the string that is split into token
 	 */
 	public TokenComparator(String text) {
-		
+
 		Assert.isNotNull(text);
 
 		fText= text;
-		
+
 		int length= fText.length();
 		fStarts= new int[length];	// pessimistic assumption!
 		fLengths= new int[length];
 		fCount= 0;
-		
+
 		char lastCategory= 0;	// 0: no category
 		for (int i= 0; i < length; i++) {
 			char c= fText.charAt(i);
-			
+
 			char category= '?';	// unspecified category
 			if (Character.isWhitespace(c))
 				category= ' ';	// white space category
@@ -58,7 +58,7 @@
 				category= 'a';	// letters
 			else if (c == '\"' || c == '\'')
 				category= '\"';	// quotes (see bug 198671)
-			
+
 			if (category != lastCategory) {
 				// start a new token
 				fStarts[fCount++]= i;
@@ -92,7 +92,7 @@
 			return fLengths[index];
 		return 0;
 	}
-		
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.rangedifferencer.IRangeComparator#rangesEqual(int, org.eclipse.compare.rangedifferencer.IRangeComparator, int)
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
index 95a739e..24f7ea9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AbstractViewer.java
@@ -21,19 +21,19 @@
 	public void setInput(Object input) {
 		// empty default implementation
 	}
-	
+
 	public Object getInput() {
 		return null;
 	}
-	
+
 	public ISelection getSelection() {
 		return StructuredSelection.EMPTY;
 	}
-	
+
 	public void setSelection(ISelection s, boolean reveal) {
 		// empty default implementation
 	}
-	
+
 	public void refresh() {
 		// empty default implementation
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
index 1ee887c..3215be9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/AddFromHistoryAction.java
@@ -25,33 +25,33 @@
 
 
 public class AddFromHistoryAction extends BaseCompareAction {
-	
+
 	private static final String BUNDLE_NAME= "org.eclipse.compare.internal.AddFromHistoryAction"; //$NON-NLS-1$
 
 	public AddFromHistoryAction() {
 		// empty default implementation
 	}
-	
+
 	protected boolean isEnabled(ISelection selection) {
 		return Utilities.getResources(selection).length == 1;
 	}
 
 	protected void run(ISelection selection) {
-			
+
 		ResourceBundle bundle= ResourceBundle.getBundle(BUNDLE_NAME);
 		String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$
-			
+
 		Shell parentShell= CompareUIPlugin.getShell();
 		AddFromHistoryDialog dialog= null;
 
 		Object[] s= Utilities.getResources(selection);
-		
+
 		for (int i= 0; i < s.length; i++) {
 			Object o= s[i];
 			if (o instanceof IContainer) {
 				IContainer container= (IContainer) o;
-				
-				ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(parentShell);	
+
+				ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(parentShell);
 				IProgressMonitor pm= pmdialog.getProgressMonitor();
 				IFile[] states= null;
 				try {
@@ -59,24 +59,24 @@
 				} catch (CoreException ex) {
 					pm.done();
 				}
-				
+
 				// There could be a recently deleted file at the same path as
 				// the container. If such a file is the only one to restore, we
 				// should not suggest to restore it, so set states to null.
 				if (states.length == 1 && states[0].getFullPath().equals(container.getFullPath()))
 					states = null;
-		
+
 				if (states == null || states.length <= 0) {
 					String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$
 					MessageDialog.openInformation(parentShell, title, msg);
 					return;
 				}
-		
+
 				if (dialog == null) {
 					dialog= new AddFromHistoryDialog(parentShell, bundle);
 					dialog.setHelpContextId(ICompareContextIds.ADD_FROM_HISTORY_DIALOG);
 				}
-					
+
 				if (dialog.select(container, states)) {
 					AddFromHistoryDialog.HistoryInput[] selected = dialog
 							.getSelected();
@@ -96,7 +96,7 @@
 			}
 		}
 	}
-	
+
 	void createContainers(IResource resource) throws CoreException {
 		IContainer container= resource.getParent();
 		if (container instanceof IFolder) {
@@ -107,22 +107,22 @@
 			}
 		}
 	}
-	
+
 	private void updateWorkspace(final ResourceBundle bundle, Shell shell,
 					final AddFromHistoryDialog.HistoryInput[] selected)
 									throws InvocationTargetException, InterruptedException {
-		
+
 		WorkspaceModifyOperation operation= new WorkspaceModifyOperation() {
 			public void execute(IProgressMonitor pm) throws InvocationTargetException {
 				try {
 					String taskName= Utilities.getString(bundle, "taskName"); //$NON-NLS-1$
 					pm.beginTask(taskName, selected.length);
-					
+
 					for (int i= 0; i < selected.length; i++) {
 						IFile file= selected[i].fFile;
 						IFileState fileState= selected[i].fFileState;
 						createContainers(file);
-						
+
 						SubProgressMonitor subMonitor= new SubProgressMonitor(pm, 1);
 						try {
 							file.create(fileState.getContents(), false, subMonitor);
@@ -137,8 +137,8 @@
 				}
 			}
 		};
-		
-		ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);				
-		pmdialog.run(false, true, operation);									
+
+		ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);
+		pmdialog.run(false, true, operation);
 	}
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BaseCompareAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BaseCompareAction.java
index 7be81d3..beaff9d 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BaseCompareAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BaseCompareAction.java
@@ -18,7 +18,7 @@
 public abstract class BaseCompareAction implements IActionDelegate {
 
 	private ISelection fSelection;
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
 	 */
@@ -34,10 +34,10 @@
 		if (action != null)
 			action.setEnabled(isEnabled(fSelection));
 	}
-	
+
 	protected boolean isEnabled(ISelection selection) {
 		return false;
 	}
-	
+
 	abstract protected void run(ISelection selection);
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
index 54becc3..c730b97 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BinaryCompareViewer.java
@@ -37,7 +37,7 @@
 public class BinaryCompareViewer extends AbstractViewer {
 
 	private static final String BUNDLE_NAME = "org.eclipse.compare.internal.BinaryCompareViewerResources"; //$NON-NLS-1$
-	
+
 	private static final int EOF = -1;
 	private ICompareInput fInput;
 	private ResourceBundle fBundle;
@@ -45,13 +45,13 @@
 	private Composite fComposite;
 	private Label fMessage;
 	private CompareConfiguration compareConfiguration;
-	
+
 	public BinaryCompareViewer(Composite parent, final CompareConfiguration cc) {
-		
+
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.BINARY_COMPARE_VIEW);
 
 		fBundle= ResourceBundle.getBundle(BUNDLE_NAME);
-		
+
 		fComposite= new Composite(parent, SWT.NONE);
 		RowLayout rowLayout = new RowLayout();
 		rowLayout.type = SWT.VERTICAL;
@@ -59,7 +59,7 @@
 
 		fMessage= new Label(fComposite, SWT.WRAP);
 		fComposite.setData(CompareUI.COMPARE_VIEWER_TITLE, Utilities.getString(fBundle, "title")); //$NON-NLS-1$
-		
+
 		compareConfiguration = cc != null ? cc : new CompareConfiguration();
 
 		if (compareConfiguration.getContainer() instanceof CompareEditorInput) {
@@ -80,12 +80,12 @@
 
 			InputStream left= null;
 			InputStream right= null;
-			
+
 			String message= null;
 			try {
 				left= getStream(fInput.getLeft());
 				right= getStream(fInput.getRight());
-				
+
 				if (left != null && right != null) {
 					int pos= 0;
 					while (true) {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
index 2b3da3a..aea4878 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedCanvas.java
@@ -22,7 +22,7 @@
 
 	//private static final boolean USE_DOUBLE_BUFFER= !"carbon".equals(SWT.getPlatform()); //$NON-NLS-1$
 	private static final boolean USE_DOUBLE_BUFFER= true;
-	
+
 	/** The drawable for double buffering */
 	Image fBuffer;
 
@@ -61,7 +61,7 @@
 	 * Double buffer drawing.
 	 */
 	void doubleBufferPaint(GC dest) {
-		
+
 		if (!USE_DOUBLE_BUFFER) {
 			doPaint(dest);
 			return;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
index cf9afd3..582aa09 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/BufferedResourceNode.java
@@ -21,10 +21,10 @@
  * A buffer for a workspace resource.
  */
 public class BufferedResourceNode extends ResourceNode {
-	
+
 	private boolean fDirty= false;
 	private IFile fDeleteFile;
-		
+
 	/**
 	 * Creates a <code>ResourceNode</code> for the given resource.
 	 *
@@ -33,34 +33,34 @@
 	public BufferedResourceNode(IResource resource) {
 		super(resource);
 	}
-	
+
     /*
      * Returns <code>true</code> if buffer contains uncommitted changes.
      */
 	public boolean isDirty() {
 	    return fDirty;
 	}
-	
+
 	protected IStructureComparator createChild(IResource child) {
 		return new BufferedResourceNode(child);
 	}
-		
+
 	public void setContent(byte[] contents) {
 		fDirty= true;
 		super.setContent(contents);
-	}	
+	}
 
 	/*
 	 * Commits buffered contents to resource.
 	 */
 	public void commit(IProgressMonitor pm) throws CoreException {
 		if (fDirty) {
-			
+
 			if (fDeleteFile != null) {
 				fDeleteFile.delete(true, true, pm);
 				return;
 			}
-			
+
 			IResource resource= getResource();
 			if (resource instanceof IFile) {
 
@@ -84,9 +84,9 @@
 			}
 		}
 	}
-	
+
 	public ITypedElement replace(ITypedElement child, ITypedElement other) {
-		
+
 		if (child == null) {	// add resource
 			// create a node without a resource behind it!
 			IResource resource= getResource();
@@ -96,7 +96,7 @@
 				child= new BufferedResourceNode(file);
 			}
 		}
-		
+
 		if (other == null) {	// delete resource
 			IResource resource= getResource();
 			if (resource instanceof IFolder) {
@@ -109,10 +109,10 @@
 			}
 			return null;
 		}
-		
+
 		if (other instanceof IStreamContentAccessor && child instanceof IEditableContent) {
 			IEditableContent dst= (IEditableContent) child;
-			
+
 			try {
 				InputStream is= ((IStreamContentAccessor)other).getContents();
 				byte[] bytes= Utilities.readBytes(is);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
index 7efc7b3..bdea732 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ChangePropertyAction.java
@@ -56,7 +56,7 @@
 		super.setChecked(state);
 		Utilities.initToggleAction(this, fBundle, fPrefix, state);
 	}
-	
+
 	public void setCompareConfiguration(CompareConfiguration cc) {
 		if (fCompareConfiguration != null)
 			fCompareConfiguration.removePropertyChangeListener(this);
@@ -71,12 +71,12 @@
 			setChecked(Utilities.getBoolean(fCompareConfiguration, fPropertyKey, false));
 		}
 	}
-	
+
 	public void dispose(){
 		if (fCompareConfiguration != null)
 			fCompareConfiguration.removePropertyChangeListener(this);
 	}
-	
+
 	public void widgetDisposed(DisposeEvent e) {
 		dispose();
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
index b9a557f..54c30e3 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareAction.java
@@ -50,10 +50,10 @@
 			// buffered merge mode: don't ask for confirmation
 			// when switching between modified resources
 			cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, Boolean.FALSE);
-			
+
 			// uncomment following line to have separate outline view
 			//cc.setProperty(CompareConfiguration.USE_OUTLINE_VIEW, Boolean.TRUE);
-						
+
 			fInput= new ResourceCompareInput(cc);
 		}
 		return fInput.isEnabled(selection);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java
index ba9ea7b..59c1960 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareContainer.java
@@ -23,7 +23,7 @@
 import org.eclipse.ui.services.IServiceLocator;
 
 public class CompareContainer implements ICompareContainer {
-	
+
 	private WorkerJob worker;
 
 	/* (non-Javadoc)
@@ -32,7 +32,7 @@
 	public void setStatusMessage(String message) {
 		// Do nothing, by default
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareContainer#addCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInput, org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener)
 	 */
@@ -40,7 +40,7 @@
 			ICompareInputChangeListener listener) {
 		input.addCompareInputChangeListener(listener);
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareContainer#removeCompareInputChangeListener(org.eclipse.compare.structuremergeviewer.ICompareInput, org.eclipse.compare.structuremergeviewer.ICompareInputChangeListener)
 	 */
@@ -48,7 +48,7 @@
 			ICompareInputChangeListener listener) {
 		input.removeCompareInputChangeListener(listener);
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareContainer#registerContextMenu(org.eclipse.jface.action.MenuManager, org.eclipse.jface.viewers.ISelectionProvider)
 	 */
@@ -56,14 +56,14 @@
 			ISelectionProvider selectionProvider) {
 		// Nothing to do
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareContainer#getServiceLocator()
 	 */
 	public IServiceLocator getServiceLocator() {
 		return null;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareContainer#getActionBars()
 	 */
@@ -79,7 +79,7 @@
 			throws InvocationTargetException, InterruptedException {
 		PlatformUI.getWorkbench().getProgressService().run(fork, cancelable, runnable);
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareContainer#getNavigator()
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
index cf303c4..aff33c0 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareDialog.java
@@ -36,19 +36,19 @@
  * This is a dialog that can host a {@link CompareEditorInput}.
  * <p>
  * This class can be used as is or can be subclassed.
- * 
+ *
  * @since 3.3
  */
 public class CompareDialog extends TrayDialog implements IPropertyChangeListener {
-	
+
 	private final CompareEditorInput fCompareEditorInput;
 	private Button fCommitButton;
 	private Label statusLabel;
 	boolean hasSettings = true;
 	private final DialogCompareContainer fContainer = new DialogCompareContainer();
-	
+
 	private class DialogCompareContainer extends CompareContainer {
-		
+
 		/* (non-Javadoc)
 		 * @see org.eclipse.jface.operation.IRunnableContext#run(boolean, boolean, org.eclipse.jface.operation.IRunnableWithProgress)
 		 */
@@ -58,7 +58,7 @@
 			ProgressMonitorDialog dialog = new ProgressMonitorDialog(getShell());
 			dialog.run(fork, cancelable, runnable);
 		}
-		
+
 		/* (non-Javadoc)
 		 * @see org.eclipse.compare.ICompareContainer#setStatusMessage(java.lang.String)
 		 */
@@ -72,7 +72,7 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Create a dialog to host the given input.
 	 * @param shell a shell
@@ -84,7 +84,7 @@
 		Assert.isNotNull(input);
 		fCompareEditorInput= input;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.internal.ResizableDialog#close()
 	 */
@@ -96,7 +96,7 @@
 		}
 		return false;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
 	 */
@@ -134,7 +134,7 @@
 	 * @see CompareConfiguration#isRightEditable()
 	 */
 	protected boolean isInputEditable() {
-		return fCompareEditorInput.getCompareConfiguration().isLeftEditable() 
+		return fCompareEditorInput.getCompareConfiguration().isLeftEditable()
 			|| fCompareEditorInput.getCompareConfiguration().isRightEditable();
 	}
 
@@ -160,7 +160,7 @@
 			return getSelectedElement() != null;
 		return true;
 	}
-	
+
 	private Object getSelectedElement() {
 		return fCompareEditorInput.getSelectedEdition();
 	}
@@ -169,22 +169,22 @@
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
 	protected Control createDialogArea(Composite parent2) {
-						
+
 		Composite parent= (Composite) super.createDialogArea(parent2);
 
 		Control c= fCompareEditorInput.createContents(parent);
 		c.setLayoutData(new GridData(GridData.FILL_BOTH));
-		
+
 		statusLabel = new Label(parent, SWT.NONE);
 		statusLabel.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
-		
+
 		Shell shell= c.getShell();
 		shell.setText(fCompareEditorInput.getTitle());
 		shell.setImage(fCompareEditorInput.getTitleImage());
 		applyDialogFont(parent);
 		return parent;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.window.Window#open()
 	 */
@@ -195,7 +195,7 @@
 		fCompareEditorInput.setContainer(fContainer);
 		return super.open();
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
 	 */
@@ -222,7 +222,7 @@
 		}
 		return dialogSettings;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.internal.ResizableDialog#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
@@ -241,7 +241,7 @@
 	public String getHelpContextId() {
 		return ICompareContextIds.COMPARE_DIALOG;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
 	 */
@@ -255,7 +255,7 @@
 
 	/**
 	 * If we don't have settings we need to come up with a reasonable default
-	 * since we can't depend on the compare editor input layout returning a 
+	 * since we can't depend on the compare editor input layout returning a
 	 * good default size.
 	 * @return the default size of the dialog
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
index 10de7ce..2c8fe0e 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorContributor.java
@@ -34,7 +34,7 @@
 
 
 public class CompareEditorContributor extends EditorActionBarContributor {
-	
+
 	public final static String FILTER_SEPARATOR = "compare.filters"; //$NON-NLS-1$
 	public final static String BUILTIN_SEPARATOR = "compare.builtin"; //$NON-NLS-1$
 
@@ -43,27 +43,27 @@
 	private ChangePropertyAction fIgnoreWhitespace;
 	private NavigationAction fNext;
 	private NavigationAction fPrevious;
-	
+
 	private NavigationAction fToolbarNext;
 	private NavigationAction fToolbarPrevious;
 
 	public CompareEditorContributor() {
 		ResourceBundle bundle= CompareUI.getResourceBundle();
-		
+
 		IWorkbenchHelpSystem helpSystem= PlatformUI.getWorkbench().getHelpSystem();
-		
+
 		fIgnoreWhitespace= ChangePropertyAction.createIgnoreWhiteSpaceAction(bundle, null);
 		helpSystem.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION);
-		
+
 		fNext= new NavigationAction(bundle, true);
 		helpSystem.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION);
-		
+
 		fPrevious= new NavigationAction(bundle, false);
 		helpSystem.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION);
-		
+
 		fToolbarNext= new NavigationAction(bundle, true);
 		helpSystem.setHelp(fToolbarNext, ICompareContextIds.NEXT_DIFF_ACTION);
-		
+
 		fToolbarPrevious= new NavigationAction(bundle, false);
 		helpSystem.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION);
 	}
@@ -78,7 +78,7 @@
 		tbm.appendToGroup(BUILTIN_SEPARATOR, fToolbarNext);
 		tbm.appendToGroup(BUILTIN_SEPARATOR, fToolbarPrevious);
 	}
-	
+
 	/*
 	 * @see EditorActionBarContributor#contributeToMenu(IMenuManager)
 	 */
@@ -87,12 +87,12 @@
 	}
 
 	public void setActiveEditor(IEditorPart targetEditor) {
-				
+
 		if (fActiveEditorPart == targetEditor)
 			return;
-			
+
 		fActiveEditorPart= targetEditor;
-		
+
 		if (fActiveEditorPart != null) {
 			IEditorInput input= fActiveEditorPart.getEditorInput();
 			if (input instanceof CompareEditorInput) {
@@ -105,19 +105,19 @@
 				// End fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105
 			}
 		}
-			
+
 		if (targetEditor instanceof CompareEditor) {
 			IActionBars actionBars= getActionBars();
-		
+
 			CompareEditor editor= (CompareEditor) targetEditor;
 			editor.setActionBars(actionBars);
-		
+
 			actionBars.setGlobalActionHandler(ActionFactory.NEXT.getId(), fNext);
 			actionBars.setGlobalActionHandler(ActionFactory.PREVIOUS.getId(), fPrevious);
 
 			actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, fNext);
 			actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, fPrevious);
-			
+
 			CompareConfiguration cc= editor.getCompareConfiguration();
 			fIgnoreWhitespace.setCompareConfiguration(cc);
 
@@ -181,7 +181,7 @@
 			actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, null);
 		}
 	}
-	
+
 	public void dispose() {
 		setActiveEditor(null);
 		super.dispose();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorInputNavigator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorInputNavigator.java
index 5a41625..07c8c9e 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorInputNavigator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorInputNavigator.java
@@ -25,7 +25,7 @@
 	// Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
 	private boolean fNextFirstTime= true;
 	private Object[] fPanes;
-	
+
 	/**
 	 * Create a navigator for navigating the given panes
 	 * @param panes the panes to navigate.
@@ -33,7 +33,7 @@
 	public CompareEditorInputNavigator(Object[] panes) {
 		fPanes= panes;
 	}
-	
+
 	/**
 	 * Return the set of panes that this navigator is navigating.
 	 * The {@link INavigatable} is obtain from each pane using the
@@ -43,7 +43,7 @@
 	public Object[] getPanes() {
 		return fPanes;
 	}
-	
+
 	protected INavigatable[] getNavigatables() {
 		List result = new ArrayList();
 		Object[] panes = getPanes();
@@ -55,7 +55,7 @@
 		}
 		return (INavigatable[]) result.toArray(new INavigatable[result.size()]);
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.ICompareNavigator#selectChange(boolean)
 	 */
@@ -68,7 +68,7 @@
 		}
 		return super.selectChange(next);
 	}
-	
+
 	/*
 	 * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
 	 */
@@ -84,7 +84,7 @@
 		}
 		return true;
 	}
-	
+
 	/*
 	 * Fix for http://dev.eclipse.org/bugs/show_bug.cgi?id=20106
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java
index 7f45f1e..1d71169 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareEditorSelectionProvider.java
@@ -33,7 +33,7 @@
 /**
  * A selection provider for view parts with more that one viewer. Tracks the
  * focus of the viewers to provide the correct selection.
- * 
+ *
  * This is a modified version of
  * org.eclipse.jdt.internal.ui.viewsupport.SelectionProviderMediator
  */
@@ -82,7 +82,7 @@
 		fPostSelectionChangedListeners = new ListenerList();
 		// nothing more to do here, Compare Editor is initializing
 	}
-	
+
 	/**
 	 * @param viewers All viewers that can provide a selection
 	 * @param viewerInFocus the viewer currently in focus or <code>null</code>
@@ -92,7 +92,7 @@
 		fViewers= viewers;
 		InternalListener listener= new InternalListener();
 		fViewerInFocus= viewerInFocus;
-		
+
 		for (int i= 0; i < fViewers.length; i++) {
 			TextViewer viewer= fViewers[i];
 			viewer.addSelectionChangedListener(listener);
@@ -110,7 +110,7 @@
 			}
 		}
 	}
-	
+
 	final void doPostSelectionChanged(SelectionChangedEvent event) {
 		ISelectionProvider provider= event.getSelectionProvider();
 		if (provider == fViewerInFocus) {
@@ -213,7 +213,7 @@
 
 	/**
 	 * Resets the visible region for all text viewers of this selection provider.
-	 * 
+	 *
 	 * @since 3.6
 	 */
 	private void resetVisibleRegion() {
@@ -226,7 +226,7 @@
 
 	/**
 	 * Tells whether the given selection is inside the text viewer's visible region.
-	 * 
+	 *
 	 * @param textViewer the text viewer
 	 * @param selection the selection
 	 * @return <code>true</code> if the selection is inside the text viewer's visible region
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java
index a3b4d4f..085ebd8 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareHandlerService.java
@@ -24,7 +24,7 @@
 import org.eclipse.ui.services.IServiceLocator;
 
 public class CompareHandlerService {
-	
+
 	private final List fActivations = new ArrayList();
 	private final Expression fExpression;
 	private ICompareContainer fContainer;
@@ -49,14 +49,14 @@
 		}
 		return new CompareHandlerService(null, null);
 	}
-	
+
 	private CompareHandlerService(ICompareContainer container,
 			Expression expression) {
 		fContainer = container;
 		fExpression = expression;
 		initialize();
 	}
-	
+
 	public void registerAction(IAction action, String commandId) {
 		IHandlerService handlerService = getHandlerService();
 		if (handlerService == null)
@@ -72,7 +72,7 @@
 			fActivations .add(activation);
 		}
 	}
-	
+
 	private IHandlerService getHandlerService() {
 		if (fDisposed)
 			return null;
@@ -114,7 +114,7 @@
 		if (actionHandler != null)
 			actionHandler.setActionDefinitionId(null);
 	}
-	
+
 	private void updateActionBars() {
 		IActionBars bars = getActionBars();
 		if (bars != null)
@@ -130,7 +130,7 @@
 			}
 		}
 	}
-	
+
 	private IActionBars getActionBars() {
 		return fContainer.getActionBars();
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareOutlinePage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareOutlinePage.java
index dafaef4..cfbfe43 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareOutlinePage.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareOutlinePage.java
@@ -33,7 +33,7 @@
 	private Control fControl;
 	private CompareViewerSwitchingPane fStructurePane;
 	private OutlineViewerCreator fCreator;
-	
+
 	CompareOutlinePage(CompareEditor editor) {
 		fCompareEditor= editor;
 	}
@@ -56,7 +56,7 @@
 		h.layout();
 		reset();
 	}
-	
+
 	private Viewer findStructureViewer(Viewer oldViewer, ICompareInput input, Composite parent) {
 		OutlineViewerCreator creator = getCreator();
 		if (creator != null)
@@ -103,7 +103,7 @@
 		if (fStructurePane != null)
 			fStructurePane.setSelection(selection);
 	}
-	
+
 	private void setInput(Object input) {
 		if (fStructurePane != null) {
 			fStructurePane.setInput(input);
@@ -127,7 +127,7 @@
 			((Splitter)fControl).layout();
 		}
 	}
-	
+
 	@Override
 	public void dispose() {
 		super.dispose();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
index cd262b4..ec37c74 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ComparePreferencePage.java
@@ -60,11 +60,11 @@
 
 
 public class ComparePreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
-	
+
 	class FakeInput implements ITypedElement, IEncodedStreamContentAccessor {
 		static final String UTF_16= "UTF-16"; //$NON-NLS-1$
 		String fContent;
-		
+
 		FakeInput(String name) {
 			fContent= loadPreviewContentFromFile(name);
 		}
@@ -93,7 +93,7 @@
 	public static final String INITIALLY_SHOW_ANCESTOR_PANE= PREFIX + "InitiallyShowAncestorPane"; //$NON-NLS-1$
 	public static final String PREF_SAVE_ALL_EDITORS= PREFIX + "SaveAllEditors"; //$NON-NLS-1$
 	public static final String IGNORE_WHITESPACE= PREFIX + "IgnoreWhitespace"; //$NON-NLS-1$
-	
+
 	//public static final String USE_SPLINES= PREFIX + "UseSplines"; //$NON-NLS-1$
 	public static final String USE_SINGLE_LINE= PREFIX + "UseSingleLine"; //$NON-NLS-1$
 	public static final String HIGHLIGHT_TOKEN_CHANGES= PREFIX + "HighlightTokenChanges"; //$NON-NLS-1$
@@ -103,7 +103,7 @@
 	public static final String ADDED_LINES_REGEX= PREFIX + "AddedLinesRegex"; //$NON-NLS-1$
 	public static final String REMOVED_LINES_REGEX= PREFIX + "RemovedLinesRegex"; //$NON-NLS-1$
 	public static final String SWAPPED = PREFIX + "Swapped"; //$NON-NLS-1$
-	
+
 
 	private TextMergeViewer fPreviewViewer;
 	private IPropertyChangeListener fPreferenceChangeListener;
@@ -116,7 +116,7 @@
 	private SelectionListener fCheckBoxListener;
 
 
-	public final OverlayPreferenceStore.OverlayKey[] fKeys= new OverlayPreferenceStore.OverlayKey[] {	
+	public final OverlayPreferenceStore.OverlayKey[] fKeys= new OverlayPreferenceStore.OverlayKey[] {
 		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, OPEN_STRUCTURE_COMPARE),
 		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, USE_OUTLINE_VIEW),
 		new OverlayPreferenceStore.OverlayKey(OverlayPreferenceStore.BOOLEAN, SYNCHRONIZE_SCROLLING),
@@ -139,8 +139,8 @@
 	private List<FieldEditor> editors = new ArrayList<>();
 	private TabItem fTextCompareTab;
 	private Button fDisableCappingCheckBox;
-	
-	
+
+
 	public static void initDefaults(IPreferenceStore store) {
 		store.setDefault(OPEN_STRUCTURE_COMPARE, true);
 		store.setDefault(USE_OUTLINE_VIEW, false);
@@ -163,11 +163,11 @@
 	}
 
 	public ComparePreferencePage() {
-		
+
 		//setDescription(Utilities.getString("ComparePreferencePage.description"));	//$NON-NLS-1$
-		
+
 		setPreferenceStore(CompareUIPlugin.getDefault().getPreferenceStore());
-		
+
 		fOverlayStore= new OverlayPreferenceStore(getPreferenceStore(), fKeys);
 		fPreferenceChangeListener= new IPropertyChangeListener() {
 			public void propertyChange(PropertyChangeEvent event) {
@@ -182,13 +182,13 @@
 		};
 		fOverlayStore.addPropertyChangeListener(fPreferenceChangeListener);
 	}
-	
+
 	/*
 	 * @see IWorkbenchPreferencePage#init()
 	 */
 	public void init(IWorkbench workbench) {
 		// empty
-	}	
+	}
 
 	/*
 	 * @see PreferencePage#performOk()
@@ -205,23 +205,23 @@
 						ComparePreferencePage.CAPPING_DISABLED));
 		return true;
 	}
-	
+
 	/*
 	 * @see PreferencePage#performDefaults()
 	 */
 	protected void performDefaults() {
-		
+
 		fOverlayStore.loadDefaults();
 		initializeFields();
 
 		super.performDefaults();
 	}
-	
+
 	/*
 	 * @see DialogPage#dispose()
 	 */
 	public void dispose() {
-				
+
 		if (fOverlayStore != null) {
 			if (fPreferenceChangeListener != null) {
 				fOverlayStore.removePropertyChangeListener(fPreferenceChangeListener);
@@ -230,7 +230,7 @@
 			fOverlayStore.stop();
 			fOverlayStore= null;
 		}
-		
+
 		super.dispose();
 	}
 
@@ -238,52 +238,52 @@
 		IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore();
 		return store.getBoolean(PREF_SAVE_ALL_EDITORS);
 	}
-	
+
 	static public void setSaveAllEditors(boolean value) {
 		IPreferenceStore store= CompareUIPlugin.getDefault().getPreferenceStore();
 		store.setValue(PREF_SAVE_ALL_EDITORS, value);
-	}	
+	}
 
 	/*
 	 * @see PreferencePage#createContents(Composite)
 	 */
 	protected Control createContents(Composite parent) {
-		
+
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, ICompareContextIds.COMPARE_PREFERENCE_PAGE);
-		
+
 		fOverlayStore.load();
 		fOverlayStore.start();
-		
+
 		TabFolder folder= new TabFolder(parent, SWT.NONE);
-		folder.setLayout(new TabFolderLayout());	
+		folder.setLayout(new TabFolderLayout());
 		folder.setLayoutData(new GridData(GridData.FILL_BOTH));
-		
+
 		TabItem item= new TabItem(folder, SWT.NONE);
 		item.setText(Utilities.getString("ComparePreferencePage.generalTab.label"));	//$NON-NLS-1$
 		//item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE));
 		item.setControl(createGeneralPage(folder));
-		
+
 		item= new TabItem(folder, SWT.NONE);
 		item.setText(Utilities.getString("ComparePreferencePage.textCompareTab.label"));	//$NON-NLS-1$
 		//item.setImage(JavaPluginImages.get(JavaPluginImages.IMG_OBJS_CFILE));
 		item.setControl(createTextComparePage(folder));
 		fTextCompareTab = item;
-		
+
 		initializeFields();
 		Dialog.applyDialogFont(folder);
 		return folder;
 	}
-	
+
 	private Control createGeneralPage(Composite parent) {
 		Composite composite= new Composite(parent, SWT.NULL);
 		GridLayout layout= new GridLayout();
 		layout.numColumns= 1;
 		composite.setLayout(layout);
-				
+
 		addCheckBox(composite, "ComparePreferencePage.structureCompare.label", OPEN_STRUCTURE_COMPARE, 0);	//$NON-NLS-1$
 		addCheckBox(composite, "ComparePreferencePage.structureOutline.label", USE_OUTLINE_VIEW, 0);	//$NON-NLS-1$
 		addCheckBox(composite, "ComparePreferencePage.ignoreWhitespace.label", IGNORE_WHITESPACE, 0);	//$NON-NLS-1$
-		
+
 		// a spacer
 		new Label(composite, SWT.NONE);
 
@@ -291,22 +291,22 @@
 
 		// a spacer
 		new Label(composite, SWT.NONE);
-		
+
 		Label l= new Label(composite, SWT.WRAP);
 		l.setText(Utilities.getString("ComparePreferencePage.regex.description")); //$NON-NLS-1$
-		
+
 		Composite c2= new Composite(composite, SWT.NONE);
 		c2.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		layout= new GridLayout(2, false);
 		layout.marginWidth= 0;
 		c2.setLayout(layout);
-		
+
 		l= new Label(c2, SWT.NONE);
 		l.setText(Utilities.getString("ComparePreferencePage.regexAdded.label")); //$NON-NLS-1$
 		addedLinesRegex = new Text(c2, SWT.BORDER);
 		addedLinesRegex.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		addedLinesRegex.setText(fOverlayStore.getString(ADDED_LINES_REGEX));
-		
+
 		l= new Label(c2, SWT.NONE);
 		l.setText(Utilities.getString("ComparePreferencePage.regexRemoved.label")); //$NON-NLS-1$
 		removedLinesRegex = new Text(c2, SWT.BORDER);
@@ -315,19 +315,19 @@
 
 		// a spacer
 		new Label(composite, SWT.NONE);
-		
+
 		l= new Label(composite, SWT.WRAP);
 		l.setText(Utilities.getString("ComparePreferencePage.filter.description")); //$NON-NLS-1$
-		
+
 		Composite c3= new Composite(composite, SWT.NONE);
 		c3.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		layout= new GridLayout(2, false);
 		layout.marginWidth= 0;
 		c3.setLayout(layout);
-		
+
 		l= new Label(c3, SWT.NONE);
 		l.setText(Utilities.getString("ComparePreferencePage.filter.label")); //$NON-NLS-1$
-		
+
 		fFilters= new Text(c3, SWT.BORDER);
 		fFilters.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
 		fFilters.setText(fOverlayStore.getString(PATH_FILTER));
@@ -343,28 +343,28 @@
 				}
 			}
 		);
-		
+
 		return composite;
 	}
-	
+
 	private Control createTextComparePage(Composite parent) {
-		
+
 		Composite composite= new Composite(parent, SWT.NULL);
 		GridLayout layout= new GridLayout();
 		layout.numColumns= 1;
 		composite.setLayout(layout);
-				
+
 		addCheckBox(composite, "ComparePreferencePage.synchronizeScrolling.label", SYNCHRONIZE_SCROLLING, 0);	//$NON-NLS-1$
 		addCheckBox(composite, "ComparePreferencePage.initiallyShowAncestorPane.label", INITIALLY_SHOW_ANCESTOR_PANE, 0);	//$NON-NLS-1$
 		addCheckBox(composite, "ComparePreferencePage.showPseudoConflicts.label", SHOW_PSEUDO_CONFLICTS, 0);	//$NON-NLS-1$
-		
+
 		//addCheckBox(composite, "ComparePreferencePage.useSplines.label", USE_SPLINES, 0);	//$NON-NLS-1$
 		addCheckBox(composite, "ComparePreferencePage.useSingleLine.label", USE_SINGLE_LINE, 0);	//$NON-NLS-1$
 		addCheckBox(composite, "ComparePreferencePage.highlightTokenChanges.label", HIGHLIGHT_TOKEN_CHANGES, 0);	//$NON-NLS-1$
 		//addCheckBox(composite, "ComparePreferencePage.useResolveUI.label", USE_RESOLVE_UI, 0);	//$NON-NLS-1$
 		fDisableCappingCheckBox = addCheckBox(composite, "ComparePreferencePage.disableCapping.label", CAPPING_DISABLED, 0);	//$NON-NLS-1$
 		addCheckBox(composite, "ComparePreferencePage.swapped.label", SWAPPED, 0);	//$NON-NLS-1$
-		
+
 		Composite radioGroup = new Composite(composite, SWT.NULL);
 		radioGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
 		RadioGroupFieldEditor editor = new RadioGroupFieldEditor(
@@ -380,43 +380,43 @@
 		editor.setPreferenceStore(fOverlayStore);
 		editor.fillIntoGrid(radioGroup, 1);
 		editors.add(editor);
-		
+
 		// a spacer
 		Label separator= new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL);
 		separator.setVisible(false);
-		
+
 		Label previewLabel= new Label(composite, SWT.NULL);
 		previewLabel.setText(Utilities.getString("ComparePreferencePage.preview.label"));	//$NON-NLS-1$
-		
+
 		Control previewer= createPreviewer(composite);
 		GridData gd= new GridData(GridData.FILL_BOTH);
 		gd.widthHint= convertWidthInCharsToPixels(60);
 		gd.heightHint= convertHeightInCharsToPixels(13);
 		previewer.setLayoutData(gd);
-		
+
 		PreferenceLinkArea area = new PreferenceLinkArea(composite, SWT.NONE,
 				"org.eclipse.ui.preferencePages.ColorsAndFonts", Utilities.getString("ComparePreferencePage.colorAndFontLink"), //$NON-NLS-1$ //$NON-NLS-2$
 				(IWorkbenchPreferenceContainer)getContainer(), "selectCategory:org.eclipse.compare.contentmergeviewer.TextMergeViewer"); //$NON-NLS-1$
 
 		GridData data= new GridData(SWT.FILL, SWT.CENTER, false, false);
 		area.getControl().setLayoutData(data);
-		
+
 		return composite;
 	}
-	
+
 	private Control createPreviewer(Composite parent) {
-				
+
 		fCompareConfiguration= new CompareConfiguration(fOverlayStore);
 		fCompareConfiguration.setAncestorLabel(Utilities.getString("ComparePreferencePage.ancestor.label"));	//$NON-NLS-1$
-		
+
 		fCompareConfiguration.setLeftLabel(Utilities.getString("ComparePreferencePage.left.label"));	//$NON-NLS-1$
 		fCompareConfiguration.setLeftEditable(false);
-		
+
 		fCompareConfiguration.setRightLabel(Utilities.getString("ComparePreferencePage.right.label"));	//$NON-NLS-1$
 		fCompareConfiguration.setRightEditable(false);
-		
+
 		fPreviewViewer= new TextMergeViewer(parent, SWT.BORDER, fCompareConfiguration);
-		
+
 		fPreviewViewer.setInput(
 			new DiffNode(Differencer.CONFLICTING,
 				new FakeInput("ComparePreferencePage.previewAncestor"),	//$NON-NLS-1$
@@ -432,42 +432,42 @@
 					fCompareConfiguration.dispose();
 			}
 		});
-		
+
 		return  c;
 	}
-			
+
 	private void initializeFields() {
-		
+
 		Iterator<Button> e = fCheckBoxes.keySet().iterator();
 		while (e.hasNext()) {
 			Button b = e.next();
 			String key= fCheckBoxes.get(b);
 			b.setSelection(fOverlayStore.getBoolean(key));
 		}
-		
+
 		if (fFilters != null)
 			fFilters.setText(fOverlayStore.getString(PATH_FILTER));
 		if (addedLinesRegex != null)
 			addedLinesRegex.setText(fOverlayStore.getString(ADDED_LINES_REGEX));
 		if (removedLinesRegex != null)
 			removedLinesRegex.setText(fOverlayStore.getString(REMOVED_LINES_REGEX));
-		
+
 		editors.forEach(editor -> editor.load());
 	}
 
 	// overlay stuff
-	
+
 	private Button addCheckBox(Composite parent, String labelKey, String key, int indentation) {
-		
+
 		String label= Utilities.getString(labelKey);
-				
+
 		Button checkBox= new Button(parent, SWT.CHECK);
 		checkBox.setText(label);
-		
+
 		GridData gd= new GridData(GridData.FILL_HORIZONTAL);
 		gd.horizontalIndent= indentation;
 		checkBox.setLayoutData(gd);
-		
+
 		if (fCheckBoxListener == null) {
 			fCheckBoxListener= new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
@@ -477,14 +477,14 @@
 			};
 		}
 		checkBox.addSelectionListener(fCheckBoxListener);
-		
+
 		fCheckBoxes.put(checkBox, key);
-		
+
 		return checkBox;
 	}
 
 	private String loadPreviewContentFromFile(String key) {
-		
+
 		String preview= Utilities.getString(key);
 		String separator= System.getProperty("line.separator"); //$NON-NLS-1$
 		StringBuffer buffer= new StringBuffer();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareResourceFilter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareResourceFilter.java
index eb5529f..38dc8fa 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareResourceFilter.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareResourceFilter.java
@@ -22,11 +22,11 @@
 
 public class CompareResourceFilter {
 	private static final char[][] NO_CHAR_CHAR= new char[0][];
-	
+
 	private char[][] fExtraResourceFileFilters;
 	private String[] fExtraResourceFolderFilters;
 
-	
+
 	public CompareResourceFilter() {
 		// nothing to do
 	}
@@ -61,14 +61,14 @@
 				resourceType= IResource.FOLDER;
 			}
 			IStatus status= workspace.validateName(fileName, resourceType);
-			if (status.matches(IStatus.ERROR)) {		
+			if (status.matches(IStatus.ERROR)) {
 				String format= Utilities.getString("ComparePreferencePage.filter.invalidsegment.error"); //$NON-NLS-1$
 				return MessageFormat.format(format, status.getMessage());
 			}
 		}
 		return null;
 	}
-	
+
 	public void setFilters(String filterSequence) {
 		char[][] filters= filterSequence != null && filterSequence.length() > 0
 		? splitAndTrimOn(',', filterSequence.toCharArray())
@@ -102,7 +102,7 @@
 	}
 
 	/////////
-	
+
 	private static String[] getTokens(String text, String separator) {
 		StringTokenizer tok= new StringTokenizer(text, separator);
 		int nTokens= tok.countTokens();
@@ -110,43 +110,43 @@
 		for (int i= 0; i < res.length; i++)
 			res[i]= tok.nextToken().trim();
 		return res;
-	}	
-	
+	}
+
 	/**
 	 * Answers true if the pattern matches the given name, false otherwise.
 	 * This char[] pattern matching accepts wild-cards '*' and '?'.
-	 * 
+	 *
 	 * When not case sensitive, the pattern is assumed to already be
 	 * lowercased, the name will be lowercased character per character as
 	 * comparing. If name is null, the answer is false. If pattern is null, the
 	 * answer is true if name is not null. <br><br>For example:
 	 * <ol>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  pattern = { '?', 'b', '*' } name = { 'a', 'b', 'c' , 'd' } isCaseSensitive = true result => true
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  pattern = { '?', 'b', '?' } name = { 'a', 'b', 'c' , 'd' } isCaseSensitive = true result => false
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  pattern = { 'b', '*' } name = { 'a', 'b', 'c' , 'd' } isCaseSensitive = true result => false
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * </ol>
-	 * 
+	 *
 	 * @param pattern
 	 *            the given pattern
 	 * @param name
@@ -174,23 +174,23 @@
 	 * character as comparing. <br><br>For example:
 	 * <ol>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  pattern = { '?', 'b', '*' } patternStart = 1 patternEnd = 3 name = { 'a', 'b', 'c' , 'd' } nameStart = 1 nameEnd = 4 isCaseSensitive = true result => true
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  pattern = { '?', 'b', '*' } patternStart = 1 patternEnd = 2 name = { 'a', 'b', 'c' , 'd' } nameStart = 1 nameEnd = 2 isCaseSensitive = true result => false
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * </ol>
-	 * 
+	 *
 	 * @param pattern
 	 *            the given pattern
 	 * @param patternStart
@@ -273,39 +273,39 @@
 	 * <br><br>For example:
 	 * <ol>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  divider = 'b' array = { 'a' , 'b', 'b', 'a', 'b', 'a' } result => { { 'a' }, { }, { 'a' }, { 'a' } }
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  divider = 'c' array = { 'a' , 'b', 'b', 'a', 'b', 'a' } result => { { 'a', 'b', 'b', 'a', 'b', 'a' } }
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  divider = 'b' array = { 'a' , ' ', 'b', 'b', 'a', 'b', 'a' } result => { { 'a' }, { }, { 'a' }, { 'a' } }
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  divider = 'c' array = { ' ', ' ', 'a' , 'b', 'b', 'a', 'b', 'a', ' ' } result => { { 'a', 'b', 'b', 'a', 'b', 'a' } }
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * </ol>
-	 * 
+	 *
 	 * @param divider
 	 *            the given divider
 	 * @param array
@@ -355,23 +355,23 @@
 	 * <br><br>For example:
 	 * <ol>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  array = { 'a' , 'b' } start = 0 end = 1 result => { 'a' }
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * <li>
-	 * 
+	 *
 	 * <pre>
 	 *  array = { 'a', 'b' } start = 0 end = -1 result => { 'a' , 'b' }
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * </li>
 	 * </ol>
-	 * 
+	 *
 	 * @param array
 	 *            the given array
 	 * @param start
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java
index 5f2564a..eb4fbe7 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareStructureViewerSwitchingPane.java
@@ -122,7 +122,7 @@
 		});
 		return composite;
 	}
-	
+
 	protected boolean inputChanged(Object input) {
 		return getInput() != input
 				|| fCompareEditorInput.getStructureViewerDescriptor() != fSelectedViewerDescriptor;
@@ -144,7 +144,7 @@
 	private void showMenu() {
 		if (!(getInput() instanceof ICompareInput))
 			return;
-		
+
 		ViewerDescriptor[] vd = CompareUIPlugin.getDefault()
 				.findStructureViewerDescriptor(getViewer(),
 						(ICompareInput) getInput(), getCompareConfiguration());
@@ -160,7 +160,7 @@
 		defaultItem.setSelection(fSelectedViewerDescriptor == null);
 
 		new MenuItem(menu, SWT.SEPARATOR);
-		
+
 		// add others
 		for (int i = 0; i < vd.length; i++) {
 			final ViewerDescriptor vdi = vd[i];
@@ -177,14 +177,14 @@
 			item.addSelectionListener(createSelectionListener(vdi));
 			item.setSelection(vdi == fSelectedViewerDescriptor);
 		}
-		
+
 		// 2. show
 		Rectangle bounds = toolBar.getItem(0).getBounds();
 		Point topLeft = new Point(bounds.x, bounds.y + bounds.height);
 		topLeft = toolBar.toDisplay(topLeft);
 		menu.setLocation(topLeft.x, topLeft.y);
 		menu.setVisible(true);
-		
+
 		// 3. dispose on close
 		menu.addMenuListener(new MenuAdapter() {
 			public void menuHidden(MenuEvent e) {
@@ -242,7 +242,7 @@
 			}
 		}
 	}
-	
+
 	public void addMouseListener(MouseListener listener) {
 		Composite c = (Composite) getTopLeft();
 		Control[] children = c.getChildren();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
index 0d0abb8..0cc84dc 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithEditionAction.java
@@ -11,7 +11,7 @@
 package org.eclipse.compare.internal;
 
 public class CompareWithEditionAction extends EditionAction {
-	
+
 	public CompareWithEditionAction() {
 		super(false, "org.eclipse.compare.internal.CompareWithEditionAction"); //$NON-NLS-1$
 		this.fHelpContextId= ICompareContextIds.COMPARE_WITH_EDITION_DIALOG;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceAction.java
index f322b95..fb20ee8 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceAction.java
@@ -16,7 +16,7 @@
 
 /**
  * The "Compare with other resource" action.
- * 
+ *
  * @deprecated Temporarily replaced by CompareWithOtherResourceHandler. See bug
  *             264498.
  */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceDialog.java
index 635b318..533ada4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceDialog.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceDialog.java
@@ -69,7 +69,7 @@
  * This is a dialog that can invoke the compare editor on chosen files.
  */
 public class CompareWithOtherResourceDialog extends TitleAreaDialog {
-	
+
 	private int MIN_WIDTH = 320;
 	private int MIN_HEIGHT_WITH_ANCESTOR = 320;
 	private int MIN_HEIGHT_WITHOUT_ANCESTOR = 238;
@@ -169,28 +169,28 @@
 		}
 
 	}
-	
+
 	private abstract class ContentTypeElement {
-		
+
 		private Button radioButton;
 		protected Button mainButton;
 		protected Text text;
 		private String type;
 		protected InternalSection section;
 		private IResource resource;
-		
+
 		public ContentTypeElement(Composite parent, String type, InternalSection section) {
 			this.type = type;
 			this.section = section;
 			createContents(parent);
 		}
-		
+
 		private void createContents(Composite parent) {
 			createRadioButton(parent);
 			createText(parent);
 			createMainButton(parent);
 		}
-		
+
 		private void createRadioButton(Composite parent) {
 			radioButton = new Button(parent, SWT.RADIO);
 			radioButton.setText(type);
@@ -201,30 +201,30 @@
 			text.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 			text.setEditable(false);
 		}
-		
+
 		protected void createMainButton(Composite parent) {
 			mainButton = new Button(parent, SWT.PUSH);
 			mainButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false));
 		}
-		
+
 		protected Button getRadioButton() {
 			return radioButton;
 		}
-		
+
 		protected String getText() {
 			return text.getText();
 		}
-		
+
 		protected void setText(String string) {
 			text.setText(string);
 		}
-		
+
 		protected void setEnabled(boolean enabled) {
 			radioButton.setSelection(enabled);
 			mainButton.setEnabled(enabled);
 			text.setEnabled(enabled);
 		}
-		
+
 		protected void setResource(IResource resource) {
 			this.resource = resource;
 			section.setResource(resource);
@@ -233,32 +233,32 @@
 		public IResource getResource() {
 			return resource;
 		}
-		
+
 		void clearResource() {
 			resource = null;
 			text.setText(""); //$NON-NLS-1$
 		}
-		
+
 	}
-	
+
 	private class WorkspaceContent extends ContentTypeElement {
-		
+
 		public WorkspaceContent(Composite parent, InternalSection section) {
 			super(parent, CompareMessages.CompareWithOtherResourceDialog_workspaceRadioButton, section);
 		}
-		
+
 		protected void createMainButton(Composite parent) {
 			super.createMainButton(parent);
 			mainButton.setText(CompareMessages.CompareWithOtherResourceDialog_workspaceMainButton);
 			// temporarily hide this button. For more information about supporting for browsing workspace see bug 243744.
 			mainButton.setVisible(false);
 		}
-		
+
 		protected void createText(Composite parent) {
-			
+
 			super.createText(parent);
 			text.setEditable(true);
-			
+
 			text.addModifyListener(new ModifyListener() {
 				public void modifyText(ModifyEvent e) {
 					section.setResource(text.getText());
@@ -275,7 +275,7 @@
 					updateErrorInfo();
 				}
 			});
-			
+
 			initDrag();
 			initDrop();
 		}
@@ -302,15 +302,15 @@
 			target.setTransfer(types);
 			target.addDropListener(new FileTextDropListener(this));
 		}
-		
+
 	}
-	
+
 	private class ExternalFileContent extends ContentTypeElement {
-		
+
 		public ExternalFileContent(Composite parent, InternalSection section) {
 			super(parent, CompareMessages.CompareWithOtherResourceDialog_externalFileRadioButton, section);
 		}
-		
+
 		protected void createMainButton(Composite parent) {
 			super.createMainButton(parent);
 			mainButton.setText(CompareMessages.CompareWithOtherResourceDialog_externalFileMainButton);
@@ -320,7 +320,7 @@
 				}
 				public void widgetSelected(SelectionEvent e) {
 					IResource r = tmpProject.getExternalFile();
-					if (r == null) 
+					if (r == null)
 						return;
 					setResource(r);
 				}
@@ -331,15 +331,15 @@
 			super.setResource(resource);
 			text.setText(resource.getLocation().toOSString());
 		}
-		
+
 	}
-	
+
 	private class ExternalFolderContent extends ContentTypeElement {
-		
+
 		public ExternalFolderContent(Composite parent, InternalSection section) {
 			super(parent, CompareMessages.CompareWithOtherResourceDialog_externalFolderRadioButton, section);
 		}
-		
+
 		protected void createMainButton(Composite parent) {
 			super.createMainButton(parent);
 			mainButton.setText(CompareMessages.CompareWithOtherResourceDialog_externalFolderMainButton);
@@ -360,11 +360,11 @@
 			super.setResource(resource);
 			text.setText(resource.getLocation().toOSString());
 		}
-		
+
 	}
 
 	private abstract class InternalSection {
-		
+
 		// there is no "enum" support in Java 1.4. Sigh...
 		public static final int WORKSPACE = 0;
 		public static final int EXTERNAL_FILE = 1;
@@ -372,11 +372,11 @@
 
 		protected Group group;
 		private IResource resource;
-		
+
 		ExternalFileContent externalFileContent;
 		ExternalFolderContent externalFolderContent;
 		WorkspaceContent workspaceContent;
-		
+
 		private InternalSection() {
 			// not to instantiate
 		}
@@ -386,16 +386,16 @@
 			group = new Group(parent, SWT.NONE);
 			group.setLayout(new GridLayout(3, false));
 			group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false));
-			
+
 			workspaceContent = new WorkspaceContent(group, this);
 			externalFileContent = new ExternalFileContent(group, this);
 			externalFolderContent = new ExternalFolderContent(group, this);
-			
+
 			addListenersToRadioButtons();
 		}
-		
+
 		private void addListenersToRadioButtons() {
-			final ContentTypeElement[] elements = new ContentTypeElement[] { workspaceContent, 
+			final ContentTypeElement[] elements = new ContentTypeElement[] { workspaceContent,
 					externalFileContent, externalFolderContent };
 			for (int i = 0; i < elements.length; i++) {
 				elements[i].getRadioButton().addListener(SWT.Selection, new Listener() {
@@ -425,9 +425,9 @@
 		protected void setResource(String s) {
 			IResource tmp = ResourcesPlugin.getWorkspace().getRoot()
 					.findMember(s);
-			if (tmp instanceof IWorkspaceRoot) 
+			if (tmp instanceof IWorkspaceRoot)
 				resource = null;
-			else 
+			else
 				resource = tmp;
 			updateErrorInfo();
 		}
@@ -439,10 +439,10 @@
 			externalFolderContent.clearResource();
 			updateErrorInfo();
 		}
-		
+
 		protected void setContentType(int type) {
 			switch(type) {
-			case WORKSPACE: 
+			case WORKSPACE:
 				workspaceContent.setEnabled(true);
 				externalFileContent.setEnabled(false);
 				externalFolderContent.setEnabled(false);
@@ -521,15 +521,15 @@
 			expandable.setLayoutData(layoutData);
 		}
 	}
-	
+
 	private class ExternalResourcesProject {
-		
+
 		// Implementation based on org.eclipse.jdt.internal.core.ExternalFoldersManager
-		
+
 		private int counter = 0;
-		
+
 		private static final String TMP_PROJECT_NAME = ".org.eclipse.compare.tmp"; //$NON-NLS-1$
-		
+
 		private final static String TMP_PROJECT_FILE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" //$NON-NLS-1$
 				+ "<projectDescription>\n" //$NON-NLS-1$
 				+ "\t<name>" + TMP_PROJECT_NAME + "\t</name>\n" //$NON-NLS-1$ //$NON-NLS-2$
@@ -540,13 +540,13 @@
 				+ "\t</buildSpec>\n" //$NON-NLS-1$
 				+ "\t<natures>\n" + "\t</natures>\n" //$NON-NLS-1$//$NON-NLS-2$
 				+ "</projectDescription>"; //$NON-NLS-1$
-		
+
 		private final static String TMP_FOLDER_NAME = "tmpFolder"; //$NON-NLS-1$
-		
+
 		private ExternalResourcesProject() {
 			// nothing to do here
 		}
-		
+
 		private IProject createTmpProject() throws CoreException {
 			IProject project = getTmpProject();
 			if (!project.isAccessible()) {
@@ -582,14 +582,14 @@
 			project.setHidden(true);
 			return project;
 		}
-		
+
 		private IFolder getTmpFolder(IProject project) throws CoreException {
 			IFolder folder = project.getFolder(TMP_FOLDER_NAME);
 			if (!folder.exists())
 				folder.create(IResource.NONE, true, null);
 			return folder;
 		}
-		
+
 		private IFile getExternalFile() {
 			FileDialog dialog = new FileDialog(getShell());
 			String path = dialog.open();
@@ -605,7 +605,7 @@
 				return (IFolder) linkResource(new Path(path));
 			return null;
 		}
-		
+
 		private IResource linkResource(IPath path) {
 			IResource r = null;
 			String resourceName = path.lastSegment();
@@ -617,7 +617,7 @@
 					r = getTmpFolder(project).getFile(resourceName);
 					if (r.exists()) { 	// add a number to file's name when there already is a file with that name in a folder
 						String extension = path.getFileExtension();
-						String fileName = path.removeFileExtension().lastSegment(); 
+						String fileName = path.removeFileExtension().lastSegment();
 						r = getTmpFolder(project).getFile(getName(fileName, extension));
 					}
 					((IFile)r).createLink(path, IResource.REPLACE, null);
@@ -636,11 +636,11 @@
 			}
 			return r;
 		}
-		
+
 		/**
 		 * This method is used to prevent duplicating names of linked resources.
 		 * It adds a suffix based on the <code>counter</code> value.
-		 * 
+		 *
 		 * @param name
 		 * @param extension optional
 		 * @return
@@ -658,13 +658,13 @@
 			// don't change the name if counter equals 0
 			return name;
 		}
-		
+
 		private IProject getTmpProject() {
 			return ResourcesPlugin.getWorkspace().getRoot().getProject(
 					TMP_PROJECT_NAME);
 		}
 	}
-	
+
 	private Button okButton;
 	private InternalGroup rightPanel, leftPanel;
 	private InternalExpandable ancestorPanel;
@@ -673,7 +673,7 @@
 
 	/**
 	 * Creates the dialog.
-	 * 
+	 *
 	 * @param shell
 	 *            a shell
 	 * @param selection
@@ -689,7 +689,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
 	 * .Composite)
@@ -730,7 +730,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse
 	 * .swt.widgets.Composite)
@@ -800,13 +800,13 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Returns table with selected resources. If any resource wasn't chosen in
 	 * the ancestor panel, table has only two elements -- resources chosen in
 	 * left and right panel. In the other case table contains all three
 	 * resources.
-	 * 
+	 *
 	 * @return table with selected resources
 	 */
 	public IResource[] getResult() {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceHandler.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceHandler.java
index 74a57de..35508b6 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceHandler.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/CompareWithOtherResourceHandler.java
@@ -26,16 +26,16 @@
  * available from "Compare With > Other Resource...". See bug 264498.
  */
 public class CompareWithOtherResourceHandler extends AbstractHandler {
-	
+
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		IWorkbenchPage workbenchPage = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage();
-		
+
 		// CompareAction#isEnabled(ISelection)
 		CompareConfiguration cc = new CompareConfiguration();
 		cc.setProperty(CompareEditor.CONFIRM_SAVE_PROPERTY, Boolean.FALSE);
 		ResourceCompareInput input = new ResourceCompareInput(cc);
-		
+
 		int selectionSize = 0;
 		if (selection instanceof IStructuredSelection) {
 			selectionSize = ((IStructuredSelection) selection).toArray().length;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ContentChangeNotifier.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ContentChangeNotifier.java
index d598889..bfcb297 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ContentChangeNotifier.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ContentChangeNotifier.java
@@ -24,7 +24,7 @@
 
 	private ListenerList fListenerList;
 	private final IContentChangeNotifier element;
-	
+
 	public ContentChangeNotifier(IContentChangeNotifier element) {
 		this.element = element;
 	}
@@ -37,7 +37,7 @@
 			fListenerList= new ListenerList();
 		fListenerList.add(listener);
 	}
-	
+
 	/* (non-Javadoc)
 	 * see IContentChangeNotifier.removeChangeListener
 	 */
@@ -48,7 +48,7 @@
 				fListenerList= null;
 		}
 	}
-	
+
 	/**
 	 * Notifies all registered <code>IContentChangeListener</code>s of a content change.
 	 */
@@ -82,7 +82,7 @@
 
 	/**
 	 * Return whether this notifier is empty (i.e. has no listeners).
-	 * @return whether this notifier is empty 
+	 * @return whether this notifier is empty
 	 */
 	public boolean isEmpty() {
 		return fListenerList == null || fListenerList.isEmpty();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImageDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImageDescriptor.java
index b602b8f..3f21ad9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImageDescriptor.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DiffImageDescriptor.java
@@ -53,7 +53,7 @@
 		}
 		return h1 + h2 + fWidth;
 	}
-	
+
 	private int calculateHash(ImageData baseImageData) {
 		byte[] data = baseImageData.data;
 		int hash = baseImageData.width + baseImageData.height;
@@ -80,7 +80,7 @@
 			if (fBaseImageData != null) {
 				drawImage(fBaseImageData, fWidth - fBaseImageData.width, 0);
 			}
-	
+
 			if (fOverlayImage != null) {
 				ImageData overlay= fOverlayImage.getImageData();
 				if (overlay == null)
@@ -91,7 +91,7 @@
 			if (fBaseImageData != null) {
 				drawImage(fBaseImageData, 0, 0);
 			}
-	
+
 			if (fOverlayImage != null) {
 				ImageData overlay= fOverlayImage.getImageData();
 				if (overlay == null)
@@ -100,7 +100,7 @@
 			}
 		}
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see java.lang.Object#hashCode()
 	 */
@@ -118,13 +118,13 @@
 			DiffImageDescriptor other = (DiffImageDescriptor) obj;
 			return (other.hashCode == hashCode
 					&& isEqual(other.fOverlayImage, fOverlayImage)
-					&& other.fWidth == fWidth 
+					&& other.fWidth == fWidth
 					&& other.fLeft == fLeft
 					&& isEqual(other.fBaseImageData, fBaseImageData));
 		}
 		return false;
 	}
-	
+
 	private boolean isEqual(ImageData i1, ImageData i2) {
 		if (isEqual((Object) i1, (Object) i2)) {
 			return true;
@@ -143,7 +143,7 @@
 				&& equals(i1.data,i2.data) && equals(i1.maskData, i2.maskData)
 				&& equals(i1.alphaData, i2.alphaData));
 	}
-	
+
 	private boolean equals(byte[] data, byte[] data2) {
 		if (isEqual(data, data2))
 			return true;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
index c0a4e1a..1ceaf74 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocLineComparator.java
@@ -56,7 +56,7 @@
 	 * ignoreWhiteSpace controls whether comparing lines (in method
 	 * <code>rangesEqual<code>) should ignore whitespace. Compare filters may be used
 	 * to affect the detection of line differences.
-	 * 
+	 *
 	 * @param document
 	 *            the document from which the lines are taken
 	 * @param region
@@ -181,7 +181,7 @@
 
 	/**
 	 * Aborts the comparison if the number of tokens is too large.
-	 * 
+	 *
 	 * @param length a number on which to base the decision whether to return
 	 * 	<code>true</code> or <code>false</code>
 	 * @param maxLength another number on which to base the decision whether to return
@@ -192,9 +192,9 @@
 	public boolean skipRangeComparison(int length, int maxLength, IRangeComparator other) {
 		return false;
 	}
-		
+
 	//---- private methods
-	
+
 	private String[] extract(int thisIndex, int otherIndex,
 			DocLineComparator other, boolean includeSeparator) {
 
@@ -268,9 +268,9 @@
 		int l2= s2.length();
 		int c1= 0, c2= 0;
 		int i1= 0, i2= 0;
-		
+
 		while (c1 != -1) {
-			
+
 			c1= -1;
 			while (i1 < l1) {
 				char c= s1.charAt(i1++);
@@ -279,7 +279,7 @@
 					break;
 				}
 			}
-			
+
 			c2= -1;
 			while (i2 < l2) {
 				char c= s2.charAt(i2++);
@@ -288,7 +288,7 @@
 					break;
 				}
 			}
-				
+
 			if (c1 != c2)
 				return false;
 		}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
index 15ce891..3fc20f1 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/DocumentManager.java
@@ -18,21 +18,21 @@
  * No API yet.
  */
 public class DocumentManager {
-	
+
 	private static final boolean DEBUG= false;
-	
+
 	private static ArrayList fgKeys= new ArrayList();
 	private static ArrayList fgValues= new ArrayList();
-	
+
 	public static IDocument get(Object o) {
-		
+
 		for (int i= 0; i < fgKeys.size(); i++) {
 			if (fgKeys.get(i) == o)
 				return (IDocument) fgValues.get(i);
 		}
 		return null;
 	}
-	
+
 	public static void put(Object o, IDocument document) {
 		if (DEBUG) System.out.println("DocumentManager.put: " + document);	//$NON-NLS-1$
 		for (int i= 0; i < fgKeys.size(); i++) {
@@ -42,9 +42,9 @@
 			}
 		}
 		fgKeys.add(o);
-		fgValues.add(document);	
+		fgValues.add(document);
 	}
-	
+
 	public static void remove(IDocument document) {
 		if (document != null) {
 			if (DEBUG) System.out.println("DocumentManager.remove: " + document);	//$NON-NLS-1$
@@ -58,7 +58,7 @@
 			if (DEBUG) System.out.println("DocumentManager.remove: not found");	//$NON-NLS-1$
 		}
 	}
-	
+
 	public static void dump() {
 		if (DEBUG) System.out.println("DocumentManager: managed docs:" + fgValues.size());	//$NON-NLS-1$
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
index 08fbe62..fd91e95 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/EditionAction.java
@@ -48,24 +48,24 @@
 		private static final String UTF_16= "UTF-16"; //$NON-NLS-1$
 		private IDocument fDocument;
 		private IFile fFile;
-		
+
 		DocumentBufferNode(IDocument document, IFile file) {
 			fDocument= document;
 			fFile= file;
 		}
-		
+
 		public String getName() {
 			return fFile.getName();
 		}
-		
+
 		public String getType() {
 			return fFile.getFileExtension();
 		}
-		
+
 		public Image getImage() {
 			return null;
 		}
-		
+
 		public InputStream getContents() {
 			return new ByteArrayInputStream(Utilities.getBytes(fDocument.get(), UTF_16));
 		}
@@ -79,7 +79,7 @@
 	private boolean fReplaceMode;
 	protected boolean fPrevious= false;
 	protected String fHelpContextId;
-	
+
 	EditionAction(boolean replaceMode, String bundleName) {
 		fReplaceMode= replaceMode;
 		fBundleName= bundleName;
@@ -96,33 +96,33 @@
 	}
 
 	private void doFromHistory(final IFile file) {
-						
+
 		ResourceBundle bundle= ResourceBundle.getBundle(fBundleName);
 		String title= Utilities.getString(bundle, "title"); //$NON-NLS-1$
-			
+
 		Shell parentShell= CompareUIPlugin.getShell();
-		
+
 		IFileState states[]= null;
 		try {
 			states= file.getHistory(null);
-		} catch (CoreException ex) {		
+		} catch (CoreException ex) {
 			MessageDialog.openError(parentShell, title, ex.getMessage());
 			return;
 		}
-		
+
 		if (states == null || states.length <= 0) {
 			String msg= Utilities.getString(bundle, "noLocalHistoryError"); //$NON-NLS-1$
 			MessageDialog.openInformation(parentShell, title, msg);
 			return;
 		}
-		
+
 		ITypedElement base= new ResourceNode(file);
-		
+
 		IDocument document= getDocument(file);
 		ITypedElement target= base;
 		if (document != null)
 			target= new DocumentBufferNode(document, file);
-	
+
 		ITypedElement[] editions= new ITypedElement[states.length+1];
 		editions[0]= base;
 		for (int i= 0; i < states.length; i++)
@@ -134,29 +134,29 @@
 		//d.setHideIdenticalEntries(false);
 		if (fHelpContextId != null)
 			d.setHelpContextId(fHelpContextId);
-		
+
 		if (fReplaceMode) {
-			
+
 			ITypedElement ti= null;
 			if (fPrevious)
 				ti= d.selectPreviousEdition(target, editions, null);
 			else
 				ti= d.selectEdition(target, editions, null);
-			
+
 			if (ti instanceof IStreamContentAccessor) {
 				IStreamContentAccessor sa= (IStreamContentAccessor)ti;
-				
+
 				if (Utilities.validateResource(file, parentShell, title)) {
 					try {
-	
+
 						if (document != null)
-							updateDocument(document, sa);	
+							updateDocument(document, sa);
 						else
 							updateWorkspace(bundle, parentShell, sa, file);
-							
+
 					} catch (InterruptedException x) {
 						// Do nothing. Operation has been canceled by user.
-						
+
 					} catch (InvocationTargetException x) {
 						String reason= x.getTargetException().getMessage();
 						MessageDialog.openError(parentShell, title, Utilities.getFormattedString(bundle, "replaceError", reason));	//$NON-NLS-1$
@@ -166,13 +166,13 @@
 		} else {
 			d.setCompareMode(true);
 
-			d.selectEdition(target, editions, null);			
+			d.selectEdition(target, editions, null);
 		}
 	}
-	
+
 	private void updateWorkspace(final ResourceBundle bundle, Shell shell,
 						final IStreamContentAccessor sa, final IFile file)
-									throws InvocationTargetException, InterruptedException {	
+									throws InvocationTargetException, InterruptedException {
 		WorkspaceModifyOperation operation= new WorkspaceModifyOperation() {
 			public void execute(IProgressMonitor pm) throws InvocationTargetException {
 				try {
@@ -186,11 +186,11 @@
 				}
 			}
 		};
-		
-		ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);				
-		pmdialog.run(false, true, operation);									
+
+		ProgressMonitorDialog pmdialog= new ProgressMonitorDialog(shell);
+		pmdialog.run(false, true, operation);
 	}
-	
+
 	private void updateDocument(IDocument document, IStreamContentAccessor sa) throws InvocationTargetException {
 		try {
 			String text= Utilities.readString(sa);
@@ -201,7 +201,7 @@
 			throw new InvocationTargetException(e);
 		}
 	}
-	
+
 	private IDocument getDocument(IFile file) {
 		IWorkbench wb= PlatformUI.getWorkbench();
 		if (wb == null)
@@ -209,9 +209,9 @@
 		IWorkbenchWindow[] ws= wb.getWorkbenchWindows();
 		if (ws == null)
 			return null;
-			
+
 		FileEditorInput test= new FileEditorInput(file);
-		
+
 		for (int i= 0; i < ws.length; i++) {
 			IWorkbenchWindow w= ws[i];
 			IWorkbenchPage[] wps= w.getPages();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
index e8c81e2..a939020 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ExceptionHandler.java
@@ -32,20 +32,20 @@
 public class ExceptionHandler {
 
 	private static ExceptionHandler fgInstance= new ExceptionHandler();
-	
+
 	/*
 	 * Logs the given exception using the platform's logging mechanism. The exception is
 	 * logged as an error with the error code <code>JavaStatusConstants.INTERNAL_ERROR</code>.
 	 */
 	public static void log(Throwable t, String message) {
-		CompareUIPlugin.log(new Status(IStatus.ERROR, CompareUIPlugin.getPluginId(), 
+		CompareUIPlugin.log(new Status(IStatus.ERROR, CompareUIPlugin.getPluginId(),
 			CompareUIPlugin.INTERNAL_ERROR, message, t));
 	}
-	
+
 	/**
 	 * Handles the given <code>CoreException</code>. The workbench shell is used as a parent
 	 * for the dialog window.
-	 * 
+	 *
 	 * @param e the <code>CoreException</code> to be handled
 	 * @param title the dialog window's window title
 	 * @param message message to be displayed by the dialog window
@@ -53,10 +53,10 @@
 	public static void handle(CoreException e, String title, String message) {
 		handle(e, CompareUIPlugin.getShell(), title, message);
 	}
-	
+
 	/**
-	 * Handles the given <code>CoreException</code>. 
-	 * 
+	 * Handles the given <code>CoreException</code>.
+	 *
 	 * @param e the <code>CoreException</code> to be handled
 	 * @param parent the dialog window's parent shell
 	 * @param title the dialog window's window title
@@ -65,11 +65,11 @@
 	public static void handle(CoreException e, Shell parent, String title, String message) {
 		fgInstance.perform(e, parent, title, message);
 	}
-	
+
 	/**
-	 * Handles the given <code>InvocationTargetException</code>. The workbench shell is used 
+	 * Handles the given <code>InvocationTargetException</code>. The workbench shell is used
 	 * as a parent for the dialog window.
-	 * 
+	 *
 	 * @param e the <code>InvocationTargetException</code> to be handled
 	 * @param title the dialog window's window title
 	 * @param message message to be displayed by the dialog window
@@ -77,10 +77,10 @@
 	public static void handle(InvocationTargetException e, String title, String message) {
 		handle(e, CompareUIPlugin.getShell(), title, message);
 	}
-	
+
 	/**
-	 * Handles the given <code>InvocationTargetException</code>. 
-	 * 
+	 * Handles the given <code>InvocationTargetException</code>.
+	 *
 	 * @param e the <code>InvocationTargetException</code> to be handled
 	 * @param parent the dialog window's parent shell
 	 * @param title the dialog window's window title
@@ -91,7 +91,7 @@
 	}
 
 	//---- Hooks for subclasses to control exception handling ------------------------------------
-	
+
 	protected void perform(CoreException e, Shell shell, String title, String message) {
 		CompareUIPlugin.log(e);
 		IStatus status= e.getStatus();
@@ -117,7 +117,7 @@
 	}
 
 	//---- Helper methods -----------------------------------------------------------------------
-	
+
 	private void displayMessageDialog(Throwable t, String exceptionMessage, Shell shell, String title, String message) {
 		StringWriter msg= new StringWriter();
 		if (message != null) {
@@ -125,9 +125,9 @@
 			msg.write("\n\n"); //$NON-NLS-1$
 		}
 		if (exceptionMessage == null || exceptionMessage.length() == 0)
-			msg.write(CompareMessages.ExceptionDialog_seeErrorLogMessage); 
+			msg.write(CompareMessages.ExceptionDialog_seeErrorLogMessage);
 		else
 			msg.write(exceptionMessage);
-		MessageDialog.openError(shell, title, msg.toString());			
-	}	
+		MessageDialog.openError(shell, title, msg.toString());
+	}
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java
index 804e720..ae2047f 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ICompareContextIds.java
@@ -18,12 +18,12 @@
  * This interface contains constants only; it is not intended to be implemented
  * or extended.
  * </p>
- * 
+ *
  */
 public interface ICompareContextIds {
-	
+
 	public static final String PREFIX= CompareUI.PLUGIN_ID + '.';
-	
+
 	// Dialogs
 	public static final String EDITION_DIALOG= PREFIX + "edition_dialog_context"; //$NON-NLS-1$
 
@@ -34,13 +34,13 @@
 	public static final String COMPARE_DIALOG= PREFIX + "compare_dialog_context"; //$NON-NLS-1$
 	public static final String COMPARE_WITH_EDITION_DIALOG= PREFIX + "compare_with_edition_dialog_context"; //$NON-NLS-1$
 	public static final String REPLACE_WITH_EDITION_DIALOG= PREFIX + "replace_with_edition_dialog_context"; //$NON-NLS-1$
-	
+
 	// Viewer
 	public static final String TEXT_MERGE_VIEW= PREFIX + "text_merge_view_context"; //$NON-NLS-1$
 	public static final String IMAGE_COMPARE_VIEW= PREFIX + "image_compare_view_context"; //$NON-NLS-1$
 	public static final String BINARY_COMPARE_VIEW= PREFIX + "binary_compare_view_context"; //$NON-NLS-1$
 	public static final String DIFF_VIEW= PREFIX + "diff_view_context"; //$NON-NLS-1$
-	
+
 	// Actions
 	public static final String GLOBAL_NEXT_DIFF_ACTION= PREFIX + "global_next_diff_action_context"; //$NON-NLS-1$
 	public static final String GLOBAL_PREVIOUS_DIFF_ACTION= PREFIX + "global_previous_diff_action_context"; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IFlushable2.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IFlushable2.java
index 8439d4e..d86c375 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IFlushable2.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IFlushable2.java
@@ -16,9 +16,9 @@
 /**
  * Interface which provides the ability to flush the contents from the specified
  * side of the viewer.
- * 
+ *
  * @see IFlushable
- * 
+ *
  * @since 3.7
  */
 public interface IFlushable2 {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IMergeViewerTestAdapter.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IMergeViewerTestAdapter.java
index bccb14d..6617fe0 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IMergeViewerTestAdapter.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/IMergeViewerTestAdapter.java
@@ -27,7 +27,7 @@
 
 	/**
 	 * Returns the number of changes in merge viewer
-	 * 
+	 *
 	 * @return the number of changes
 	 */
 	public int getChangesCount();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavingSaveable.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavingSaveable.java
index 851cd31..6cee062 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavingSaveable.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ISavingSaveable.java
@@ -15,7 +15,7 @@
 /**
  * Interface defines API for checking if an object, preferably an instance of
  * {@link Saveable}, is being saved.
- * 
+ *
  * @since 3.7
  */
 public interface ISavingSaveable {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
index 6f45898..e059123 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ImageMergeViewer.java
@@ -28,17 +28,17 @@
 /**
  */
 public class ImageMergeViewer extends ContentMergeViewer {
-	
+
 	private static final String BUNDLE_NAME= "org.eclipse.compare.internal.ImageMergeViewerResources"; //$NON-NLS-1$
-		
+
 	private Object fLeftImage;
 	private Object fRightImage;
 
 	private ImageCanvas fAncestor;
 	private ImageCanvas fLeft;
 	private ImageCanvas fRight;
-	
-			
+
+
 	public ImageMergeViewer(Composite parent, int styles, CompareConfiguration mp) {
 		super(styles, ResourceBundle.getBundle(BUNDLE_NAME), mp);
 
@@ -50,23 +50,23 @@
 	}
 
 	protected void updateContent(Object ancestor, Object left, Object right) {
-		
+
 		setInput(fAncestor, ancestor);
-		
+
 		fLeftImage= left;
 		setInput(fLeft, left);
-		
+
 		fRightImage= right;
 		setInput(fRight, right);
 	}
-	
+
 	/*
 	 * We can't modify the contents of either side we just return null.
 	 */
 	protected byte[] getContents(boolean left) {
 		return null;
 	}
-	
+
 	public void createControls(Composite composite) {
 		fAncestor= new ImageCanvas(composite, SWT.NO_FOCUS);
 		fLeft= new ImageCanvas(composite, SWT.NO_FOCUS);
@@ -87,8 +87,8 @@
 					}
 				}
 			}
-			
-			Image image= null;			
+
+			Image image= null;
 			Display display= canvas.getDisplay();
 			if (stream != null) {
 				try {
@@ -104,7 +104,7 @@
 			} else {
 				canvas.setBackground(null);
 			}
-			
+
 			if (stream != null) {
 				try {
 					stream.close();
@@ -114,7 +114,7 @@
 			}
 		}
 	}
-	
+
 	protected void handleResizeAncestor(int x, int y, int width, int height) {
 		if (width > 0) {
 			fAncestor.setVisible(true);
@@ -128,7 +128,7 @@
 		fLeft.setBounds(x, y, width1, height);
 		fRight.setBounds(x+width1+centerWidth, y, width2, height);
 	}
-	
+
 	protected void copy(boolean leftToRight) {
 		if (leftToRight) {
 			fRightImage= fLeftImage;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
index 10a3c67..7ffc504 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ListContentProvider.java
@@ -15,16 +15,16 @@
 import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.Viewer;
 
-/** 
+/**
  * A specialized content provider to show a list of editor parts.
- */ 
+ */
 public class ListContentProvider implements IStructuredContentProvider {
-	List fContents;	
+	List fContents;
 
 	public ListContentProvider() {
 		// nothing to do
 	}
-	
+
 	public Object[] getElements(Object input) {
 		if (fContents != null && fContents == input)
 			return fContents.toArray();
@@ -32,7 +32,7 @@
 	}
 
 	public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-		if (newInput instanceof List) 
+		if (newInput instanceof List)
 			fContents= (List)newInput;
 		else
 			fContents= null;
@@ -42,7 +42,7 @@
 	public void dispose() {
 		// empty default implementation
 	}
-	
+
 	public boolean isDeleted(Object o) {
 		return fContents != null && !fContents.contains(o);
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
index 7fe0365..d923936 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeSourceViewer.java
@@ -105,7 +105,7 @@
  */
 public class MergeSourceViewer implements ISelectionChangedListener,
 		ITextListener, IMenuListener, IOperationHistoryListener, IAdaptable {
-								
+
 	public static final String UNDO_ID= "undo"; //$NON-NLS-1$
 	public static final String REDO_ID= "redo"; //$NON-NLS-1$
 	public static final String CUT_ID= "cut"; //$NON-NLS-1$
@@ -118,13 +118,13 @@
 	public static final String CHANGE_ENCODING_ID= "changeEncoding"; //$NON-NLS-1$
 
 	class TextOperationAction extends MergeViewerAction {
-		
+
 		private int fOperationCode;
-		
+
 		TextOperationAction(int operationCode, boolean mutable, boolean selection, boolean content) {
 			this(operationCode, null, mutable, selection, content);
 		}
-		
+
 		public TextOperationAction(int operationCode, String actionDefinitionId, boolean mutable, boolean selection, boolean content) {
 			super(mutable, selection, content);
 			if (actionDefinitionId != null)
@@ -141,7 +141,7 @@
 		public boolean isEnabled() {
 			return fOperationCode != -1 && getSourceViewer().canDoOperation(fOperationCode);
 		}
-		
+
 		public void update() {
 			setEnabled(isEnabled());
 		}
@@ -153,7 +153,7 @@
 	 * embedded TextEditor in a similar way JDT has it done for Java compare.
 	 */
 	class TextEditorAdapter implements ITextEditor {
-		
+
 		public void close(boolean save) {
 			// defining interface method
 		}
@@ -266,7 +266,7 @@
 		public void selectAndReveal(int start, int length) {
 			selectAndReveal(start, length, start, length);
 		}
-			
+
 		/*
 		 * @see org.eclipse.ui.texteditor.AbstractTextEditor#selectAndReveal(int, int, int, int)
 		 */
@@ -298,7 +298,7 @@
 		private void markInNavigationHistory() {
 			getSite().getPage().getNavigationHistory().markLocation(this);
 		}
- 
+
 		/*
 		 * @see org.eclipse.ui.texteditor.AbstractTextEditor#adjustHighlightRange(int, int)
 		 */
@@ -438,10 +438,10 @@
 	private boolean fEnabled= true;
 	private HashMap fActions= new HashMap();
 	private IDocument fRememberedDocument;
-	
+
 	private boolean fAddSaveAction= true;
 	private boolean isConfigured = false;
-	
+
 	// line number ruler support
 	private IPropertyChangeListener fPreferenceChangeListener;
 	private boolean fShowLineNumber=false;
@@ -454,14 +454,14 @@
 		fSourceViewer= sourceViewer;
 		fResourceBundle= bundle;
 		fContainer = container;
-		
+
 		MenuManager menu= new MenuManager();
 		menu.setRemoveAllWhenShown(true);
 		menu.addMenuListener(this);
 		StyledText te= getSourceViewer().getTextWidget();
 		te.setMenu(menu.createContextMenu(te));
 		fContainer.registerContextMenu(menu, getSourceViewer());
-		
+
 		// for listening to editor show/hide line number preference value
 		fPreferenceChangeListener= new IPropertyChangeListener() {
 			public void propertyChange(PropertyChangeEvent event) {
@@ -473,7 +473,7 @@
 		if(fShowLineNumber){
 			updateLineNumberRuler();
 		}
-		
+
 		IOperationHistory history = getHistory();
 		if (history != null)
 			history.addOperationHistoryListener(this);
@@ -481,22 +481,22 @@
 		// don't add save when in a dialog, IWorkbenchPart is null in dialog containers
 		fAddSaveAction = fContainer.getWorkbenchPart() != null;
 	}
-	
+
 	public void rememberDocument(IDocument doc) {
 //		if (doc != null && fRememberedDocument != null) {
 //			System.err.println("MergeSourceViewer.rememberDocument: fRememberedDocument != null: shouldn't happen"); //$NON-NLS-1$
 //		}
 		fRememberedDocument= doc;
 	}
-	
+
 	public IDocument getRememberedDocument() {
 		return fRememberedDocument;
 	}
-	
+
 	public void hideSaveAction() {
 		fAddSaveAction= false;
 	}
-	
+
 	public void setFont(Font font) {
 		StyledText te= getSourceViewer().getTextWidget();
 		if (te != null)
@@ -506,7 +506,7 @@
 			layoutViewer();
 		}
 	}
-	
+
 	public void setBackgroundColor(Color color) {
 		StyledText te= getSourceViewer().getTextWidget();
 		if (te != null)
@@ -514,13 +514,13 @@
 		if (fLineNumberColumn != null)
 			fLineNumberColumn.setBackground(color);
 	}
-	
+
 	public void setForegroundColor(Color color) {
 		StyledText te= getSourceViewer().getTextWidget();
 		if (te != null)
 			te.setForeground(color);
 	}
-	
+
 	public void setEnabled(boolean enabled) {
 		if (enabled != fEnabled) {
 			fEnabled= enabled;
@@ -532,7 +532,7 @@
 			}
 		}
 	}
-	
+
 	public boolean getEnabled() {
 		return fEnabled;
 	}
@@ -540,29 +540,29 @@
 	public void setRegion(Position region) {
 		fRegion= region;
 	}
-	
+
 	public Position getRegion() {
 		return fRegion;
 	}
-	
+
 	public boolean isControlOkToUse() {
 		StyledText t= getSourceViewer().getTextWidget();
 		return t != null && !t.isDisposed();
 	}
-				
+
 	public void setSelection(Position position) {
 		if (position != null)
 			getSourceViewer().setSelectedRange(position.getOffset(), position.getLength());
 	}
-	
+
 	public void setLineBackground(Position position, Color c) {
 		StyledText t= getSourceViewer().getTextWidget();
 		if (t != null && !t.isDisposed()) {
 			Point region= new Point(0, 0);
 			getLineRange(position, region);
-		
+
 			region.x-= getDocumentRegionOffset();
-		
+
 			try {
 				t.setLineBackground(region.x, region.y, c);
 			} catch (IllegalArgumentException ex) {
@@ -570,7 +570,7 @@
 			}
 		}
 	}
-	
+
 	public void resetLineBackground() {
 		StyledText t= getSourceViewer().getTextWidget();
 		if (t != null && !t.isDisposed()) {
@@ -578,7 +578,7 @@
 			t.setLineBackground(0, lines, null);
 		}
 	}
-	
+
 	/*
 	 * Returns number of lines in document region.
 	 */
@@ -588,7 +588,7 @@
 		int length= region.getLength();
 		if (length == 0)
 			return 0;
-		
+
 		IDocument doc= getSourceViewer().getDocument();
 		int startLine= 0;
 		int endLine= 0;
@@ -604,10 +604,10 @@
 		} catch(BadLocationException ex) {
 			// silently ignored
 		}
-		
+
 		return endLine-startLine+1;
 	}
-	
+
 	public int getViewportLines() {
 		StyledText te= getSourceViewer().getTextWidget();
 		Rectangle clArea= te.getClientArea();
@@ -623,7 +623,7 @@
 			return clArea.height;
 		return 0;
 	}
-	
+
 	/*
 	 * Returns lines
 	 */
@@ -639,7 +639,7 @@
 		}
 		return 0;
 	}
-	
+
 	public int getVerticalScrollOffset() {
 		StyledText st= getSourceViewer().getTextWidget();
 		int lineHeight= st.getLineHeight();
@@ -651,27 +651,27 @@
 	 * Starting line number is 0 based.
 	 */
 	public Point getLineRange(Position p, Point region) {
-		
+
 		IDocument doc= getSourceViewer().getDocument();
-		
+
 		if (p == null || doc == null) {
 			region.x= 0;
 			region.y= 0;
 			return region;
 		}
-		
+
 		int start= p.getOffset();
 		int length= p.getLength();
-		
+
 		int startLine= 0;
 		try {
 			startLine= doc.getLineOfOffset(start);
 		} catch (BadLocationException e) {
 			// silently ignored
 		}
-		
+
 		int lineCount= 0;
-		
+
 		if (length == 0) {
 //			// if range length is 0 and if range starts a new line
 //			try {
@@ -681,7 +681,7 @@
 //			} catch (BadLocationException e) {
 //				lines--;
 //			}
-			
+
 		} else {
 			int endLine= 0;
 			try {
@@ -691,12 +691,12 @@
 			}
 			lineCount= endLine-startLine+1;
 		}
-				
+
 		region.x= startLine;
 		region.y= lineCount;
 		return region;
 	}
-	
+
 	/*
 	 * Scroll TextPart to the given line.
 	 */
@@ -715,11 +715,11 @@
 				getSourceViewer().setTopIndex(line + getDocumentRegionOffset());
 		}
 	}
-	
+
 	public void addAction(String actionId, MergeViewerAction action) {
 		fActions.put(actionId, action);
 	}
-	
+
 	public IAction getAction(String actionId) {
 		IAction action= (IAction) fActions.get(actionId);
 		if (action == null) {
@@ -732,11 +732,11 @@
 					getSourceViewer().addTextListener(this);
 				if (mva.isSelectionDependent())
 					getSourceViewer().addSelectionChangedListener(this);
-				
+
 				Utilities.initAction(action, fResourceBundle, "action." + actionId + ".");			 //$NON-NLS-1$ //$NON-NLS-2$
 			}
 			addAction(actionId, action);
-				
+
 		}
 		if (action instanceof MergeViewerAction) {
 			MergeViewerAction mva = (MergeViewerAction) action;
@@ -745,7 +745,7 @@
 		}
 		return action;
 	}
-	
+
 	protected IAction createAction(String actionId) {
 		if (UNDO_ID.equals(actionId))
 			return new TextOperationAction(ITextOperationTarget.UNDO, IWorkbenchCommandConstants.EDIT_UNDO, true, false, true);
@@ -763,7 +763,7 @@
 			return new TextOperationAction(ITextOperationTarget.SELECT_ALL, IWorkbenchCommandConstants.EDIT_SELECT_ALL, false, false, false);
 		return null;
 	}
-	
+
 	public void selectionChanged(SelectionChangedEvent event) {
 		Iterator e= fActions.values().iterator();
 		while (e.hasNext()) {
@@ -775,7 +775,7 @@
 			}
 		}
 	}
-					
+
 	public void textChanged(TextEvent event) {
 		updateContentDependantActions();
 	}
@@ -791,12 +791,12 @@
 			}
 		}
 	}
-		
+
 	/*
 	 * Allows the viewer to add menus and/or tools to the context menu.
 	 */
 	public void menuAboutToShow(IMenuManager menu) {
-		
+
 		menu.add(new Separator("undo")); //$NON-NLS-1$
 		addMenu(menu, UNDO_ID);
 		addMenu(menu, REDO_ID);
@@ -804,7 +804,7 @@
 		if (fAddSaveAction)
 			addSave(menu);
 		menu.add(new Separator("file")); //$NON-NLS-1$
-	
+
 		menu.add(new Separator("ccp")); //$NON-NLS-1$
 		addMenu(menu, CUT_ID);
 		addMenu(menu, COPY_ID);
@@ -816,32 +816,32 @@
 		addMenu(menu, CHANGE_ENCODING_ID);
 		menu.add(new Separator("find")); //$NON-NLS-1$
 		addMenu(menu, FIND_ID);
-		
+
 		menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
-		
+
 		menu.add(new Separator("text")); //$NON-NLS-1$
 		for (Iterator iterator = textActions.iterator(); iterator.hasNext();) {
 			IAction action = (IAction) iterator.next();
 			menu.add(action);
 		}
-		
+
 		menu.add(new Separator("rest")); //$NON-NLS-1$
-		
+
 		// update all actions
 		// to get undo redo right
 		updateActions();
 	}
-	
+
 	private void addMenu(IMenuManager menu, String actionId) {
 		IAction action= getAction(actionId);
 		if (action != null)
 			menu.add(action);
 	}
-	
+
 	private void addSave(IMenuManager menu) {
 		ICommandService commandService = fContainer.getWorkbenchPart().getSite().getService(ICommandService.class);
 		final Command command= commandService.getCommand(IWorkbenchCommandConstants.FILE_SAVE);
-		
+
 		final IHandler handler = command.getHandler();
 		if (handler != null) {
 			if (fSaveContributionItem == null) {
@@ -867,12 +867,12 @@
 		getSourceViewer().removeTextListener(this);
 		getSourceViewer().removeSelectionChangedListener(this);
 		EditorsUI.getPreferenceStore().removePropertyChangeListener(fPreferenceChangeListener);
-		
+
 		IOperationHistory history = getHistory();
 		if (history != null)
 			history.removeOperationHistoryListener(this);
 	}
-	
+
 	/**
 	 * update all actions independent of their type
 	 *
@@ -893,14 +893,14 @@
 			}
 		}
 	}
-	
+
 	public void configure(SourceViewerConfiguration configuration) {
 		if (isConfigured )
 			getSourceViewer().unconfigure();
 		isConfigured = true;
 		getSourceViewer().configure(configuration);
 	}
-	
+
 	/**
 	 * specific implementation to support a vertical ruler
 	 * @param x
@@ -915,15 +915,15 @@
 			getSourceViewer().getTextWidget().setBounds(x, y, width, height);
 		}
 	}
-	
+
 	/**
 	 * handle show/hide line numbers from editor preferences
 	 * @param event
 	 */
 	protected void handlePropertyChangeEvent(PropertyChangeEvent event) {
-		
+
 		String key= event.getProperty();
-		
+
 		if(key.equals(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER)){
 			boolean b= EditorsUI.getPreferenceStore().getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_LINE_NUMBER_RULER);
 			if (b != fShowLineNumber){
@@ -963,17 +963,17 @@
 			fLineNumberColumn.redraw();
 		}
 	}
-	
+
 	private void layoutViewer() {
 		Control parent= getSourceViewer().getControl();
 		if (parent instanceof Composite && !parent.isDisposed())
 			((Composite) parent).layout(true);
 	}
-	
+
 	private ISharedTextColors getSharedColors() {
 		return EditorsUI.getSharedTextColors();
 	}
-	
+
 	private RGB getColorFromStore(IPreferenceStore store, String key) {
 		RGB rgb= null;
 		if (store.contains(key)) {
@@ -991,7 +991,7 @@
 	private void toggleLineNumberRuler()
 	{
 		fShowLineNumber=!fShowLineNumber;
-		
+
 		updateLineNumberRuler();
 	}
 
@@ -1006,7 +1006,7 @@
 	public void addAction(String id, IAction action) {
 		fActions.put(id, action);
 	}
-	
+
 	private IOperationHistory getHistory() {
 		if (PlatformUI.getWorkbench() == null) {
 			return null;
@@ -1034,14 +1034,14 @@
 			return ((IUndoManagerExtension)undoManager).getUndoContext();
 		return null;
 	}
-	
+
 	/**
 	 * @return the wrapped viewer
 	 */
 	public SourceViewer getSourceViewer() {
 		return fSourceViewer;
 	}
-	
+
 	public Object getAdapter(Class adapter) {
 		if (adapter == ITextEditor.class) {
 			return new TextEditorAdapter();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
index 0ffcebb..99f9c84 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerAction.java
@@ -15,11 +15,11 @@
 
 
 public abstract class MergeViewerAction extends Action implements IUpdate {
-	
+
 	private boolean fMutable;
 	private boolean fSelection;
 	private boolean fContent;
-	
+
 	public MergeViewerAction(boolean mutable, boolean selection, boolean content) {
 		fMutable= mutable;
 		fSelection= selection;
@@ -29,15 +29,15 @@
 	public boolean isSelectionDependent() {
 		return fSelection;
 	}
-	
+
 	public boolean isContentDependent() {
 		return fContent;
 	}
-	
+
 	public boolean isEditableDependent() {
 		return fMutable;
 	}
-	
+
 	public void update() {
 		// empty default implementation
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
index 66d55b4..4a90f19 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/MergeViewerContentProvider.java
@@ -21,56 +21,56 @@
  * e.g. a <code>DiffNode</code>.
  */
 public class MergeViewerContentProvider implements IMergeViewerContentProvider {
-	
+
 	public static final char ANCESTOR_CONTRIBUTOR = 'A';
 	public static final char RIGHT_CONTRIBUTOR = 'R';
 	public static final char LEFT_CONTRIBUTOR = 'L';
-	
+
 	private CompareConfiguration fCompareConfiguration;
 	private String fAncestorError;
 	private String fLeftError;
 	private String fRightError;
-		
+
 	public MergeViewerContentProvider(CompareConfiguration cc) {
 		fCompareConfiguration= cc;
 	}
-	
+
 	private boolean hasError() {
 		return fAncestorError != null || fLeftError != null || fRightError != null;
 	}
-	
+
 	public void dispose() {
 		// empty default implementation
 	}
-	
+
 	public void inputChanged(Viewer v, Object o1, Object o2) {
 		// we are not interested since we have no state
 	}
-	
+
 	//---- ancestor
-			
+
 	public void setAncestorError(String errorMessage) {
 		fAncestorError= errorMessage;
 	}
-	
+
 	public String getAncestorLabel(Object element) {
 		if (fAncestorError != null)
 			return fAncestorError;
 		return fCompareConfiguration.getAncestorLabel(element);
 	}
-	
+
 	public Image getAncestorImage(Object element) {
 		if (fAncestorError != null)
 			return null;
 		return fCompareConfiguration.getAncestorImage(element);
 	}
-	
+
 	public Object getAncestorContent(Object element) {
 		if (element instanceof ICompareInput)
 			return ((ICompareInput) element).getAncestor();
 		return null;
 	}
-	
+
 	public boolean showAncestor(Object element) {
 		if (element instanceof ICompareInput)
 			return true;	// fix for #45239: Show ancestor for incoming and outgoing changes
@@ -79,29 +79,29 @@
 	}
 
 	//---- left
-					
+
 	public void setLeftError(String errorMessage) {
 		fLeftError= errorMessage;
 	}
-	
+
 	public String getLeftLabel(Object element) {
 		if (fLeftError != null)
 			return fLeftError;
 		return fCompareConfiguration.getLeftLabel(element);
 	}
-	
+
 	public Image getLeftImage(Object element) {
 		if (fLeftError != null)
 			return null;
 		return fCompareConfiguration.getLeftImage(element);
 	}
-	
-	public Object getLeftContent(Object element) {	
+
+	public Object getLeftContent(Object element) {
 		if (element instanceof ICompareInput)
 			return ((ICompareInput) element).getLeft();
 		return null;
 	}
-		
+
 	public boolean isLeftEditable(Object element) {
 		if (hasError())
 			return false;
@@ -134,34 +134,34 @@
 					((ResourceCompareInput.MyDiffNode)node).fireChange();
 			} else {
 				node.copy(false);
-			}			
+			}
 		}
 	}
-	
+
 	//---- right
-	
+
 	public void setRightError(String errorMessage) {
 		fRightError= errorMessage;
 	}
-	
+
 	public String getRightLabel(Object element) {
 		if (fRightError != null)
 			return fRightError;
 		return fCompareConfiguration.getRightLabel(element);
 	}
-	
+
 	public Image getRightImage(Object element) {
 		if (fRightError != null)
 			return null;
 		return fCompareConfiguration.getRightImage(element);
 	}
-	
+
 	public Object getRightContent(Object element) {
 		if (element instanceof ICompareInput)
 			return ((ICompareInput) element).getRight();
 		return null;
 	}
-	
+
 	public boolean isRightEditable(Object element) {
 		if (hasError())
 			return false;
@@ -177,7 +177,7 @@
 		}
 		return false;
 	}
-	
+
 	public void saveRightContent(Object element, byte[] bytes) {
 		if (element instanceof ICompareInput) {
 			ICompareInput node= (ICompareInput) element;
@@ -194,7 +194,7 @@
 					((ResourceCompareInput.MyDiffNode)node).fireChange();
 			} else {
 				node.copy(true);
-			}		
+			}
 		}
 	}
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationEndDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationEndDialog.java
index af56d2a..0cb023f 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationEndDialog.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/NavigationEndDialog.java
@@ -16,7 +16,7 @@
 import org.eclipse.swt.widgets.*;
 
 public class NavigationEndDialog extends MessageDialogWithToggle {
-	
+
 	private final String[][] labelsAndValues;
 	private RadioGroupFieldEditor editor;
 
@@ -27,7 +27,7 @@
 				CompareMessages.NavigationEndDialog_0, false);
 		this.labelsAndValues = labelsAndValues;
 	}
-	
+
 	protected Control createCustomArea(Composite parent) {
 		editor = new RadioGroupFieldEditor(ICompareUIConstants.PREF_NAVIGATION_END_ACTION_LOCAL, CompareMessages.NavigationEndDialog_1, 1,
 				labelsAndValues,
@@ -37,7 +37,7 @@
 		editor.load();
 		return parent;
 	}
-	
+
 	protected void buttonPressed(int buttonId) {
 		if (buttonId == IDialogConstants.OK_ID) {
 			editor.store();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OutlineViewerCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OutlineViewerCreator.java
index bdb26d0..a81ef15 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OutlineViewerCreator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OutlineViewerCreator.java
@@ -19,7 +19,7 @@
 import org.eclipse.swt.widgets.Composite;
 
 /**
- * Class which allows content merge viewer to provide a structure viewer that can be used in the outline 
+ * Class which allows content merge viewer to provide a structure viewer that can be used in the outline
  * view.
  */
 public abstract class OutlineViewerCreator {
@@ -28,9 +28,9 @@
 	 * Property constant that identifies the input of the outline view.
 	 */
 	public static final String PROP_INPUT = "org.eclipse.compare.OutlineInput"; //$NON-NLS-1$
-	
+
 	private ListenerList listeners = new ListenerList(ListenerList.IDENTITY);
-	
+
 	/**
 	 * Method called by the editor to create a structure viewer for the current content merge viewer.
 	 * @param oldViewer the current viewer that is being used to show the structure
@@ -41,9 +41,9 @@
 	 */
 	public abstract Viewer findStructureViewer(Viewer oldViewer, ICompareInput input,
 			Composite parent, CompareConfiguration configuration);
-	
+
 	public abstract boolean hasViewerFor(Object input);
-	
+
 	public void addPropertyChangeListener(IPropertyChangeListener listener) {
 		listeners.add(listener);
 	}
@@ -51,7 +51,7 @@
 	public void removePropertyChangeListener(IPropertyChangeListener listener) {
 		listeners.remove(listener);
 	}
-	
+
 	public void fireInputChange(Object oldInput, Object newInput) {
 		Object[] list = listeners.getListeners();
 		final PropertyChangeEvent event = new PropertyChangeEvent(this, PROP_INPUT, oldInput, newInput);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
index f0e7320..afc30e1 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/OverlayPreferenceStore.java
@@ -19,58 +19,58 @@
  * An overlaying preference store.
  */
 public class OverlayPreferenceStore  implements IPreferenceStore {
-	
-	
+
+
 	public static final class TypeDescriptor {
 		private TypeDescriptor() {
 			// nothing to do
 		}
 	}
-	
+
 	public static final TypeDescriptor BOOLEAN= new TypeDescriptor();
 	public static final TypeDescriptor DOUBLE= new TypeDescriptor();
 	public static final TypeDescriptor FLOAT= new TypeDescriptor();
 	public static final TypeDescriptor INT= new TypeDescriptor();
 	public static final TypeDescriptor LONG= new TypeDescriptor();
 	public static final TypeDescriptor STRING= new TypeDescriptor();
-	
+
 	public static class OverlayKey {
-		
+
 		TypeDescriptor fDescriptor;
 		String fKey;
-		
+
 		public OverlayKey(TypeDescriptor descriptor, String key) {
 			fDescriptor= descriptor;
 			fKey= key;
 		}
 	}
-	
+
 	private class PropertyListener implements IPropertyChangeListener {
-				
+
 		/*
 		 * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent)
 		 */
 		public void propertyChange(PropertyChangeEvent event) {
 			OverlayKey key= findOverlayKey(event.getProperty());
 			if (key != null)
-				propagateProperty(fParent, key, fStore); 
+				propagateProperty(fParent, key, fStore);
 		}
 	}
-	
-	
+
+
 	private IPreferenceStore fParent;
 	private IPreferenceStore fStore;
 	private OverlayKey[] fOverlayKeys;
-	
+
 	private PropertyListener fPropertyListener;
-	
-	
+
+
 	public OverlayPreferenceStore(IPreferenceStore parent, OverlayKey[] overlayKeys) {
 		fParent= parent;
 		fOverlayKeys= overlayKeys;
 		fStore= new PreferenceStore();
 	}
-	
+
 	private OverlayKey findOverlayKey(String key) {
 		for (int i= 0; i < fOverlayKeys.length; i++) {
 			if (fOverlayKeys[i].fKey.equals(key))
@@ -78,41 +78,41 @@
 		}
 		return null;
 	}
-	
+
 	private boolean covers(String key) {
 		return (findOverlayKey(key) != null);
 	}
-	
+
 	private void propagateProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target) {
-		
+
 		if (orgin.isDefault(key.fKey)) {
 			if (!target.isDefault(key.fKey))
 				target.setToDefault(key.fKey);
 			return;
 		}
-		
+
 		TypeDescriptor d= key.fDescriptor;
 		if (BOOLEAN == d) {
-			
+
 			boolean originValue= orgin.getBoolean(key.fKey);
 			boolean targetValue= target.getBoolean(key.fKey);
 			if (targetValue != originValue)
 				target.setValue(key.fKey, originValue);
-				
+
 		} else if (DOUBLE == d) {
-			
+
 			double originValue= orgin.getDouble(key.fKey);
 			double targetValue= target.getDouble(key.fKey);
 			if (targetValue != originValue)
 				target.setValue(key.fKey, originValue);
-		
+
 		} else if (FLOAT == d) {
-			
+
 			float originValue= orgin.getFloat(key.fKey);
 			float targetValue= target.getFloat(key.fKey);
 			if (targetValue != originValue)
 				target.setValue(key.fKey, originValue);
-				
+
 		} else if (INT == d) {
 
 			int originValue= orgin.getInt(key.fKey);
@@ -136,97 +136,97 @@
 
 		}
 	}
-	
+
 	public void propagate() {
 		for (int i= 0; i < fOverlayKeys.length; i++)
 			propagateProperty(fStore, fOverlayKeys[i], fParent);
 	}
-	
+
 	private void loadProperty(IPreferenceStore orgin, OverlayKey key, IPreferenceStore target, boolean forceInitialization) {
 		TypeDescriptor d= key.fDescriptor;
 		if (BOOLEAN == d) {
-			
+
 			if (forceInitialization)
 				target.setValue(key.fKey, true);
 			target.setValue(key.fKey, orgin.getBoolean(key.fKey));
 			target.setDefault(key.fKey, orgin.getDefaultBoolean(key.fKey));
-			
+
 		} else if (DOUBLE == d) {
-			
+
 			if (forceInitialization)
 				target.setValue(key.fKey, 1.0D);
 			target.setValue(key.fKey, orgin.getDouble(key.fKey));
 			target.setDefault(key.fKey, orgin.getDefaultDouble(key.fKey));
-			
+
 		} else if (FLOAT == d) {
-			
+
 			if (forceInitialization)
 				target.setValue(key.fKey, 1.0F);
 			target.setValue(key.fKey, orgin.getFloat(key.fKey));
 			target.setDefault(key.fKey, orgin.getDefaultFloat(key.fKey));
-			
+
 		} else if (INT == d) {
-			
+
 			if (forceInitialization)
 				target.setValue(key.fKey, 1);
 			target.setValue(key.fKey, orgin.getInt(key.fKey));
 			target.setDefault(key.fKey, orgin.getDefaultInt(key.fKey));
-			
+
 		} else if (LONG == d) {
-			
+
 			if (forceInitialization)
 				target.setValue(key.fKey, 1L);
 			target.setValue(key.fKey, orgin.getLong(key.fKey));
 			target.setDefault(key.fKey, orgin.getDefaultLong(key.fKey));
-			
+
 		} else if (STRING == d) {
-			
+
 			if (forceInitialization)
 				target.setValue(key.fKey, "1");	//$NON-NLS-1$
 			target.setValue(key.fKey, orgin.getString(key.fKey));
 			target.setDefault(key.fKey, orgin.getDefaultString(key.fKey));
-			
+
 		}
 	}
-	
+
 	public void load() {
 		for (int i= 0; i < fOverlayKeys.length; i++)
 			loadProperty(fParent, fOverlayKeys[i], fStore, true);
 	}
-	
+
 	public void loadDefaults() {
 		for (int i= 0; i < fOverlayKeys.length; i++)
 			setToDefault(fOverlayKeys[i].fKey);
 	}
-	
+
 	public void start() {
 		if (fPropertyListener == null) {
 			fPropertyListener= new PropertyListener();
 			fParent.addPropertyChangeListener(fPropertyListener);
 		}
 	}
-	
+
 	public void stop() {
 		if (fPropertyListener != null)  {
 			fParent.removePropertyChangeListener(fPropertyListener);
 			fPropertyListener= null;
 		}
 	}
-	
+
 	/*
 	 * @see IPreferenceStore#addPropertyChangeListener(IPropertyChangeListener)
 	 */
 	public void addPropertyChangeListener(IPropertyChangeListener listener) {
 		fStore.addPropertyChangeListener(listener);
 	}
-	
+
 	/*
 	 * @see IPreferenceStore#removePropertyChangeListener(IPropertyChangeListener)
 	 */
 	public void removePropertyChangeListener(IPropertyChangeListener listener) {
 		fStore.removePropertyChangeListener(listener);
 	}
-	
+
 	/*
 	 * @see IPreferenceStore#firePropertyChangeEvent(String, Object, Object)
 	 */
@@ -240,7 +240,7 @@
 	public boolean contains(String name) {
 		return fStore.contains(name);
 	}
-	
+
 	/*
 	 * @see IPreferenceStore#getBoolean(String)
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
index 3c4277f..306e591 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithEditionAction.java
@@ -12,7 +12,7 @@
 
 
 public class ReplaceWithEditionAction extends EditionAction {
-		
+
 	public ReplaceWithEditionAction() {
 		super(true, "org.eclipse.compare.internal.ReplaceWithEditionAction"); //$NON-NLS-1$
 		fHelpContextId= ICompareContextIds.REPLACE_WITH_EDITION_DIALOG;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
index 67ecb97..73b1124 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ReplaceWithPreviousEditionAction.java
@@ -12,7 +12,7 @@
 
 
 public class ReplaceWithPreviousEditionAction extends EditionAction {
-		
+
 	public ReplaceWithPreviousEditionAction() {
 		super(true,
 			"org.eclipse.compare.internal.ReplaceWithEditionAction");	//$NON-NLS-1$
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
index e656391..f5dfa9f 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResizableDialog.java
@@ -33,7 +33,7 @@
 	private static final String Y= "y"; //$NON-NLS-1$
 	private static final String WIDTH= "width"; //$NON-NLS-1$
 	private static final String HEIGHT= "height"; //$NON-NLS-1$
-	
+
 	protected ResourceBundle fBundle;
 	private Rectangle fNewBounds;
 	private IDialogSettings fSettings;
@@ -43,12 +43,12 @@
 	public ResizableDialog(Shell parent, ResourceBundle bundle) {
 		super(parent);
 		setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX);
-		
+
 		fBundle= bundle;
-		
+
 		fSettings= CompareUIPlugin.getDefault().getDialogSettings();
 	}
-	
+
 	public void setHelpContextId(String contextId) {
 		fContextId= contextId;
 	}
@@ -61,12 +61,12 @@
 		if (fContextId != null)
 			PlatformUI.getWorkbench().getHelpSystem().setHelp(newShell, fContextId);
 	}
-	
+
 	protected Point getInitialSize() {
-		
+
 		int width= 0;
 		int height= 0;
-		
+
 		final Shell s= getShell();
 		if (s != null) {
 			s.addControlListener(
@@ -80,7 +80,7 @@
 				}
 			);
 		}
-		
+
 		IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY);
 		if (bounds == null) {
 			if (fBundle != null) {
@@ -117,14 +117,14 @@
 			} catch (NumberFormatException e) {
 				height= 500;
 			}
-		}	
-	
+		}
+
 		return new Point(width, height);
 	}
-	
+
 	protected Point getInitialLocation(Point initialSize) {
 		Point loc= super.getInitialLocation(initialSize);
-		
+
 		IDialogSettings bounds= fSettings.getSection(DIALOG_BOUNDS_KEY);
 		if (bounds != null) {
 			try {
@@ -140,7 +140,7 @@
 		}
 		return loc;
 	}
-	
+
 	public boolean close() {
 		boolean closed= super.close();
 		if (closed && fNewBounds != null)
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
index 8c0807f..c6ebbf8 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ResourceCompareInput.java
@@ -60,9 +60,9 @@
  * A two-way or three-way compare for arbitrary IResources.
  */
 class ResourceCompareInput extends CompareEditorInput {
-	
+
 	private static final boolean NORMALIZE_CASE= true;
-	
+
 	private boolean fThreeWay= false;
 	private Object fRoot;
 	private IStructureComparator fAncestor;
@@ -73,14 +73,14 @@
 	private IResource fRightResource;
 	private DiffTreeViewer fDiffViewer;
 	private IAction fOpenAction;
-	
+
 	class MyDiffNode extends DiffNode {
-		
+
 		private boolean fDirty= false;
 		private ITypedElement fLastId;
 		private String fLastName;
-		
-		
+
+
 		public MyDiffNode(IDiffContainer parent, int description, ITypedElement ancestor, ITypedElement left, ITypedElement right) {
 			super(parent, description, ancestor, left, right);
 		}
@@ -101,7 +101,7 @@
 				return '<' + fLastName + '>';
 			return fLastName;
 		}
-		
+
 		public ITypedElement getId() {
 			ITypedElement id= super.getId();
 			if (id == null)
@@ -110,7 +110,7 @@
 			return id;
 		}
 	}
-	
+
 	static class FilteredBufferedResourceNode extends BufferedResourceNode {
 		FilteredBufferedResourceNode(IResource resource) {
 			super(resource);
@@ -122,18 +122,18 @@
 			return new FilteredBufferedResourceNode(child);
 		}
 	}
-	
+
 	/*
 	 * Creates an compare editor input for the given selection.
 	 */
 	ResourceCompareInput(CompareConfiguration config) {
 		super(config);
 	}
-			
+
 	public Viewer createDiffViewer(Composite parent) {
 		fDiffViewer= new DiffTreeViewer(parent, getCompareConfiguration()) {
 			protected void fillContextMenu(IMenuManager manager) {
-				
+
 				if (fOpenAction == null) {
 					fOpenAction= new Action() {
 						public void run() {
@@ -142,7 +142,7 @@
 					};
 					Utilities.initAction(fOpenAction, getBundle(), "action.CompareContents."); //$NON-NLS-1$
 				}
-				
+
 				boolean enable= false;
 				ISelection selection= getSelection();
 				if (selection instanceof IStructuredSelection) {
@@ -158,9 +158,9 @@
 					}
 				}
 				fOpenAction.setEnabled(enable);
-				
+
 				manager.add(fOpenAction);
-				
+
 				super.fillContextMenu(manager);
 			}
 		};
@@ -172,9 +172,9 @@
 		IResource ancestorResource;
 		IResource leftResource;
 		IResource rightResource;
-		
+
 		private Button[] buttons;
-		
+
 		public SelectAncestorDialog(Shell parentShell, IResource[] theResources) {
 			super(parentShell, CompareMessages.SelectAncestorDialog_title,
 				null, CompareMessages.SelectAncestorDialog_message,
@@ -183,7 +183,7 @@
 					IDialogConstants.CANCEL_LABEL }, 0);
 			this.theResources = theResources;
 		}
-		
+
 		protected Control createCustomArea(Composite parent) {
 			Composite composite = new Composite(parent, SWT.NONE);
 			composite.setLayout(new GridLayout());
@@ -206,7 +206,7 @@
 			leftResource = theResources[i == 0 ? 1 : 0];
 			rightResource = theResources[i == 2 ? 1 : 2];
 		}
-		
+
 		private SelectionListener selectionListener = new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				Button selectedButton = (Button) e.widget;
@@ -231,14 +231,14 @@
 		IResource[] selection= Utilities.getResources(s);
 
 		fThreeWay= selection.length == 3;
-		
+
 		if (fThreeWay) {
 			SelectAncestorDialog dialog =
 				new SelectAncestorDialog(shell, selection);
 			int code = dialog.open();
 			if (code != Window.OK)
 				return false;
-			
+
 			fAncestorResource= dialog.ancestorResource;
 			fAncestor= getStructure(fAncestorResource);
 			fLeftResource= dialog.leftResource;
@@ -290,23 +290,23 @@
 	 * Returns true if compare can be executed for the given selection.
 	 */
 	public boolean isEnabled(ISelection s) {
-		
+
 		IResource[] selection= Utilities.getResources(s);
 		if (selection.length < 2 || selection.length > 3)
 			return false;
 
 		boolean threeWay= selection.length == 3;
-		
+
 		if (threeWay)
 			// It only makes sense if they're all mutually comparable.
 			// If not, the user should compare two of them.
 			return comparable(selection[0], selection[1])
 				&& comparable(selection[0], selection[2])
 				&& comparable(selection[1], selection[2]);
-		
+
 		return comparable(selection[0], selection[1]);
 	}
-	
+
 	/**
 	 * Initializes the images in the compare configuration.
 	 */
@@ -320,27 +320,27 @@
 			cc.setRightLabel(buildLabel(fRightResource));
 			cc.setRightImage(CompareUIPlugin.getImage(fRightResource));
 		}
-		if (fThreeWay && fAncestorResource != null) {			
+		if (fThreeWay && fAncestorResource != null) {
 			cc.setAncestorLabel(buildLabel(fAncestorResource));
 			cc.setAncestorImage(CompareUIPlugin.getImage(fAncestorResource));
 		}
 	}
-	
+
 	/*
 	 * Returns true if both resources are either structured or unstructured.
 	 */
 	private boolean comparable(IResource c1, IResource c2) {
 		return hasStructure(c1) == hasStructure(c2);
 	}
-	
+
 	/*
 	 * Returns true if the given argument has a structure.
 	 */
 	private boolean hasStructure(IResource input) {
-		
+
 		if (input instanceof IContainer)
 			return true;
-			
+
 		if (input instanceof IFile) {
 			IFile file= (IFile) input;
 			String type= file.getFileExtension();
@@ -349,20 +349,20 @@
 				return "JAR".equals(type) || "ZIP".equals(type);	//$NON-NLS-2$ //$NON-NLS-1$
 			}
 		}
-		
+
 		return false;
 	}
-	
+
 	/*
 	 * Creates a <code>IStructureComparator</code> for the given input.
 	 * Returns <code>null</code> if no <code>IStructureComparator</code>
 	 * can be found for the <code>IResource</code>.
 	 */
 	private IStructureComparator getStructure(IResource input) {
-		
+
 		if (input instanceof IContainer)
 			return new FilteredBufferedResourceNode(input);
-			
+
 		if (input instanceof IFile) {
 			IStructureComparator rn= new FilteredBufferedResourceNode(input);
 			IFile file= (IFile) input;
@@ -373,57 +373,57 @@
 		}
 		return null;
 	}
-	
+
 	/*
 	 * Performs a two-way or three-way diff on the current selection.
 	 */
 	public Object prepareInput(IProgressMonitor pm) throws InvocationTargetException {
-				
+
 		try {
-			// fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty							
+			// fix for PR 1GFMLFB: ITPUI:WIN2000 - files that are out of sync with the file system appear as empty
 			fLeftResource.refreshLocal(IResource.DEPTH_INFINITE, pm);
 			fRightResource.refreshLocal(IResource.DEPTH_INFINITE, pm);
 			if (fThreeWay && fAncestorResource != null)
 				fAncestorResource.refreshLocal(IResource.DEPTH_INFINITE, pm);
-			// end fix						
-				
+			// end fix
+
 			pm.beginTask(Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$
 
 			String leftLabel= fLeftResource.getName();
 			String rightLabel= fRightResource.getName();
-			
+
 			String title;
-			if (fThreeWay) {			
+			if (fThreeWay) {
 				String format= Utilities.getString("ResourceCompare.threeWay.title"); //$NON-NLS-1$
 				String ancestorLabel= fAncestorResource.getName();
-				title= MessageFormat.format(format, ancestorLabel, leftLabel, rightLabel);	
+				title= MessageFormat.format(format, ancestorLabel, leftLabel, rightLabel);
 			} else {
 				String format= Utilities.getString("ResourceCompare.twoWay.title"); //$NON-NLS-1$
 				title= MessageFormat.format(format, leftLabel, rightLabel);
 			}
 			setTitle(title);
-			
+
 			Differencer d= new Differencer() {
 				protected Object visit(Object parent, int description, Object ancestor, Object left, Object right) {
 					return new MyDiffNode((IDiffContainer) parent, description, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right);
 				}
 			};
-			
+
 			fRoot= d.findDifferences(fThreeWay, pm, null, fAncestor, fLeft, fRight);
 			return fRoot;
-			
+
 		} catch (CoreException ex) {
 			throw new InvocationTargetException(ex);
 		} finally {
 			pm.done();
 		}
 	}
-	
+
 	public String getToolTipText() {
 		if (fLeftResource != null && fRightResource != null) {
 			String leftLabel= fLeftResource.getFullPath().makeRelative().toString();
-			String rightLabel= fRightResource.getFullPath().makeRelative().toString();			
-			if (fThreeWay) {			
+			String rightLabel= fRightResource.getFullPath().makeRelative().toString();
+			if (fThreeWay) {
 				String format= Utilities.getString("ResourceCompare.threeWay.tooltip"); //$NON-NLS-1$
 				String ancestorLabel= fAncestorResource.getFullPath().makeRelative().toString();
 				return MessageFormat.format(format, ancestorLabel, leftLabel, rightLabel);
@@ -434,7 +434,7 @@
 		// fall back
 		return super.getToolTipText();
 	}
-	
+
 	private String buildLabel(IResource r) {
 		// for a linked resource in a hidden project use its local file system location
 		if (r.isLinked() && r.getProject().isHidden())
@@ -444,7 +444,7 @@
 			return n.substring(1);
 		return n;
 	}
-	
+
 	public void saveChanges(IProgressMonitor pm) throws CoreException {
 		super.saveChanges(pm);
 		if (fRoot instanceof DiffNode) {
@@ -452,24 +452,24 @@
 				commit(pm, (DiffNode) fRoot);
 			} finally {
 				if (fDiffViewer != null)
-					fDiffViewer.refresh();				
+					fDiffViewer.refresh();
 				setDirty(false);
 			}
 		}
 	}
-	
+
 	/*
 	 * Recursively walks the diff tree and commits all changes.
 	 */
 	private static void commit(IProgressMonitor pm, DiffNode node) throws CoreException {
-		
-		if (node instanceof MyDiffNode)		
+
+		if (node instanceof MyDiffNode)
 			((MyDiffNode)node).clearDirty();
-		
+
 		ITypedElement left= node.getLeft();
 		if (left instanceof BufferedResourceNode)
 			((BufferedResourceNode) left).commit(pm);
-			
+
 		ITypedElement right= node.getRight();
 		if (right instanceof BufferedResourceNode)
 			((BufferedResourceNode) right).commit(pm);
@@ -483,7 +483,7 @@
 			}
 		}
 	}
-	
+
 	/* (non Javadoc)
 	 * see IAdaptable.getAdapter
 	 */
@@ -504,11 +504,11 @@
 		}
 		return super.getAdapter(adapter);
 	}
-	
+
 	private void collectDirtyResources(Object o, Set collector) {
 		if (o instanceof DiffNode) {
 		    DiffNode node= (DiffNode) o;
-			
+
 			ITypedElement left= node.getLeft();
 			if (left instanceof BufferedResourceNode) {
 			    BufferedResourceNode bn= (BufferedResourceNode) left;
@@ -528,7 +528,7 @@
 			            collector.add(resource);
 			    }
 			}
-				
+
 			IDiffElement[] children= node.getChildren();
 			if (children != null) {
 				for (int i= 0; i < children.length; i++) {
@@ -539,13 +539,13 @@
 			}
 		}
 	}
-	
+
 	private static String normalizeCase(String s) {
 		if (NORMALIZE_CASE && s != null)
 			return s.toUpperCase();
 		return s;
 	}
-	
+
 	public boolean canRunAsJob() {
 		return true;
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java
index 02ce74f..ff56bd8 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ShowWhitespaceAction.java
@@ -58,7 +58,7 @@
 		fNeedsPainters = needsPainters;
 		synchronizeWithPreference();
 	}
-	
+
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.compare.internal.TextEditorPropertyAction#synchronizeWithPreference()
@@ -115,13 +115,13 @@
 		}
 		return true;
 	}
-	
+
 	private synchronized Map getPainters() {
 		if (fPainters == null)
 			fPainters = new HashMap();
 		return fPainters;
 	}
-	
+
 	private void showWhitespace() {
 		if (isWhitespaceShowing)
 			return;
@@ -147,7 +147,7 @@
 			isWhitespaceShowing = true;
 		}
 	}
-	
+
 	private void hideWhitespace() {
 		Map painters = getPainters();
 		for (Iterator iterator = painters.keySet().iterator(); iterator.hasNext();) {
@@ -161,5 +161,5 @@
 		painters.clear();
 		isWhitespaceShowing = false;
 	}
-		
+
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
index 12f86fc..64d4c6d 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/SimpleTextViewer.java
@@ -23,20 +23,20 @@
 
 
 public class SimpleTextViewer extends AbstractViewer {
-		
+
 	private SourceViewer fSourceViewer;
 	private ICompareInput fInput;
-	
-	
+
+
 	SimpleTextViewer(Composite parent) {
 		fSourceViewer= new SourceViewer(parent, null, SWT.H_SCROLL | SWT.V_SCROLL);
 		fSourceViewer.setEditable(false);
 	}
-		
+
 	public Control getControl() {
 		return fSourceViewer.getTextWidget();
 	}
-	
+
 	public void setInput(Object input) {
 		if (input instanceof IStreamContentAccessor) {
 			fSourceViewer.setDocument(new Document(getString(input)));
@@ -46,13 +46,13 @@
 			fSourceViewer.setDocument(new Document(getString(left)));
 		}
 	}
-	
+
 	public Object getInput() {
 		return fInput;
 	}
-	
+
 	private String getString(Object input) {
-		
+
 		if (input instanceof IStreamContentAccessor) {
 			try {
 				return Utilities.readString((IStreamContentAccessor) input);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/StructureCreatorDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/StructureCreatorDescriptor.java
index 3b6a194..551a253 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/StructureCreatorDescriptor.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/StructureCreatorDescriptor.java
@@ -19,12 +19,12 @@
  * A factory proxy for creating a StructureCreator.
  */
 public class StructureCreatorDescriptor {
-    
+
 	private final static String CLASS_ATTRIBUTE= "class"; //$NON-NLS-1$
 	private final static String EXTENSIONS_ATTRIBUTE= "extensions"; //$NON-NLS-1$
-    
+
 	private IConfigurationElement fElement;
-	
+
 	/*
 	 * Creates a new sorter node with the given configuration element.
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
index 07ed78a..1666212 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TabFolderLayout.java
@@ -22,7 +22,7 @@
 	protected Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache) {
 		if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT)
 			return new Point(wHint, hHint);
-			
+
 		Control [] children = composite.getChildren ();
 		int count = children.length;
 		int maxWidth = 0, maxHeight = 0;
@@ -32,19 +32,19 @@
 			maxWidth = Math.max (maxWidth, pt.x);
 			maxHeight = Math.max (maxHeight, pt.y);
 		}
-		
+
 		if (wHint != SWT.DEFAULT)
 			maxWidth= wHint;
 		if (hHint != SWT.DEFAULT)
 			maxHeight= hHint;
-		
-		return new Point(maxWidth, maxHeight);	
-		
+
+		return new Point(maxWidth, maxHeight);
+
 	}
-	
+
 	protected void layout (Composite composite, boolean flushCache) {
 		Rectangle rect= composite.getClientArea();
-	
+
 		Control[] children = composite.getChildren();
 		for (int i = 0; i < children.length; i++) {
 			children[i].setBounds(rect);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextEditorPropertyAction.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextEditorPropertyAction.java
index bf83fd2..2d4b971 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextEditorPropertyAction.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/TextEditorPropertyAction.java
@@ -22,7 +22,7 @@
 	private final MergeSourceViewer[] viewers;
 	private final String preferenceKey;
 	private IPreferenceStore store;
-	
+
 	public TextEditorPropertyAction(String label, MergeSourceViewer[] viewers, String preferenceKey) {
 		super(label, IAction.AS_CHECK_BOX);
 		this.viewers = viewers;
@@ -44,13 +44,13 @@
 	public MergeSourceViewer[] getViewers() {
 		return viewers;
 	}
-	
+
 	public void propertyChange(PropertyChangeEvent event) {
 		if (event.getProperty().equals(getPreferenceKey())) {
 			synchronizeWithPreference();
 		}
 	}
-	
+
 	protected void synchronizeWithPreference() {
 		boolean checked = false;
 		if (store != null) {
@@ -65,18 +65,18 @@
 	public String getPreferenceKey() {
 		return preferenceKey;
 	}
-	
+
 	public void run() {
 		toggleState(isChecked());
 		if (store != null)
 			store.setValue(getPreferenceKey(), isChecked());
 	}
-	
+
 	public void dispose() {
 		if (store != null)
 			store.removePropertyChangeListener(this);
 	}
-	
+
 	/**
 	 * @param checked
 	 *            new state
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
index 5145ef6..9c6b049 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/ViewerDescriptor.java
@@ -40,7 +40,7 @@
 			//System.out.println("reused viewer: " + currentViewer.getClass().getName());
 			return currentViewer;
 		}
-		
+
 		if (fViewerCreator == null) {
 			try {
 				fViewerCreator= (IViewerCreator) fConfiguration.createExecutableExtension(CLASS_ATTRIBUTE);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkQueue.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkQueue.java
index 43670e2..55b3a07 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkQueue.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkQueue.java
@@ -21,7 +21,7 @@
  * previous location and aded to the end of the queue.
  */
 public class WorkQueue {
-	
+
 	private List runnables = new ArrayList();
 
 	public boolean add(IRunnableWithProgress runnable) {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java
index 3582c1b..614ac02 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/Worker.java
@@ -34,7 +34,7 @@
 	private WorkProgressMonitor currentMonitor;
 	private IRunnableWithProgress currentTask;
 	private final String taskName;
-	
+
 	/**
 	 * Progress monitor that supports local cancellation of a task.
 	 */
@@ -54,11 +54,11 @@
 			return localCancel || super.isCanceled();
 		}
 	}
-	
+
 	public Worker(String taskName) {
 		this.taskName = taskName;
 	}
-	
+
 	@Override
 	public void run(IProgressMonitor monitor) {
 		errors.clear();
@@ -98,7 +98,7 @@
 	private void handleError(Throwable targetException) {
 		errors.add(targetException);
 	}
-	
+
 	public Throwable[] getErrors() {
 		return errors.toArray(new Throwable[errors.size()]);
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkerJob.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkerJob.java
index 04f107e..d25e52e 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkerJob.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/WorkerJob.java
@@ -20,7 +20,7 @@
 public class WorkerJob extends Job {
 
 	private final Worker worker;
-	
+
 	public WorkerJob(String name) {
 		super(name);
 		worker = new Worker(name);
@@ -33,7 +33,7 @@
 		schedule();
 		return result;
 	}
-	
+
 	private IStatus getResult(Worker w) {
 		Throwable[] errors = w.getErrors();
 		if (errors.length == 0)
@@ -47,11 +47,11 @@
 		}
 		return new MultiStatus(CompareUIPlugin.PLUGIN_ID, 0, (IStatus[]) statii.toArray(new IStatus[statii.size()]), CompareMessages.WorkerJob_0, null);
 	}
-	
+
 	public boolean shouldRun() {
 		return worker.hasWork();
 	}
-	
+
 	public void add(IRunnableWithProgress runnable) {
 		worker.add(runnable);
 		schedule();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java
index 43738a7..40c0fc6 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/DocumentMerger.java
@@ -55,27 +55,27 @@
 
 /**
  * A document merger manages the differences between two documents
- * for either a 2-way or 3-way comparison. 
+ * for either a 2-way or 3-way comparison.
  * <p>
  * This class should not have any UI dependencies.
  */
 public class DocumentMerger {
 
 	private static final String DIFF_RANGE_CATEGORY = CompareUIPlugin.PLUGIN_ID + ".DIFF_RANGE_CATEGORY"; //$NON-NLS-1$
-	
+
 	/** Selects between smartTokenDiff and mergingTokenDiff */
 	private static final boolean USE_MERGING_TOKEN_DIFF= false;
-	
+
 	/** if true copying conflicts from one side to other concatenates both sides */
 	private static final boolean APPEND_CONFLICT= true;
-	
+
 	/** All diffs for calculating scrolling position (includes line ranges without changes) */
 	private ArrayList fAllDiffs;
 	/** Subset of above: just real differences. */
 	private ArrayList fChangeDiffs;
-	
+
 	private IDocumentMergerInput fInput;
-	
+
 	/**
 	 * Interface that defines that input to the document merge process
 	 */
@@ -92,7 +92,7 @@
 		CompareConfiguration getCompareConfiguration();
 
 		ITokenComparator createTokenComparator(String s);
-		
+
 		boolean isHunkOnLeft();
 
 		int getHunkStart();
@@ -103,7 +103,7 @@
 
 		boolean isPatchHunkOk();
 	}
-	
+
 	public class Diff {
 		/** character range in ancestor document */
 		Position fAncestorPos;
@@ -112,7 +112,7 @@
 		/** character range in right document */
 		Position fRightPos;
 		/** if this is a TokenDiff fParent points to the enclosing LineDiff */
-		Diff fParent;	
+		Diff fParent;
 		/** if Diff has been resolved */
 		boolean fResolved;
 		int fDirection;
@@ -129,13 +129,13 @@
 							 IDocument rightDoc, Position rRange, int rightStart, int rightEnd) {
 			fParent= parent != null ? parent : this;
 			fDirection= dir;
-			
+
 			fLeftPos= createPosition(leftDoc, lRange, leftStart, leftEnd);
 			fRightPos= createPosition(rightDoc, rRange, rightStart, rightEnd);
 			if (ancestorDoc != null)
 				fAncestorPos= createPosition(ancestorDoc, aRange, ancestorStart, ancestorEnd);
 		}
-		
+
 		public Position getPosition(char type) {
 			switch (type) {
 			case MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR:
@@ -147,30 +147,30 @@
 			}
 			return null;
 		}
-		
+
 		boolean isInRange(char type, int pos) {
 			Position p= getPosition(type);
 			return (pos >= p.offset) && (pos < (p.offset+p.length));
 		}
-		
+
 		public String changeType() {
 			boolean leftEmpty= fLeftPos.length == 0;
 			boolean rightEmpty= fRightPos.length == 0;
-			
+
 			if (fDirection == RangeDifference.LEFT) {
 				if (!leftEmpty && rightEmpty)
-					return CompareMessages.TextMergeViewer_changeType_addition; 
+					return CompareMessages.TextMergeViewer_changeType_addition;
 				if (leftEmpty && !rightEmpty)
-					return CompareMessages.TextMergeViewer_changeType_deletion; 
+					return CompareMessages.TextMergeViewer_changeType_deletion;
 			} else {
 				if (leftEmpty && !rightEmpty)
-					return CompareMessages.TextMergeViewer_changeType_addition; 
+					return CompareMessages.TextMergeViewer_changeType_addition;
 				if (!leftEmpty && rightEmpty)
-					return CompareMessages.TextMergeViewer_changeType_deletion; 
+					return CompareMessages.TextMergeViewer_changeType_deletion;
 			}
-			return CompareMessages.TextMergeViewer_changeType_change; 
+			return CompareMessages.TextMergeViewer_changeType_change;
 		}
-		
+
 		public Image getImage() {
 			int code= Differencer.CHANGE;
 			switch (fDirection) {
@@ -189,27 +189,27 @@
 				return getCompareConfiguration().getImage(code);
 			return null;
 		}
-		
+
 		Position createPosition(IDocument doc, Position range, int start, int end) {
 			try {
 				int l= end-start;
 				if (range != null) {
 					int dl= range.length;
 					if (l > dl)
-						l= dl;					
+						l= dl;
 				} else {
 					int dl= doc.getLength();
 					if (start+l > dl)
 						l= dl-start;
 				}
-					
+
 				Position p= null;
 				try {
 					p= new Position(start, l);
 				} catch (RuntimeException ex) {
 					p= new Position(0, 0);
 				}
-				
+
 				try {
 					doc.addPosition(DIFF_RANGE_CATEGORY, p);
 				} catch (BadPositionCategoryException ex) {
@@ -227,13 +227,13 @@
 				fDiffs= new ArrayList<>();
 			fDiffs.add(d);
 		}
-		
+
 		public boolean isDeleted() {
 			if (fAncestorPos != null && fAncestorPos.isDeleted())
 				return true;
 			return fLeftPos.isDeleted() || fRightPos.isDeleted();
 		}
-		
+
 		void setResolved(boolean r) {
 			fResolved= r;
 			if (r)
@@ -252,7 +252,7 @@
 			}
 			return fResolved;
 		}
-		
+
 		Position getPosition(int contributor) {
 			if (contributor == MergeViewerContentProvider.LEFT_CONTRIBUTOR)
 				return fLeftPos;
@@ -262,7 +262,7 @@
 				return fAncestorPos;
 			return null;
 		}
-		
+
 		/*
 		 * Returns true if given character range overlaps with this Diff.
 		 */
@@ -278,7 +278,7 @@
 			}
 			return false;
 		}
-				
+
 		public int getMaxDiffHeight() {
 			Point region= new Point(0, 0);
 			int h= getLineRange(getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR), fLeftPos, region).y;
@@ -286,19 +286,19 @@
 				h= Math.max(h, getLineRange(getDocument(MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR), fAncestorPos, region).y);
 			return Math.max(h, getLineRange(getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR), fRightPos, region).y);
 		}
-		
+
 		public int getAncestorHeight() {
-			Point region= new Point(0, 0);			
+			Point region= new Point(0, 0);
 			return getLineRange(getDocument(MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR), fAncestorPos, region).y;
 		}
 
 		public int getLeftHeight() {
-			Point region= new Point(0, 0);			
+			Point region= new Point(0, 0);
 			return getLineRange(getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR), fLeftPos, region).y;
 		}
 
 		public int getRightHeight() {
-			Point region= new Point(0, 0);			
+			Point region= new Point(0, 0);
 			return getLineRange(getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR), fRightPos, region).y;
 		}
 
@@ -345,40 +345,40 @@
 			return fDiffs.iterator();
 		}
 	}
-	
+
 	public DocumentMerger(IDocumentMergerInput input) {
 		this.fInput = input;
 	}
-	
+
 	/**
 	 * Perform a two level 2- or 3-way diff.
 	 * The first level is based on line comparison, the second level on token comparison.
-	 * @throws CoreException 
+	 * @throws CoreException
 	 */
 	public void doDiff() throws CoreException {
-						
+
 		fChangeDiffs= new ArrayList();
 		IDocument lDoc = getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR);
 		IDocument rDoc = getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR);
-		
+
 		if (lDoc == null || rDoc == null)
 			return;
-			
+
 		Position lRegion= getRegion(MergeViewerContentProvider.LEFT_CONTRIBUTOR);
 		Position rRegion= getRegion(MergeViewerContentProvider.RIGHT_CONTRIBUTOR);
-		
+
 		IDocument aDoc = null;
 		Position aRegion= null;
 		if (isThreeWay() && !isIgnoreAncestor()) {
 			aDoc= getDocument(MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR);
 			aRegion= getRegion(MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR);
 		}
-		
+
 		resetPositions(lDoc);
 		resetPositions(rDoc);
 		resetPositions(aDoc);
-		
-		boolean ignoreWhiteSpace= isIgnoreWhitespace();		
+
+		boolean ignoreWhiteSpace= isIgnoreWhitespace();
 		ICompareFilter[] compareFilters = getCompareFilters();
 
 		DocLineComparator sright = new DocLineComparator(rDoc,
@@ -418,7 +418,7 @@
 				monitor.done();
 			}
 		};
-		
+
 		RangeDifference[] e= null;
 		try {
 			getCompareConfiguration().getContainer().run(true, true, runnable);
@@ -428,8 +428,8 @@
 			Diff diff= new Diff(null, RangeDifference.NOCHANGE,
 				aDoc, aRegion, 0, aDoc != null ? aDoc.getLength() : 0,
 				lDoc, lRegion, 0, lDoc.getLength(),
-				rDoc, rRegion, 0, rDoc.getLength());	
-				
+				rDoc, rRegion, 0, rDoc.getLength());
+
 			fAllDiffs = new ArrayList();
 			fAllDiffs.add(diff);
 			throw new CoreException(new Status(IStatus.ERROR, CompareUIPlugin.PLUGIN_ID, 0, CompareMessages.DocumentMerger_1, ex.getTargetException()));
@@ -438,8 +438,8 @@
 			Diff diff= new Diff(null, RangeDifference.NOCHANGE,
 				aDoc, aRegion, 0, aDoc != null ? aDoc.getLength() : 0,
 				lDoc, lRegion, 0, lDoc.getLength(),
-				rDoc, rRegion, 0, rDoc.getLength());	
-				
+				rDoc, rRegion, 0, rDoc.getLength());
+
 			fAllDiffs = new ArrayList();
 			fAllDiffs.add(diff);
 			return;
@@ -457,17 +457,17 @@
 		ArrayList newAllDiffs = new ArrayList();
 		for (int i= 0; i < e.length; i++) {
 			RangeDifference es= e[i];
-			
+
 			int ancestorStart= 0;
 			int ancestorEnd= 0;
 			if (sancestor != null) {
 				ancestorStart= sancestor.getTokenStart(es.ancestorStart());
 				ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength());
 			}
-			
+
 			int leftStart= sleft.getTokenStart(es.leftStart());
 			int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength());
-			
+
 			int rightStart= sright.getTokenStart(es.rightStart());
 			int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength());
 
@@ -482,32 +482,32 @@
 			Diff diff= new Diff(null, es.kind(),
 				aDoc, aRegion, ancestorStart, ancestorEnd,
 				lDoc, lRegion, leftStart, leftEnd,
-				rDoc, rRegion, rightStart, rightEnd);	
-			
+				rDoc, rRegion, rightStart, rightEnd);
+
 			newAllDiffs.add(diff);	// remember all range diffs for scrolling
-	
+
 			if (isPatchHunk()) {
 				if (useChange(diff)) {
 					recordChangeDiff(diff);
 				}
 			} else {
 				if (ignoreWhiteSpace || useChange(es.kind())) {
-					
+
 					// Extract the string for each contributor.
 					String a= null;
 					if (sancestor != null)
 						a= extract2(aDoc, sancestor, es.ancestorStart(), es.ancestorLength());
 					String s= extract2(lDoc, sleft, es.leftStart(), es.leftLength());
 					String d= extract2(rDoc, sright, es.rightStart(), es.rightLength());
-				
+
 					// Indicate whether all contributors are whitespace
-					if (ignoreWhiteSpace 
-							&& (a == null || a.trim().length() == 0) 
-							&& s.trim().length() == 0 
+					if (ignoreWhiteSpace
+							&& (a == null || a.trim().length() == 0)
+							&& s.trim().length() == 0
 							&& d.trim().length() == 0) {
 						diff.fIsWhitespace= true;
 					}
-					
+
 					// If the diff is of interest, record it and generate the token diffs
 					if (useChange(diff)) {
 						recordChangeDiff(diff);
@@ -541,31 +541,31 @@
 	}
 
 	public Diff findDiff(char type, int pos) throws CoreException {
-		
+
 		IDocument aDoc= null;
 		IDocument lDoc= getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR);
 		IDocument rDoc= getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR);
 		if (lDoc == null || rDoc == null)
 			return null;
-			
+
 		Position aRegion= null;
 		Position lRegion= null;
 		Position rRegion= null;
-				
+
 		boolean threeWay= isThreeWay();
-		
+
 		if (threeWay && !isIgnoreAncestor())
 			aDoc= getDocument(MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR);
 
 		boolean ignoreWhiteSpace= isIgnoreWhitespace();
 		ICompareFilter[] compareFilters = getCompareFilters();
 
-		DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace, compareFilters, MergeViewerContentProvider.RIGHT_CONTRIBUTOR);		
+		DocLineComparator sright= new DocLineComparator(rDoc, toRegion(rRegion), ignoreWhiteSpace, compareFilters, MergeViewerContentProvider.RIGHT_CONTRIBUTOR);
 		DocLineComparator sleft= new DocLineComparator(lDoc, toRegion(lRegion), ignoreWhiteSpace, compareFilters, MergeViewerContentProvider.LEFT_CONTRIBUTOR);
 		DocLineComparator sancestor= null;
 		if (aDoc != null)
 			sancestor= new DocLineComparator(aDoc, toRegion(aRegion), ignoreWhiteSpace, compareFilters, MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR);
-			
+
 		final Object[] result= new Object[1];
 		final DocLineComparator sa= sancestor, sl= sleft, sr= sright;
 		IRunnableWithProgress runnable= new IRunnableWithProgress() {
@@ -584,7 +584,7 @@
 			}
 		};
 		IProgressService progressService= PlatformUI.getWorkbench().getProgressService();
-		
+
 		RangeDifference[] e= null;
 		try {
 			progressService.run(true, true, runnable);
@@ -592,45 +592,45 @@
 		} catch (InvocationTargetException ex) {
 			throw new CoreException(new Status(IStatus.ERROR, CompareUIPlugin.PLUGIN_ID, 0, CompareMessages.DocumentMerger_3, ex.getTargetException()));
 		} catch (InterruptedException ex) {
-			// 
+			//
 		}
-					
+
 		if (e != null) {
 			for (int i= 0; i < e.length; i++) {
 				RangeDifference es= e[i];
-				
+
 				int kind= es.kind();
-				
+
 				int ancestorStart= 0;
 				int ancestorEnd= 0;
 				if (sancestor != null) {
 					ancestorStart= sancestor.getTokenStart(es.ancestorStart());
 					ancestorEnd= getTokenEnd2(sancestor, es.ancestorStart(), es.ancestorLength());
 				}
-				
+
 				int leftStart= sleft.getTokenStart(es.leftStart());
 				int leftEnd= getTokenEnd2(sleft, es.leftStart(), es.leftLength());
-				
+
 				int rightStart= sright.getTokenStart(es.rightStart());
 				int rightEnd= getTokenEnd2(sright, es.rightStart(), es.rightLength());
-				
+
 				Diff diff= new Diff(null, kind,
 					aDoc, aRegion, ancestorStart, ancestorEnd,
 					lDoc, lRegion, leftStart, leftEnd,
-					rDoc, rRegion, rightStart, rightEnd);	
+					rDoc, rRegion, rightStart, rightEnd);
 
 				if (diff.isInRange(type, pos))
 					return diff;
 			}
 		}
-		
+
 		return null;
 	}
-	
+
 	private void recordChangeDiff(Diff diff) {
 		fChangeDiffs.add(diff);	// here we remember only the real diffs
 	}
-	
+
 	/*private boolean isHunkOnLeft() {
 		return fInput.isHunkOnLeft();
 	}
@@ -678,7 +678,7 @@
 	public CompareConfiguration getCompareConfiguration() {
 		return fInput.getCompareConfiguration();
 	}
-	
+
 	/*
 	 * Returns true if kind of change should be shown.
 	 */
@@ -698,18 +698,18 @@
 			return fInput.isShowPseudoConflicts();
 		return true;
 	}
-	
+
 	private int getTokenEnd(ITokenComparator tc, int start, int count) {
 		if (count <= 0)
 			return tc.getTokenStart(start);
 		int index= start + count - 1;
 		return tc.getTokenStart(index) + tc.getTokenLength(index);
 	}
-	
+
 	private static int getTokenEnd2(ITokenComparator tc, int start, int length) {
 		return tc.getTokenStart(start + length);
 	}
-	
+
 	/**
 	 * Returns the content of lines in the specified range as a String.
 	 * This includes the line separators.
@@ -722,19 +722,19 @@
 	private String extract2(IDocument doc, ITokenComparator tc, int start, int length) {
 		int count= tc.getRangeCount();
 		if (length > 0 && count > 0) {
-			
-//			
+
+//
 //			int startPos= tc.getTokenStart(start);
 //			int endPos= startPos;
-//			
+//
 //			if (length > 1)
 //				endPos= tc.getTokenStart(start + (length-1));
 //			endPos+= tc.getTokenLength(start + (length-1));
-//				
+//
 
 			int startPos= tc.getTokenStart(start);
 			int endPos;
-			
+
 			if (length == 1) {
 				endPos= startPos + tc.getTokenLength(start);
 			} else {
@@ -750,18 +750,18 @@
 		}
 		return ""; //$NON-NLS-1$
 	}
-	
+
 	private static IRegion toRegion(Position position) {
 		if (position != null)
 			return new Region(position.getOffset(), position.getLength());
 		return null;
 	}
-	
+
 	/*
 	 * Performs a "smart" token based 3-way diff on the character range specified by the given baseDiff.
 	 * It is "smart" because it tries to minimize the number of token diffs by merging them.
 	 */
-	private void mergingTokenDiff(Diff baseDiff, 
+	private void mergingTokenDiff(Diff baseDiff,
 				IDocument ancestorDoc, String a,
 				IDocument rightDoc, String d,
 				IDocument leftDoc, String s) {
@@ -771,13 +771,13 @@
 			sa= createTokenComparator(a);
 			ancestorStart= baseDiff.fAncestorPos.getOffset();
 		}
-		
-		int rightStart= baseDiff.fRightPos.getOffset();	
+
+		int rightStart= baseDiff.fRightPos.getOffset();
 		ITokenComparator sm= createTokenComparator(d);
-		
+
 		int leftStart= baseDiff.fLeftPos.getOffset();
 		ITokenComparator sy= createTokenComparator(s);
-		
+
 		RangeDifference[] r= RangeDifferencer.findRanges(sa, sy, sm);
 		for (int i= 0; i < r.length; i++) {
 			RangeDifference  es= r[i];
@@ -804,7 +804,7 @@
 				}
 			}
 			int end= i;
-			
+
 			// find first diff from left
 			RangeDifference first= null;
 			for (int ii= start; ii < end; ii++) {
@@ -814,7 +814,7 @@
 					break;
 				}
 			}
-			
+
 			// find first diff from mine
 			RangeDifference last= null;
 			for (int ii= end-1; ii >= start; ii--) {
@@ -824,31 +824,31 @@
 					break;
 				}
 			}
-			
+
 			if (first != null && last != null) {
-				
+
 				int ancestorStart2= 0;
 				int ancestorEnd2= 0;
 				if (ancestorDoc != null) {
 					ancestorStart2= ancestorStart+sa.getTokenStart(first.ancestorStart());
 					ancestorEnd2= ancestorStart+getTokenEnd(sa, last.ancestorStart(), last.ancestorLength());
 				}
-				
+
 				int leftStart2= leftStart+sy.getTokenStart(first.leftStart());
 				int leftEnd2= leftStart+getTokenEnd(sy, last.leftStart(), last.leftLength());
-				
+
 				int rightStart2= rightStart+sm.getTokenStart(first.rightStart());
 				int rightEnd2= rightStart+getTokenEnd(sm, last.rightStart(), last.rightLength());
 				Diff diff= new Diff(baseDiff, first.kind(),
 							ancestorDoc, null, ancestorStart2, ancestorEnd2,
 							leftDoc, null, leftStart2, leftEnd2,
-							rightDoc, null, rightStart2, rightEnd2);	
+							rightDoc, null, rightStart2, rightEnd2);
 				diff.fIsToken= true;
 				baseDiff.add(diff);
 			}
 		}
 	}
-	
+
 	/*
 	 * Performs a token based 3-way diff on the character range specified by the given baseDiff.
 	 */
@@ -863,37 +863,37 @@
 			ancestorStart= baseDiff.fAncestorPos.getOffset();
 			sa= createTokenComparator(a);
 		}
-		
-		int rightStart= baseDiff.fRightPos.getOffset();	
+
+		int rightStart= baseDiff.fRightPos.getOffset();
 		ITokenComparator sm= createTokenComparator(d);
-		
+
 		int leftStart= baseDiff.fLeftPos.getOffset();
 		ITokenComparator sy= createTokenComparator(s);
-		
+
 		RangeDifference[] e= RangeDifferencer.findRanges(sa, sy, sm);
 		for (int i= 0; i < e.length; i++) {
 			RangeDifference es= e[i];
 			int kind= es.kind();
 			if (kind != RangeDifference.NOCHANGE) {
-				
+
 				int ancestorStart2= ancestorStart;
 				int ancestorEnd2= ancestorStart;
 				if (ancestorDoc != null) {
 					ancestorStart2 += sa.getTokenStart(es.ancestorStart());
 					ancestorEnd2 += getTokenEnd(sa, es.ancestorStart(), es.ancestorLength());
 				}
-				
+
 				int leftStart2= leftStart + sy.getTokenStart(es.leftStart());
 				int leftEnd2= leftStart + getTokenEnd(sy, es.leftStart(), es.leftLength());
-				
+
 				int rightStart2= rightStart + sm.getTokenStart(es.rightStart());
 				int rightEnd2= rightStart + getTokenEnd(sm, es.rightStart(), es.rightLength());
-				
+
 				Diff diff= new Diff(baseDiff, kind,
 						ancestorDoc, null, ancestorStart2, ancestorEnd2,
 						leftDoc, null, leftStart2, leftEnd2,
 						rightDoc, null, rightStart2, rightEnd2);
-				
+
 				// ensure that token diff is smaller than basediff
 				int leftS= baseDiff.fLeftPos.offset;
 				int leftE= baseDiff.fLeftPos.offset+baseDiff.fLeftPos.length;
@@ -908,11 +908,11 @@
 			}
 		}
 	}
-	
+
 	private ITokenComparator createTokenComparator(String s) {
 		return fInput.createTokenComparator(s);
 	}
-	
+
 	private static int maxWork(IRangeComparator a, IRangeComparator l, IRangeComparator r) {
 		int ln= l.getRangeCount();
 		int rn= r.getRangeCount();
@@ -922,7 +922,7 @@
 		}
 		return 2 * Math.max(ln, rn);
 	}
-	
+
 	private void resetPositions(IDocument doc) {
 		if (doc == null)
 			return;
@@ -939,25 +939,25 @@
 	 * Starting line number is 0 based.
 	 */
 	protected Point getLineRange(IDocument doc, Position p, Point region) {
-		
+
 		if (p == null || doc == null) {
 			region.x= 0;
 			region.y= 0;
 			return region;
 		}
-		
+
 		int start= p.getOffset();
 		int length= p.getLength();
-		
+
 		int startLine= 0;
 		try {
 			startLine= doc.getLineOfOffset(start);
 		} catch (BadLocationException e) {
 			// silently ignored
 		}
-		
+
 		int lineCount= 0;
-		
+
 		if (length == 0) {
 //			// if range length is 0 and if range starts a new line
 //			try {
@@ -967,7 +967,7 @@
 //			} catch (BadLocationException e) {
 //				lines--;
 //			}
-			
+
 		} else {
 			int endLine= 0;
 			try {
@@ -977,12 +977,12 @@
 			}
 			lineCount= endLine-startLine+1;
 		}
-				
+
 		region.x= startLine;
 		region.y= lineCount;
 		return region;
 	}
-	
+
     public Diff findDiff(Position p, boolean left) {
 		for (Iterator iterator = fAllDiffs.iterator(); iterator.hasNext();) {
 			Diff diff = (Diff) iterator.next();
@@ -1006,7 +1006,7 @@
 		fChangeDiffs= null;
 		fAllDiffs= null;
 	}
-	
+
 	/**
 	 * Returns the virtual position for the given view position.
 	 * @param contributor
@@ -1017,11 +1017,11 @@
 
 		if (fAllDiffs == null)
 			return vpos;
-				
+
 		int viewPos= 0;		// real view position
 		int virtualPos= 0;	// virtual position
 		Point region= new Point(0, 0);
-		
+
 		Iterator e= fAllDiffs.iterator();
 		while (e.hasNext()) {
 			Diff diff= (Diff) e.next();
@@ -1043,22 +1043,22 @@
 		}
 		return virtualPos;
 	}
-	
+
 	/**
-	 * maps given virtual position into a real view position of this view. 
+	 * maps given virtual position into a real view position of this view.
 	 * @param contributor
 	 * @param v
 	 * @return the real view position
 	 */
 	public int virtualToRealPosition(char contributor, int v) {
-			
+
 		if (fAllDiffs == null)
 			return v;
-					
+
 		int virtualPos= 0;
 		int viewPos= 0;
 		Point region= new Point(0, 0);
-		
+
 		Iterator e= fAllDiffs.iterator();
 		while (e.hasNext()) {
 			Diff diff= (Diff) e.next();
@@ -1079,7 +1079,7 @@
 		}
 		return viewPos;
 	}
-	
+
 	/*
 	 * Calculates virtual height (in lines) of views by adding the maximum of corresponding diffs.
 	 */
@@ -1094,7 +1094,7 @@
 		}
 		return h;
 	}
-	
+
 	/*
 	 * Calculates height (in lines) of right view by adding the height of the right diffs.
 	 */
@@ -1109,7 +1109,7 @@
 		}
 		return h;
 	}
-	
+
 	public int findInsertionPoint(Diff diff, char type) {
 		if (diff != null) {
 			switch (type) {
@@ -1129,7 +1129,7 @@
 		}
 		return 0;
 	}
-	
+
 	public Diff[] getChangeDiffs(char contributor, IRegion region) {
 		if (fChangeDiffs == null)
 			return new Diff[0];
@@ -1144,12 +1144,12 @@
 		}
 		return (Diff[]) intersectingDiffs.toArray(new Diff[intersectingDiffs.size()]);
 	}
-	
+
 	public Diff findDiff(int viewportHeight, boolean synchronizedScrolling, Point size, int my) {
-		int virtualHeight= synchronizedScrolling ? getVirtualHeight() : getRightHeight();		
+		int virtualHeight= synchronizedScrolling ? getVirtualHeight() : getRightHeight();
 		if (virtualHeight < viewportHeight)
 			return null;
-		
+
 		int yy, hh;
 		int y= 0;
 		if (fAllDiffs != null) {
@@ -1159,12 +1159,12 @@
 				int h= synchronizedScrolling ? diff.getMaxDiffHeight()
 											  : diff.getRightHeight();
 				if (useChange(diff.getKind()) && !diff.fIsWhitespace) {
-									
+
 					yy= (y*size.y)/virtualHeight;
 					hh= (h*size.y)/virtualHeight;
 					if (hh < 3)
 						hh= 3;
-						
+
 					if (my >= yy && my < yy+hh)
 						return diff;
 				}
@@ -1177,19 +1177,19 @@
 	public boolean hasChanges() {
 		return fChangeDiffs != null && !fChangeDiffs.isEmpty();
 	}
-	
+
 	public Iterator changesIterator() {
 		if (fChangeDiffs == null)
 			return new ArrayList().iterator();
 		return fChangeDiffs.iterator();
 	}
-	
+
 	public Iterator rangesIterator() {
 		if (fAllDiffs == null)
 			return new ArrayList().iterator();
 		return fAllDiffs.iterator();
 	}
-	
+
 	public boolean isFirstChildDiff(char contributor, int childStart, Diff diff) {
 		if (!diff.hasChildren())
 			return false;
@@ -1197,7 +1197,7 @@
 		Position p= d.getPosition(contributor);
 		return (p.getOffset() >= childStart);
 	}
-	
+
 	public Diff getWrappedDiff(Diff diff, boolean down) {
 		if (fChangeDiffs != null && fChangeDiffs.size() > 0) {
 			if (down)
@@ -1206,14 +1206,14 @@
 		}
 		return null;
 	}
-	
+
 	/*
 	 * Copy the contents of the given diff from one side to the other but
 	 * doesn't reveal anything.
 	 * Returns true if copy was successful.
 	 */
 	public boolean copy(Diff diff, boolean leftToRight) {
-		
+
 		if (diff != null) {
 			Position fromPos= null;
 			Position toPos= null;
@@ -1231,18 +1231,18 @@
 				fromDoc= getDocument(MergeViewerContentProvider.RIGHT_CONTRIBUTOR);
 				toDoc= getDocument(MergeViewerContentProvider.LEFT_CONTRIBUTOR);
 			}
-			
+
 			if (fromDoc != null) {
-				
+
 				int fromStart= fromPos.getOffset();
 				int fromLen= fromPos.getLength();
-				
+
 				int toStart= toPos.getOffset();
 				int toLen= toPos.getLength();
 
 				try {
 					String s= null;
-											
+
 					switch (diff.getKind()) {
 					case RangeDifference.RIGHT:
 					case RangeDifference.LEFT:
@@ -1262,16 +1262,16 @@
 						break;
 					}
 					if (s != null) {
-						toDoc.replace(toStart, toLen, s);						
+						toDoc.replace(toStart, toLen, s);
 						toPos.setOffset(toStart);
 						toPos.setLength(s.length());
-					}	
-				
+					}
+
 				} catch (BadLocationException e) {
 					// silently ignored
 				}
 			}
-		
+
 			diff.setResolved(true);
 			return true;
 		}
@@ -1283,7 +1283,7 @@
 			return 0;
 		return fChangeDiffs.size();
 	}
-	
+
 	public Diff findDiff(char contributor, int rangeStart, int rangeEnd) {
 		if (hasChanges()) {
 			for (Iterator iterator = changesIterator(); iterator.hasNext();) {
@@ -1296,17 +1296,17 @@
 		}
 		return null;
 	}
-	
+
 	public Diff findDiff(char contributor, Position range) {
 		int start= range.getOffset();
 		int end= start + range.getLength();
 		return findDiff(contributor, start, end);
 	}
-	
+
 	public Diff findNext(char contributor, int start, int end, boolean deep) {
 		return findNext(contributor, fChangeDiffs, start, end, deep);
 	}
-	
+
 	private Diff findNext(char contributor, List v, int start, int end, boolean deep) {
 		if (v == null)
 			return null;
@@ -1332,11 +1332,11 @@
 		}
 		return null;
 	}
-	
+
 	public Diff findPrev(char contributor, int start, int end, boolean deep) {
 		return findPrev(contributor, fChangeDiffs, start, end, deep);
 	}
-	
+
 	private Diff findPrev(char contributor, List v, int start, int end, boolean deep) {
 		if (v == null)
 			return null;
@@ -1359,7 +1359,7 @@
 						// A whole diff is selected so we'll fall through
 						// and go the the last change in the previous diff
 					} else if (start >= startOffset) {
-						// If we are at or before the first diff, select the 
+						// If we are at or before the first diff, select the
 						// entire diff so next and previous are symmetrical
 						if (isFirstChildDiff(contributor, start, diff)) {
 							return diff;
@@ -1373,5 +1373,5 @@
 		}
 		return null;
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/LineComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/LineComparator.java
index 7fb8c43..c5fd8ba 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/LineComparator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/LineComparator.java
@@ -22,7 +22,7 @@
     private String[] fLines;
 
     public LineComparator(InputStream is, String encoding) throws IOException {
-        
+
         BufferedReader br = new BufferedReader(new InputStreamReader(is, encoding));
         String line;
         ArrayList ar = new ArrayList();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/TextStreamMerger.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/TextStreamMerger.java
index 7f91e21..0616aae 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/TextStreamMerger.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/merge/TextStreamMerger.java
@@ -29,7 +29,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.compare.internal.merge.IAutoMerger#automerge(java.io.OutputStream,
 	 *      org.eclipse.core.resources.IEncodedStorage,
 	 *      org.eclipse.core.resources.IEncodedStorage,
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/DecoratorOverlayIcon.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/DecoratorOverlayIcon.java
index 325b1f9..75cfe75 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/DecoratorOverlayIcon.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/DecoratorOverlayIcon.java
@@ -4,7 +4,7 @@
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
  *  http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  *  Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -34,7 +34,7 @@
 
     /**
      * OverlayIcon constructor.
-     * 
+     *
      * @param baseImage the base image
      * @param overlaysArray the overlay images
      * @param sizeValue the size
@@ -112,7 +112,7 @@
     protected Point getSize() {
         return size;
     }
-    
+
     /* (non-Javadoc)
      * @see org.eclipse.jface.resource.CompositeImageDescriptor#getTransparentPixel()
      */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/FilePatch.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/FilePatch.java
index 871fd0b..e8e873a 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/FilePatch.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/FilePatch.java
@@ -27,7 +27,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.compare.patch.IFilePatch#apply(org.eclipse.core.resources
 	 * .IStorage, org.eclipse.compare.patch.PatchConfiguration,
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java
index 9e892a7..8053061 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkDiffNode.java
@@ -23,11 +23,11 @@
 	public static HunkDiffNode createDiffNode(PatchFileDiffNode parent, HunkResult result, boolean fullContext) {
 		return createDiffNode(parent, result, fullContext, fullContext, fullContext);
 	}
-	
+
 	public static HunkDiffNode createDiffNode(PatchFileDiffNode parent, HunkResult result, boolean ancestorFullContext, boolean leftFullContext, boolean rightFullContext) {
 		return new HunkDiffNode(result, parent, Differencer.CHANGE, getAncestorElement(result, ancestorFullContext), getLeftElement(result, leftFullContext), getRightElement(result, rightFullContext));
 	}
-	
+
 	public static ITypedElement getRightElement(HunkResult result, boolean fullContext) {
 		return new HunkTypedElement(result, true /* isResult */, fullContext);
 	}
@@ -72,11 +72,11 @@
 		}
 		return false;
 	}
-	
+
 	public boolean isFuzzUsed() {
 		return result.getFuzz() > 0;
 	}
-	
+
 	public boolean isAllContextIgnored() {
 		int fuzz = result.getFuzz();
 		if (fuzz > 0) {
@@ -97,7 +97,7 @@
 			if (contextLines > 0 && fuzz >= contextLines) {
 				return true;
 			}
-			
+
 		}
 		return false;
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkTypedElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkTypedElement.java
index 07b35c4..65eb612 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkTypedElement.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/HunkTypedElement.java
@@ -54,7 +54,7 @@
 	public static Image getHunkErrorImage(Image baseImage, LocalResourceManager imageCache, boolean onLeft) {
 		return getHunkOverlayImage(baseImage, imageCache, ICompareUIConstants.ERROR_OVERLAY, onLeft);
 	}
-	
+
 	private static Image getHunkOverlayImage(Image baseImage, LocalResourceManager imageCache, String path, boolean onLeft) {
 		ImageDescriptor desc = new DiffImageDescriptor(baseImage, CompareUIPlugin.getImageDescriptor(path), ICompareUIConstants.COMPARE_IMAGE_WIDTH, onLeft);
 		Image image = imageCache.createImage(desc);
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
index 73b8d60..f3d8224 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/InputPatchPage.java
@@ -85,14 +85,14 @@
 	// constants
 	protected static final int SIZING_TEXT_FIELD_WIDTH= 250;
 	protected static final int COMBO_HISTORY_LENGTH= 5;
-	
+
 	// dialog store id constants
-	private final static String PAGE_NAME= "PatchWizardPage1"; //$NON-NLS-1$  
+	private final static String PAGE_NAME= "PatchWizardPage1"; //$NON-NLS-1$
 	private final static String STORE_PATCH_FILES_ID= PAGE_NAME+".PATCH_FILES"; //$NON-NLS-1$
 	private final static String STORE_PATCH_URLS_ID= PAGE_NAME+".PATCH_URLS"; //$NON-NLS-1$
 	private final static String STORE_INPUT_METHOD_ID= PAGE_NAME+".INPUT_METHOD"; //$NON-NLS-1$
 	private final static String STORE_WORKSPACE_PATH_ID= PAGE_NAME+".WORKSPACE_PATH"; //$NON-NLS-1$
-	
+
 	//patch input constants
 	protected final static int CLIPBOARD= 1;
 	protected final static int FILE= 2;
@@ -119,7 +119,7 @@
 	private Combo fPatchURLField;
 	private Label fWorkspaceSelectLabel;
 	private TreeViewer fTreeViewer;
-	
+
 	class ActivationListener extends ShellAdapter {
 		public void shellActivated(ShellEvent e) {
 			// allow error messages if the selected input actually has something selected in it
@@ -138,13 +138,13 @@
 			updateWidgetEnablements();
 		}
 	}
-	
+
 	public InputPatchPage(PatchWizard pw) {
 		super(INPUTPATCHPAGE_NAME, PatchMessages.InputPatchPage_title, null);
 		fPatchWizard= pw;
 		setMessage(PatchMessages.InputPatchPage_message);
 	}
-	
+
 	/*
 	 * Get a path from the supplied text widget.
 	 * @return org.eclipse.core.runtime.IPath
@@ -158,34 +158,34 @@
 			return PatchMessages.InputPatchPage_Clipboard;
 		return getPatchFilePath();
 	}
-	
+
 	public void createControl(Composite parent) {
-				
+
 		Composite composite= new Composite(parent, SWT.NULL);
 		composite.setLayout(new GridLayout());
 		composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
 		setControl(composite);
 
 		initializeDialogUnits(parent);
-		
+
 		buildPatchFileGroup(composite);
-		
-		// by default, whatever was used last was selected or 
+
+		// by default, whatever was used last was selected or
 		// default to File if nothing has been selected
 		restoreWidgetValues();
-		
+
 		// see if there are any better options presently selected (i.e workspace
 		// or clipboard or URL from clipboard)
 		adjustToCurrentTarget();
-		
+
 		// No error for dialog opening
 		fShowError= false;
 		clearErrorMessage();
 		updateWidgetEnablements();
-		
+
 		Shell shell= getShell();
 		shell.addShellListener(fActivationListener);
-		
+
 		Dialog.applyDialogFont(composite);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE);
 	}
@@ -194,7 +194,7 @@
 	 * Returns the next page depending on what type of patch is being applied:
 	 * 	 i) If the patch is a Workspace patch then it will proceed right to the PreviewPatchPage
 	 *  ii) If the patch is a single project patch then it will proceed to the PatchTargetPage, which
-	 *      allows the user to specify where to root the patch 
+	 *      allows the user to specify where to root the patch
 	 * @return PreviewPatchPage if multi-project patch, PatchTargetPage if single project patch
 	 */
 	public IWizardPage getNextPage() {
@@ -202,13 +202,13 @@
 			return this;
 
 		WorkspacePatcher patcher= ((PatchWizard) getWizard()).getPatcher();
-		
+
 		// guess prefix count
 		int guess= 0; // guessPrefix(diffs);
 		patcher.setStripPrefixSegments(guess);
 
-		// If this is a workspace patch we don't need to set a target as the targets will be figured out from 
-		// all of the projects that make up the patch and continue on to final preview page 
+		// If this is a workspace patch we don't need to set a target as the targets will be figured out from
+		// all of the projects that make up the patch and continue on to final preview page
 		if (patcher.isWorkspacePatch()) {
 			// skip 'Patch Target' page
 			IWizardPage page = super.getNextPage();
@@ -276,8 +276,8 @@
 						reader= new FileReader(patchFilePath);
 					} catch (FileNotFoundException ex) {
 						MessageDialog.openError(null,
-							PatchMessages.InputPatchPage_PatchErrorDialog_title,	
-							PatchMessages.InputPatchPage_PatchFileNotFound_message); 
+							PatchMessages.InputPatchPage_PatchErrorDialog_title,
+							PatchMessages.InputPatchPage_PatchFileNotFound_message);
 					}
 				}
 				fPatchSource= PatchMessages.InputPatchPage_PatchFile_title;
@@ -313,7 +313,7 @@
 				}
 				fPatchSource= PatchMessages.InputPatchPage_WorkspacePatch_title;
 			}
-			
+
 			// parse the input
 			if (reader != null) {
 				try {
@@ -345,7 +345,7 @@
 		// the next page is quite expensive. So we say yes if the page is complete.
 		return isPageComplete();
 	}
-	
+
 	private void setEnablePatchFile(boolean enable) {
 		fPatchFileNameField.setEnabled(enable);
 		fPatchFileBrowseButton.setEnabled(enable);
@@ -417,7 +417,7 @@
 			public void widgetSelected(SelectionEvent e) {
 				if (!fUseClipboardButton.getSelection())
 					return;
-				
+
 				clearErrorMessage();
 				fShowError= true;
 				int state= getInputMethod();
@@ -425,10 +425,10 @@
 				setEnableURLPatch(state == URL);
 				setEnableWorkspacePatch(state == WORKSPACE);
 				updateWidgetEnablements();
-				fPatchRead = false; 
+				fPatchRead = false;
 			}
 		});
-		
+
 		fUsePatchFileButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				if (!fUsePatchFileButton.getSelection())
@@ -441,7 +441,7 @@
 				setEnableURLPatch(state == URL);
 				setEnableWorkspacePatch(state == WORKSPACE);
 				updateWidgetEnablements();
-				fPatchRead = false; 
+				fPatchRead = false;
 			}
 		});
 		fPatchFileNameField.addSelectionListener(new SelectionAdapter() {
@@ -496,7 +496,7 @@
 				setEnableURLPatch(state == URL);
 				setEnableWorkspacePatch(state == WORKSPACE);
 				updateWidgetEnablements();
-				fPatchRead = false; 
+				fPatchRead = false;
 			}
 		});
 
@@ -506,7 +506,7 @@
 				updateWidgetEnablements();
 			}
 		});
-		
+
 		fTreeViewer.addDoubleClickListener(new IDoubleClickListener() {
 			public void doubleClick(DoubleClickEvent event) {
 				ISelection selection= event.getSelection();
@@ -534,10 +534,10 @@
 		layout.marginLeft= 16; // align w/ lable of check button
 		newComp.setLayout(layout);
 		newComp.setLayoutData(new GridData(GridData.FILL_BOTH));
-			
+
 		fWorkspaceSelectLabel= new Label(newComp, SWT.LEFT);
 		fWorkspaceSelectLabel.setText(PatchMessages.InputPatchPage_WorkspaceSelectPatch_text);
-		
+
 		fTreeViewer= new TreeViewer(newComp, SWT.BORDER);
 		fTreeViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
 
@@ -552,7 +552,7 @@
 	 * Updates the enable state of this page's controls.
 	 */
 	private void updateWidgetEnablements() {
-		
+
 		String error= null;
 
 		boolean gotPatch= false;
@@ -568,9 +568,9 @@
 					if (s.length() > 0)
 						gotPatch= true;
 					else
-						error= PatchMessages.InputPatchPage_ClipboardIsEmpty_message; 
+						error= PatchMessages.InputPatchPage_ClipboardIsEmpty_message;
 				} else
-					error= PatchMessages.InputPatchPage_NoTextInClipboard_message;					 
+					error= PatchMessages.InputPatchPage_NoTextInClipboard_message;
 			} else
 				error= PatchMessages.InputPatchPage_CouldNotReadClipboard_message;
 		} else if (inputMethod==FILE) {
@@ -579,9 +579,9 @@
 				File file= new File(path);
 				gotPatch= file.exists() && file.isFile() && file.length() > 0;
 				if (!gotPatch)
-					error= PatchMessages.InputPatchPage_CannotLocatePatch_message + path; 
+					error= PatchMessages.InputPatchPage_CannotLocatePatch_message + path;
 			} else {
-				error= PatchMessages.InputPatchPage_NoFileName_message; 
+				error= PatchMessages.InputPatchPage_NoFileName_message;
 			}
 		} else if (inputMethod == URL) {
 			String urlText = fPatchURLField.getText();
@@ -623,10 +623,10 @@
 		if (fShowError)
 			setErrorMessage(error);
 	}
-	
+
 	protected void handlePatchFileBrowseButtonPressed() {
 		FileDialog dialog= new FileDialog(getShell(), SWT.NONE);
-		dialog.setText(PatchMessages.InputPatchPage_SelectPatchFileDialog_title);		 
+		dialog.setText(PatchMessages.InputPatchPage_SelectPatchFileDialog_title);
 		String patchFilePath= getPatchFilePath();
 		if (patchFilePath != null) {
 			int lastSegment= patchFilePath.lastIndexOf(SEPARATOR);
@@ -638,17 +638,17 @@
 		String res= dialog.open();
 		if (res == null)
 			return;
-		
+
 		patchFilePath= dialog.getFileName();
 		IPath filterPath= new Path(dialog.getFilterPath());
-		IPath path= filterPath.append(patchFilePath).makeAbsolute();	
+		IPath path= filterPath.append(patchFilePath).makeAbsolute();
 		patchFilePath= path.toOSString();
 		//fDialogSettings.put(IUIConstants.DIALOGSTORE_LASTEXTJAR, filterPath.toOSString());
-		
+
 		fPatchFileNameField.setText(patchFilePath);
 		//setSourceName(patchFilePath);
 	}
-	
+
 	/**
 	 * Sets the source name of the import to be the supplied path.
 	 * Adds the name of the path to the list of items in the
@@ -657,15 +657,15 @@
 	 * @param path the path to be added
 	 */
 	protected void setSourceName(String path) {
-	
+
 		if (path.length() > 0) {
-	
+
 			String[] currentItems= fPatchFileNameField.getItems();
 			int selectionIndex= -1;
 			for (int i= 0; i < currentItems.length; i++)
 				if (currentItems[i].equals(path))
 					selectionIndex= i;
-			
+
 			if (selectionIndex < 0) {	// not found in history
 				int oldLength= currentItems.length;
 				String[] newItems= new String[oldLength + 1];
@@ -675,11 +675,11 @@
 				selectionIndex= oldLength;
 			}
 			fPatchFileNameField.select(selectionIndex);
-	
+
 			//resetSelection();
 		}
 	}
-	
+
 	/**
 	 *	The Finish button was pressed. Try to do the required work now and answer
 	 *	a boolean indicating success. If false is returned then the wizard will
@@ -690,30 +690,30 @@
 	public boolean finish() {
 //		if (!ensureSourceIsValid())
 //			return false;
-	
+
 		saveWidgetValues();
-	
+
 //		Iterator resourcesEnum= getSelectedResources().iterator();
 //		List fileSystemObjects= new ArrayList();
 //		while (resourcesEnum.hasNext()) {
 //			fileSystemObjects.add(
 //				((FileSystemElement) resourcesEnum.next()).getFileSystemObject());
 //		}
-//	
+//
 //		if (fileSystemObjects.size() > 0)
 //			return importResources(fileSystemObjects);
-//	
+//
 //		MessageDialog
 //			.openInformation(
 //				getContainer().getShell(),
 //				DataTransferMessages.getString("DataTransfer.information"), //$NON-NLS-1$
 //				DataTransferMessages.getString("FileImport.noneSelected")); //$NON-NLS-1$
-//	
+//
 //		return false;
 
 		return true;
 	}
-	
+
 	/**
 	 *	Use the dialog store to restore widget values to the values that they held
 	 *	last time this wizard was used to completion
@@ -737,12 +737,12 @@
 				for (int i= 0; i < sourceNames.length; i++)
 					if (sourceNames[i] != null && sourceNames[i].length() > 0)
 						fPatchFileNameField.add(sourceNames[i]);
-			
+
 			// set patch file path
 			String patchFilePath= settings.get(STORE_PATCH_FILES_ID);
 			if (patchFilePath != null)
 				setSourceName(patchFilePath);
-			
+
 			// set URLs history
 			String[] sourceURLs= settings.getArray(STORE_PATCH_URLS_ID);
 			if (sourceURLs != null)
@@ -758,7 +758,7 @@
 				inputMethod= FILE;
 				fPatchFileNameField.deselectAll();
 			}
-			
+
 			//set the workspace patch selection
 			String workspaceSetting= settings.get(STORE_WORKSPACE_PATH_ID);
 			if (workspaceSetting != null && workspaceSetting.length() > 0) {
@@ -772,10 +772,10 @@
 					}
 				} catch (RuntimeException e) {
 					// Ignore. The setting was invalid
-				} 
+				}
 			} else {
 				//check to see if the current input is set to workspace - if it is switch it
-				//back to clipboard since there is no corresponding element to go along with 
+				//back to clipboard since there is no corresponding element to go along with
 				//the tree viewer
 				if (inputMethod == WORKSPACE)
 					inputMethod= FILE;
@@ -785,7 +785,7 @@
 		// set radio buttons state
 		setInputButtonState(inputMethod);
 	}
-	
+
 	/**
 	 * 	Since Finish was pressed, write widget values to the dialog store so that they
 	 *	will persist into the next invocation of this wizard page
@@ -796,15 +796,15 @@
 
 			settings.put(STORE_INPUT_METHOD_ID, getInputMethod());
 			settings.put(STORE_PATCH_FILES_ID, getPatchFilePath());
-			
+
 			// update source names history
 			String[] sourceNames= settings.getArray(STORE_PATCH_FILES_ID);
 			if (sourceNames == null)
 				sourceNames= new String[0];
-	
+
 			sourceNames= addToHistory(sourceNames, getPatchFilePath());
 			settings.put(STORE_PATCH_FILES_ID, sourceNames);
-			
+
 			// update source URLs history
 			String[] sourceURLs= settings.getArray(STORE_PATCH_URLS_ID);
 			if (sourceURLs == null)
@@ -815,10 +815,10 @@
 
 			// save the workspace selection
 			settings.put(STORE_WORKSPACE_PATH_ID, getWorkspacePath());
-			
+
 		}
 	}
-	
+
 	private String getWorkspacePath() {
 		if (fTreeViewer != null){
 			IResource[] resources= Utilities.getResources(fTreeViewer.getSelection());
@@ -826,7 +826,7 @@
 				IResource patchFile= resources[0];
 				return patchFile.getFullPath().toString();
 			}
-			
+
 		}
 		return ""; //$NON-NLS-1$
 	}
@@ -836,7 +836,7 @@
 	/**
 	 * Checks to see if the file that has been selected for Apply Patch is
 	 * actually a patch
-	 * 
+	 *
 	 * @return true if the file selected to run Apply Patch on in the workspace
 	 *         is a patch file or if the clipboard contains a patch or if the
 	 *         clipboard contains an URL (we assume it points to a patch )
@@ -874,7 +874,7 @@
 					}
 				}
 			}
-		} 
+		}
 		// check out clipboard contents
 		Reader reader = null;
 		Control c = getControl();
@@ -910,7 +910,7 @@
 			}
 		}
 		return false;
-	} 
+	}
 
 	private boolean isPatchFile(Reader reader) {
 		WorkspacePatcher patcher= ((PatchWizard) getWizard()).getPatcher();
@@ -926,14 +926,14 @@
 			return false;
 		return true;
 	}
-	
+
 	/*
 	 * Clears the dialog message box
 	 */
 	private void clearErrorMessage(){
 		setErrorMessage(null);
 	}
-	
+
 	private void setInputButtonState(int state) {
 
 		switch (state) {
@@ -985,7 +985,7 @@
 		if (fPatchFileNameField != null)
 			return fPatchFileNameField.getText();
 		return ""; //$NON-NLS-1$
-	} 
+	}
 
 	/*
 	 * Adds an entry to a history, while taking care of duplicate history items
@@ -1000,12 +1000,12 @@
 
 		l.remove(newEntry);
 		l.add(0,newEntry);
-	
+
 		// since only one new item was added, we can be over the limit
 		// by at most one item
 		if (l.size() > COMBO_HISTORY_LENGTH)
 			l.remove(COMBO_HISTORY_LENGTH);
-		
+
 		return (String[]) l.toArray(new String[l.size()]);
 	}
 
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
index 578c0e1..9a14eda 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/LineReader.java
@@ -82,7 +82,7 @@
 		LineReader lr = new LineReader(reader);
 		if (!Platform.WS_CARBON.equals(Platform.getWS()))
 			// Don't treat single CRs as line feeds to be consistent with command line patch
-			lr.ignoreSingleCR(); 
+			lr.ignoreSingleCR();
 		lines = lr.readLines();
 		return lines;
 	}
@@ -151,7 +151,7 @@
 	 * Reads a line of text. A line is considered to be terminated by any one of
 	 * a line feed ('\n'), a carriage return ('\r'), or a carriage return
 	 * followed immediately by a line-feed.
-	 * 
+	 *
 	 * @return A string containing the contents of the line including the
 	 *         line-termination characters, or <code>null</code> if the end of
 	 *         the stream has been reached
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java
index 185e5e0..4ce115d 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchCompareEditorInput.java
@@ -58,21 +58,21 @@
 public abstract class PatchCompareEditorInput extends CompareEditorInput {
 
 	private static final String IMAGE_CACHE_KEY = "IMAGE_CACHE"; //$NON-NLS-1$
-	
+
 	public static ImageDescriptor createOverlay(Image baseImage, ImageDescriptor overlayImage, int quadrant) {
 		return new DecoratorOverlayIcon(baseImage, createArrayFrom(overlayImage, quadrant), new Point(Math.max(baseImage.getBounds().width, 16), Math.max(baseImage.getBounds().height, 16)));
 	}
-	
+
 	private static ImageDescriptor[] createArrayFrom(
 			ImageDescriptor overlayImage, int quadrant) {
 		ImageDescriptor[] descs = new ImageDescriptor[] { null, null, null, null, null };
 		descs[quadrant] = overlayImage;
 		return descs;
 	}
-	
+
 	class PatcherCompareEditorLabelProvider extends LabelProvider {
 		private ILabelProvider wrappedProvider;
-		
+
 		public PatcherCompareEditorLabelProvider(ILabelProvider labelProvider) {
 			wrappedProvider = labelProvider;
 		}
@@ -88,7 +88,7 @@
 					}
 				}
 				if (!node.isEnabled()) {
-					return NLS.bind(PatchMessages.Diff_2Args, 
+					return NLS.bind(PatchMessages.Diff_2Args,
 							new String[]{text, PatchMessages.PatcherCompareEditorInput_NotIncluded});
 				}
 				if (node instanceof PatchFileDiffNode) {
@@ -107,19 +107,19 @@
 					}
 					if (hunkNode.isFuzzUsed()) {
 						text = NLS.bind(PatchMessages.Diff_2Args,
-								new String[] { text, 
+								new String[] { text,
 								NLS.bind(hunkNode.isAllContextIgnored() ? PatchMessages.PreviewPatchPage_AllContextIgnored : PatchMessages.PreviewPatchPage_FuzzUsed,
 										new String[] { hunkNode.getHunkResult().getFuzz() + ""}) }); //$NON-NLS-1$
 					}
 				}
-				if (getPatcher().isRetargeted(node.getPatchElement()))	
-					return NLS.bind(PatchMessages.Diff_2Args, 
+				if (getPatcher().isRetargeted(node.getPatchElement()))
+					return NLS.bind(PatchMessages.Diff_2Args,
 							new String[]{getPatcher().getOriginalPath(node.getPatchElement()).toString(),
 							NLS.bind(PatchMessages.PreviewPatchPage_Target, new String[]{node.getName()})});
 			}
 			return text;
 		}
-	
+
 		public Image getImage(Object element) {
 			Image image = wrappedProvider.getImage(element);
 			if (element instanceof PatchDiffNode){
@@ -139,17 +139,17 @@
 			return image;
 		}
 	}
-	
+
 	private final DiffNode root;
 	private final WorkspacePatcher patcher;
 	private TreeViewer viewer;
 	private boolean fShowAll;
 	private boolean showMatched = false;
-	
+
 	/**
 	 * Creates a new PatchCompareEditorInput and makes use of the passed in CompareConfiguration
 	 * to configure the UI elements.
-	 * @param patcher 
+	 * @param patcher
 	 * @param configuration
 	 */
 	public PatchCompareEditorInput(WorkspacePatcher patcher, CompareConfiguration configuration) {
@@ -167,13 +167,13 @@
 	private void initializeImageCache() {
 		initializeImageCache(patcher.getConfiguration());
 	}
-	
+
 	private static LocalResourceManager initializeImageCache(PatchConfiguration patchConfiguration) {
 		LocalResourceManager imageCache = new LocalResourceManager(JFaceResources.getResources());
 		patchConfiguration.setProperty(IMAGE_CACHE_KEY, imageCache);
 		return imageCache;
 	}
-	
+
 	protected void handleDispose() {
 		super.handleDispose();
 		getImageCache(getPatcher().getConfiguration()).dispose();
@@ -191,7 +191,7 @@
 		initLabels();
 		return root;
 	}
-	
+
 	private void initLabels() {
 		CompareConfiguration cc = getCompareConfiguration();
 		// set left editable so that unmatched hunks can be edited
@@ -211,34 +211,34 @@
 		if (getViewer() != null && !getViewer().getControl().isDisposed())
 			getViewer().refresh(true);
 	}
-	
+
 	/**
 	 * Build the diff tree.
 	 */
 	protected void buildTree(){
-		
+
 		// Reset the input node so it is empty
 		if (getRoot().hasChildren()) {
 			resetRoot();
 		}
 		// Reset the input of the viewer so the old state is no longer used
 		getViewer().setInput(getRoot());
-		
+
 		// Refresh the patcher state
 		getPatcher().refresh();
-		
+
 		// Build the diff tree
 		if (getPatcher().isWorkspacePatch()){
 			processProjects(getPatcher().getDiffProjects());
 		} else {
 			processDiffs(getPatcher().getDiffs());
 		}
-		
+
 		// Refresh the viewer
 		getViewer().refresh();
 	}
-	
-	private void processDiffs(FilePatch2[] diffs) { 
+
+	private void processDiffs(FilePatch2[] diffs) {
 		for (int i = 0; i < diffs.length; i++) {
 			processDiff(diffs[i], getRoot());
 		}
@@ -290,7 +290,7 @@
 				PatchCompareEditorInput.this.fillContextMenu(manager);
 			}
 		};
-			
+
 		viewer.setLabelProvider(new PatcherCompareEditorLabelProvider((ILabelProvider)viewer.getLabelProvider()));
 		viewer.getTree().setData(CompareUI.COMPARE_VIEWER_TITLE, PatchMessages.PatcherCompareEditorInput_PatchContents);
 		viewer.addOpenListener(new IOpenListener() {
@@ -310,13 +310,13 @@
 					getCompareConfiguration().setRightLabel(PatchMessages.PatcherCompareEditorInput_AfterPatch);
 				}
 			}
-		
+
 		});
 		viewer.setFilters(getFilters());
 		viewer.setInput(root);
 		return viewer;
 	}
-	
+
 	private ViewerFilter[] getFilters() {
 		return new ViewerFilter[] { new ViewerFilter() {
 			public boolean select(Viewer v, Object parentElement, Object element) {
@@ -332,7 +332,7 @@
 	protected boolean isShowAll() {
 		return fShowAll;
 	}
-	
+
 	protected void setShowAll(boolean show) {
 		fShowAll = show;
 	}
@@ -349,25 +349,25 @@
 		ToolBarManager tbm= CompareViewerPane.getToolBarManager(viewer.getControl().getParent());
 		if (tbm != null) {
 			tbm.removeAll();
-			
+
 			tbm.add(new Separator("contributed")); //$NON-NLS-1$
-			
+
 			for (int i = 0; i < actions.length; i++) {
 				tbm.appendToGroup("contributed", actions[i]); //$NON-NLS-1$
 			}
-			
+
 			tbm.update(true);
 		}
 	}
-	
+
 	public TreeViewer getViewer() {
 		return viewer;
 	}
-	
+
 	public DiffNode getRoot() {
 		return root;
 	}
-	
+
 	public void resetRoot() {
 		IDiffElement[] children = root.getChildren();
 		for (int i = 0; i < children.length; i++) {
@@ -379,7 +379,7 @@
 	public WorkspacePatcher getPatcher() {
 		return patcher;
 	}
-	
+
 	public boolean confirmRebuild(String message) {
 		if (getPatcher().hasCachedContents()) {
 			if (promptToDiscardCachedChanges(message)) {
@@ -422,9 +422,9 @@
 		}
 		return false;
 	}
-	
+
 	protected abstract void fillContextMenu(IMenuManager manager);
-	
+
 	public Viewer findStructureViewer(Viewer oldViewer, ICompareInput input,
 			Composite parent) {
 		if (org.eclipse.compare.internal.Utilities.isHunk(input))
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchDiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchDiffNode.java
index c6ce4ee..76722c7 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchDiffNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchDiffNode.java
@@ -49,7 +49,7 @@
 	}
 
 	protected abstract PatchConfiguration getConfiguration();
-	
+
 	public boolean equals(Object other) {
 		if (other instanceof PatchDiffNode) {
 			PatchDiffNode node = (PatchDiffNode) other;
@@ -57,7 +57,7 @@
 		}
 		return super.equals(other);
 	}
-	
+
 	public int hashCode() {
 		return getPatchElement().hashCode();
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
index 652b2c3..896d918 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchErrorDialog.java
@@ -11,9 +11,9 @@
 package org.eclipse.compare.internal.patch;
 
 public class PatchErrorDialog {
-	
+
 	private PatchErrorDialog() {
 		// no instance.
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileDiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileDiffNode.java
index 0f2ed66..0705d80 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileDiffNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileDiffNode.java
@@ -29,7 +29,7 @@
 	public static PatchFileDiffNode createDiffNode(DiffNode parent, FileDiffResult result) {
 		return new PatchFileDiffNode(result, parent, getKind(result), getAncestorElement(result), getLeftElement(result), getRightElement(result));
 	}
-	
+
 	public static int getKind(FileDiffResult result) {
 		if (!result.hasMatches())
 			return Differencer.NO_CHANGE;
@@ -78,11 +78,11 @@
 	public FileDiffResult getDiffResult() {
 		return result;
 	}
-	
+
 	protected PatchConfiguration getConfiguration() {
 		return result.getConfiguration();
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.DiffContainer#add(org.eclipse.compare.structuremergeviewer.IDiffElement)
 	 */
@@ -105,7 +105,7 @@
 	public void contentChanged(IContentChangeNotifier source) {
 		fireChange();
 	}
-	
+
 	public int getKind() {
 		int kind = super.getKind();
 		if (kind == Differencer.NO_CHANGE && getPatcher().hasCachedContents(getDiffResult().getDiff())) {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java
index ed468be..06c7ad7 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchFileTypedElement.java
@@ -73,7 +73,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.compare.ITypedElement#getName()
 	 */
 	@Override
@@ -83,7 +83,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.compare.ITypedElement#getType()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchProjectDiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchProjectDiffNode.java
index 5e41aafc..e2f5640 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchProjectDiffNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchProjectDiffNode.java
@@ -32,14 +32,14 @@
 		this.project = project;
 		this.configuration = configuration;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.DiffNode#getName()
 	 */
 	public String getName() {
 		return project.getName();
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.DiffNode#getImage()
 	 */
@@ -71,7 +71,7 @@
 	public String getType() {
 		return ITypedElement.FOLDER_TYPE;
 	}
-	
+
 	protected PatchConfiguration getConfiguration() {
 		return configuration;
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java
index 44688f2..78a50f9 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchTargetPage.java
@@ -81,17 +81,17 @@
 		composite.setLayout(new GridLayout());
 		composite.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.HORIZONTAL_ALIGN_FILL));
 		setControl(composite);
-		
-		useWorkspaceAsTarget = createRadioButton(composite, PatchMessages.PatchTargetPage_0, 1); 
-		selectTarget = createRadioButton(composite, PatchMessages.InputPatchPage_SelectInput, 1); 
-		
+
+		useWorkspaceAsTarget = createRadioButton(composite, PatchMessages.PatchTargetPage_0, 1);
+		selectTarget = createRadioButton(composite, PatchMessages.InputPatchPage_SelectInput, 1);
+
 		buildInputGroup(composite);
 
 		updateWidgetEnablements();
 
 		Dialog.applyDialogFont(composite);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, ICompareContextIds.PATCH_INPUT_WIZARD_PAGE);
-		
+
 		useWorkspaceAsTarget.addListener(SWT.Selection, new Listener() {
             public void handleEvent(Event event) {
             	fShowError = true;
@@ -124,7 +124,7 @@
 		button.setLayoutData(data);
 		return button;
 	}
-	
+
 	/* (non-JavaDoc)
 	 * Method declared in IWizardPage.
 	 */
@@ -177,7 +177,7 @@
 		fPatchTargets.setContentProvider(new WorkbenchContentProvider());
 		fPatchTargets.setComparator(new ResourceComparator(ResourceComparator.NAME));
 		fPatchTargets.setInput(ResourcesPlugin.getWorkspace().getRoot());
-		
+
 		IResource target = fPatcher.getTarget();
 		if (target != null && !(target instanceof IWorkspaceRoot)) {
 			fPatchTargets.expandToLevel(target, 0);
@@ -192,7 +192,7 @@
 				updateWidgetEnablements();
 			}
 		});
-		
+
 		fPatchTargets.addDoubleClickListener(new IDoubleClickListener() {
 			public void doubleClick(DoubleClickEvent event) {
 				((PatchWizard)getWizard()).showPage(getNextPage());
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
index 1daddd0..31efd37 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizard.java
@@ -43,18 +43,18 @@
 	private final static String DIALOG_SETTINGS_KEY= "PatchWizard"; //$NON-NLS-1$
 
 	private boolean fHasNewDialogSettings;
-	
+
 	protected InputPatchPage fPatchWizardPage;
 	protected PatchTargetPage fPatchTargetPage;
 	protected PreviewPatchPage2 fPreviewPage2;
-	
+
 	private final WorkspacePatcher fPatcher;
-	
+
 	private CompareConfiguration fConfiguration;
 	private IStorage patch;
 
 	private boolean patchReadIn = false;
-	
+
 	public PatchWizard(IStorage patch, IResource target, CompareConfiguration configuration) {
 		Assert.isNotNull(configuration);
 		this.fConfiguration = configuration;
@@ -69,16 +69,16 @@
 				patchReadIn = true;
 			} catch (IOException e) {
 				MessageDialog.openError(null,
-						PatchMessages.InputPatchPage_PatchErrorDialog_title, 
-						PatchMessages.InputPatchPage_ParseError_message); 
+						PatchMessages.InputPatchPage_PatchErrorDialog_title,
+						PatchMessages.InputPatchPage_ParseError_message);
 			} catch (CoreException e) {
 				ErrorDialog.openError(getShell(),
-						PatchMessages.InputPatchPage_PatchErrorDialog_title,	
+						PatchMessages.InputPatchPage_PatchErrorDialog_title,
 						PatchMessages.InputPatchPage_PatchFileNotFound_message, e.getStatus());
 			}
 		}
 	}
-	
+
 	private void initializeDialogSettings() {
 		IDialogSettings workbenchSettings= CompareUIPlugin.getDefault().getDialogSettings();
 		IDialogSettings section= workbenchSettings.getSection(DIALOG_SETTINGS_KEY);
@@ -101,7 +101,7 @@
 	IResource getTarget() {
 		return fPatcher.getTarget();
 	}
-	
+
 	/* (non-Javadoc)
 	 * Method declared on IWizard.
 	 */
@@ -115,24 +115,24 @@
 		fPreviewPage2 = new PreviewPatchPage2(fPatcher, fConfiguration);
 		addPage(fPreviewPage2);
 	}
-	
+
 	/* (non-Javadoc)
 	 * Method declared on IWizard.
 	 */
 	public boolean performFinish() {
-		
+
 		IWizardPage currentPage = getContainer().getCurrentPage();
 		if (currentPage.getName().equals(PreviewPatchPage2.PREVIEWPATCHPAGE_NAME)){
 			PreviewPatchPage2 previewPage = (PreviewPatchPage2) currentPage;
 			previewPage.ensureContentsSaved();
 		}
-		
+
 		if (fPatchWizardPage != null){
 			// make sure that the patch has been read
 			if (!fPatchWizardPage.isPatchRead())
 				fPatchWizardPage.readInPatch();
 			fPatcher.refresh();
-			
+
 			// make sure that the patch is not invalid
 			if (!fPatchWizardPage.checkPageComplete())
 				return false;
@@ -143,18 +143,18 @@
 			//make sure that the patch has been read in
 			Assert.isTrue(patchReadIn);
 		}
-		
+
 		if (!currentPage.getName().equals(PreviewPatchPage2.PREVIEWPATCHPAGE_NAME) && fPatcher.hasRejects()){
 			if (!MessageDialog.openConfirm(getShell(), PatchMessages.PatchWizard_0, PatchMessages.PatchWizard_1)) {
 				return false;
 			}
 		}
-		
+
 		try {
 			// create scheduling rule based on the type of patch - single or workspace
 			ISchedulingRule scheduleRule = null;
 			if (fPatcher.isWorkspacePatch()) {
-				// workspace patch 
+				// workspace patch
 				ISchedulingRule[] projectRules = fPatcher.getTargetProjects();
 				scheduleRule = new MultiRule(projectRules);
 			} else {
@@ -206,7 +206,7 @@
 	public void showPage(IWizardPage page) {
 		getContainer().showPage(page);
 	}
-	
+
 	public IWizardPage getNextPage(IWizardPage page) {
 		//no patch has been read in yet, input patch page
 		if (!patchReadIn)
@@ -225,7 +225,7 @@
 
 	/**
 	 * Used to report that the patch has
-	 * 
+	 *
 	 */
 	protected void patchReadIn() {
 		patchReadIn = true;
@@ -234,7 +234,7 @@
 	public CompareConfiguration getCompareConfiguration() {
 		return fConfiguration;
 	}
-	
+
 	public boolean canFinish() {
 		IWizardPage currentPage = getContainer().getCurrentPage();
 		if (currentPage.getName().equals(PreviewPatchPage2.PREVIEWPATCHPAGE_NAME)){
@@ -242,5 +242,5 @@
 		}
 		return super.canFinish();
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizardDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizardDialog.java
index 9979f6f..8273a1c 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizardDialog.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PatchWizardDialog.java
@@ -22,17 +22,17 @@
 
 	public PatchWizardDialog(Shell parent, IWizard wizard) {
 		super(parent, wizard);
-		
+
 		setShellStyle(getShellStyle() | SWT.RESIZE);
 		setMinimumPageSize(700, 500);
 	}
-	
+
 	protected IDialogSettings getDialogBoundsSettings() {
         IDialogSettings settings = CompareUIPlugin.getDefault().getDialogSettings();
         IDialogSettings section = settings.getSection(PATCH_WIZARD_SETTINGS_SECTION);
         if (section == null) {
             section = settings.addNewSection(PATCH_WIZARD_SETTINGS_SECTION);
-        } 
+        }
         return section;
 	}
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
index 17d5afa..1477cc2 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/Patcher.java
@@ -58,7 +58,7 @@
 import org.eclipse.jface.text.TextUtilities;
 
 /**
- * A Patcher 
+ * A Patcher
  * - knows how to parse various patch file formats into some in-memory structure,
  * - holds onto the parsed data and the options to use when applying the patches,
  * - knows how to apply the patches to files and folders.
@@ -73,7 +73,7 @@
 	 * Property used to associate a patcher with a {@link PatchConfiguration}
 	 */
 	public static final String PROP_PATCHER = "org.eclipse.compare.patcher"; //$NON-NLS-1$
-	
+
 	public interface IFileValidator {
 		boolean validateResources(IFile[] array);
 	}
@@ -83,7 +83,7 @@
 	//	private static final int ED= 1;
 	//	private static final int NORMAL= 2;
 	//	private static final int UNIFIED= 3;
-	
+
 	private FilePatch2[] fDiffs;
 	private IResource fTarget;
 	// patch options
@@ -94,13 +94,13 @@
 
 	private final PatchConfiguration configuration;
 	private boolean fGenerateRejectFile = false;
-	
+
 	public Patcher() {
 		configuration = new PatchConfiguration();
 		configuration.setProperty(PROP_PATCHER, this);
 		configuration.addHunkFilter(this);
 	}
-	
+
 	/*
 	 * Returns an array of Diffs after a successful call to <code>parse</code>.
 	 * If <code>parse</code> hasn't been called returns <code>null</code>.
@@ -110,7 +110,7 @@
 			return new FilePatch2[0];
 		return fDiffs;
 	}
-	
+
 	public IPath getPath(FilePatch2 diff) {
 		return diff.getStrippedPath(getStripPrefixSegments(), isReversed());
 	}
@@ -125,11 +125,11 @@
 		}
 		return false;
 	}
-	
+
 	int getStripPrefixSegments() {
 		return getConfiguration().getPrefixSegmentStripCount();
 	}
-	
+
 	/*
 	 * Returns <code>true</code> if new value differs from old.
 	 */
@@ -140,11 +140,11 @@
 		}
 		return false;
 	}
-	
+
 	public int getFuzz(){
 		return getConfiguration().getFuzz();
 	}
-		
+
 	/*
 	 * Returns <code>true</code> if new value differs from old.
 	 */
@@ -155,11 +155,11 @@
 		}
 		return false;
 	}
-	
+
 	public boolean isIgnoreWhitespace() {
 		return getConfiguration().isIgnoreWhitespace();
 	}
-	
+
 	public boolean isGenerateRejectFile() {
 		return fGenerateRejectFile;
 	}
@@ -167,7 +167,7 @@
 	public void setGenerateRejectFile(boolean generateRejectFile) {
 		fGenerateRejectFile = generateRejectFile;
 	}
-	
+
 	//---- parsing patch files
 
 	public void parse(IStorage storage) throws IOException, CoreException {
@@ -181,7 +181,7 @@
 			}
 		}
 	}
-	
+
 	public void parse(BufferedReader reader) throws IOException {
 		PatchReader patchReader = new PatchReader() {
 			@Override
@@ -197,7 +197,7 @@
 	protected void patchParsed(PatchReader patchReader) {
 		fDiffs = patchReader.getDiffs();
 	}
-	
+
 	public void countLines() {
 		FilePatch2[] fileDiffs = getDiffs();
 		for (int i = 0; i < fileDiffs.length; i++) {
@@ -223,13 +223,13 @@
 			fileDiff.setRemovedLines(removedLines);
 		}
 	}
-	
+
 	//---- applying a patch file
 
 	public void applyAll(IProgressMonitor pm, IFileValidator validator) throws CoreException {
-		
+
 		int i;
-		
+
 		IFile singleFile= null;	// file to be patched
 		IContainer container= null;
 		if (fTarget instanceof IContainer)
@@ -240,7 +240,7 @@
 		} else {
 			Assert.isTrue(false);
 		}
-		
+
 		// get all files to be modified in order to call validateEdit
 		List list= new ArrayList();
 		if (singleFile != null)
@@ -260,30 +260,30 @@
 		if (! validator.validateResources((IFile[])list.toArray(new IFile[list.size()]))) {
 			return;
 		}
-		
+
 		final int WORK_UNIT= 10;
 		if (pm != null) {
-			String message= Messages.Patcher_0;	
+			String message= Messages.Patcher_0;
 			pm.beginTask(message, fDiffs.length*WORK_UNIT);
 		}
-		
+
 		for (i= 0; i < fDiffs.length; i++) {
-			
+
 			int workTicks= WORK_UNIT;
-			
+
 			FilePatch2 diff= fDiffs[i];
 			if (isEnabled(diff)) {
-				
+
 				IPath path= getPath(diff);
 				if (pm != null)
 					pm.subTask(path.toString());
-			
+
 				IFile file= singleFile != null
 								? singleFile
 								: createPath(container, path);
-					
+
 				List failed= new ArrayList();
-				
+
 				int type= diff.getDiffType(isReversed());
 				switch (type) {
 				case FilePatch2.ADDITION:
@@ -313,7 +313,7 @@
 						store(getRejected(failed), file, pm);
 						try {
 							IMarker marker= file.createMarker(MARKER_TYPE);
-							marker.setAttribute(IMarker.MESSAGE, Messages.Patcher_1);	
+							marker.setAttribute(IMarker.MESSAGE, Messages.Patcher_1);
 							marker.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH);
 						} catch (CoreException ex) {
 							// NeedWork
@@ -321,7 +321,7 @@
 					}
 				}
 			}
-			
+
 			if (pm != null) {
 				if (pm.isCanceled())
 					break;
@@ -340,7 +340,7 @@
 			pp= new Path(path.lastSegment() + REJECT_FILE_EXTENSION);
 		return pp;
 	}
-	
+
 	List apply(FilePatch2 diff, IFile file, boolean create, List failedHunks) {
 		FileDiffResult result = getDiffResult(diff);
 		List<String> lines = LineReader.load(file, create);
@@ -355,7 +355,7 @@
 		}
 		return result.getLines();
 	}
-	
+
 	/*
 	 * Converts the string into bytes and stores them in the given file.
 	 */
@@ -380,7 +380,7 @@
 			// uses default encoding
 			bytes= contents.getBytes();
 		}
-		
+
 		store(bytes,file, pm);
 	}
 
@@ -423,7 +423,7 @@
 	public static String getRejected(List failedHunks) {
 		if (failedHunks.size() <= 0)
 			return null;
-		
+
 		String lineSeparator= System.getProperty("line.separator"); //$NON-NLS-1$
 		StringBuffer sb= new StringBuffer();
 		Iterator iter= failedHunks.iterator();
@@ -435,7 +435,7 @@
 		}
 		return sb.toString();
 	}
-	
+
 	/*
 	 * Ensures that a file with the given path exists in
 	 * the given container. Folder are created as necessary.
@@ -469,16 +469,16 @@
 	public void setTarget(IResource target) {
 		fTarget= target;
 	}
-	
+
 
 	public IFile getTargetFile(FilePatch2 diff) {
 		IPath path = diff.getStrippedPath(getStripPrefixSegments(), isReversed());
 		return existsInTarget(path);
 	}
-	
+
 	/**
 	 * Iterates through all of the resources contained in the Patch Wizard target
-	 * and looks to for a match to the passed in file 
+	 * and looks to for a match to the passed in file
 	 * @param path
 	 * @return IFile which matches the passed in path or null if none found
 	 */
@@ -497,8 +497,8 @@
 
 	/**
 	 * Returns true if path completely matches the end of fullpath
-	 * @param fullpath 
-	 * @param path 
+	 * @param fullpath
+	 * @param path
 	 * @return true if path matches, false otherwise
 	 */
 	private boolean matches(IPath fullpath, IPath path) {
@@ -523,14 +523,14 @@
 		}
 		return length;
 	}
-	
+
 	public void addDiff(FilePatch2 newDiff){
 		FilePatch2[] temp = new FilePatch2[fDiffs.length + 1];
 		System.arraycopy(fDiffs,0, temp, 0, fDiffs.length);
 		temp[fDiffs.length] = newDiff;
 		fDiffs = temp;
 	}
-	
+
 	public void removeDiff(FilePatch2 diffToRemove){
 		FilePatch2[] temp = new FilePatch2[fDiffs.length - 1];
 		int counter = 0;
@@ -541,23 +541,23 @@
 		}
 		fDiffs = temp;
 	}
-	
+
 	public void setEnabled(Object element, boolean enabled) {
-		if (element instanceof DiffProject) 
+		if (element instanceof DiffProject)
 			setEnabledProject((DiffProject) element, enabled);
-		if (element instanceof FilePatch2) 
+		if (element instanceof FilePatch2)
 			setEnabledFile((FilePatch2)element, enabled);
-		if (element instanceof Hunk) 
+		if (element instanceof Hunk)
 			setEnabledHunk((Hunk) element, enabled);
 	}
-	
+
 	private void setEnabledProject(DiffProject projectDiff, boolean enabled) {
 		FilePatch2[] diffFiles = projectDiff.getFileDiffs();
 		for (int i = 0; i < diffFiles.length; i++) {
 			setEnabledFile(diffFiles[i], enabled);
 		}
 	}
-	
+
 	private void setEnabledFile(FilePatch2 fileDiff, boolean enabled) {
 		IHunk[] hunks = fileDiff.getHunks();
 		for (int i = 0; i < hunks.length; i++) {
@@ -588,7 +588,7 @@
 	}
 
 	public boolean isEnabled(Object element) {
-		if (disabledElements.contains(element)) 
+		if (disabledElements.contains(element))
 			return false;
 		Object parent = getElementParent(element);
 		if (parent == null)
@@ -603,7 +603,7 @@
 		}
 		return null;
 	}
-	
+
 	/**
 	 * Calculate the fuzz factor that will allow the most hunks to be matched.
 	 * @param monitor a progress monitor
@@ -632,12 +632,12 @@
 			monitor.done();
 		}
 	}
-	
+
 	public void refresh() {
 		diffResults.clear();
 		refresh(getDiffs());
 	}
-	
+
 	public void refresh(FilePatch2[] diffs) {
 		for (int i = 0; i < diffs.length; i++) {
 			FilePatch2 diff = diffs[i];
@@ -645,7 +645,7 @@
 			((WorkspaceFileDiffResult)result).refresh();
 		}
 	}
-	
+
 	public FileDiffResult getDiffResult(FilePatch2 diff) {
 		FileDiffResult result = (FileDiffResult)diffResults.get(diff);
 		if (result == null) {
@@ -680,15 +680,15 @@
 		}
 		return false;
 	}
-	
+
 	public boolean isReversed() {
 		return getConfiguration().isReversed();
 	}
-	
+
 	/**
 	 * Cache the contents for the given file diff. These contents
 	 * will be used for the diff when the patch is applied. When the
-	 * patch is applied, it is assumed that the provided contents 
+	 * patch is applied, it is assumed that the provided contents
 	 * already have all relevant hunks applied.
 	 * @param diff the file diff
 	 * @param contents the contents for the file diff
@@ -696,9 +696,9 @@
 	public void cacheContents(FilePatch2 diff, byte[] contents) {
 		contentCache.put(diff, contents);
 	}
-	
+
 	/**
-	 * Return whether contents have been cached for the 
+	 * Return whether contents have been cached for the
 	 * given file diff.
 	 * @param diff the file diff
 	 * @return whether contents have been cached for the file diff
@@ -709,7 +709,7 @@
 	}
 
 	/**
-	 * Return the content lines that are cached for the given 
+	 * Return the content lines that are cached for the given
 	 * file diff.
 	 * @param diff the file diff
 	 * @return the content lines that are cached for the file diff
@@ -733,7 +733,7 @@
 	public byte[] getCachedContents(FilePatch2 diff) {
 		return (byte[])contentCache.get(diff);
 	}
-	
+
 	/**
 	 * Return whether the patcher has any cached contents.
 	 * @return whether the patcher has any cached contents
@@ -749,11 +749,11 @@
 		contentCache.clear();
 		mergedHunks.clear();
 	}
-	
+
 	public void setProperty(String key, Object value) {
 		getConfiguration().setProperty(key, value);
 	}
-	
+
 	public Object getProperty(String key) {
 		return getConfiguration().getProperty(key);
 	}
@@ -765,7 +765,7 @@
 	public void setManuallyMerged(Hunk hunk, boolean merged) {
 		if (merged)
 			mergedHunks.add(hunk);
-		else 
+		else
 			mergedHunks.remove(hunk);
 	}
 
@@ -784,7 +784,7 @@
 	public static Patcher getPatcher(PatchConfiguration configuration) {
 		return (Patcher)configuration.getProperty(PROP_PATCHER);
 	}
-	
+
 	public boolean hasRejects() {
 		for (Iterator iterator = diffResults.values().iterator(); iterator.hasNext();) {
 			FileDiffResult result = (FileDiffResult) iterator.next();
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java
index 5d03024..3028911 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/PreviewPatchPage2.java
@@ -76,28 +76,28 @@
 
 	private static final String EXPAND_PATCH_OPTIONS = "expandPatchOptions"; //$NON-NLS-1$
 	private static final String GENERATE_REJECTS = "generateRejects"; //$NON-NLS-1$
-	
+
 	final WorkspacePatcher fPatcher;
 	private final CompareConfiguration fConfiguration;
 	private PatchCompareEditorInput fInput;
-	
+
 	private Combo fStripPrefixSegments;
 	private Text fFuzzField;
 	private Label addedRemovedLines;
-	
+
 	private Action fExcludeAction;
 	private Action fIncludeAction;
 	private Action fIgnoreWhiteSpace;
 	private Action fReversePatch;
 	private Action fMoveAction;
-	
+
 	protected boolean pageRecalculate= true;
 
 	private IDialogSettings settings;
 	private ExpandableComposite patchOptions;
 	private Button generateRejects;
 	private FormToolkit fToolkit;
-		
+
 	public PreviewPatchPage2(WorkspacePatcher patcher, CompareConfiguration configuration) {
 		super(PREVIEWPATCHPAGE_NAME, PatchMessages.PreviewPatchPage_title, null);
 		setDescription(PatchMessages.PreviewPatchPage2_8);
@@ -117,13 +117,13 @@
 	public void createControl(Composite parent) {
 		fToolkit = new FormToolkit(parent.getDisplay());
 		fToolkit.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
-		
+
 		final Form form = fToolkit.createForm(parent);
 		Composite composite = form.getBody();
 		composite.setLayout(new GridLayout());
 		composite.setLayoutData(new GridData(GridData.FILL_BOTH));
 		initializeDialogUnits(parent);
-		
+
 		fInput = new PatchCompareEditorInput(getPatcher(), getCompareConfiguration()) {
 			protected void fillContextMenu(IMenuManager manager) {
 				if (isShowAll()) {
@@ -134,16 +134,16 @@
 				manager.add(fMoveAction);
 			}
 		};
-		
+
 		buildPatchOptionsGroup(form);
-		
+
 		// Initialize the input
 		try {
 			fInput.run(null);
 		} catch (InterruptedException e) {//ignore
 		} catch (InvocationTargetException e) {//ignore
 		}
-	
+
 		Label label = new Label(composite, SWT.NONE);
 		label.setText(PatchMessages.PreviewPatchPage2_9);
 		Control c = fInput.createContents(composite);
@@ -161,18 +161,18 @@
 			}});
 
 		c.setLayoutData(new GridData(GridData.FILL_BOTH));
-		
+
 		addedRemovedLines = new Label(composite, SWT.NONE);
 		addedRemovedLines.setLayoutData(new GridData(GridData.FILL_HORIZONTAL
 				| GridData.VERTICAL_ALIGN_BEGINNING));
-			
+
 		setControl(composite);
-		
+
 		restoreWidgetValues();
-		
+
 		Dialog.applyDialogFont(composite);
 	}
-	
+
 	private void updateActions(IStructuredSelection ss) {
 		fExcludeAction.setEnabled(false);
 		fIncludeAction.setEnabled(false);
@@ -187,7 +187,7 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Makes sure that at least one hunk is checked off in the tree before
 	 * allowing the patch to be applied.
@@ -198,13 +198,13 @@
 			atLeastOneIsEnabled = fInput.hasResultToApply();
 		setPageComplete(atLeastOneIsEnabled);
 	}
-	
+
 	private Action[] getContributedActions() {
 		return new Action[]{ fIgnoreWhiteSpace };
 	}
 
 	private void initializeActions() {
-		
+
 		fMoveAction = new Action(PatchMessages.PreviewPatchPage2_RetargetAction, null) {
 			public void run() {
 				Shell shell = getShell();
@@ -244,7 +244,7 @@
 				fMoveAction.setEnabled(enable);
 			}
 		});
-		
+
 		fExcludeAction = new Action(PatchMessages.PreviewPatchPage2_0) {
 			public void run() {
 				ISelection selection = fInput.getViewer().getSelection();
@@ -257,7 +257,7 @@
 							PatchDiffNode node = ((PatchDiffNode) obj);
 							node.setEnabled(false);
 							// TODO: This may require a rebuild if matched hunks are shown
-						} 
+						}
 					}
 					updateActions(treeSelection);
 				}
@@ -265,7 +265,7 @@
 			}
 		};
 		fExcludeAction.setEnabled(true);
-		
+
 		fIncludeAction = new Action(PatchMessages.PreviewPatchPage2_1) {
 			public void run() {
 				ISelection selection = fInput.getViewer().getSelection();
@@ -278,7 +278,7 @@
 							PatchDiffNode node = ((PatchDiffNode) obj);
 							node.setEnabled(true);
 							// TODO: This may require a rebuild if matched hunks are shown
-						} 
+						}
 					}
 					updateActions(treeSelection);
 				}
@@ -286,7 +286,7 @@
 			}
 		};
 		fIncludeAction.setEnabled(true);
-		
+
 		fIgnoreWhiteSpace = new Action(PatchMessages.PreviewPatchPage2_IgnoreWSAction, CompareUIPlugin.getImageDescriptor(ICompareUIConstants.IGNORE_WHITESPACE_ENABLED)){
 			public void run(){
 				try {
@@ -313,7 +313,7 @@
 		fIgnoreWhiteSpace.setChecked(false);
 		fIgnoreWhiteSpace.setToolTipText(PatchMessages.PreviewPatchPage2_IgnoreWSTooltip);
 		fIgnoreWhiteSpace.setDisabledImageDescriptor(CompareUIPlugin.getImageDescriptor(ICompareUIConstants.IGNORE_WHITESPACE_DISABLED));
-		
+
 		fReversePatch = new Action(PatchMessages.PreviewPatchPage_ReversePatch_text){
 			public void run(){
 				try {
@@ -335,14 +335,14 @@
 				} catch (InvocationTargetException e) { //ignore
 				} catch (InterruptedException e) { //ignore
 				}
-				
+
 			}
-			
+
 		};
 		fReversePatch.setChecked(false);
 		fReversePatch.setToolTipText(PatchMessages.PreviewPatchPage_ReversePatch_text);
 	}
-	
+
 	public void setVisible(boolean visible) {
 		super.setVisible(visible);
 		//Need to handle input and rebuild tree only when becoming visible
@@ -363,7 +363,7 @@
 			getShell().getDefaultButton().setFocus();
 		}
 	}
-	
+
 	private boolean promptToRebuild(final String promptToConfirm){
 		final Control ctrl = getControl();
 		final boolean[] result = new boolean[] { false };
@@ -388,7 +388,7 @@
 		}
 		return result[0];
 	}
-	
+
 	private void rebuildTree(){
 		final Control ctrl = getControl();
 		if (ctrl != null && !ctrl.isDisposed()){
@@ -434,7 +434,7 @@
 	 */
 	private void buildPatchOptionsGroup(final Form form) {
 		Composite parent = form.getBody();
-			
+
 		patchOptions = fToolkit.createExpandableComposite(parent, ExpandableComposite.TWISTIE | ExpandableComposite.CLIENT_INDENT);
 		patchOptions.setText(PatchMessages.PreviewPatchPage_PatchOptions_title);
 		patchOptions.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
@@ -477,7 +477,7 @@
 					}
 				}
 			);
-	
+
 
 		fFuzzField.addModifyListener(
 			new ModifyListener() {
@@ -522,7 +522,7 @@
 							// Reset the fuzz. We don't use HunkResult.MAXIMUM_FUZZ_FACTOR on purpose here,
 							// in order to refresh the tree the result of the calculation needs to be different
 							// than the fuzz set in the configuration (see fFuzzField modify listener).
-							patcher.setFuzz(-1); 
+							patcher.setFuzz(-1);
 							int fuzz= guessFuzzFactor(patcher);
 							if (fuzz>=0)
 								fFuzzField.setText(Integer.toString(fuzz));
@@ -533,7 +533,7 @@
 		gd= new GridData(GridData.VERTICAL_ALIGN_CENTER);
 		int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
 		Point minSize = b.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
-		gd.widthHint = Math.max(widthHint, minSize.x);		
+		gd.widthHint = Math.max(widthHint, minSize.x);
 		b.setLayoutData(gd);
 	}
 
@@ -552,7 +552,7 @@
 		generateRejects.setSelection(false);
 		generateRejects.setLayoutData(gd);
 	}
-	
+
 	private void createShowRemovedToggle(Composite pair) {
 		final Button showRemoved = new Button(pair, SWT.CHECK);
 		showRemoved.setText(PatchMessages.PreviewPatchPage2_7);
@@ -568,7 +568,7 @@
 		showRemoved.setSelection(fInput.isShowAll());
 		showRemoved.setLayoutData(gd);
 	}
-	
+
 	private void createReversePatchToggle(Composite pair) {
 		final Button reversePatch = new Button(pair, SWT.CHECK);
 		reversePatch.setText(PatchMessages.PreviewPatchPage_ReversePatch_text);
@@ -592,7 +592,7 @@
 
 	private void createStripSegmentCombo(Composite parent) {
 		final WorkspacePatcher patcher= getPatcher();
-		
+
 		Composite pair= new Composite(parent, SWT.NONE);
 		GridLayout gl= new GridLayout(); gl.numColumns= 2; gl.marginHeight= gl.marginWidth= 0;
 		pair.setLayout(gl);
@@ -612,7 +612,7 @@
 		gd= new GridData(GridData.VERTICAL_ALIGN_CENTER|GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.GRAB_HORIZONTAL);
 		fStripPrefixSegments.setLayoutData(gd);
 	}
-	
+
 	private void createShowMatchedToggle(Composite parent) {
 		final Button showMatched = new Button(parent, SWT.CHECK);
 		showMatched.setText(PatchMessages.PreviewPatchPage2_ShowMatched);
@@ -628,7 +628,7 @@
 		showMatched.setSelection(fInput.isShowMatched());
 		showMatched.setLayoutData(gd);
 	}
-	
+
 	public int getFuzzFactor() {
 		int fuzzFactor= 0;
 		if (fFuzzField!=null) {
@@ -641,7 +641,7 @@
 		}
 		return fuzzFactor;
 	}
-	
+
 	public int getStripPrefixSegments() {
 		int stripPrefixSegments= 0;
 		if (fStripPrefixSegments!=null) {
@@ -654,7 +654,7 @@
 		}
 		return stripPrefixSegments;
 	}
-	
+
 	private int guessFuzzFactor(final WorkspacePatcher patcher) {
 		final int[] result= new int[] { -1 };
 		try {
@@ -672,7 +672,7 @@
 		}
 		return result[0];
 	}
-	
+
 	public void ensureContentsSaved() {
 		try {
 			fInput.saveChanges(new NullProgressMonitor());
@@ -688,7 +688,7 @@
 	public CompareConfiguration getCompareConfiguration() {
 		return fConfiguration;
 	}
-	
+
 	private void restoreWidgetValues() {
 		IDialogSettings dialogSettings = CompareUI.getPlugin().getDialogSettings();
 		settings = dialogSettings.getSection(PREVIEWPATCHPAGE_NAME);
@@ -703,30 +703,30 @@
 				getPatcher().setGenerateRejectFile(generateRejects.getSelection());
 			}
 		}
-	}			
-	
+	}
+
 	void saveWidgetValues() {
 		settings.put(EXPAND_PATCH_OPTIONS, patchOptions.isExpanded());
 		settings.put(GENERATE_REJECTS, generateRejects.getSelection());
 	}
-	
+
 	private String countLines() {
 		int added = 0, removed = 0;
-		
+
 		IPreferenceStore store = CompareUIPlugin.getDefault().getPreferenceStore();
 		String addedLinesRegex = store.getString(ComparePreferencePage.ADDED_LINES_REGEX);
 		String removedLinesRegex = store.getString(ComparePreferencePage.REMOVED_LINES_REGEX);
-		
+
 		if ((addedLinesRegex == null || "".equals(addedLinesRegex)) //$NON-NLS-1$
 				&& (removedLinesRegex == null || "".equals(removedLinesRegex))) { //$NON-NLS-1$
-			
+
 			fPatcher.countLines();
 			FilePatch2[] fileDiffs = fPatcher.getDiffs();
 			for (int i = 0; i < fileDiffs.length; i++) {
 				added += fileDiffs[i].getAddedLines();
 				removed += fileDiffs[i].getRemovedLines();
 			}
-			
+
 		} else {
 
 			Pattern addedPattern = Pattern.compile(addedLinesRegex);
@@ -747,7 +747,7 @@
 				}
 			}
 		}
-		
+
 		return NLS.bind(PatchMessages.PreviewPatchPage2_AddedRemovedLines,
 				new String[] { added + "", removed + "" }); //$NON-NLS-1$ //$NON-NLS-2$
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/RetargetPatchElementDialog.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/RetargetPatchElementDialog.java
index e2cd728..425aa0b 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/RetargetPatchElementDialog.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/RetargetPatchElementDialog.java
@@ -31,7 +31,7 @@
 import org.eclipse.ui.views.navigator.ResourceComparator;
 
 class RetargetPatchElementDialog extends Dialog {
-	
+
 	private static class RetargetPatchContentProvider extends BaseWorkbenchContentProvider {
 		private final PatchDiffNode node;
 		public RetargetPatchContentProvider(PatchDiffNode node) {
@@ -56,12 +56,12 @@
 			return super.getChildren(element);
 		}
 	}
-	
+
 	private final PatchDiffNode fSelectedNode;
 	private final WorkspacePatcher fPatcher;
 	private TreeViewer fViewer;
 	private IResource fSelectedResource;
-	
+
 	public RetargetPatchElementDialog(Shell shell, WorkspacePatcher patcher, PatchDiffNode node) {
 		super(shell);
 		Assert.isNotNull(patcher);
@@ -77,7 +77,7 @@
 		okButton.setEnabled(false);
 		return control;
 	}
-	
+
 	protected Control createDialogArea(Composite parent) {
 		Composite composite= (Composite) super.createDialogArea(parent);
 
@@ -88,7 +88,7 @@
 		GridLayout layout= new GridLayout();
 		layout.numColumns= 1;
         layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
-        layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);			
+        layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
 		composite.setLayout(layout);
 		final GridData data= new GridData(SWT.FILL, SWT.FILL, true, true);
 		composite.setLayoutData(data);
@@ -124,7 +124,7 @@
 			return ResourcesPlugin.getWorkspace().getRoot();
 		return fPatcher.getTarget();
 	}
-	
+
 	private IResource getInitialSelection() {
 		if (fSelectedNode instanceof PatchFileDiffNode) {
 			PatchFileDiffNode node = (PatchFileDiffNode) fSelectedNode;
@@ -174,7 +174,7 @@
 				fPatcher.retargetHunk(node.getHunkResult().getHunk(), (IFile)fSelectedResource);
 			}
 		}
-		super.okPressed();	
+		super.okPressed();
 	}
 
 	void setupListeners() {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/UnmatchedHunkTypedElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/UnmatchedHunkTypedElement.java
index a4923b4..6efb9f3 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/UnmatchedHunkTypedElement.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/UnmatchedHunkTypedElement.java
@@ -30,7 +30,7 @@
 public class UnmatchedHunkTypedElement extends HunkTypedElement implements IContentChangeNotifier, IEditableContent {
 
 	private ContentChangeNotifier changeNotifier;
-	
+
 	public UnmatchedHunkTypedElement(HunkResult result) {
 		// An unmatched hunk element is always used for the before state and is full context
 		super(result, false, true);
@@ -86,7 +86,7 @@
 	private Patcher getPatcher() {
 		return Patcher.getPatcher(getConfiguration());
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.internal.patch.HunkTypedElement#getContents()
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspaceFileDiffResult.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspaceFileDiffResult.java
index 2c95ff8..659e8b8 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspaceFileDiffResult.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspaceFileDiffResult.java
@@ -27,17 +27,17 @@
 			PatchConfiguration configuration) {
 		super(diff, configuration);
 	}
-	
+
 	protected boolean canCreateTarget(IStorage storage) {
 		IProject project = getPatcher().getTargetProject(getDiff());
 		return project != null && project.isAccessible();
 	}
-	
+
 	protected boolean targetExists(IStorage storage) {
 		IFile file= (IFile)storage;
 		return file != null && file.isAccessible();
 	}
-	
+
 	protected List getLines(IStorage storage, boolean create) {
 		IFile file= getTargetFile();
 		List lines = LineReader.load(file, create);
@@ -51,7 +51,7 @@
 	public IFile getTargetFile() {
 		return getPatcher().getTargetFile(getDiff());
 	}
-	
+
 	public void refresh() {
 		refresh(Utilities.getReaderCreator(getTargetFile()), null);
 	}
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspacePatcher.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspacePatcher.java
index d63a246..611a7aa 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspacePatcher.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/internal/patch/WorkspacePatcher.java
@@ -39,7 +39,7 @@
 import org.eclipse.core.runtime.jobs.MultiRule;
 
 /**
- * A Patcher 
+ * A Patcher
  * - knows how to parse various patch file formats into some in-memory structure,
  * - holds onto the parsed data and the options to use when applying the patches,
  * - knows how to apply the patches to files and folders.
@@ -58,14 +58,14 @@
 	public WorkspacePatcher(IResource target) {
 		setTarget(target);
 	}
-	
+
 	protected void patchParsed(PatchReader patchReader) {
 		super.patchParsed(patchReader);
 		fDiffProjects = patchReader.getDiffProjects();
 		fIsWorkspacePatch = patchReader.isWorkspacePatch();
 		fIsGitPatch = patchReader.isGitPatch() && calculateStripGitPrefixSegments() > -1;
 	}
-	
+
 	public DiffProject[] getDiffProjects() {
 		return fDiffProjects;
 	}
@@ -172,15 +172,15 @@
 			}
 		}
 	}
-	
+
 	private boolean isAccessible(FilePatch2 diff) {
 		return isEnabled(diff) && Utilities.getProject(diff.getProject()).isAccessible();
 	}
 
 	/**
-	 * Returns the target files of all the Diffs contained by this 
+	 * Returns the target files of all the Diffs contained by this
 	 * DiffProject.
-	 * @param project 
+	 * @param project
 	 * @return An array of IFiles that are targeted by the Diffs
 	 */
 	public IFile[] getTargetFiles(DiffProject project) {
@@ -202,7 +202,7 @@
 			return Utilities.getProject(project).getFile(path);
 		return super.getTargetFile(diff);
 	}
-	
+
 	private IPath getFullPath(FilePatch2 diff) {
 		IPath path = diff.getStrippedPath(getStripPrefixSegments(), isReversed());
 		DiffProject project = getProject(diff);
@@ -214,7 +214,7 @@
 	public ISchedulingRule[] getTargetProjects() {
 		List projects= new ArrayList();
 		IResourceRuleFactory ruleFactory= ResourcesPlugin.getWorkspace().getRuleFactory();
-		// Determine the appropriate scheduling rules 
+		// Determine the appropriate scheduling rules
 		for (int i= 0; i < fDiffProjects.length; i++) {
 			IProject tempProject= Utilities.getProject(fDiffProjects[i]);
 			// The goal here is to lock as little of the workspace as necessary
@@ -226,7 +226,7 @@
 			MultiRule multiRule= new MultiRule(new ISchedulingRule[] { scheduleRule, tempProject } );
 			projects.add(multiRule);
 		}
-	
+
 		return (ISchedulingRule[]) projects.toArray(new ISchedulingRule[projects.size()]);
 	}
 
@@ -244,8 +244,8 @@
 			}
 		}
 		fDiffProjects = temp;
-	}	
-	
+	}
+
 	protected Object getElementParent(Object element) {
 		if (element instanceof FilePatch2 && fDiffProjects != null) {
 			FilePatch2 diff = (FilePatch2) element;
@@ -261,7 +261,7 @@
 	public boolean isRetargeted(Object object) {
 		return retargetedDiffs.containsKey(object);
 	}
-	
+
 	public IPath getOriginalPath(Object object) {
 		return (IPath)retargetedDiffs.get(object);
 	}
@@ -269,7 +269,7 @@
 	public void retargetDiff(FilePatch2 diff, IFile file) {
 		retargetedDiffs.put(diff, diff.getPath(false));
 		IHunk[] hunks = diff.getHunks();
-		
+
 		if (isWorkspacePatch()){
 			//since the diff has no more hunks to apply, remove it from the parent and the patcher
 			diff.getProject().remove(diff);
@@ -310,7 +310,7 @@
 				return fileDiff;
 			}
 		}
-		
+
 		// Create a new diff for the file
 		IPath path = getDiffPath(file);
 		FilePatch2 newDiff = new FilePatch2(path, 0, path, 0);
@@ -361,7 +361,7 @@
 		// Since the project has been retargeted, remove it from the patcher
 		removeProject(project);
 	}
-	
+
 	/**
 	 * Return the diff project for the given project
 	 * or <code>null</code> if the diff project doesn't exist
@@ -380,7 +380,7 @@
 		}
 		return null;
 	}
-	
+
 	public int getStripPrefixSegments() {
 		// Segments are never stripped from a workspace patch
 		if (isWorkspacePatch())
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/ApplyPatchOperation.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/ApplyPatchOperation.java
index 6623f00..3d7bf37 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/ApplyPatchOperation.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/ApplyPatchOperation.java
@@ -43,42 +43,42 @@
  * user can also supply a title and image to override the default ones provided by the Apply Patch Wizard.
  * Note that the Apply Patch Wizard does not require any particular set of inputs, and in the absence of
  * any user supplied values, it will work in default mode.
- * 
+ *
  * @since 3.3
  *
  */
 public class ApplyPatchOperation implements Runnable {
 
 	private IWorkbenchPart part;
-	
+
 	/**
 	 * Used for the Preview Patch page.
 	 */
 	private CompareConfiguration configuration;
-	
+
 	/**
 	 * The patch to use as an input into the Apply Patch wizard
 	 */
 	private IStorage patch;
-	
+
 	/**
 	 * Specific <code>IResource</code> target to patch.
 	 */
 	private IResource target;
-	
+
 	/**
 	 * An optional image for the patch wizard
 	 */
 	private ImageDescriptor patchWizardImage;
-	
-	
+
+
 	/**
 	 * An optional title for the patchWizard
 	 */
 	private String patchWizardTitle;
 
 	private boolean saveAllEditors = true;
-	
+
 	/**
 	 * Return whether the given storage contains a patch.
 	 * @param storage the storage
@@ -88,7 +88,7 @@
 	public static boolean isPatch(IStorage storage) throws CoreException {
 		return internalParsePatch(storage).length > 0;
 	}
-	
+
 	/**
 	 * Parse the given patch and return the set of file patches that it contains.
 	 * @param storage the storage that contains the patch
@@ -98,19 +98,19 @@
 	public static IFilePatch[] parsePatch(IStorage storage) throws CoreException {
 		return internalParsePatch(storage);
 	}
-	
+
 	/**
 	 * Creates a new ApplyPatchOperation with the supplied compare configuration, patch and target.
 	 * The behaviour of the Apply Patch wizard is controlled by the number of parameters supplied:
 	 * <ul>
 	 * <li>If a patch is supplied, the initial input page is skipped. If a patch is not supplied the wizard
 	 * will open on the input page.</li>
-	 * <li>If the patch is a workspace patch, the target selection page is skipped and the preview page is 
+	 * <li>If the patch is a workspace patch, the target selection page is skipped and the preview page is
 	 * displayed.</li>
 	 * <li>If the patch is not a workspace patch and the target is specified, the target page is still
 	 * shown with the target selected.</li>
-	 * </ul> 
-	 * 
+	 * </ul>
+	 *
 	 * @param part 	an IWorkbenchPart or <code>null</code>
 	 * @param patch		an IStorage containing a patch in unified diff format or <code>null</code>
 	 * @param target	an IResource which the patch is to be applied to or <code>null</code>
@@ -123,7 +123,7 @@
 		this.target = target;
 		this.configuration = configuration;
 	}
-	
+
 	/**
 	 * Create an operation for the given part and resource. This method is a convenience
 	 * method that calls {@link #ApplyPatchOperation(IWorkbenchPart, IStorage, IResource, CompareConfiguration)}
@@ -142,7 +142,7 @@
 	 */
 	public void openWizard() {
 		saveAllEditors();
-		
+
 		if (saveAllEditors) {
 			PatchWizard wizard = new PatchWizard(patch, target, configuration);
 			if (patchWizardImage != null)
@@ -166,7 +166,7 @@
 			return CompareUIPlugin.getShell();
 		return part.getSite().getShell();
 	}
-	
+
 	/**
 	 * This method will save all dirty editors. It will prompt the user if the Compare preference to save
 	 * dirty editors before viewing a patch is <code>false</code>. Clients can use this or provide their own
@@ -175,7 +175,7 @@
 	protected void saveAllEditors(){
 		saveAllEditors = IDE.saveAllEditors(new IResource[]{ResourcesPlugin.getWorkspace().getRoot()}, !ComparePreferencePage.getSaveAllEditors());
 	}
-	
+
 	/**
 	 * Sets the title of the patch wizard. Needs to be set before {@link #openWizard()} is called.
 	 * @param title	a string to display in the title bar
@@ -183,7 +183,7 @@
 	public void setPatchWizardTitle(String title){
 		this.patchWizardTitle = title;
 	}
-	
+
 	/**
 	 * Sets the image descriptor to use in the patch wizard. Needs to be set before  {@link #openWizard()} is called.
 	 * @param descriptor an image descriptor
@@ -191,14 +191,14 @@
 	public void setPatchWizardImageDescriptor(ImageDescriptor descriptor){
 		this.patchWizardImage = descriptor;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see java.lang.Runnable#run()
 	 */
 	public void run() {
 		openWizard();
 	}
-	
+
 	private static IFilePatch[] internalParsePatch(IStorage storage)
 			throws CoreException {
 		BufferedReader reader = Utilities.createReader(storage);
@@ -230,5 +230,5 @@
 		}
 	}
 
-	
+
 }
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/IFilePatch.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/IFilePatch.java
index dbbe84c..e2f8b89 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/IFilePatch.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/IFilePatch.java
@@ -16,7 +16,7 @@
 
 /**
  * A representation of a file patch that can be applied to an input stream.
- * 
+ *
  * @see ApplyPatchOperation#parsePatch(org.eclipse.core.resources.IStorage)
  * @since 3.3
  * @noimplement This interface is not intended to be implemented by clients.
@@ -24,20 +24,20 @@
  *              {@link ApplyPatchOperation#parsePatch(org.eclipse.core.resources.IStorage)}.
  */
 public interface IFilePatch extends IFilePatch2 {
-	
+
 	/**
 	 * Special constant that will be returned from get getBeforeDate() or
 	 * getAfterDate() if the date is unknown. Equal to Midnight, Jan 1, 1970
 	 * GMT.
-	 * 
+	 *
 	 * @since 3.4
 	 */
 	public static long DATE_UNKNOWN = 0;
-	
+
 	/**
 	 * Return the target path for this patch. The target path may differ
 	 * depending on whether the patch is being reversed or not.
-	 * 
+	 *
 	 * @param configuration the patch configuration
 	 * @return the target path for this patch
 	 * @see PatchConfiguration#isReversed()
@@ -48,7 +48,7 @@
 	 * Apply this patch to the given file contents. The result provides the
 	 * original and patch contents and also indicates whether some portions of
 	 * the patch (called hunks) failed to apply.
-	 * 
+	 *
 	 * @param contents the file contents
 	 * @param configuration the patch configuration
 	 * @param monitor a progress monitor
@@ -56,7 +56,7 @@
 	 */
 	public IFilePatchResult apply(IStorage contents,
 			PatchConfiguration configuration, IProgressMonitor monitor);
-	
+
 	/**
 	 * Return the header information of the patch or
 	 * <code>null</code> if there was no header text.
@@ -65,11 +65,11 @@
 	 * <code>null</code>
 	 */
 	public String getHeader();
-	
+
 	/**
 	 * Returns the milliseconds time value of the before date from the patch, or
 	 * DATE_UNKNOWN if the date is unknown.
-	 * 
+	 *
 	 * @return milliseconds time value of the before date from the patch
 	 * @since 3.4
 	 */
@@ -78,7 +78,7 @@
 	/**
 	 * Returns the milliseconds time value of the after date from the patch, or
 	 * DATE_UNKNOWN if the date is unknown.
-	 * 
+	 *
 	 * @return milliseconds time value of the after date from the patch
 	 * @since 3.4
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/WorkspacePatcherUI.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/WorkspacePatcherUI.java
index 8ea92b7..ce7d47b 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/WorkspacePatcherUI.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/patch/WorkspacePatcherUI.java
@@ -21,7 +21,7 @@
  */
 public class WorkspacePatcherUI {
 	/**
-	 * Returns a string that must be the first line of a workspace patch (a multi-project patch 
+	 * Returns a string that must be the first line of a workspace patch (a multi-project patch
 	 * that is understood by the Apply Patch wizard). Each project to be included in the patch
 	 * must be prefixed by the line obtained from the <code>getWorkspacePatchProjectHeader()</code>.
 	 * This snippet outlines how the a workspace patch is to be created:
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
index 95a14d3..2345590 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffContainer.java
@@ -21,9 +21,9 @@
 public abstract class DiffContainer extends DiffElement implements IDiffContainer {
 	private static IDiffElement[] fgEmptyArray= new IDiffElement[0];
 	private ArrayList<IDiffElement> fChildren;
-	
+
 	/**
-	 * Creates a new container with the specified kind under the given parent. 
+	 * Creates a new container with the specified kind under the given parent.
 	 *
 	 * @param parent under which the new container is added as a child or <code>null</code>.
 	 * @param kind of difference (defined in <code>Differencer</code>).
@@ -31,11 +31,11 @@
 	public DiffContainer(IDiffContainer parent, int kind) {
 		super(parent, kind);
 	}
-	
+
 	/**
 	 * Tries to find the child with the given name.
 	 * Returns <code>null</code> if no such child exists.
-	 * 
+	 *
 	 * @param name of the child to find
 	 * @return the first element with a matching name
 	 */
@@ -81,7 +81,7 @@
 			child.setParent(null);
 		}
 	}
-	
+
 	@Override
 	public boolean hasChildren() {
 		return fChildren != null && fChildren.size() > 0;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
index 4f6d331..513feaa 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DiffNode.java
@@ -29,7 +29,7 @@
  * a compare with the <code>Differencer</code>.
  * <p>
  * Clients typically use this class as is, but may subclass if required.
- * 
+ *
  * @see DiffTreeViewer
  * @see Differencer
  */
@@ -40,7 +40,7 @@
 	private boolean fDontExpand;
 	private ListenerList<ICompareInputChangeListener> fListener;
 	private boolean fSwapSides;
-	
+
 	/**
 	 * Creates a new <code>DiffNode</code> and initializes with the given values.
 	 *
@@ -111,7 +111,7 @@
 			fListener= new ListenerList<>();
 		fListener.add(listener);
 	}
-	
+
 	/**
 	 * Unregisters a <code>ICompareInput</code> listener.
 	 * Has no effect if listener is not registered.
@@ -126,7 +126,7 @@
 				fListener= null;
 		}
 	}
-	
+
 	/**
 	 * Sends out notification that a change has occurred on the <code>ICompareInput</code>.
 	 */
@@ -204,10 +204,10 @@
 
 		if (right.equals(left))
 			return right;
-			
+
 		String s1;
 		String s2;
-		
+
 		if (fSwapSides) {
 			s1= left;
 			s2= right;
@@ -215,15 +215,15 @@
 			s1= right;
 			s2= left;
 		}
-		
+
 		String fmt= Utilities.getString("DiffNode.nameFormat"); //$NON-NLS-1$
 		return MessageFormat.format(fmt, s1, s2);
 	}
-	
+
 	void swapSides(boolean swap) {
 		fSwapSides= swap;
 	}
-		
+
 	/* (non Javadoc)
 	 * see ITypedElement.getImage
 	 */
@@ -255,7 +255,7 @@
 	public void setAncestor(ITypedElement ancestor) {
 	    fAncestor= ancestor;
 	}
-	
+
 	/* (non Javadoc)
 	 * see ICompareInput.getAncestor
 	 */
@@ -263,7 +263,7 @@
 	public ITypedElement getAncestor() {
 		return fAncestor;
 	}
-	
+
 	/**
 	 * Sets the left input to the given value.
 	 *
@@ -272,7 +272,7 @@
 	public void setLeft(ITypedElement left) {
 		fLeft= left;
 	}
-	
+
 	/* (non Javadoc)
 	 * see ICompareInput.getLeft
 	 */
@@ -289,7 +289,7 @@
 	public void setRight(ITypedElement right) {
 		fRight= right;
 	}
-	
+
 	/* (non Javadoc)
 	 * see ICompareInput.getRight
 	 */
@@ -304,12 +304,12 @@
 	@Override
 	public void copy(boolean leftToRight) {
 		//System.out.println("DiffNode.copy: " + leftToRight);
-		
+
 		IDiffContainer pa= getParent();
 		if (pa instanceof ICompareInput) {
 			ICompareInput parent= (ICompareInput) pa;
 			Object dstParent= leftToRight ? parent.getRight() : parent.getLeft();
-			
+
 			if (dstParent instanceof IEditableContent) {
 				ITypedElement dst= leftToRight ? getRight() : getLeft();
 				ITypedElement src= leftToRight ? getLeft() : getRight();
@@ -318,14 +318,14 @@
 					setRight(dst);
 				else
 					setLeft(dst);
-				
+
 				//setKind(Differencer.NO_CHANGE);
-				
+
 				fireChange();
 			}
 		}
 	}
-	
+
 	/* (non Javadoc)
 	 * see Object.hashCode
 	 */
@@ -339,7 +339,7 @@
 		}
 		return hashCode;
 	}
-	
+
 	/* (non Javadoc)
 	 * see Object.equals
 	 */
@@ -357,7 +357,7 @@
 		}
 		return super.equals(other);
 	}
-	
+
 	private static String[] getPath(ITypedElement el, int level) {
 		String[] path= null;
 		if (el instanceof IDiffContainer) {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
index e42185a..57ecdef 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/Differencer.java
@@ -41,7 +41,7 @@
  * <LI><code>contentsEqual</code>: for comparing the content of leaf objects, that is, objects without children,
  * <LI><code>visit</code>: for every pair of compared object the compare result is passed in.
  * </UL>
- * Clients may use as is, or subclass to provide a custom implementation for the three hooks. 
+ * Clients may use as is, or subclass to provide a custom implementation for the three hooks.
  * However the default implementation already deals with the typical case:
  * <UL>
  * <LI><code>getChildren</code>: tries to apply the <code>IStructureComparator</code>
@@ -85,12 +85,12 @@
 	 * Three-way change constant (value 4) indicating a change on left side.
 	 */
 	public static final int LEFT= 4;
-	
+
 	/**
 	 * Three-way change constant (value 8) indicating a change on right side.
 	 */
 	public static final int RIGHT= 8;
-	
+
 	/**
 	 * Three-way change constant (value 12) indicating a change on left and
 	 * right sides.
@@ -103,19 +103,19 @@
 	public static final int DIRECTION_MASK= 12;
 
 	/**
-	 * Constant (value 16) indicating a change on left and 
+	 * Constant (value 16) indicating a change on left and
 	 * right side (with respect to ancestor) but left and right are identical.
 	 */
 	public static final int PSEUDO_CONFLICT= 16;
 
-	
+
 	static class Node {
 		List<Node> fChildren;
 		int fCode;
 		Object fAncestor;
 		Object fLeft;
 		Object fRight;
-		
+
 		Node() {
 			// nothing to do
 		}
@@ -156,10 +156,10 @@
 //				name= ((ITypedElement)fRight).getName();
 //			if (name == null)
 //				name= "???"; //$NON-NLS-1$
-//			
+//
 //			for (int i= 0; i < level; i++)
 //				System.out.print("  "); //$NON-NLS-1$
-//			
+//
 //			System.out.println(getDiffType(fCode) + name);
 //		}
 
@@ -190,17 +190,17 @@
 //			}
 //			return dir + change + " "; //$NON-NLS-1$
 //		}
-	} 
-	
+	}
+
 	/**
 	 * Creates a new differencing engine.
 	 */
 	public Differencer() {
 		// nothing to do
 	}
-	
+
 	/**
-	 * Starts the differencing engine on the three input objects. If threeWay is <code>true</code> a 
+	 * Starts the differencing engine on the three input objects. If threeWay is <code>true</code> a
 	 * three-way comparison is performed, otherwise a two-way compare (in the latter case the ancestor argument is ignored).
 	 * The progress monitor is passed to the method <code>updateProgress</code> which is called for every node or
 	 * leaf compare. The method returns the object that was returned from the top-most call to method <code>visit</code>.
@@ -210,16 +210,16 @@
 	 * @param pm a progress monitor which is passed to method <code>updateProgress</code>
 	 * @param data a client data that is passed to the top-level call to <code>visit</code>
 	 * @param ancestor the ancestor object of the compare (may be <code>null</code>)
-	 * @param left the left object of the compare 
+	 * @param left the left object of the compare
 	 * @param right the right object of the compare
 	 * @return the object returned from the top most call to method <code>visit</code>,
 	 *   possibly <code>null</code>
 	 */
 	public Object findDifferences(boolean threeWay, IProgressMonitor pm, Object data, Object ancestor, Object left, Object right) {
 		Node root= new Node();
-		
+
 		int code= traverse(threeWay, root, pm, threeWay ? ancestor : null, left, right);
-				
+
 		if (code != NO_CHANGE) {
 			List<Node> l= root.fChildren;
 			if (!l.isEmpty()) {
@@ -229,7 +229,7 @@
 		}
 		return null;
 	}
-	
+
 	/*
 	 * Traverse tree in postorder.
 	 */
@@ -238,23 +238,23 @@
 		Object[] ancestorChildren= getChildren(ancestor);
 		Object[] rightChildren= getChildren(right);
 		Object[] leftChildren= getChildren(left);
-		
+
 		int code= NO_CHANGE;
-		
+
 		Node node= new Node(parent, ancestor, left, right);
-			
+
 		boolean content= true;	// we reset this if we have at least one child
-		
+
 		if (((threeWay && ancestorChildren != null) || !threeWay)
 					 && rightChildren != null && leftChildren != null) {
 			// we only recurse down if no leg is null
 			// a node
-			
+
 			Set<Object> allSet= new HashSet<>(20);
 			Map<Object, Object> ancestorSet= null;
 			Map<Object, Object> rightSet= null;
 			Map<Object, Object> leftSet= null;
-						
+
 			if (ancestorChildren != null) {
 				ancestorSet= new HashMap<>(10);
 				for (int i= 0; i < ancestorChildren.length; i++) {
@@ -281,21 +281,21 @@
 					allSet.add(leftChild);
 				}
 			}
-						
+
 			for (Object keyChild : allSet) {
 				if (pm != null) {
 					if (pm.isCanceled())
 						throw new OperationCanceledException();
-						
+
 					updateProgress(pm, keyChild);
 				}
-				
+
 				Object ancestorChild= ancestorSet != null ? ancestorSet.get(keyChild) : null;
 				Object leftChild= leftSet != null ? leftSet.get(keyChild) : null;
 				Object rightChild= rightSet != null ? rightSet.get(keyChild) : null;
-				
+
 				int c= traverse(threeWay, node, pm, ancestorChild, leftChild, rightChild);
-			
+
 				if ((c & CHANGE_TYPE_MASK) != NO_CHANGE) {
 					code|= CHANGE;	// deletions and additions of child result in a change of the container
 					code|= (c & DIRECTION_MASK);	// incoming & outgoing are just ored
@@ -306,12 +306,12 @@
 
 		if (content)			// a leaf
 			code= compare(threeWay, ancestor, left, right);
-								
+
 		node.fCode= code;
-							
+
 		return code;
 	}
-	
+
 	/**
 	 * Called for every node or leaf comparison.
 	 * The differencing engine passes in the input objects of the compare and the result of the compare.
@@ -333,15 +333,15 @@
 	protected Object visit(Object data, int result, Object ancestor, Object left, Object right) {
 		return new DiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right);
 	}
-	
+
 	/*
 	 * Performs a 2-way or 3-way compare of the given leaf elements and returns an integer
 	 * describing the kind of difference.
 	 */
 	private int compare(boolean threeway, Object ancestor, Object left, Object right) {
-		
+
 		int description= NO_CHANGE;
-		
+
 		if (threeway) {
 			if (ancestor == null) {
 				if (left == null) {
@@ -368,18 +368,18 @@
 						if (contentsEqual(ancestor,	MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR, right, MergeViewerContentProvider.RIGHT_CONTRIBUTOR))
 							description= LEFT | DELETION;
 						else
-							description= CONFLICTING | CHANGE;	
+							description= CONFLICTING | CHANGE;
 					}
 				} else {
 					if (right == null) {
 						if (contentsEqual(ancestor, MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR, left, MergeViewerContentProvider.LEFT_CONTRIBUTOR))
 							description= RIGHT | DELETION;
 						else
-							description= CONFLICTING | CHANGE;	
+							description= CONFLICTING | CHANGE;
 					} else {
 						boolean ay= contentsEqual(ancestor, MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR, left, MergeViewerContentProvider.LEFT_CONTRIBUTOR);
 						boolean am= contentsEqual(ancestor, MergeViewerContentProvider.ANCESTOR_CONTRIBUTOR, right, MergeViewerContentProvider.RIGHT_CONTRIBUTOR);
-						
+
 						if (ay && am) {
 							// empty
 						} else if (ay && !am) {
@@ -411,7 +411,7 @@
 				}
 			}
 		}
-							
+
 		return description;
 	}
 
@@ -422,7 +422,7 @@
 	 * <code>contentsEqual(Object input1, Object input2)</code>. Subclasses may
 	 * override to implement a different content compare on the given inputs.
 	 * </p>
-	 * 
+	 *
 	 * @param input1
 	 *            first input to contents compare
 	 * @param contributor1
@@ -445,7 +445,7 @@
 	 * <p>
 	 * The <code>Differencer</code> implementation
 	 * returns <code>true</code> if both inputs implement <code>IStreamContentAccessor</code>
-	 * and their byte contents is identical. Subclasses may override to implement 
+	 * and their byte contents is identical. Subclasses may override to implement
 	 * a different content compare on the given inputs.
 	 * </p>
 	 *
@@ -454,20 +454,20 @@
 	 * @return <code>true</code> if content is equal
 	 */
 	protected boolean contentsEqual(Object input1, Object input2) {
-		
+
 		if (input1 == input2)
 			return true;
-			
+
 		InputStream is1= getStream(input1);
 		InputStream is2= getStream(input2);
-		
+
 		if (is1 == null && is2 == null)	// no byte contents
 			return true;
-		
+
 		try {
 			if (is1 == null || is2 == null)	// only one has contents
 				return false;
-			
+
 			while (true) {
 				int c1= is1.read();
 				int c2= is2.read();
@@ -475,7 +475,7 @@
 					return true;
 				if (c1 != c2)
 					break;
-				
+
 			}
 		} catch (IOException ex) {
 			// NeedWork
@@ -497,7 +497,7 @@
 		}
 		return false;
 	}
-	
+
 	/*
 	 * Tries to return an InputStream for the given object.
 	 * Returns <code>null</code> if the object not an IStreamContentAccessor
@@ -513,11 +513,11 @@
 		}
 		return null;
 	}
-	
+
 	/**
 	 * Returns the children of the given input or <code>null</code> if there are no children.
 	 * <p>
-	 * The <code>Differencer</code> implementation checks whether the input 
+	 * The <code>Differencer</code> implementation checks whether the input
 	 * implements the <code>IStructureComparator</code> interface. If yes it is used
 	 * to return an array containing all children. Otherwise <code>null</code> is returned.
 	 * Subclasses may override to implement a different strategy to enumerate children.
@@ -531,7 +531,7 @@
 			return ((IStructureComparator) input).getChildren();
 		return null;
 	}
-	
+
 	/**
 	 * Called for every leaf or node compare to update progress information.
 	 * <p>
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
index 5a0601c..85add54 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/DocumentRangeNode.java
@@ -50,20 +50,20 @@
  * to character ranges within the document.
  * <p>
  * Clients need to be aware that this node registers position updaters with the document
- * using {@link IDocument#addPosition(String, Position)} with the category set to 
- * {@link IDocumentRange#RANGE_CATEGORY}. The {@link StructureDiffViewer} will 
+ * using {@link IDocument#addPosition(String, Position)} with the category set to
+ * {@link IDocumentRange#RANGE_CATEGORY}. The {@link StructureDiffViewer} will
  * remove the category when the nodes are no longer being used. Other clients
  * must do the same.
  * <p>
  * Subclasses may add additional state collected while parsing the document.
- * </p> 
+ * </p>
  * @see Differencer
  */
 public class DocumentRangeNode
 		implements IDocumentRange, IStructureComparator, IEditableContent,
 		IEncodedStreamContentAccessor, IAdaptable, IEditableContentExtension {
 	private static final String UTF_16= "UTF-16"; //$NON-NLS-1$
-		
+
 	private IDocument fBaseDocument;
 	private Position fRange; // the range in the base document
 	private int fTypeCode;
@@ -75,7 +75,7 @@
 	/**
 	 * Creates a new <code>DocumentRangeNode</code> for the given range within the specified
 	 * document. The <code>typeCode</code> is uninterpreted client data. The ID is used when comparing
-	 * two nodes with each other: i.e. the differencing engine performs a content compare 
+	 * two nodes with each other: i.e. the differencing engine performs a content compare
 	 * on two nodes if their IDs are equal.
 	 *
 	 * @param typeCode a type code for this node
@@ -87,13 +87,13 @@
 	public DocumentRangeNode(int typeCode, String id, IDocument document, int start, int length) {
 		this(null, typeCode, id, document, start, length);
 	}
-	
+
 	/**
 	 * Creates a new <code>DocumentRangeNode</code> for the given range within the specified
 	 * document. The <code>typeCode</code> is uninterpreted client data. The ID is used when comparing
-	 * two nodes with each other: i.e. the differencing engine performs a content compare 
+	 * two nodes with each other: i.e. the differencing engine performs a content compare
 	 * on two nodes if their IDs are equal.
-	 * 
+	 *
 	 * @param parent the parent node
 	 * @param typeCode a type code for this node
 	 * @param id an identifier for this node
@@ -129,7 +129,7 @@
 	public IDocument getDocument() {
 		return fBaseDocument;
 	}
-	
+
 	/* (non Javadoc)
 	 * see IDocumentRange.getRange
 	 */
@@ -137,7 +137,7 @@
 	public Position getRange() {
 		return fRange;
 	}
-	
+
 	/**
 	 * Returns the type code of this node.
 	 * The type code is uninterpreted client data which can be set in the constructor.
@@ -147,7 +147,7 @@
 	public int getTypeCode() {
 		return fTypeCode;
 	}
-	
+
 	/**
 	 * Returns this node's id.
 	 * It is used in <code>equals</code> and <code>hashcode</code>.
@@ -182,7 +182,7 @@
 	@Override
 	public Object[] getChildren() {
 		if (fChildren != null)
-			return fChildren.toArray(); 
+			return fChildren.toArray();
 		return new Object[0];
 	}
 
@@ -335,7 +335,7 @@
 			}
 		}
 	}
-	
+
 	/* (non Javadoc)
 	 * see IStreamContentAccessor.getContents
 	 */
@@ -346,7 +346,7 @@
 			s= fBaseDocument.get(fRange.getOffset(), fRange.getLength());
 		} catch (BadLocationException ex) {
 			s= ""; //$NON-NLS-1$
-		}		
+		}
 		return new ByteArrayInputStream(Utilities.getBytes(s, UTF_16));
 	}
 
@@ -362,7 +362,7 @@
 			return fParent.isEditable();
 		return true;
 	}
-		
+
 	@Override
 	public ITypedElement replace(ITypedElement child, ITypedElement other) {
 		if (fParent == null) {
@@ -371,10 +371,10 @@
 			// since all the subclasses that have been converted overrode the method anyway
 			DocumentRangeNode src= null;
 			String srcContents= ""; //$NON-NLS-1$
-			
+
 			if (other != null) {
 				src= (DocumentRangeNode) child;
-				
+
 				if (other instanceof IStreamContentAccessor) {
 					try {
 						srcContents= Utilities.readString((IStreamContentAccessor)other);
@@ -384,14 +384,14 @@
 					}
 				}
 			}
-	
+
 			if (child == null) // no destination: we have to add the contents into the parent
 				add(srcContents, null, src);
 		}
 		nodeChanged(this);
 		return child;
 	}
-	
+
 	/**
 	 * Default implementation that calls {@link #internalSetContents(byte[])}
 	 * and then {@link #nodeChanged(DocumentRangeNode)}. Subclasses
@@ -407,7 +407,7 @@
 
 	/**
 	 * Method that is invoked from {@link #setContent(byte[])}. By default,
-	 * this method does nothing. Subclasses may override. 
+	 * this method does nothing. Subclasses may override.
 	 * @param content the new content
 	 * @since 3.3
 	 */
@@ -419,7 +419,7 @@
 	public String getCharset() {
 		return UTF_16;
 	}
-	
+
 	/**
 	 * Method that should be invoked whenever the contents of this node are
 	 * changed. the change is propagated to the parent if there is one.
@@ -430,7 +430,7 @@
 		if (fParent != null)
 			fParent.nodeChanged(node);
 	}
-	
+
 	/**
 	 * Implement {@link IAdaptable#getAdapter(Class)} in order to provide
 	 * an {@link ISharedDocumentAdapter} that provides the proper look up key based
@@ -446,7 +446,7 @@
 	public <T> T getAdapter(Class<T> adapter) {
 		if (adapter == ISharedDocumentAdapter.class && fParent != null)
 			return fParent.getAdapter(adapter);
-		
+
 		return Platform.getAdapterManager().getAdapter(this, adapter);
 	}
 
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
index d95c355..49ed4f4 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInput.java
@@ -31,12 +31,12 @@
  * the (non-<code>null</code>) left side of an <code>ICompareInput</code>
  * is copied to the right side by means of method <code>copy</code>.
  * This should trigger a call to <code>compareInputChanged</code> of registered
- * <code>ICompareInputChangeListener</code>s. 
+ * <code>ICompareInputChangeListener</code>s.
  * <p>
- * Clients can implement this interface, or use the convenience implementation 
+ * Clients can implement this interface, or use the convenience implementation
  * <code>DiffNode</code>.
  * </p>
- * 
+ *
  * @see StructureDiffViewer
  * @see org.eclipse.compare.contentmergeviewer.ContentMergeViewer
  * @see DiffNode
@@ -52,7 +52,7 @@
 	 * @return name of input
 	 */
 	String getName();
-	
+
 	/**
 	 * Returns an image representing this input.
 	 * This image is typically displayed when this input is shown in a viewer.
@@ -73,7 +73,7 @@
 	 * @return kind of difference (see <code>Differencer</code>)
 	 */
 	int getKind();
-	
+
 	/**
 	 * Returns the ancestor side of this input.
 	 * Returns <code>null</code> if this input has no ancestor
@@ -82,7 +82,7 @@
 	 * @return the ancestor of this input, or <code>null</code>
 	 */
 	ITypedElement getAncestor();
-	
+
 	/**
 	 * Returns the left side of this input.
 	 * Returns <code>null</code> if there is no left side (deletion or addition).
@@ -90,7 +90,7 @@
 	 * @return the left side of this input, or <code>null</code>
 	 */
 	ITypedElement getLeft();
-	
+
 	/**
 	 * Returns the right side of this input.
 	 * Returns <code>null</code> if there is no right side (deletion or addition).
@@ -98,7 +98,7 @@
 	 * @return the right side of this input, or <code>null</code>
 	 */
 	ITypedElement getRight();
-	
+
 	/**
 	 * Registers the given listener for notification.
 	 * If the identical listener is already registered the method has no effect.
@@ -106,7 +106,7 @@
 	 * @param listener the listener to register for changes of this input
 	 */
 	void addCompareInputChangeListener(ICompareInputChangeListener listener);
-	
+
 	/**
 	 * Unregisters the given listener.
 	 * If the identical listener is not registered the method has no effect.
@@ -114,9 +114,9 @@
 	 * @param listener the listener to unregister
 	 */
 	void removeCompareInputChangeListener(ICompareInputChangeListener listener);
-	
+
 	/**
-	 * Copy one side (source) to the other side (destination) depending on the 
+	 * Copy one side (source) to the other side (destination) depending on the
 	 * value of <code>leftToRight</code>. This method is called from
 	 * a merge viewer if a corresponding action ("take left" or "take right")
 	 * has been pressed.
@@ -133,7 +133,7 @@
 	 * </UL>
 	 * In addition the implementation should send out notification to the registered
 	 * <code>ICompareInputChangeListener</code>.
-	 * 
+	 *
 	 * @param leftToRight if <code>true</code> the left side is copied to the right side.
 	 * If <code>false</code> the right side is copied to the left side
 	 */
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
index 9906af2..b20603d 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/ICompareInputChangeListener.java
@@ -18,18 +18,18 @@
  * the (non-null) left side of an <code>ICompareInput</code>
  * is copied to the right side (which was <code>null</code>).
  * This triggers a call to <code>compareInputChanged</code> of registered
- * <code>ICompareInputChangeListener</code>. 
+ * <code>ICompareInputChangeListener</code>.
  * <p>
  * Note however, that listener are not informed if the content of one of the sides changes.
  * <p>
- * Clients may implement this interface. It is also implemented by viewers that take 
+ * Clients may implement this interface. It is also implemented by viewers that take
  * an <code>ICompareInput</code> as input.
  * </p>
  */
 public interface ICompareInputChangeListener {
-	
+
 	/**
-	 * Called whenever the value (not the content) of one or more of the three sides 
+	 * Called whenever the value (not the content) of one or more of the three sides
  	 * of a <code>ICompareInput</code> has changed.
 	 *
 	 * @param source the <code>ICompareInput</code> that has changed
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
index e7ec0fb..633e30a 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffContainer.java
@@ -30,15 +30,15 @@
 	 * Returns whether this container has at least one child.
 	 * In some cases this methods avoids having to call the
 	 * potential more costly <code>getChildren</code> method.
-	 * 
-	 * @return <code>true</code> if this container has at least one child 
+	 *
+	 * @return <code>true</code> if this container has at least one child
 	 */
 	boolean hasChildren();
 
 	/**
 	 * Returns the children of this container.
 	 * If this container has no children an empty array is returned (not <code>null</code>).
-	 * 
+	 *
 	 * @return the children of this container as an array
 	 */
 	IDiffElement[] getChildren();
@@ -50,7 +50,7 @@
 	 * @param child the child to be added to this container
 	 */
 	void add(IDiffElement child);
-	
+
 	/**
 	 * Removes the given child from this container.
 	 * If the container becomes empty it is removed from its container.
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
index 3577d1c..02023e1 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IDiffElement.java
@@ -35,7 +35,7 @@
  * @see DiffNode
  */
 public interface IDiffElement extends ITypedElement {
-	
+
 	/**
 	 * Returns the kind of difference as defined in <code>Differencer</code>.
 	 *
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
index bbfd40d..7d5423b 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureComparator.java
@@ -14,7 +14,7 @@
  * Interface used to compare hierarchical structures.
  * It is used by the differencing engine.
  * <p>
- * Clients typically implement this interface in an adaptor class which 
+ * Clients typically implement this interface in an adaptor class which
  * wrappers the objects to be compared.
  *
  * @see org.eclipse.compare.ResourceNode
@@ -33,7 +33,7 @@
 	 * Returns whether some other object is "equal to" this one
 	 * with respect to a structural comparison. For example, when comparing
 	 * Java class methods, <code>equals</code> would return <code>true</code>
-	 * if two methods have the same signature (the argument names and the 
+	 * if two methods have the same signature (the argument names and the
 	 * method body might differ).
 	 *
 	 * @param other the reference object with which to compare
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java
index 60f6f8a..e30053f 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/IStructureCreator2.java
@@ -25,7 +25,7 @@
  * @since 3.3
  */
 public interface IStructureCreator2 extends IStructureCreator {
-	
+
 	/**
 	 * Creates a tree structure consisting of <code>IStructureComparator</code>s
 	 * from the given object and returns its root object. Implementing this
@@ -33,19 +33,19 @@
 	 * (e.g. a parsing error) the value <code>null</code> is returned.
 	 * <p>
 	 * This method is equivalent to
-	 * {@link IStructureCreator#getStructure(Object)} with the exception that 
+	 * {@link IStructureCreator#getStructure(Object)} with the exception that
 	 * the {@link #destroy(Object)} method must be called with the returned
 	 * comparator as a parameter when the comparator is no longer
 	 * needed. This is done to allow structure creators
 	 * to make use of shared resources such a file buffer.
 	 * <p>
-	 * Also, the node returned from this method should adapt to an 
-	 * {@link ISharedDocumentAdapter} if the provided input has 
-	 * a shared document adapter and it is being used by the 
+	 * Also, the node returned from this method should adapt to an
+	 * {@link ISharedDocumentAdapter} if the provided input has
+	 * a shared document adapter and it is being used by the
 	 * this creator. The convenience class {@link SharedDocumentAdapterWrapper}
 	 * is provided to allow the creator to wrap the adapter of the input
 	 * so that the proper key can be returned.
-	 * 
+	 *
 	 * @param input
 	 *            the object from which to create the tree of
 	 *            <code>IStructureComparator</code>
@@ -57,16 +57,16 @@
 	 * @see #destroy(Object)
 	 */
 	IStructureComparator createStructure(Object input, IProgressMonitor monitor) throws CoreException;
-	
+
 	/**
 	 * Creates the single node specified by path from the given input object.
 	 * This method is equivalent to
-	 * {@link IStructureCreator#locate(Object, Object)} with the exception that 
+	 * {@link IStructureCreator#locate(Object, Object)} with the exception that
 	 * the {@link #destroy(Object)} method must be called with the returned
 	 * element as a parameter when the element is no longer
 	 * needed. This is done to allow structure creators
 	 * to make use of shared resources such a file buffer.
-	 * 
+	 *
 	 * @param element specifies a sub object within the input object
 	 * @param input the object from which to create the
 	 *            <code>ITypedElement</code>
@@ -74,12 +74,12 @@
 	 * @return the single node specified by <code>path</code> or
 	 *         <code>null</code>
 	 * @throws CoreException if an error occurs while parsing the input
-	 * 
+	 *
 	 * @see IStructureCreator#locate(Object, Object)
 	 * @see #destroy(Object)
 	 */
 	ITypedElement createElement(Object element, Object input, IProgressMonitor monitor) throws CoreException;
-	
+
 	/**
 	 * Release any resources associated with the given object.
 	 * This method must be called for objects returned from either
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/SharedDocumentAdapterWrapper.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/SharedDocumentAdapterWrapper.java
index f5e3223..fdac1f8 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/SharedDocumentAdapterWrapper.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/SharedDocumentAdapterWrapper.java
@@ -28,18 +28,18 @@
  */
 public class SharedDocumentAdapterWrapper implements ISharedDocumentAdapter {
 	private ISharedDocumentAdapter wrappedAdapter;
-	
+
 	/**
 	 * Helper method that returns the shared document adapter for the
 	 * given typed element or <code>null</code> if there isn't one.
 	 * @param element the typed element
-	 * @return the shared document adapter for the given typed element 
+	 * @return the shared document adapter for the given typed element
 	 *    or <code>null</code>
 	 */
 	public static ISharedDocumentAdapter getAdapter(Object element) {
 		return Adapters.adapt(element, ISharedDocumentAdapter.class);
 	}
-	
+
 	/**
 	 * Creates a shared document adapter that wraps the given adapter.
 	 * @param wrappedAdapter the wrapped adapter
@@ -48,7 +48,7 @@
 		super();
 		this.wrappedAdapter = wrappedAdapter;
 	}
-	
+
 	@Override
 	public void connect(IDocumentProvider provider, IEditorInput documentKey)
 			throws CoreException {
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java
index e7fd543..71be84b 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureCreator.java
@@ -45,7 +45,7 @@
  * <p>
  * Clients may subclass this class.
  * </p>
- * 
+ *
  * @since 3.3
  */
 public abstract class StructureCreator implements IStructureCreator2 {
@@ -64,16 +64,16 @@
 					return null;
 				}
 			}
-			
+
 			if (contents == null) {
 				// Node has no contents
 				return null;
 			}
-			
+
 			doc= new Document(contents);
 			setupDocument(doc);
 		}
-		
+
 		try {
 			return createStructureComparator(input, doc, null, null);
 		} catch (CoreException e) {
@@ -126,7 +126,7 @@
 		}
 		return getStructure(element);
 	}
-	
+
 	/**
 	 * Creates an {@link IStructureComparator} for the given element using the
 	 * contents available in the given document. If the provided
@@ -150,7 +150,7 @@
 	 *            document was obtained or <code>null</code> if the document
 	 *            is not shared.
 	 * @param monitor a progress monitor or <code>null</code> if progress is not required
-	 * 
+	 *
 	 * @return a structure comparator
 	 * @throws CoreException
 	 */
@@ -186,7 +186,7 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * Returns the partitioner to be associated with the document or
 	 * <code>null</code> is partitioning is not needed or if the subclass
@@ -208,7 +208,7 @@
 	protected String getDocumentPartitioning() {
 		return null;
 	}
-	
+
 	/**
 	 * Default implementation of save that extracts the contents from
 	 * the document of an {@link IDocumentRange} and sets it on the
@@ -271,7 +271,7 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Create an {@link ISharedDocumentAdapter} that will provide the document key for the given input
 	 * object for any {@link DocumentRangeNode} instances whose document is the same as the
@@ -299,7 +299,7 @@
 			}
 		};
 	}
-	
+
 	/**
 	 * Default implementation of {@link #createElement(Object, Object, IProgressMonitor)}
 	 * that uses {@link #getPath(Object, Object)} to determine the
@@ -329,11 +329,11 @@
 		IStructureComparator structure= createStructure(input, monitor);
 		if (structure == null)	// we couldn't parse the structure
 			return null;		// so we can't find anything
-			
+
 		// find the path in the tree
 		return findElement(structure, path);
 	}
-	
+
 	/**
 	 * Default implementation of {@link #locate(Object, Object)} that
 	 * uses {@link #getPath(Object, Object)} to determine the
@@ -353,11 +353,11 @@
 		IStructureComparator structure= getStructure(input);
 		if (structure == null)	// we couldn't parse the structure
 			return null;		// so we can't find anything
-			
+
 		// find the path in the tree
 		return (IStructureComparator)findElement(structure, path);
 	}
-	
+
 	/**
 	 * Finds the element at the given path in the given structure.
 	 * This method is invoked from the {@link #createElement(Object, Object, IProgressMonitor)}
@@ -400,7 +400,7 @@
 		}
 		return null;
 	}
-	
+
 	/**
 	 * Returns the path of the element in the structure of it's containing input
 	 * or <code>null</code> if the element is not contained in the input. This method is
@@ -439,7 +439,7 @@
 	 * Returns true if the two nodes are equal for comparison purposes. If
 	 * <code>compareFilters</code> is not empty, the filters are applied to each
 	 * line of each node's text representation.
-	 * 
+	 *
 	 * @param node1
 	 * @param contributor1
 	 *            either 'A', 'L', or 'R' for ancestor, left or right
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
index a6520ec..0155bd5 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureDiffViewer.java
@@ -55,21 +55,21 @@
  * @see ICompareInput
  * @noextend This class is not intended to be subclassed by clients.
  */
-		
+
 public class StructureDiffViewer extends DiffTreeViewer {
 	private Differencer fDifferencer;
 	private boolean fThreeWay= false;
-	
+
 	private StructureInfo fAncestorStructure = new StructureInfo();
 	private StructureInfo fLeftStructure = new StructureInfo();
 	private StructureInfo fRightStructure = new StructureInfo();
-	
+
 	private IStructureCreator fStructureCreator;
 	private IDiffContainer fRoot;
 	private IContentChangeListener fContentChangedListener;
 	private CompareViewerSwitchingPane fParent;
 	private ICompareInputChangeListener fCompareInputChangeListener;
-	
+
 	/*
 	 * A set of background tasks for updating the structure
 	 */
@@ -82,7 +82,7 @@
 			monitor.done();
 		}
 	};
-	
+
 	private IRunnableWithProgress inputChangedTask = new IRunnableWithProgress() {
 		@Override
 		public void run(IProgressMonitor monitor) throws InvocationTargetException,
@@ -93,7 +93,7 @@
 			monitor.done();
 		}
 	};
-	
+
 	/*
 	 * A helper class for holding the input and generated structure
 	 * for the ancestor, left and right inputs.
@@ -108,7 +108,7 @@
 				refresh(monitor);
 			}
 		};
-		
+
 		public boolean setInput(ITypedElement newInput, boolean force, IProgressMonitor monitor) {
 			boolean changed = false;
 			if (force || newInput != fInput) {
@@ -142,7 +142,7 @@
 				}
 			}
 		}
-		
+
 		public IStructureComparator getStructureComparator() {
 			return fStructureComparator;
 		}
@@ -151,7 +151,7 @@
 			IStructureComparator oldComparator = fStructureComparator;
 			fStructureComparator= createStructure(monitor);
 			// Dispose of the old one after in case they are using a shared document
-			// (i.e. disposing it after will hold on to a reference to the document 
+			// (i.e. disposing it after will hold on to a reference to the document
 			// so it doesn't get freed and reloaded)
 			if (oldComparator instanceof IDisposable) {
 				IDisposable disposable = (IDisposable) oldComparator;
@@ -162,7 +162,7 @@
 		public Object getInput() {
 			return fInput;
 		}
-		
+
 		private IStructureComparator createStructure(IProgressMonitor monitor) {
 			// Defend against concurrent disposal
 			Object input = fInput;
@@ -190,7 +190,7 @@
 			return refreshTask;
 		}
 	}
-	
+
 	/**
 	 * Creates a new viewer for the given SWT tree control with the specified configuration.
 	 *
@@ -204,7 +204,7 @@
 			fParent= (CompareViewerSwitchingPane) c;
 		initialize();
 	}
-	
+
 	/**
 	 * Creates a new viewer under the given SWT parent with the specified configuration.
 	 *
@@ -217,11 +217,11 @@
 			fParent= (CompareViewerSwitchingPane) parent;
 		initialize();
 	}
-	
+
 	private void initialize() {
-		
+
 		setAutoExpandLevel(3);
-		
+
 		fContentChangedListener= new IContentChangeListener() {
 			@Override
 			public void contentChanged(IContentChangeNotifier changed) {
@@ -235,7 +235,7 @@
 			}
 		};
 	}
-	
+
 	/**
 	 * Configures the <code>StructureDiffViewer</code> with a structure creator.
 	 * The structure creator is used to create a hierarchical structure
@@ -251,7 +251,7 @@
 				tree.setData(CompareUI.COMPARE_VIEWER_TITLE, getTitle());
 		}
 	}
-	
+
 	/**
 	 * Returns the structure creator or <code>null</code> if no
 	 * structure creator has been set with <code>setStructureCreator</code>.
@@ -261,7 +261,7 @@
 	public IStructureCreator getStructureCreator() {
 		return fStructureCreator;
 	}
-	
+
 	/**
 	 * Reimplemented to get the descriptive title for this viewer from the <code>IStructureCreator</code>.
 	 * @return the viewer's name
@@ -272,18 +272,18 @@
 			return fStructureCreator.getName();
 		return super.getTitle();
 	}
-	
+
 	/**
 	 * Overridden because the input of this viewer is not identical to the root of the tree.
 	 * The tree's root is a IDiffContainer that was returned from the method <code>diff</code>.
-	 * 
+	 *
 	 * @return the root of the diff tree produced by method <code>diff</code>
 	 */
 	@Override
 	protected Object getRoot() {
 		return fRoot;
 	}
-	
+
     /*
      * (non-Javadoc) Method declared on StructuredViewer.
      * Overridden to create the comparable structures from the input object
@@ -304,7 +304,7 @@
 				initialSelection();
 		}
 	}
-	
+
 	@Override
 	protected void initialSelection() {
 		expandToLevel(2);
@@ -324,7 +324,7 @@
 		fContentChangedListener= null;
 		super.handleDispose(event);
 	}
-	
+
 	/**
 	 * Recreates the comparable structures for the input sides.
 	 * @param input this viewer's new input
@@ -332,7 +332,7 @@
 	protected void compareInputChanged(ICompareInput input) {
 		compareInputChanged(input, false);
 	}
-		
+
 	/* package */ void compareInputChanged(final ICompareInput input, final boolean force) {
 		if (input == null) {
 			// When closing, we don't need a progress monitor to handle the input change
@@ -360,7 +360,7 @@
 	/* package */ void compareInputChanged(ICompareInput input, boolean force, IProgressMonitor monitor) {
 		ITypedElement t= null;
 		boolean changed= false;
-		
+
 		if (input != null)
 			t= input.getAncestor();
 		fThreeWay= (t != null);
@@ -368,17 +368,17 @@
 		try {
 			if (fAncestorStructure.setInput(t, force, subMonitor(monitor, 100)))
 				changed = true;
-			
+
 			if (input != null)
 				t= input.getLeft();
 			if (fLeftStructure.setInput(t, force, subMonitor(monitor, 100)))
 				changed = true;
-			
+
 			if (input != null)
 				t= input.getRight();
 			if (fRightStructure.setInput(t, force, subMonitor(monitor, 100)))
 				changed = true;
-			
+
 			// The compare configuration is nulled when the viewer is disposed
 			CompareConfiguration cc = getCompareConfiguration();
 			if (changed && cc != null)
@@ -387,7 +387,7 @@
 			endWork(monitor);
 		}
 	}
-	
+
 	private void endWork(IProgressMonitor monitor) {
 		if (monitor != null)
 			monitor.done();
@@ -414,7 +414,7 @@
 	protected void contentChanged(final IContentChangeNotifier changed) {
 		if (fStructureCreator == null)
 			return;
-		
+
 		if (changed == null) {
 			getCompareConfiguration().getContainer().runAsynchronously(fAncestorStructure.getRefreshTask());
 			getCompareConfiguration().getContainer().runAsynchronously(fLeftStructure.getRefreshTask());
@@ -436,7 +436,7 @@
 	 * difference tree is being built. Clients may override this method to
 	 * perform their own pre-processing. This default implementation does
 	 * nothing.
-	 * 
+	 *
 	 * @param ancestor the ancestor input to the differencing operation
 	 * @param left the left input to the differencing operation
 	 * @param right the right input to the differencing operation
@@ -448,7 +448,7 @@
 	protected void preDiffHook(IStructureComparator ancestor, IStructureComparator left, IStructureComparator right) {
 		// we do nothing here
 	}
-	
+
 	/**
 	 * This method is called from within {@link #diff(IProgressMonitor)} before
 	 * the difference tree is being built. This method may be called from a
@@ -458,7 +458,7 @@
 	 * {@link #preDiffHook(IStructureComparator, IStructureComparator, IStructureComparator)}
 	 * from the UI thread. Clients should override this method even if they
 	 * don't perform pre-processing to avoid the call to the UI thread.
-	 * 
+	 *
 	 * @param ancestor the ancestor input to the differencing operation
 	 * @param left the left input to the differencing operation
 	 * @param right the right input to the differencing operation
@@ -482,22 +482,22 @@
 	protected void diff(IProgressMonitor monitor) {
 		try {
 			beginWork(monitor, 150);
-			
+
 			IStructureComparator ancestorComparator = fAncestorStructure.getStructureComparator();
 			IStructureComparator leftComparator = fLeftStructure.getStructureComparator();
 			IStructureComparator rightComparator = fRightStructure.getStructureComparator();
-			
-			preDiffHook(ancestorComparator, 
-					leftComparator, 
+
+			preDiffHook(ancestorComparator,
+					leftComparator,
 					rightComparator,
 					subMonitor(monitor, 25));
-								
+
 			String message= null;
-			
+
 			if ((fThreeWay && ancestorComparator == null) || leftComparator == null || rightComparator == null) {
 				// could not get structure of one (or more) of the legs
 				fRoot= null;
-				message= CompareMessages.StructureDiffViewer_StructureError;	
+				message= CompareMessages.StructureDiffViewer_StructureError;
 			} else {	// calculate difference of the two (or three) structures
 				if (fDifferencer == null)
 					fDifferencer= new Differencer() {
@@ -515,17 +515,17 @@
 							return o;
 						}
 					};
-				
+
 				fRoot= (IDiffContainer) fDifferencer.findDifferences(fThreeWay, subMonitor(monitor, 100), null,
 						ancestorComparator, leftComparator, rightComparator);
-						
+
 				if (fRoot == null || fRoot.getChildren().length == 0) {
-					message= CompareMessages.StructureDiffViewer_NoStructuralDifferences;	
+					message= CompareMessages.StructureDiffViewer_NoStructuralDifferences;
 				} else {
 					postDiffHook(fDifferencer, fRoot, subMonitor(monitor, 25));
 				}
 			}
-			
+
 			if (Display.getCurrent() != null) {
 				refreshAfterDiff(message);
 			} else {
@@ -547,12 +547,12 @@
 			return;
 		if (fParent != null)
 			fParent.setTitleArgument(message);
-		
+
 		refresh(getRoot());
 		// Setting the auto-expand level doesn't do anything for refreshes
 		expandToLevel(3);
 	}
-	
+
 	/**
 	 * Runs the difference engine and refreshes the tree.
 	 */
@@ -579,7 +579,7 @@
 			handleFailedRefresh(CompareMessages.StructureDiffViewer_3);
 		}
 	}
-	
+
 	private void handleFailedRefresh(final String message) {
 		Runnable runnable = new Runnable() {
 			@Override
@@ -601,7 +601,7 @@
 	 * difference tree has been built. Clients may override this method to
 	 * perform their own post-processing. This default implementation does
 	 * nothing.
-	 * 
+	 *
 	 * @param differencer the differencer used to perform the differencing
 	 * @param root the non-<code>null</code> root node of the difference tree
 	 * @since 2.0
@@ -613,7 +613,7 @@
 	protected void postDiffHook(Differencer differencer, IDiffContainer root) {
 		// we do nothing here
 	}
-	
+
 	/**
 	 * This method is called from within {@link #diff(IProgressMonitor)} after
 	 * the difference tree has been built. This method may be called from a
@@ -623,7 +623,7 @@
 	 * {@link #postDiffHook(Differencer, IDiffContainer)} from the UI thread.
 	 * Clients should override this method even if they don't perform post
 	 * processing to avoid the call to the UI thread.
-	 * 
+	 *
 	 * @param differencer the differencer used to perform the differencing
 	 * @param root the non-<code>null</code> root node of the difference tree
 	 * @param monitor a progress monitor or <code>null</code> if progress is
@@ -638,7 +638,7 @@
 			}
 		});
 	}
-	
+
 	/*
 	 * Performs a byte compare on the given objects.
 	 * Called from the difference engine.
@@ -668,7 +668,7 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Tracks property changes of the configuration object.
 	 * Clients may override to track their own property changes.
@@ -702,7 +702,7 @@
 			super.propertyChange(event);
 		}
 	}
-		
+
 	/**
 	 * Overridden to call the <code>save</code> method on the structure creator after
 	 * nodes have been copied from one side to the other side of an input object.
@@ -713,14 +713,14 @@
 	@Override
 	protected void copySelected(boolean leftToRight) {
 		super.copySelected(leftToRight);
-		
+
 		if (fStructureCreator != null) {
 			fStructureCreator.save(
 							leftToRight ? fRightStructure.getStructureComparator() : fLeftStructure.getStructureComparator(),
 							leftToRight ? fRightStructure.getInput() : fLeftStructure.getInput());
 		}
 	}
-	
+
 	private void syncExec(final Runnable runnable) {
 		if (getControl().isDisposed())
 			return;
diff --git a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureRootNode.java b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureRootNode.java
index 57056b6..c2d7736 100644
--- a/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureRootNode.java
+++ b/bundles/org.eclipse.compare/compare/org/eclipse/compare/structuremergeviewer/StructureRootNode.java
@@ -42,7 +42,7 @@
 	 * @see #getTypeCode()
 	 */
 	public static final int ROOT_TYPE = 0;
-	
+
 	/**
 	 * The string constant (value <code>"root"</code>) that is used as the id of the root node.
 	 * @see #getId()
@@ -52,7 +52,7 @@
 	private final Object fInput;
 	private final StructureCreator fCreator;
 	private ISharedDocumentAdapter fAdapter;
-	
+
 	/**
 	 * Create the structure root node.
 	 * @param document the document
@@ -67,7 +67,7 @@
 		fCreator = creator;
 		fAdapter = adapter;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.services.IDisposable#dispose()
 	 */
@@ -94,7 +94,7 @@
 		}
 		return super.getAdapter(adapter);
 	}
-	
+
 	/**
 	 * Override in order to invoke {@link IStructureCreator#save(IStructureComparator, Object)} when the
 	 * contents of a node have changed.
@@ -104,7 +104,7 @@
 	protected void nodeChanged(DocumentRangeNode node) {
 		fCreator.save(this, fInput);
 	}
-	
+
 	@Override
 	public ITypedElement replace(ITypedElement child, ITypedElement other) {
 		// TODO: I believe the parent implementation is flawed but didn't to remove
@@ -136,7 +136,7 @@
 	public String getType() {
 		return FOLDER_TYPE;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode#isReadOnly()
 	 */
@@ -148,7 +148,7 @@
 		}
 		return super.isReadOnly();
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.compare.structuremergeviewer.DocumentRangeNode#validateEdit(org.eclipse.swt.widgets.Shell)
 	 */