diff --git a/bundles/org.eclipse.ui.ide/.settings/org.eclipse.jdt.ui.prefs b/bundles/org.eclipse.ui.ide/.settings/org.eclipse.jdt.ui.prefs
index 6afdc4e..550a72c 100644
--- a/bundles/org.eclipse.ui.ide/.settings/org.eclipse.jdt.ui.prefs
+++ b/bundles/org.eclipse.ui.ide/.settings/org.eclipse.jdt.ui.prefs
@@ -44,7 +44,7 @@
 sp_cleanup.qualify_static_method_accesses_with_declaring_class=false
 sp_cleanup.remove_private_constructors=true
 sp_cleanup.remove_redundant_type_arguments=true
-sp_cleanup.remove_trailing_whitespaces=false
+sp_cleanup.remove_trailing_whitespaces=true
 sp_cleanup.remove_trailing_whitespaces_all=true
 sp_cleanup.remove_trailing_whitespaces_ignore_empty=false
 sp_cleanup.remove_unnecessary_casts=true
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IContributorResourceAdapter.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IContributorResourceAdapter.java
index 5f3cd99..d536408 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IContributorResourceAdapter.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IContributorResourceAdapter.java
@@ -24,11 +24,11 @@
 public interface IContributorResourceAdapter {
 
     /**
-     * Return the resource that the supplied adaptable 
+     * Return the resource that the supplied adaptable
      * adapts to. An IContributorResourceAdapter assumes
      * that any object passed to it adapts to one equivalent
      * resource.
-     * 
+     *
      * @param adaptable the adaptable being queried
      * @return a resource, or <code>null</code> if there
      * 	is no adapted resource for this type
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IFileEditorInput.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IFileEditorInput.java
index e6fb501..6301c5f 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IFileEditorInput.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IFileEditorInput.java
@@ -23,8 +23,8 @@
  * File-oriented editors should support this as a valid input type, and allow
  * full read-write editing of its content.
  * </p><p>
- * A default implementation of this interface is provided by 
- * org.eclipse.ui.part.FileEditorInput.  
+ * A default implementation of this interface is provided by
+ * org.eclipse.ui.part.FileEditorInput.
  * </p><p>
  * All editor inputs must implement the <code>IAdaptable</code> interface;
  * extensions are managed by the platform's adapter manager.
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerActionFilter.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerActionFilter.java
index 4f374b6..1aa49c4 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerActionFilter.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerActionFilter.java
@@ -13,10 +13,10 @@
 
 /**
  * Describes the public attributes for a marker and the acceptable values
- * each may have.  
+ * each may have.
  * <p>
- * A popup menu extension may use these constants to describe its object target.  
- * Each identifies an attribute name or possible value.  
+ * A popup menu extension may use these constants to describe its object target.
+ * Each identifies an attribute name or possible value.
  * <p>
  * Clients are not expected to implement this interface.
  * </p>
@@ -25,37 +25,37 @@
  */
 public interface IMarkerActionFilter extends IActionFilter {
     /**
-     * An attribute indicating the marker type (value <code>"type"</code>).  
-     * The attribute value in xml should match one of the marker types defined in 
-     * the workbench's marker extension point.  Common examples are 
+     * An attribute indicating the marker type (value <code>"type"</code>).
+     * The attribute value in xml should match one of the marker types defined in
+     * the workbench's marker extension point.  Common examples are
      * <code>IMarker.TASK, IMarker.BOOKMARK, and IMarker.MARKER</code>.
      */
     public static final String TYPE = "type"; //$NON-NLS-1$
 
     /**
-     * An attribute indicating the marker super type (value <code>"superType"</code>).  
-     * The attribute value in xml should match one of the marker types defined in 
-     * the workbench's marker extension point.  Common examples are 
+     * An attribute indicating the marker super type (value <code>"superType"</code>).
+     * The attribute value in xml should match one of the marker types defined in
+     * the workbench's marker extension point.  Common examples are
      * <code>IMarker.TASK, IMarker.BOOKMARK, and IMarker.MARKER</code>.
      */
     public static final String SUPER_TYPE = "superType"; //$NON-NLS-1$
 
     /**
      * An attribute indicating the marker priority (value <code>"priority"</code>).
-     * The attribute value in xml must be one of <code>IMarker.PRIORITY_LOW, 
-     * IMarker.PRIORITY_NORMAL, or IMarker.PRIORITY_HIGH</code> 
+     * The attribute value in xml must be one of <code>IMarker.PRIORITY_LOW,
+     * IMarker.PRIORITY_NORMAL, or IMarker.PRIORITY_HIGH</code>
      */
     public static final String PRIORITY = "priority"; //$NON-NLS-1$
 
     /**
-     * An attribute indicating the marker severity (value <code>"severity"</code>).  
-     * The attribute value in xml in xml must be one of <code>IMarker.SEVERITY_ERROR, 
-     * IMarker.SEVERITY_WARNING, or IMarker.SEVERITY_INFO</code> 
+     * An attribute indicating the marker severity (value <code>"severity"</code>).
+     * The attribute value in xml in xml must be one of <code>IMarker.SEVERITY_ERROR,
+     * IMarker.SEVERITY_WARNING, or IMarker.SEVERITY_INFO</code>
      */
     public static final String SEVERITY = "severity"; //$NON-NLS-1$
 
     /**
-     * An attribute indicating whether the marker is considered done (value 
+     * An attribute indicating whether the marker is considered done (value
      * <code>"done"</code>).
      * The attribute value in xml must be one of <code>"true" or "false"</code>.
      */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerHelpRegistry.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerHelpRegistry.java
index 63f36d8..060d13c 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerHelpRegistry.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerHelpRegistry.java
@@ -12,22 +12,22 @@
 
 import org.eclipse.core.resources.IMarker;
 
-/** 
+/**
  * Registry of F1 help contexts and resolutions for markers.
  * <p>
- * The information contained in the registry is read from the 
+ * The information contained in the registry is read from the
  * org.eclipse.ui.markerhelp and org.eclipse.ui.markerresolution
  * extension points.
  * </p>
- * 
+ *
  * @since 2.0
  */
 public interface IMarkerHelpRegistry {
     /**
      * Returns a help context id for the given marker or
-     * <code>null</code> if no help has been registered 
+     * <code>null</code> if no help has been registered
      * for the marker.
-     * 
+     *
      * @param marker the marker for which to obtain help
      * @return the help context id
      * @since 2.0
@@ -35,13 +35,13 @@
     public String getHelp(IMarker marker);
 
     /**
-     * Returns <code>false</code> if there are no resolutions for 
+     * Returns <code>false</code> if there are no resolutions for
      * the given marker. Returns <code>true</code> if their may
-     * be resolutions. In most cases a <code>true</code> value 
-     * means there are resolutions but due to plugin loading 
+     * be resolutions. In most cases a <code>true</code> value
+     * means there are resolutions but due to plugin loading
      * issues getResolutions may sometimes return an empty array
-     * after this method returns <code>true</code>. 
-     * 
+     * after this method returns <code>true</code>.
+     *
      * @param marker the marker for which to determine if there
      * are resolutions
      * @return <code>true</code> if there may be resolutions
@@ -50,10 +50,10 @@
     public boolean hasResolutions(IMarker marker);
 
     /**
-     * Returns an array of resolutions for the given marker. 
+     * Returns an array of resolutions for the given marker.
      * The returned array will be empty if there are no resolutions
      * for the marker.
-     * 
+     *
      * @param marker the marker for which to obtain resolutions
      * @return an array with the marker resolutions
      * @since 2.0
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution.java
index 8c70bbd..5372853 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution.java
@@ -12,23 +12,23 @@
 
 import org.eclipse.core.resources.IMarker;
 
-/** 
- * Resolution for a marker. When run, a resolution would 
+/**
+ * Resolution for a marker. When run, a resolution would
  * typically eliminate the need for the marker.
- * 
+ *
  * @since 2.0
  */
 public interface IMarkerResolution {
-    /** 
-     * Returns a short label indicating what the resolution will do. 
-     * 
+    /**
+     * Returns a short label indicating what the resolution will do.
+     *
      * @return a short label for this resolution
      */
     public String getLabel();
 
     /**
      * Runs this resolution.
-     * 
+     *
      * @param marker the marker to resolve
      */
     public void run(IMarker marker);
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution2.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution2.java
index a6045a6..90727c1 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution2.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolution2.java
@@ -12,11 +12,11 @@
 
 import org.eclipse.swt.graphics.Image;
 
-/** 
- * Extends <code>IMarkerResolution</code>.  This interface should be used 
- * in place of <code>IMarkerResolution</code> if a description and/or image 
+/**
+ * Extends <code>IMarkerResolution</code>.  This interface should be used
+ * in place of <code>IMarkerResolution</code> if a description and/or image
  * are desired.
- * 
+ *
  * @since 3.0
  */
 public interface IMarkerResolution2 extends IMarkerResolution {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator.java
index 5511eac..655d8d4 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator.java
@@ -12,11 +12,11 @@
 
 import org.eclipse.core.resources.IMarker;
 
-/** 
- * Creates resolutions for a given marker. 
- * When run, a resolution would typically eliminate 
+/**
+ * Creates resolutions for a given marker.
+ * When run, a resolution would typically eliminate
  * the need for the marker.
- * 
+ *
  * @since 2.0
  */
 public interface IMarkerResolutionGenerator {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator2.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator2.java
index e50ad55..311bc18 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator2.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IMarkerResolutionGenerator2.java
@@ -13,11 +13,11 @@
 
 import org.eclipse.core.resources.IMarker;
 
-/** 
- * A marker resolution generator should implement this interface rather than   
- * <code>IMarkerResolutionGenerator</code> if it can determine whether a particular marker 
+/**
+ * A marker resolution generator should implement this interface rather than
+ * <code>IMarkerResolutionGenerator</code> if it can determine whether a particular marker
  * has any resolutions more efficiently than computing all the resolutions.
- * 
+ *
  * @since 2.1
  */
 public interface IMarkerResolutionGenerator2 extends IMarkerResolutionGenerator {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IProjectActionFilter.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IProjectActionFilter.java
index 90411f9..f35dc2e 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IProjectActionFilter.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IProjectActionFilter.java
@@ -13,10 +13,10 @@
 
 /**
  * Describes the public attributes for a project and the acceptable values
- * each may have.  
+ * each may have.
  * <p>
- * A popup menu extension may use these constants to describe its object target.  
- * Each identifies an attribute name or possible value.  
+ * A popup menu extension may use these constants to describe its object target.
+ * Each identifies an attribute name or possible value.
  * <p>
  * Clients are not expected to implement this interface.
  * </p>
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IResourceActionFilter.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IResourceActionFilter.java
index 58214dd..5a9ed66 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IResourceActionFilter.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IResourceActionFilter.java
@@ -12,10 +12,10 @@
 
 /**
  * Describes the public attributes for a resource and the acceptable values
- * each may have.  
+ * each may have.
  * <p>
- * A popup menu extension may use these constants to describe its object target.  
- * Each identifies an attribute name or possible value.  
+ * A popup menu extension may use these constants to describe its object target.
+ * Each identifies an attribute name or possible value.
  * <p>
  * Clients are not expected to implement this interface.
  * </p>
@@ -24,7 +24,7 @@
  */
 public interface IResourceActionFilter extends IActionFilter {
     /**
-     * An attribute indicating the file name (value <code>"name"</code>).  
+     * An attribute indicating the file name (value <code>"name"</code>).
      * The attribute value in xml is unconstrained.  "*" may be used at the start or
      * the end to represent "one or more characters".
      */
@@ -56,7 +56,7 @@
     public static final String PROJECT_NATURE = "projectNature"; //$NON-NLS-1$
 
     /**
-     * An attribute indicating a persistent property on the selected resource 
+     * An attribute indicating a persistent property on the selected resource
      * (value <code>"persistentProperty"</code>).
      * If the value is a simple string, then this simply tests for existence of the property on the resource.
      * If it has the format <code>"propertyName=propertyValue" this obtains the value of the property
@@ -65,7 +65,7 @@
     public static final String PERSISTENT_PROPERTY = "persistentProperty"; //$NON-NLS-1$
 
     /**
-     * An attribute indicating a persistent property on the selected resource's project. 
+     * An attribute indicating a persistent property on the selected resource's project.
      * (value <code>"projectPersistentProperty"</code>).
      * If the value is a simple string, then this simply tests for existence of the property on the resource.
      * If it has the format <code>"propertyName=propertyValue" this obtains the value of the property
@@ -74,7 +74,7 @@
     public static final String PROJECT_PERSISTENT_PROPERTY = "projectPersistentProperty"; //$NON-NLS-1$
 
     /**
-     * An attribute indicating a session property on the selected resource 
+     * An attribute indicating a session property on the selected resource
      * (value <code>"sessionProperty"</code>).
      * If the value is a simple string, then this simply tests for existence of the property on the resource.
      * If it has the format <code>"propertyName=propertyValue" this obtains the value of the property
@@ -83,7 +83,7 @@
     public static final String SESSION_PROPERTY = "sessionProperty"; //$NON-NLS-1$
 
     /**
-     * An attribute indicating a session property on the selected resource's project. 
+     * An attribute indicating a session property on the selected resource's project.
      * (value <code>"projectSessionProperty"</code>).
      * If the value is a simple string, then this simply tests for existence of the property on the resource.
      * If it has the format <code>"propertyName=propertyValue" this obtains the value of the property
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IStorageEditorInput.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IStorageEditorInput.java
index 5b87227..7b7a6b1 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IStorageEditorInput.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/IStorageEditorInput.java
@@ -21,12 +21,12 @@
  * that are the same. The <code>IWorbenchPage.openEditor</code> APIs
  * are dependent on this to find an editor with the same input.
  * </p><p>
- * Clients should implement this interface to declare new types of 
+ * Clients should implement this interface to declare new types of
  * <code>IStorage</code> editor inputs.
  * </p><p>
  * File-oriented editors should support this as a valid input type, and display
  * its content for viewing (but not allow modification).
- * Within the editor, the "save" and "save as" operations should create a new 
+ * Within the editor, the "save" and "save as" operations should create a new
  * file resource within the workspace.
  * </p><p>
  * All editor inputs must implement the <code>IAdaptable</code> interface;
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/ResourceWorkingSetFilter.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/ResourceWorkingSetFilter.java
index 92a5ce6..60a58a1 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/ResourceWorkingSetFilter.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/ResourceWorkingSetFilter.java
@@ -17,9 +17,9 @@
 import org.eclipse.jface.viewers.ViewerFilter;
 
 /**
- * A resource working set filter filters resources from a view that 
+ * A resource working set filter filters resources from a view that
  * are neither a parent nor children of a working set element.
- * 
+ *
  * @since 2.0
  */
 public class ResourceWorkingSetFilter extends ViewerFilter {
@@ -29,8 +29,8 @@
 
     /**
      * Returns the active working set the filter is working with.
-     * 
-     * @return the active working set 
+     *
+     * @return the active working set
      */
     public IWorkingSet getWorkingSet() {
         return workingSet;
@@ -38,7 +38,7 @@
 
     /**
      * Sets the active working set.
-     * 
+     *
      * @param workingSet the working set the filter should work with
      */
     public void setWorkingSet(IWorkingSet workingSet) {
@@ -47,7 +47,7 @@
 
     /**
      * Determines if an element should be filtered out.
-     * 
+     *
      * @see ViewerFilter#select(Viewer, Object, Object)
      */
     @Override
@@ -73,13 +73,13 @@
     /**
      * Returns if the given resource is enclosed by a working set element.
      * The IContainmentAdapter of each working set element is used for the
-     * containment test. If there is no IContainmentAdapter for a working 
-     * set element, a simple resource based test is used. 
-     * 
+     * containment test. If there is no IContainmentAdapter for a working
+     * set element, a simple resource based test is used.
+     *
      * @param element resource to test for enclosure by a working set
-     * 	element 
-     * @return true if element is enclosed by a working set element and 
-     * 	false otherwise. 
+     * 	element
+     * @return true if element is enclosed by a working set element and
+     * 	false otherwise.
      */
     private boolean isEnclosed(IResource element) {
         IPath elementPath = element.getFullPath();
@@ -96,9 +96,9 @@
             IContainmentAdapter containmentAdapter = (IContainmentAdapter) workingSetElement
                     .getAdapter(IContainmentAdapter.class);
 
-            // if there is no IContainmentAdapter defined for the working  
-            // set element type fall back to using resource based  
-            // containment check 
+            // if there is no IContainmentAdapter defined for the working
+            // set element type fall back to using resource based
+            // containment check
             if (containmentAdapter != null) {
                 if (containmentAdapter.contains(workingSetElement, element,
                         IContainmentAdapter.CHECK_CONTEXT
@@ -117,17 +117,17 @@
 
     /**
      * Returns if the given resource is enclosed by a working set element.
-     * A resource is enclosed if it is either a parent of a working set 
+     * A resource is enclosed if it is either a parent of a working set
      * element, a child of a working set element or a working set element
      * itself.
      * Simple path comparison is used. This is only guaranteed to return
-     * correct results for resource working set elements. 
-     * 
+     * correct results for resource working set elements.
+     *
      * @param element resource to test for enclosure by a working set
      * 	element
-     * @param elementPath full, absolute path of the element to test 
-     * @return true if element is enclosed by a working set element and 
-     * 	false otherwise. 
+     * @param elementPath full, absolute path of the element to test
+     * @return true if element is enclosed by a working set element and
+     * 	false otherwise.
      */
     private boolean isEnclosedResource(IResource element, IPath elementPath,
             IAdaptable workingSetElement) {
@@ -155,9 +155,9 @@
     }
 
     /**
-     * Filters out elements that are neither a parent nor a child of 
+     * Filters out elements that are neither a parent nor a child of
      * a working set element.
-     * 
+     *
      * @see ViewerFilter#filter(Viewer, Object, Object[])
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java
index 27ec4e6..ee927a7 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddBookmarkAction.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *        IBM Corporation - initial API and implementation 
+ *        IBM Corporation - initial API and implementation
  *   Sebastian Davids <sdavids@gmx.de>
  *     - Fix for bug 20510 - Add Bookmark action has wrong label in navigator or
  *       packages view
@@ -60,10 +60,10 @@
 	/**
 	 * Creates a new bookmark action. By default, prompts the user for the
 	 * bookmark name.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
-	 * @deprecated see {@link #AddBookmarkAction(IShellProvider, boolean)} 
+	 * @deprecated see {@link #AddBookmarkAction(IShellProvider, boolean)}
 	 */
 	@Deprecated
 	public AddBookmarkAction(Shell shell) {
@@ -72,12 +72,12 @@
 
 	/**
 	 * Creates a new bookmark action.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
 	 * @param promptForName
 	 *            whether to ask the user for the bookmark name
-	 * @deprecated see {@link #AddBookmarkAction(IShellProvider, boolean)} 
+	 * @deprecated see {@link #AddBookmarkAction(IShellProvider, boolean)}
 	 */
 	@Deprecated
 	public AddBookmarkAction(final Shell shell, boolean promptForName) {
@@ -88,13 +88,13 @@
 			public Shell getShell() {
 				return shell;
 			} };
-			
+
 		initAction(promptForName);
 	}
-	
+
 	/**
 	 * Creates a new bookmark action.
-	 * 
+	 *
 	 * @param provider
 	 *            the shell provider for any dialogs. Must not be
 	 *            <code>null</code>
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddTaskAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddTaskAction.java
index 20526af..3d1471b 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddTaskAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/AddTaskAction.java
@@ -44,7 +44,7 @@
 
     /**
      * Creates a new instance of the receiver.
-     * 
+     *
      * @param shell shell to use to show any dialogs
      * @deprecated See {@link #AddTaskAction(IShellProvider)}
      */
@@ -59,10 +59,10 @@
 			} };
         initAction();
     }
-    
+
     /**
 	 * Creates a new instance of the receiver.
-	 * 
+	 *
 	 * @param provider
 	 *            the IShellProvider to show any dialogs
 	 * @since 3.4
@@ -124,7 +124,7 @@
      * <code>SelectionListenerAction</code> method enables the action only
      * if the selection contains a single resource and the resource is
      * not a closed project.
-     * 
+     *
      * @param selection the selection to update the enabled state for
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java
index 18d4f4c..55a8af0 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/BuildAction.java
@@ -82,13 +82,13 @@
     private List/*<IBuildConfiguration>*/ projectConfigsToBuild = null;
 
     /**
-     * Creates a new action of the appropriate type. The action id is 
+     * Creates a new action of the appropriate type. The action id is
      * <code>ID_BUILD</code> for incremental builds and <code>ID_REBUILD_ALL</code>
      * for full builds.
      *
      * @param shell the shell for any dialogs
      * @param type the type of build; one of
-     *  <code>IncrementalProjectBuilder.INCREMENTAL_BUILD</code> or 
+     *  <code>IncrementalProjectBuilder.INCREMENTAL_BUILD</code> or
      *  <code>IncrementalProjectBuilder.FULL_BUILD</code>
      * @deprecated See {@link #BuildAction(IShellProvider, int)}
      */
@@ -97,12 +97,12 @@
         super(shell, "");//$NON-NLS-1$
         initAction(type);
     }
-    
+
     /**
 	 * Creates a new action of the appropriate type. The action id is
 	 * <code>ID_BUILD</code> for incremental builds and
 	 * <code>ID_REBUILD_ALL</code> for full builds.
-	 * 
+	 *
 	 * @param provider
 	 *            the shell provider for any dialogs
 	 * @param type
@@ -186,7 +186,7 @@
 	}
 
 	/**
-	 * This collection of project build configs, derived from the selected 
+	 * This collection of project build configs, derived from the selected
 	 * resources, is passed to the workspace for building.  The Workspace
 	 * is responsible for resolving references.
 	 * @return List of project build configurations to build.
@@ -246,7 +246,7 @@
 		}
 		return super.isEnabled();
 	}
-    
+
     /**
      * Returns whether the user's preference is set to automatically save modified
      * resources before a manual build is done.
@@ -310,7 +310,7 @@
 				monitor.beginTask("", 10000); //$NON-NLS-1$
 				monitor.setTaskName(getOperationMessage());
 				try {
-					// Backwards compatibility: check shouldPerformResourcePruning(). 
+					// Backwards compatibility: check shouldPerformResourcePruning().
 					// Previously if this returned true, the full reference graph is built, otherwise just build the selected configurations
 					ResourcesPlugin.getWorkspace().build(configs, kind, shouldPerformResourcePruning(), new SubProgressMonitor(monitor, 10000));
 				} catch (CoreException e) {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseResourceAction.java
index 85d9aa6..50386d1 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseResourceAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseResourceAction.java
@@ -64,7 +64,7 @@
     }
 
     /**
-	 * Override super constructor to allow subclass to 
+	 * Override super constructor to allow subclass to
 	 * override with unique text.
 	 * @deprecated See {@link #CloseResourceAction(IShellProvider, String)}
 	 */
@@ -72,10 +72,10 @@
 	protected CloseResourceAction(Shell shell, String text) {
     	super(shell, text);
     }
-    
+
     /**
 	 * Create the new action.
-	 * 
+	 *
 	 * @param provider
 	 *            the shell provider for any dialogs
 	 * @since 3.4
@@ -84,10 +84,10 @@
     	super(provider, IDEWorkbenchMessages.CloseResourceAction_text);
         initAction();
     }
-    
+
     /**
 	 * Provide text to the action.
-	 * 
+	 *
 	 * @param provider
 	 *            the shell provider for any dialogs
 	 * @param text
@@ -104,7 +104,7 @@
         PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
 				IIDEHelpContextIds.CLOSE_RESOURCE_ACTION);
 	}
-    
+
     @Override
 	protected String getOperationMessage() {
         return IDEWorkbenchMessages.CloseResourceAction_operationMessage;
@@ -126,9 +126,9 @@
 	    ((IProject) resource).close(monitor);
 	}
 
-    /** 
+    /**
      * The implementation of this <code>WorkspaceAction</code> method
-     * method saves and closes the resource's dirty editors before closing 
+     * method saves and closes the resource's dirty editors before closing
      * it.
      */
     @Override
@@ -214,22 +214,22 @@
             }
         }
     }
-    
-    
+
+
     @Override
 	protected synchronized List getSelectedResources() {
     	return super.getSelectedResources();
     }
-    
+
     @Override
 	protected synchronized List getSelectedNonResources() {
     	return super.getSelectedNonResources();
     }
-    
+
     /**
      * Returns the model provider ids that are known to the client
      * that instantiated this operation.
-     * 
+     *
      * @return the model provider ids that are known to the client
      * that instantiated this operation.
      * @since 3.2
@@ -242,7 +242,7 @@
      * Sets the model provider ids that are known to the client
      * that instantiated this operation. Any potential side effects
      * reported by these models during validation will be ignored.
-     * 
+     *
 	 * @param modelProviderIds the model providers known to the client
 	 * who is using this operation.
 	 * @since 3.2
@@ -250,10 +250,10 @@
 	public void setModelProviderIds(String[] modelProviderIds) {
 		this.modelProviderIds = modelProviderIds;
 	}
-	
+
 	/**
 	 * Validates the operation against the model providers.
-	 * 
+	 *
 	 * @return whether the operation should proceed
 	 */
     private boolean validateClose() {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java
index a03b818..fb739f3 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CloseUnrelatedProjectsAction.java
@@ -38,13 +38,13 @@
 
 /**
  * This action closes all projects that are unrelated to the selected projects. A
- * project is unrelated if it is not directly or transitively referenced by one 
+ * project is unrelated if it is not directly or transitively referenced by one
  * of the selected projects, and does not directly or transitively reference
  * one of the selected projects.
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @see IDEActionFactory#CLOSE_UNRELATED_PROJECTS
  * @since 3.3
  */
@@ -60,7 +60,7 @@
 
 	private List oldSelection = Collections.EMPTY_LIST;
 
-	
+
 	/**
 	 * Builds the connected component set for the input projects.
 	 * The result is a DisjointSet where all related projects belong
@@ -94,11 +94,11 @@
 
 	/**
 	 * Creates this action.
-	 * 
+	 *
 	 * @param shell
 	 *            The shell to use for parenting any dialogs created by this
 	 *            action.
-	 *            
+	 *
 	 * @deprecated {@link #CloseUnrelatedProjectsAction(IShellProvider)}
 	 */
 	@Deprecated
@@ -106,10 +106,10 @@
 		super(shell, IDEWorkbenchMessages.CloseUnrelatedProjectsAction_text);
 		initAction();
 	}
-	
+
 	/**
 	 * Creates this action.
-	 * 
+	 *
 	 * @param provider
 	 *            The shell to use for parenting any dialogs created by this
 	 *            action.
@@ -119,17 +119,17 @@
 		super(provider, IDEWorkbenchMessages.CloseUnrelatedProjectsAction_text);
 		initAction();
 	}
-	
+
 	@Override
 	public void run() {
 		if(promptForConfirmation())
 				super.run();
 	}
-   
+
    /**
 	 * Returns whether to close unrelated projects.
 	 * Consults the preference and prompts the user if necessary.
-	 * 
+	 *
 	 * @return <code>true</code> if unrelated projects should be closed, and
 	 *         <code>false</code> otherwise.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java
index 9ff0196..ffec24e 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyFilesAndFoldersOperation.java
@@ -125,7 +125,7 @@
 	/**
 	 * Returns a new name for a copy of the resource at the given path in the
 	 * given workspace. This name is determined automatically.
-	 * 
+	 *
 	 * @param originalName
 	 *            the full path of the resource
 	 * @param workspace
@@ -168,7 +168,7 @@
 
 	/**
 	 * Creates a new operation initialized with a shell.
-	 * 
+	 *
 	 * @param shell
 	 *            parent shell for error dialogs
 	 */
@@ -179,7 +179,7 @@
 	/**
 	 * Returns whether this operation is able to perform on-the-fly
 	 * auto-renaming of resources with name collisions.
-	 * 
+	 *
 	 * @return <code>true</code> if auto-rename is supported, and
 	 *         <code>false</code> otherwise
 	 */
@@ -189,7 +189,7 @@
 
 	/**
 	 * Returns the message for querying deep copy/move of a linked resource.
-	 * 
+	 *
 	 * @param source
 	 *            resource the query is made for
 	 * @return the deep query message
@@ -203,7 +203,7 @@
 
 	/**
 	 * Checks whether the infos exist.
-	 * 
+	 *
 	 * @param stores
 	 *            the file infos to test
 	 * @return Multi status with one error message for each missing file.
@@ -228,7 +228,7 @@
 
 	/**
 	 * Checks whether the resources with the given names exist.
-	 * 
+	 *
 	 * @param resources
 	 *            IResources to checl
 	 * @return Multi status with one error message for each missing file.
@@ -271,7 +271,7 @@
 	/**
 	 * Check if the user wishes to overwrite the supplied resource or all
 	 * resources.
-	 * 
+	 *
 	 * @param source
 	 *            the source resource
 	 * @param destination
@@ -363,7 +363,7 @@
 
 	/**
 	 * Recursively collects existing files in the specified destination path.
-	 * 
+	 *
 	 * @param destinationPath
 	 *            destination path to check for existing files
 	 * @param copyResources
@@ -418,14 +418,14 @@
 	/**
 	 * Copies the resources to the given destination. This method is called
 	 * recursively to merge folders during folder copy.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to copy
 	 * @param destination
 	 *            destination to which resources will be copied
 	 * @param subMonitor
 	 *            a progress monitor for showing progress and for cancelation
-	 * 
+	 *
 	 * @deprecated As of 3.3, the work is performed in the undoable operation
 	 *             created in
 	 *             {@link #getUndoableCopyOrMoveOperation(IResource[], IPath)}
@@ -514,7 +514,7 @@
 	 * Transform an absolute path URI to a relative path one (i.e. from
 	 * "C:\foo\bar\file.txt" to "VAR\file.txt" granted that the relativeVariable
 	 * is "VAR" and points to "C:\foo\bar\").
-	 * 
+	 *
 	 * @param locationURI
 	 * @return an URI that was made relative to a variable
 	 */
@@ -533,7 +533,7 @@
 
 	/**
 	 * Sets the content of the existing file to the source file content.
-	 * 
+	 *
 	 * @param source
 	 *            source file to copy
 	 * @param existing
@@ -562,7 +562,7 @@
 	 * Copies the given resources to the destination. The current Thread is
 	 * halted while the resources are copied using a WorkspaceModifyOperation.
 	 * This method should be called from the UIThread.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to copy
 	 * @param destination
@@ -582,7 +582,7 @@
 	 * without forking a new Thread or blocking using a
 	 * WorkspaceModifyOperation. It recommended that this method only be called
 	 * from a {@link WorkspaceJob} to avoid possible deadlock.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to copy
 	 * @param destination
@@ -602,7 +602,7 @@
 
 	/**
 	 * Copies the given resources to the destination.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to copy
 	 * @param destination
@@ -655,7 +655,7 @@
 
 	/**
 	 * Return whether the operation is a move or a copy
-	 * 
+	 *
 	 * @return whether the operation is a move or a copy
 	 * @since 3.2
 	 */
@@ -682,7 +682,7 @@
 	 * is halted while the resources are copied using a
 	 * WorkspaceModifyOperation. This method should be called from the UI
 	 * Thread.
-	 * 
+	 *
 	 * @param uris
 	 *            the URIs to copy
 	 * @param destination
@@ -706,7 +706,7 @@
 	 * new Thread or blocking using a WorkspaceModifyOperation. It is
 	 * recommended that this method only be called from a {@link WorkspaceJob}
 	 * to avoid possible deadlock.
-	 * 
+	 *
 	 * @param uris
 	 *            the URIs to copy
 	 * @param destination
@@ -730,7 +730,7 @@
 	/**
 	 * Build the collection of fileStores that map to fileNames. If any of them
 	 * cannot be found then match then return <code>null</code>.
-	 * 
+	 *
 	 * @param uris
 	 * @return IFileStore[]
 	 */
@@ -760,7 +760,7 @@
 	 * destination or creates links or shows a dialog that lets the user choose. The current thread
 	 * is halted while the resources are copied using a {@link WorkspaceModifyOperation}. This
 	 * method should be called from the UI Thread.
-	 * 
+	 *
 	 * @param fileNames names of the files to copy
 	 * @param destination destination to which files will be copied
 	 * @param dropOperation the drop operation ({@link DND#DROP_NONE}, {@link DND#DROP_MOVE}
@@ -822,7 +822,7 @@
 	 * Copies the given files and folders to the destination. The current Thread is halted while the
 	 * resources are copied using a WorkspaceModifyOperation. This method should be called from the
 	 * UI Thread.
-	 * 
+	 *
 	 * @param fileNames names of the files to copy
 	 * @param destination destination to which files will be copied
 	 * @see WorkspaceModifyOperation
@@ -844,7 +844,7 @@
 	 * new Thread or blocking using a WorkspaceModifyOperation. It is
 	 * recommended that this method only be called from a {@link WorkspaceJob}
 	 * to avoid possible deadlock.
-	 * 
+	 *
 	 * @param fileNames
 	 *            names of the files to copy
 	 * @param destination
@@ -868,7 +868,7 @@
 	/**
 	 * Build the collection of fileStores that map to fileNames. If any of them
 	 * cannot be found then match then return null.
-	 * 
+	 *
 	 * @param fileNames
 	 * @return IFileStore[]
 	 */
@@ -887,7 +887,7 @@
 
 	/**
 	 * Report that a file info could not be found.
-	 * 
+	 *
 	 * @param fileName
 	 */
 	private void reportFileInfoNotFound(final String fileName) {
@@ -909,7 +909,7 @@
 
 	/**
 	 * Copies the given files and folders to the destination.
-	 * 
+	 *
 	 * @param stores
 	 *            the file stores to copy
 	 * @param destination
@@ -960,7 +960,7 @@
 
 	/**
 	 * Display the supplied status in an error dialog.
-	 * 
+	 *
 	 * @param status
 	 *            The status to display
 	 */
@@ -977,7 +977,7 @@
 	/**
 	 * Creates a file or folder handle for the source resource as if it were to
 	 * be created in the destination container.
-	 * 
+	 *
 	 * @param destination
 	 *            destination container
 	 * @param source
@@ -1001,7 +1001,7 @@
 
 	/**
 	 * Removes the given resource from the workspace.
-	 * 
+	 *
 	 * @param resource
 	 *            resource to remove from the workspace
 	 * @param monitor
@@ -1039,7 +1039,7 @@
 
 	/**
 	 * Opens an error dialog to display the given message.
-	 * 
+	 *
 	 * @param message
 	 *            the error message to show
 	 */
@@ -1055,7 +1055,7 @@
 
 	/**
 	 * Returns the resource either casted to or adapted to an IFile.
-	 * 
+	 *
 	 * @param resource
 	 *            resource to cast/adapt
 	 * @return the resource either casted to or adapted to an IFile.
@@ -1070,7 +1070,7 @@
 
 	/**
 	 * Returns java.io.File objects for the given file names.
-	 * 
+	 *
 	 * @param fileNames
 	 *            files to return File object for.
 	 * @return java.io.File objects for the given file names.
@@ -1090,7 +1090,7 @@
 
 	/**
 	 * Returns the resource either casted to or adapted to an IFolder.
-	 * 
+	 *
 	 * @param resource
 	 *            resource to cast/adapt
 	 * @return the resource either casted to or adapted to an IFolder.
@@ -1106,7 +1106,7 @@
 	/**
 	 * Returns a new name for a copy of the resource at the given path in the
 	 * given workspace.
-	 * 
+	 *
 	 * @param originalName
 	 *            the full path of the resource
 	 * @param workspace
@@ -1149,7 +1149,7 @@
 								.bind(
 										IDEWorkbenchMessages.CopyFilesAndFoldersOperation_inputDialogMessage,
 										resource.getName()), initial, validator) {
-					
+
 					@Override
 					protected Control createContents(Composite parent) {
 						Control contents= super.createContents(parent);
@@ -1177,7 +1177,7 @@
 
 	/**
 	 * Returns the task title for this operation's progress dialog.
-	 * 
+	 *
 	 * @return the task title
 	 */
 	protected String getOperationTitle() {
@@ -1186,7 +1186,7 @@
 
 	/**
 	 * Returns the message for this operation's problems dialog.
-	 * 
+	 *
 	 * @return the problems message
 	 */
 	protected String getProblemsMessage() {
@@ -1195,7 +1195,7 @@
 
 	/**
 	 * Returns the title for this operation's problems dialog.
-	 * 
+	 *
 	 * @return the problems dialog title
 	 */
 	protected String getProblemsTitle() {
@@ -1206,7 +1206,7 @@
 	 * Returns whether the source file in a destination collision will be
 	 * validateEdited together with the collision itself. Returns false. Should
 	 * return true if the source file is to be deleted after the operation.
-	 * 
+	 *
 	 * @return boolean <code>true</code> if the source file in a destination
 	 *         collision should be validateEdited. <code>false</code> if only
 	 *         the destination should be validated.
@@ -1218,7 +1218,7 @@
 	/**
 	 * Returns whether the given resources are either both linked or both
 	 * unlinked.
-	 * 
+	 *
 	 * @param source
 	 *            source resource
 	 * @param destination
@@ -1238,7 +1238,7 @@
 	/**
 	 * Returns whether the given resource is accessible. Files and folders are
 	 * always considered accessible and a project is accessible if it is open.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource
 	 * @return <code>true</code> if the resource is accessible, and
@@ -1260,7 +1260,7 @@
 	/**
 	 * Returns whether any of the given source resources are being recopied to
 	 * their current container.
-	 * 
+	 *
 	 * @param sourceResources
 	 *            the source resources
 	 * @param destination
@@ -1297,7 +1297,7 @@
 	 * Note: the destination container may need to be created prior to copying
 	 * the resources.
 	 * </p>
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to copy
 	 * @param destination
@@ -1342,7 +1342,7 @@
 	 * Note: the destination container may need to be created prior to copying
 	 * the resources.
 	 * </p>
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to copy
 	 * @param destination
@@ -1389,7 +1389,7 @@
 	/**
 	 * Performs an import of the given stores into the provided container.
 	 * Returns a status indicating if the import was successful.
-	 * 
+	 *
 	 * @param stores
 	 *            stores that are to be imported
 	 * @param target
@@ -1479,7 +1479,7 @@
 	/**
 	 * Records the core exception to be displayed to the user once the action is
 	 * finished.
-	 * 
+	 *
 	 * @param error
 	 *            a <code>CoreException</code>
 	 */
@@ -1497,7 +1497,7 @@
 	 * <p>
 	 * Note this method is for internal use only. It is not API.
 	 * </p>
-	 * 
+	 *
 	 * @param destination
 	 *            the destination container
 	 * @param sourceResources
@@ -1573,7 +1573,7 @@
 	/**
 	 * Validates that the given source resources can be copied to the
 	 * destination as decided by the VCM provider.
-	 * 
+	 *
 	 * @param destination
 	 *            copy destination
 	 * @param sourceResources
@@ -1605,7 +1605,7 @@
 	 * <p>
 	 * Note this method is for internal use only. It is not API.
 	 * </p>
-	 * 
+	 *
 	 * @param destination
 	 *            the destination container
 	 * @param sourceNames
@@ -1642,7 +1642,7 @@
 	 * Eclipse compiler with regards to visibility and type resolution when
 	 * linking.
 	 * </p>
-	 * 
+	 *
 	 * @param destination
 	 *            the destination container
 	 * @param sourceStores
@@ -1691,7 +1691,7 @@
 
 	/**
 	 * Check if the destination is valid for the given source resource.
-	 * 
+	 *
 	 * @param destination
 	 *            destination container of the operation
 	 * @param source
@@ -1741,7 +1741,7 @@
 	/**
 	 * Returns whether moving all of the given source resources to the given
 	 * destination container could be done without causing name collisions.
-	 * 
+	 *
 	 * @param destination
 	 *            the destination container
 	 * @param sourceResources
@@ -1869,7 +1869,7 @@
 	/**
 	 * Returns the model provider ids that are known to the client that
 	 * instantiated this operation.
-	 * 
+	 *
 	 * @return the model provider ids that are known to the client that
 	 *         instantiated this operation.
 	 * @since 3.2
@@ -1882,7 +1882,7 @@
 	 * Sets the model provider ids that are known to the client that
 	 * instantiated this operation. Any potential side effects reported by these
 	 * models during validation will be ignored.
-	 * 
+	 *
 	 * @param modelProviderIds
 	 *            the model providers known to the client who is using this
 	 *            operation.
@@ -1897,7 +1897,7 @@
 	 * destination. The current Thread is halted while the resources are copied
 	 * using a WorkspaceModifyOperation. This method should be called from the
 	 * UI Thread.
-	 * 
+	 *
 	 * @param fileNames
 	 *            names of the files to copy
 	 * @param destination
@@ -1923,7 +1923,7 @@
 	 * current Thread is halted while the resources are copied using a
 	 * WorkspaceModifyOperation. This method should be called from the UI
 	 * Thread.
-	 * 
+	 *
 	 * @param fileNames
 	 *            names of the files to copy
 	 * @param destination
@@ -1946,7 +1946,7 @@
 	/**
 	 * Set whether or not virtual folders and links will be created under the destination
 	 * container.
-	 * 
+	 *
 	 * @param value
 	 * @since 3.6
 	 */
@@ -1956,7 +1956,7 @@
 
 	/**
 	 * Set whether or not links will be created under the destination container.
-	 * 
+	 *
 	 * @param value
 	 * @since 3.6
 	 */
@@ -1966,7 +1966,7 @@
 
 	/**
 	 * Set a variable relative to which the links are created
-	 * 
+	 *
 	 * @param variable
 	 * @since 3.6
 	 */
@@ -1978,7 +1978,7 @@
 	 * Returns an AbstractWorkspaceOperation suitable for performing the move or
 	 * copy operation that will move or copy the given resources to the given
 	 * destination path.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be moved or copied
 	 * @param destinationPath
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectAction.java
index 2fa3b31..4e97004 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectAction.java
@@ -82,10 +82,10 @@
 
 	/**
 	 * Creates a new project copy action with the default text.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
-	 * 
+	 *
 	 * @deprecated {@link #CopyProjectAction(IShellProvider)}
 	 */
 	@Deprecated
@@ -95,7 +95,7 @@
 
 	/**
 	 * Creates a new project copy action with the default text.
-	 * 
+	 *
 	 * @param provider
 	 * 				the IShellProvider for any dialogs
 	 * @since 3.4
@@ -103,16 +103,16 @@
 	public CopyProjectAction(IShellProvider provider){
 		this(provider, COPY_TITLE);
 	}
-	
+
 	/**
 	 * Creates a new project copy action with the given text.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
 	 * @param name
 	 *            the string used as the text for the action, or
 	 *            <code>null</code> if there is no text
-	 * 
+	 *
 	 * @deprecated {@link #CopyProjectAction(IShellProvider, String)}
 	 */
 	@Deprecated
@@ -126,9 +126,9 @@
 			} };
 			initAction();
 	}
-	
+
 	/**
-	 * 
+	 *
 	 * @param provider
 	 *            the IShellProvider for any dialogs
 	 * @param name
@@ -141,7 +141,7 @@
 		shellProvider = provider;
 		initAction();
 	}
-	
+
 	private void initAction(){
 		shell = shellProvider.getShell();
 		setToolTipText(COPY_TOOL_TIP);
@@ -153,7 +153,7 @@
 	/**
 	 * Create a new IProjectDescription for the copy using the name and path
 	 * selected from the dialog.
-	 * 
+	 *
 	 * @return IProjectDescription
 	 * @param project
 	 *            the source project
@@ -183,7 +183,7 @@
 	 * <p>
 	 * Note that this method must be called from UI thread.
 	 * </p>
-	 * 
+	 *
 	 * @param message
 	 *            the message
 	 */
@@ -193,9 +193,9 @@
 
 	/**
 	 * Return the title of the errors dialog.
-	 * 
+	 *
 	 * @return java.lang.String
-	 * 
+	 *
 	 * @deprecated As of 3.3, the undoable operation created by this action
 	 *             handles error dialogs.
 	 */
@@ -206,7 +206,7 @@
 
 	/**
 	 * Get the plugin used by a copy action
-	 * 
+	 *
 	 * @return AbstractUIPlugin
 	 */
 	protected org.eclipse.ui.plugin.AbstractUIPlugin getPlugin() {
@@ -215,7 +215,7 @@
 
 	/**
 	 * Copies the project to the new values.
-	 * 
+	 *
 	 * @param project
 	 *            the project to copy
 	 * @param projectName
@@ -265,7 +265,7 @@
 	/**
 	 * Query for a new project name and destination using the parameters in the
 	 * existing project.
-	 * 
+	 *
 	 * @return Object [] or null if the selection is cancelled
 	 * @param project
 	 *            the project we are going to copy.
@@ -281,7 +281,7 @@
 	/**
 	 * Records the core exception to be displayed to the user once the action is
 	 * finished.
-	 * 
+	 *
 	 * @param error
 	 *            a <code>CoreException</code>
 	 */
@@ -352,7 +352,7 @@
 	/**
 	 * Returns the model provider ids that are known to the client that
 	 * instantiated this operation.
-	 * 
+	 *
 	 * @return the model provider ids that are known to the client that
 	 *         instantiated this operation.
 	 * @since 3.2
@@ -365,7 +365,7 @@
 	 * Sets the model provider ids that are known to the client that
 	 * instantiated this operation. Any potential side effects reported by these
 	 * models during validation will be ignored.
-	 * 
+	 *
 	 * @param modelProviderIds
 	 *            the model providers known to the client who is using this
 	 *            operation.
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectOperation.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectOperation.java
index c6fdeb6..af921d7 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectOperation.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyProjectOperation.java
@@ -62,7 +62,7 @@
 	/**
 	 * Validates that the copy of the project will not have undesirable side
 	 * effects.
-	 * 
+	 *
 	 * @param shell
 	 *            a shell
 	 * @param project
@@ -92,7 +92,7 @@
 
 	/**
 	 * Create a new operation initialized with a shell.
-	 * 
+	 *
 	 * @param shell
 	 *            parent shell for error dialogs
 	 */
@@ -102,7 +102,7 @@
 
 	/**
 	 * Paste a copy of the project on the clipboard to the workspace.
-	 * 
+	 *
 	 * @param project
 	 *            The project that is beign copied.
 	 */
@@ -142,7 +142,7 @@
 
 	/**
 	 * Copies the project to the new values.
-	 * 
+	 *
 	 * @param project
 	 *            the project to copy
 	 * @param projectName
@@ -225,7 +225,7 @@
     /**
      * Returns the model provider ids that are known to the client
      * that instantiated this operation.
-     * 
+     *
      * @return the model provider ids that are known to the client
      * that instantiated this operation.
 	 * @since 3.2
@@ -238,7 +238,7 @@
 	 * Sets the model provider ids that are known to the client that
 	 * instantiated this operation. Any potential side effects reported by these
 	 * models during validation will be ignored.
-	 * 
+	 *
 	 * @param modelProviderIds
 	 *            the model providers known to the client who is using this
 	 *            operation.
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java
index 956113e..24300b5 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CopyResourceAction.java
@@ -82,17 +82,17 @@
      * Creates a new action.
      *
      * @param shell the shell for any dialogs
-     * 
+     *
      * @deprecated {@link #CopyResourceAction(IShellProvider)}
      */
     @Deprecated
 	public CopyResourceAction(Shell shell) {
         this(shell, IDEWorkbenchMessages.CopyResourceAction_title);
     }
-    
+
     /**
      * Creates a new action
-     * 
+     *
      * @param provider the shell for any dialogs
      * @since 3.4
      */
@@ -104,9 +104,9 @@
      * Creates a new action with the given text.
      *
      * @param shell the shell for any dialogs
-     * @param name the string used as the name for the action, 
+     * @param name the string used as the name for the action,
      *   or <code>null</code> if there is no name
-     *   
+     *
      * @deprecated {@link #CopyResourceAction(IShellProvider, String)}
      */
     @Deprecated
@@ -121,12 +121,12 @@
         };
         initAction();
     }
-    
+
     /**
      * Creates a new action with the given text
-     * 
+     *
      * @param provider the shell for any dialogs
-     * @param name the string used as the name for the action, 
+     * @param name the string used as the name for the action,
      *   or <code>null</code> if there is no name
      */
     CopyResourceAction(IShellProvider provider, String name){
@@ -138,13 +138,13 @@
 
     /**
      * Returns the operation to perform when this action runs.
-     * 
+     *
      * @return the operation to perform when this action runs.
      */
     protected CopyFilesAndFoldersOperation createOperation() {
         return new CopyFilesAndFoldersOperation(getShell());
     }
-    
+
     private void initAction(){
     	setToolTipText(IDEWorkbenchMessages.CopyResourceAction_toolTip);
         setId(CopyResourceAction.ID);
@@ -167,9 +167,9 @@
     }
 
     /**
-     * Returns an array of resources to use for the operation from 
+     * Returns an array of resources to use for the operation from
      * the provided list.
-     * 
+     *
      * @param resourceList The list of resources to converted into an array.
      * @return an array of resources to use for the operation
      */
@@ -187,7 +187,7 @@
     }
 
     /**
-     * The <code>CopyResourceAction</code> implementation of this 
+     * The <code>CopyResourceAction</code> implementation of this
      * <code>ISelectionValidator</code> method checks whether the given path
      * is a good place to copy the selected resources.
      */
@@ -198,7 +198,7 @@
                 .findMember((IPath) destination);
 
         if (container != null) {
-            // create a new operation here. 
+            // create a new operation here.
             // isValid is API and may be called in any context.
             CopyFilesAndFoldersOperation newOperation = createOperation();
             List sources = getSelectedResources();
@@ -212,7 +212,7 @@
     /**
      * Asks the user for the destination of this action.
      *
-     * @return the path on an existing or new resource container, or 
+     * @return the path on an existing or new resource container, or
      *  <code>null</code> if the operation should be abandoned
      */
     IPath queryDestinationResource() {
@@ -240,7 +240,7 @@
             operation.setModelProviderIds(getModelProviderIds());
 
             // WARNING: do not query the selected resources more than once
-            // since the selection may change during the run, 
+            // since the selection may change during the run,
             // e.g. due to window activation when the prompt dialog is dismissed.
             // For more details, see Bug 60606 [Navigator] (data loss) Navigator deletes/moves the wrong file
             List sources = getSelectedResources();
@@ -265,7 +265,7 @@
 
     /**
      * Runs the operation created in <code>createOperation</code>
-     * 
+     *
      * @param resources source resources to pass to the operation
      * @param destination destination container to pass to the operation
      */
@@ -275,8 +275,8 @@
 
     /**
      * The <code>CopyResourceAction</code> implementation of this
-     * <code>SelectionListenerAction</code> method enables this action only if 
-     * all of the one or more selections are sibling resources which are 
+     * <code>SelectionListenerAction</code> method enables this action only if
+     * all of the one or more selections are sibling resources which are
      * local (depth infinity).
      */
     @Override
@@ -314,11 +314,11 @@
         }
         return true;
     }
-    
+
     /**
      * Returns the model provider ids that are known to the client
      * that instantiated this operation.
-     * 
+     *
      * @return the model provider ids that are known to the client
      * that instantiated this operation.
      * @since 3.2
@@ -331,7 +331,7 @@
      * Sets the model provider ids that are known to the client
      * that instantiated this operation. Any potential side effects
      * reported by these models during validation will be ignored.
-     * 
+     *
 	 * @param modelProviderIds the model providers known to the client
 	 * who is using this operation.
 	 * @since 3.2
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFileAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFileAction.java
index d6885c1..9b63645 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFileAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFileAction.java
@@ -29,7 +29,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @deprecated should use NewWizardMenu to populate a New submenu instead (see Navigator view)
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -45,12 +45,12 @@
      * The shell in which to show any dialogs.
      */
     protected IShellProvider shellProvider;
-   
+
     /**
      * Creates a new action for creating a file resource.
      *
      * @param shell the shell for any dialogs
-     * 
+     *
      * @deprecated {@link #CreateFileAction(IShellProvider)}
      */
     @Deprecated
@@ -68,9 +68,9 @@
 
     /**
      * Creates a new action for creating a file resource.
-     * 
+     *
      * @param provider the shell for any dialogs
-     * 
+     *
      * @deprecated see deprecated tag on class
      * @since 3.4
      */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFolderAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFolderAction.java
index f3ba593..a0bc426 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFolderAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/CreateFolderAction.java
@@ -31,7 +31,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @deprecated should use NewWizardMenu to populate a New submenu instead (see Navigator view)
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -48,12 +48,12 @@
      * The shell in which to show any dialogs.
      */
     protected IShellProvider shellProvider;
-    
+
     /**
      * Creates a new action for creating a folder resource.
      *
      * @param shell the shell for any dialogs
-     * 
+     *
      * @deprecated {@link #CreateFolderAction(IShellProvider)}
      */
     @Deprecated
@@ -71,9 +71,9 @@
 
     /**
      * Creates a new action for creating a folder resource.
-     * 
+     *
      * @param provider the shell for any dialogs
-     * 
+     *
      * @deprecated see deprecated tag on class
      * @since 3.4
      */
@@ -84,7 +84,7 @@
     	shellProvider = provider;
     	initAction();
     }
-    
+
     /**
      * Initializes for the constructor.
      */
@@ -96,7 +96,7 @@
         PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
 				IIDEHelpContextIds.CREATE_FOLDER_ACTION);
     }
-    
+
     /**
      * The <code>CreateFolderAction</code> implementation of this
      * <code>IAction</code> method opens a <code>BasicNewFolderResourceWizard</code>
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java
index 9c03bf2..c7f7c75 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/DeleteResourceAction.java
@@ -137,7 +137,7 @@
 			}
 			radio1.setText(text1);
 			radio1.setFont(parent.getFont());
-			
+
 			// Add explanatory label that the action cannot be undone.
 			// We can't put multi-line formatted text in a radio button,
 			// so we have to create a separate label.
@@ -202,7 +202,7 @@
 		/**
 		 * Set this delete dialog into testing mode. It won't pop up, and it
 		 * returns true for deleteContent.
-		 * 
+		 *
 		 * @param t
 		 *            the testing mode
 		 */
@@ -216,7 +216,7 @@
 	 */
 	public static final String ID = PlatformUI.PLUGIN_ID
 			+ ".DeleteResourceAction";//$NON-NLS-1$
-	
+
 	private IShellProvider shellProvider = null;
 
 	/**
@@ -234,7 +234,7 @@
 
 	/**
 	 * Creates a new delete resource action.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
 	 * @deprecated Should take an IShellProvider, see
@@ -255,7 +255,7 @@
 
 	/**
 	 * Creates a new delete resource action.
-	 * 
+	 *
 	 * @param provider
 	 *            the shell provider to use. Must not be <code>null</code>.
 	 * @since 3.4
@@ -266,7 +266,7 @@
 		initAction();
 		setShellProvider(provider);
 	}
-	
+
 	/**
 	 * Action initialization.
 	 */
@@ -276,14 +276,14 @@
 				IIDEHelpContextIds.DELETE_RESOURCE_ACTION);
 		setId(ID);
 	}
-	
+
 	private void setShellProvider(IShellProvider provider) {
 		shellProvider = provider;
 	}
 
 	/**
 	 * Returns whether delete can be performed on the current selection.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 * @return <code>true</code> if the resources can be deleted, and
@@ -312,7 +312,7 @@
 
 	/**
 	 * Returns whether the selection contains linked resources.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 * @return <code>true</code> if the resources contain linked resources,
@@ -330,7 +330,7 @@
 
 	/**
 	 * Returns whether the selection contains only non-projects.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 * @return <code>true</code> if the resources contains only non-projects,
@@ -348,7 +348,7 @@
 
 	/**
 	 * Returns whether the selection contains only projects.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 * @return <code>true</code> if the resources contains only projects, and
@@ -362,7 +362,7 @@
 
 	/**
 	 * Asks the user to confirm a delete operation.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 * @return <code>true</code> if the user says to go ahead, and
@@ -373,13 +373,13 @@
 			return confirmDeleteProjects(resources);
 		}
 		return confirmDeleteNonProjects(resources);
-		
+
 	}
 
 	/**
 	 * Asks the user to confirm a delete operation, where the selection contains
 	 * no projects.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 * @return <code>true</code> if the user says to go ahead, and
@@ -420,7 +420,7 @@
 	/**
 	 * Asks the user to confirm a delete operation, where the selection contains
 	 * only projects. Also remembers whether project content should be deleted.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 * @return <code>true</code> if the user says to go ahead, and
@@ -439,7 +439,7 @@
 
 	/**
 	 * Return an array of the currently selected resources.
-	 * 
+	 *
 	 * @return the selected resources
 	 */
 	private IResource[] getSelectedResourcesArray() {
@@ -451,7 +451,7 @@
 
 	/**
 	 * Returns a bit-mask containing the types of resources in the selection.
-	 * 
+	 *
 	 * @param resources
 	 *            the selected resources
 	 */
@@ -472,7 +472,7 @@
 				return;
 			}
 		}
-		
+
 		// WARNING: do not query the selected resources more than once
 		// since the selection may change during the run,
 		// e.g. due to window activation when the prompt dialog is dismissed.
@@ -491,7 +491,7 @@
 				scheduleDeleteJob(resources);
 				return Status.OK_STATUS;
 			}
-			
+
 			@Override
 			public boolean belongsTo(Object family) {
 				if (IDEWorkbenchMessages.DeleteResourceAction_jobName
@@ -508,7 +508,7 @@
 
 	/**
 	 * Schedule a job to delete the resources to delete.
-	 * 
+	 *
 	 * @param resourcesToDelete
 	 */
 	private void scheduleDeleteJob(final IResource[] resourcesToDelete) {
@@ -519,7 +519,7 @@
 			@Override
 			public IStatus run(final IProgressMonitor monitor) {
 				try {
-					final DeleteResourcesOperation op = 
+					final DeleteResourcesOperation op =
 						new DeleteResourcesOperation(resourcesToDelete, IDEWorkbenchMessages.DeleteResourceAction_operationLabel, deleteContent);
 					op.setModelProviderIds(getModelProviderIds());
 					// If we are deleting projects and their content, do not
@@ -536,9 +536,9 @@
 									IProgressMonitor monitor) {
 								return op.computeExecutionStatus(monitor);
 							}
-							
+
 						};
-						
+
 						statusJob.setSystem(true);
 						statusJob.schedule();
 						try {//block until the status is ready
@@ -546,19 +546,19 @@
 						} catch (InterruptedException e) {
 							//Do nothing as status will be a cancel
 						}
-						
+
 						if (statusJob.getResult().isOK()) {
 							return op.execute(monitor, WorkspaceUndoUtil.getUIInfoAdapter(shellProvider.getShell()));
-						} 
+						}
 						return statusJob.getResult();
 					}
 					return PlatformUI.getWorkbench().getOperationSupport()
-							.getOperationHistory().execute(op, monitor, 
+							.getOperationHistory().execute(op, monitor,
 							WorkspaceUndoUtil.getUIInfoAdapter(shellProvider.getShell()));
 				} catch (ExecutionException e) {
 					if (e.getCause() instanceof CoreException) {
 						return ((CoreException)e.getCause()).getStatus();
-					} 
+					}
 					return new Status(IStatus.ERROR, IDEWorkbenchPlugin.IDE_WORKBENCH, e.getMessage(),e);
 				}
 			}
@@ -591,7 +591,7 @@
 	/**
 	 * Returns the model provider ids that are known to the client that
 	 * instantiated this operation.
-	 * 
+	 *
 	 * @return the model provider ids that are known to the client that
 	 *         instantiated this operation.
 	 * @since 3.2
@@ -604,7 +604,7 @@
 	 * Sets the model provider ids that are known to the client that
 	 * instantiated this operation. Any potential side effects reported by these
 	 * models during validation will be ignored.
-	 * 
+	 *
 	 * @param modelProviderIds
 	 *            the model providers known to the client who is using this
 	 *            operation.
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java
index 55ca645..7efc5c6 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/GlobalBuildAction.java
@@ -64,7 +64,7 @@
      * Creates a new action of the appropriate type. The action id is
      * <code>IWorkbenchActionConstants.BUILD</code> for incremental builds and
      * <code>IWorkbenchActionConstants.REBUILD_ALL</code> for full builds.
-     * 
+     *
      * @param workbench
      *            the active workbench
      * @param shell
@@ -73,7 +73,7 @@
      *            the type of build; one of
      *            <code>IncrementalProjectBuilder.INCREMENTAL_BUILD</code> or
      *            <code>IncrementalProjectBuilder.FULL_BUILD</code>
-     * 
+     *
      * @deprecated use GlobalBuildAction(IWorkbenchWindow, type) instead
      */
     @Deprecated
@@ -87,7 +87,7 @@
      * Creates a new action of the appropriate type. The action id is
      * <code>IWorkbenchActionConstants.BUILD</code> for incremental builds and
      * <code>IWorkbenchActionConstants.REBUILD_ALL</code> for full builds.
-     * 
+     *
      * @param window
      *            the window in which this action appears
      * @param type
@@ -103,7 +103,7 @@
 
     /**
      * Sets the build type.
-     * 
+     *
      * @param type
      *            the type of build; one of
      *            <code>IncrementalProjectBuilder.INCREMENTAL_BUILD</code> or
@@ -172,7 +172,7 @@
         Job buildJob = new Job(IDEWorkbenchMessages.GlobalBuildAction_jobTitle) {
             /*
              * (non-Javadoc)
-             * 
+             *
              * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
              */
             @Override
@@ -191,7 +191,7 @@
 
             /*
              * (non-Javadoc)
-             * 
+             *
              * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object)
              */
             @Override
@@ -213,7 +213,7 @@
 
     /*
      * (non-Javadoc) Method declared on IAction.
-     * 
+     *
      * Builds all projects within the workspace. Saves all editors prior to
      * build depending on user's preference.
      */
@@ -270,7 +270,7 @@
 
     /*
      * (non-Javadoc) Method declared on ActionFactory.IWorkbenchAction.
-     * 
+     *
      * @since 3.0
      */
     @Override
@@ -286,7 +286,7 @@
      * Verify that no manual build is running. If it is then give the use the
      * option to cancel. If they cancel, cancel the jobs and return true,
      * otherwise return false.
-     * 
+     *
      * @return whether or not there is a manual build job running.
      */
     private boolean verifyNoManualRunning() {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java
index 2079844..05d0488 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveFilesAndFoldersOperation.java
@@ -31,7 +31,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @since 2.1
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -39,7 +39,7 @@
 
 	/**
 	 * Creates a new operation initialized with a shell.
-	 * 
+	 *
 	 * @param shell
 	 *            parent shell for error dialogs
 	 */
@@ -50,7 +50,7 @@
 	/**
 	 * Returns whether this operation is able to perform on-the-fly
 	 * auto-renaming of resources with name collisions.
-	 * 
+	 *
 	 * @return <code>true</code> if auto-rename is supported, and
 	 *         <code>false</code> otherwise
 	 */
@@ -62,14 +62,14 @@
 	/**
 	 * Moves the resources to the given destination. This method is called
 	 * recursively to merge folders during folder move.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to move
 	 * @param destination
 	 *            destination to which resources will be moved
 	 * @param subMonitor
 	 *            a progress monitor for showing progress and for cancelation
-	 * 
+	 *
 	 * @deprecated As of 3.3, the work is performed in the undoable operation
 	 *             created in
 	 *             {@link #getUndoableCopyOrMoveOperation(IResource[], IPath)}
@@ -128,7 +128,7 @@
 
 	/**
 	 * Returns the message for querying deep copy/move of a linked resource.
-	 * 
+	 *
 	 * @param source
 	 *            resource the query is made for
 	 * @return the deep query message
@@ -143,7 +143,7 @@
 
 	/**
 	 * Returns the task title for this operation's progress dialog.
-	 * 
+	 *
 	 * @return the task title
 	 */
 	@Override
@@ -153,7 +153,7 @@
 
 	/**
 	 * Returns the message for this operation's problems dialog.
-	 * 
+	 *
 	 * @return the problems message
 	 */
 	@Override
@@ -163,7 +163,7 @@
 
 	/**
 	 * Returns the title for this operation's problems dialog.
-	 * 
+	 *
 	 * @return the problems dialog title
 	 */
 	@Override
@@ -174,7 +174,7 @@
 	/**
 	 * Returns whether the source file in a destination collision will be
 	 * validateEdited together with the collision itself. Returns true.
-	 * 
+	 *
 	 * @return boolean <code>true</code>, the source file in a destination
 	 *         collision should be validateEdited.
 	 */
@@ -186,7 +186,7 @@
 	/**
 	 * Sets the content of the existing file to the source file content. Deletes
 	 * the source file.
-	 * 
+	 *
 	 * @param source
 	 *            source file to move
 	 * @param existing
@@ -216,9 +216,9 @@
 
 	/*
 	 * (non-Javadoc) Overrides method in CopyFilesAndFoldersOperation
-	 * 
+	 *
 	 * Note this method is for internal use only. It is not API.
-	 * 
+	 *
 	 */
 	@Override
 	public String validateDestination(IContainer destination,
@@ -254,7 +254,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.CopyFilesAndFoldersOperation#isMove()
 	 */
 	@Override
@@ -266,7 +266,7 @@
 	 * Returns an AbstractWorkspaceOperation suitable for performing the move or
 	 * copy operation that will move or copy the given resources to the given
 	 * destination path.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be moved or copied
 	 * @param destinationPath
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveProjectAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveProjectAction.java
index 87a3337..8821392 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveProjectAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveProjectAction.java
@@ -50,10 +50,10 @@
 
 	/**
 	 * Creates a new project move action and initializes it.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
-	 *  
+	 *
 	 * @deprecated {@link #MoveProjectAction(IShellProvider)}
 	 */
 	@Deprecated
@@ -61,7 +61,7 @@
 		super(shell, MOVE_TITLE);
 		initAction();
 	}
-	
+
 	/**
 	 * Creates a new project move action and initializes it.
 	 * @param provider
@@ -81,10 +81,10 @@
 	}
 	/**
 	 * Return the title of the errors dialog.
-	 * 
+	 *
 	 * @return java.lang.String
-	 * 
-	 * @deprecated As of 3.3, the error handling is performed by the undoable 
+	 *
+	 * @deprecated As of 3.3, the error handling is performed by the undoable
 	 * operation which handles the move.
 	 */
 	@Deprecated
@@ -95,7 +95,7 @@
 
 	/**
 	 * Moves the project to the new values.
-	 * 
+	 *
 	 * @param project
 	 *            the project to move
 	 * @param newLocation
@@ -103,9 +103,9 @@
 	 * @return <code>true</code> if the copy operation completed, and
 	 *         <code>false</code> if it was abandoned part way
 	 */
-	boolean performMove(final IProject project, 
+	boolean performMove(final IProject project,
 			final URI newLocation) {
-		
+
 		IRunnableWithProgress op =  new IRunnableWithProgress() {
     		@Override
 			public void run(IProgressMonitor monitor) {
@@ -113,7 +113,7 @@
     			op.setModelProviderIds(getModelProviderIds());
     			try {
     				PlatformUI.getWorkbench().getOperationSupport()
-    						.getOperationHistory().execute(op, monitor, 
+    						.getOperationHistory().execute(op, monitor,
     								WorkspaceUndoUtil.getUIInfoAdapter(shellProvider.getShell()));
     			} catch (ExecutionException e) {
 					if (e.getCause() instanceof CoreException) {
@@ -125,7 +125,7 @@
     			}
     		}
     	};
-		
+
 		try {
 			new ProgressMonitorJobsDialog(shellProvider.getShell()).run(true, true, op);
 		} catch (InterruptedException e) {
@@ -145,7 +145,7 @@
 	/**
 	 * Query for a new project destination using the parameters in the existing
 	 * project.
-	 * 
+	 *
 	 * @return Object[] or null if the selection is cancelled
 	 * @param project
 	 *            the project we are going to move.
@@ -169,7 +169,7 @@
 
 		IProject project = (IProject) getSelectedResources().get(0);
 
-		//Get the project name and location 
+		//Get the project name and location
 		Object[] destinationPaths = queryDestinationParameters(project);
 		if (destinationPaths == null) {
 			return;
@@ -177,10 +177,10 @@
 
 		// Ideally we would have gotten the URI directly from the
 		// ProjectLocationDialog, but for backward compatibility, we
-		// use the raw string and map back to a URI.  
+		// use the raw string and map back to a URI.
 		URI newLocation = URIUtil.toURI((String)destinationPaths[1]);
-		
-		
+
+
 		boolean completed = performMove(project, newLocation);
 
 		if (!completed) {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveResourceAction.java
index deb8220..2fb0817 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveResourceAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/MoveResourceAction.java
@@ -48,7 +48,7 @@
      * Creates a new action.
      *
      * @param shell the shell for any dialogs
-     * 
+     *
      * @deprecated {@link #MoveResourceAction(IShellProvider)}
      */
     @Deprecated
@@ -59,7 +59,7 @@
 
     /**
      * Creates a new action.
-     * 
+     *
      * @param provider the shell for any dialogs.
      * @since 3.4
      */
@@ -67,7 +67,7 @@
     	super(provider, IDEWorkbenchMessages.MoveResourceAction_text);
     	initAction();
     }
-    
+
     /**
      * Initializes the workbench
      */
@@ -77,7 +77,7 @@
         PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
 				IIDEHelpContextIds.MOVE_RESOURCE_ACTION);
     }
-    
+
     @Override
 	protected CopyFilesAndFoldersOperation createOperation() {
         return new MoveFilesAndFoldersOperation(getShell());
@@ -112,7 +112,7 @@
                     copiedResources[i].getName()));
         }
     }
-    
+
     @Override
 	public void run() {
 		if (LTKLauncher.openMoveWizard(getStructuredSelection())) {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java
index c02b486..2fc1109 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/NewWizardMenu.java
@@ -48,25 +48,25 @@
      * <p>
      * <strong>Note:</strong> Clients must dispose this menu when it is no longer required.
      * </p>
-     * 
+     *
      * @param window
      *            the window containing the menu
      */
     public NewWizardMenu(IWorkbenchWindow window) {
         this(window, null);
-        
+
     }
-    
+
     /**
      * Creates a new wizard shortcut menu for the IDE.
      * <p>
      * <strong>Note:</strong> Clients must dispose this menu when it is no longer required.
      * </p>
-     * 
+     *
      * @param window
      *            the window containing the menu
      * @param id
-     *            the identifier for this contribution item 
+     *            the identifier for this contribution item
      */
     public NewWizardMenu(IWorkbenchWindow window, String id) {
         super(window, id);
@@ -75,12 +75,12 @@
     }
 
     /**
-     * Create a new wizard shortcut menu.  
+     * Create a new wizard shortcut menu.
      * <p>
      * If the menu will appear on a semi-permanent basis, for instance within
      * a toolbar or menubar, the value passed for <code>register</code> should be true.
      * If set, the menu will listen to perspective activation and update itself
-     * to suit.  In this case clients are expected to call <code>deregister</code> 
+     * to suit.  In this case clients are expected to call <code>deregister</code>
      * when the menu is no longer needed.  This will unhook any perspective
      * listeners.
      * </p>
@@ -101,7 +101,7 @@
         fillMenu(innerMgr);
         // Must be done after constructor to ensure field initialization.
     }
-    
+
     /* (non-Javadoc)
      * Fills the menu with New Wizards.
      */
@@ -121,7 +121,7 @@
      * This method should only be called if the shortcut menu is created with
      * <code>register = true</code>.
      * </p>
-     * 
+     *
      * @deprecated has no effect
      */
     @Deprecated
@@ -131,7 +131,7 @@
 
     /**
      * Return whether or not any examples are in the current install.
-     * 
+     *
      * @return boolean
      */
 	private boolean hasExamples() {
@@ -146,7 +146,7 @@
 		}
 		return false;
 	}
-	
+
 	private boolean hasWizards(IWizardCategory category) {
 		IWizardDescriptor[] wizards = category.getWizards();
 		if (wizards.length>0) {
@@ -172,7 +172,7 @@
 	protected void addItems(List list) {
     	ArrayList shortCuts= new ArrayList();
     	addShortcuts(shortCuts);
-    	
+
     	for (Iterator iterator= shortCuts.iterator(); iterator.hasNext();) {
 			Object curr= iterator.next();
 			if (curr instanceof ActionContributionItem && isNewProjectWizardAction(((ActionContributionItem) curr).getAction())) {
@@ -205,7 +205,7 @@
 		}
 		return false;
 	}
-    
+
 	/* (non-Javadoc)
 	 * Method declared on IContributionItem.
 	 */
@@ -216,14 +216,14 @@
 
 	/**
 	 * Sets the enabled state of the receiver.
-	 * 
+	 *
 	 * @param enabledValue if <code>true</code> the menu is enabled; else
 	 * 		it is disabled
 	 */
 	public void setEnabled(boolean enabledValue) {
 		this.enabled = enabledValue;
 	}
-    
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.actions.BaseNewWizardMenu#getContributionItems()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenFileAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenFileAction.java
index fd97c30..c639ef8 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenFileAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenFileAction.java
@@ -23,7 +23,7 @@
 import org.eclipse.ui.part.FileEditorInput;
 
 /**
- * Standard action for opening an editor on the currently selected file 
+ * Standard action for opening an editor on the currently selected file
  * resource(s).
  * <p>
  * Note that there is a different action for opening closed projects:
@@ -47,7 +47,7 @@
     private IEditorDescriptor editorDescriptor;
 
     /**
-     * Creates a new action that will open editors on the then-selected file 
+     * Creates a new action that will open editors on the then-selected file
      * resources. Equivalent to <code>OpenFileAction(page,null)</code>.
      *
      * @param page the workbench page in which to open the editor
@@ -57,7 +57,7 @@
     }
 
     /**
-     * Creates a new action that will open instances of the specified editor on 
+     * Creates a new action that will open instances of the specified editor on
      * the then-selected file resources.
      *
      * @param page the workbench page in which to open the editor
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java
index 574091b..2d5f953 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenResourceAction.java
@@ -64,10 +64,10 @@
 
 	/**
 	 * Creates a new action.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
-	 *    
+	 *
 	 * @deprecated {@link #OpenResourceAction(IShellProvider)}
 	 */
 	@Deprecated
@@ -78,7 +78,7 @@
 
 	/**
 	 * Creates a new action.
-	 * 
+	 *
 	 * @param provider
 	 * 				the shell for any dialogs
 	 * @since 3.4
@@ -152,7 +152,7 @@
 	/**
 	 * Returns the preference for whether to open required projects when opening
 	 * a project. Consults the preference and prompts the user if necessary.
-	 * 
+	 *
 	 * @return <code>true</code> if referenced projects should be opened, and
 	 *         <code>false</code> otherwise.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java
index 39c7c81..7bc39e4 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/OpenWithMenu.java
@@ -76,7 +76,7 @@
      * Match both the input and id, so that different types of editor can be opened on the same input.
      */
     private static final int MATCH_BOTH = IWorkbenchPage.MATCH_INPUT | IWorkbenchPage.MATCH_ID;
-    
+
     /*
      * Compares the labels from two IEditorDescriptor objects
      */
@@ -290,11 +290,11 @@
             createMenuItem(menu, descriptor, preferredEditor);
         }
 		createDefaultMenuItem(menu, file, preferredEditor == null);
-        
+
         // add Other... menu item
         createOtherMenuItem(menu);
     }
-	
+
 
     /**
      * Converts the IAdaptable file to IFile or null.
@@ -308,7 +308,7 @@
         if (resource instanceof IFile) {
             return (IFile) resource;
         }
-       
+
         return null;
     }
 
@@ -340,7 +340,7 @@
         	} else {
 	            String editorId = editorDescriptor == null ? IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID
 	                    : editorDescriptor.getId();
-	            
+
 	            page.openEditor(new FileEditorInput(file), editorId, true, MATCH_BOTH);
 	            // only remember the default editor if the open succeeds
 	            IDE.setDefaultEditor(file, editorId);
@@ -354,7 +354,7 @@
 
     /**
 	 * Creates the menu item for clearing the current selection.
-	 * 
+	 *
 	 * @param menu the menu to add the item to
 	 * @param file the file being edited
 	 * @param markAsSelected <code>true</code> if the item should marked as selected
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/QuickStartAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/QuickStartAction.java
index ebf63d5..ed62e12 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/QuickStartAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/QuickStartAction.java
@@ -42,7 +42,7 @@
 
 /**
  * The quick start (Welcome...) action.
- * 
+ *
  * @deprecated the IDE now uses the new intro mechanism
  */
 @Deprecated
@@ -109,7 +109,7 @@
 
     /**
      * Prompts the user for a feature that has a welcome page.
-     * 
+     *
      * @return the chosen feature, or <code>null</code> if none was chosen
      */
     private AboutInfo promptForFeature() throws WorkbenchException {
@@ -155,7 +155,7 @@
 
     /**
      * Opens the welcome page for the given feature.
-     * 
+     *
      * @param featureId the about info for the feature
      * @return <code>true</code> if successful, <code>false</code> otherwise
      * @throws WorkbenchException
@@ -171,7 +171,7 @@
     /**
      * Returns the about info for the feature with the given id, or <code>null</code>
      * if there is no such feature.
-     * 
+     *
      * @return the about info for the feature with the given id, or <code>null</code>
      *   if there is no such feature.
      */
@@ -189,7 +189,7 @@
 
     /**
      * Opens the welcome page for a feature.
-     * 
+     *
      * @param feature the about info for the feature
      * @return <code>true</code> if successful, <code>false</code> otherwise
      */
@@ -224,7 +224,7 @@
         if (page == null) {
         	return false;
         }
-        
+
         page.setEditorAreaVisible(true);
 
         // create input
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/ReadOnlyStateChecker.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/ReadOnlyStateChecker.java
index 7a7ac12..f9b7a94 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/ReadOnlyStateChecker.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/ReadOnlyStateChecker.java
@@ -43,7 +43,7 @@
     private boolean cancelSelected = false;
 
     private boolean ignoreLinkedResources = false;
-    
+
     private String READ_ONLY_EXCEPTION_MESSAGE = IDEWorkbenchMessages.ReadOnlyCheck_problems;
 
     /**
@@ -99,7 +99,7 @@
      * Check the supplied resources to see if they are read only. If so then
 	 * prompt the user to see if they can be deleted.Return those that were
 	 * accepted.
-	 * 
+	 *
      * @param itemsToCheck
      * @return the resulting selected resources
      */
@@ -202,7 +202,7 @@
 
     /**
 	 * Returns whether the given resource should be checked for read-only state.
-	 * 
+	 *
 	 * @param resourceToCheck the resource to check
 	 * @return <code>true</code> to check it, <code>false</code> to skip it
 	 */
@@ -218,13 +218,13 @@
 	/**
      * Open a message dialog with Yes No, Yes To All and Cancel buttons. Return the
      * code that indicates the selection.
-     * @return int 
+     * @return int
      *	one of
      *		YES_TO_ALL_ID
      *		YES_ID
      *		NO_ID
      *		CANCEL_ID
-     * 		
+     *
      * @param resource - the resource being queried.
      */
     private int queryYesToAllNoCancel(IResource resource) {
@@ -260,10 +260,10 @@
 		}
         return IDialogConstants.CANCEL_ID;
     }
-    
+
     /**
      * Returns whether to ignore linked resources.
-     * 
+     *
      * @return <code>true</code> to ignore linked resources, <code>false</code> to consider them
      * @since 3.1
      */
@@ -274,7 +274,7 @@
     /**
      * Sets whether to ignore linked resources.
      * The default is <code>false</code>.
-     * 
+     *
      * @param ignore <code>true</code> to ignore linked resources, <code>false</code> to consider them
      * @since 3.1
      */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java
index 85bfd0a..867a1c0 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RefreshAction.java
@@ -70,7 +70,7 @@
 
 	/**
 	 * Creates a new action.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
 	 * @deprecated See {@link #RefreshAction(IShellProvider)}
@@ -83,7 +83,7 @@
 
 	/**
 	 * Creates a new action.
-	 * 
+	 *
 	 * @param provider
 	 *            the IShellProvider for any dialogs.
 	 * @since 3.4
@@ -92,7 +92,7 @@
 		super(provider, IDEWorkbenchMessages.RefreshAction_text);
 		initAction();
 	}
-	
+
 	/**
 	 * Initializes for the constructor.
 	 */
@@ -190,7 +190,7 @@
 
 	/**
 	 * Handle the key release.
-	 * 
+	 *
 	 * @param event
 	 *            the event
 	 */
@@ -266,7 +266,7 @@
 	 * This method may be extended to refresh model objects related to the
 	 * resource.
 	 * </p>
-	 * 
+	 *
 	 * @param resource
 	 *            the resource to refresh. Must not be <code>null</code>.
 	 * @param monitor
@@ -291,7 +291,7 @@
 		}
 		resource.refreshLocal(IResource.DEPTH_INFINITE, monitor);
 	}
-	
+
 	@Override
 	public void run() {
 		final IStatus[] errorStatus = new IStatus[1];
@@ -315,7 +315,7 @@
 				}
 				return errorStatus[0];
 			}
-			
+
 		};
 		ISchedulingRule rule = op.getRule();
 		if (rule != null) {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RenameResourceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RenameResourceAction.java
index bc07305..c18aa2d 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RenameResourceAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/RenameResourceAction.java
@@ -104,13 +104,13 @@
 	private static String RESOURCE_EXISTS_MESSAGE = IDEWorkbenchMessages.RenameResourceAction_overwriteQuestion;
 
 	private static String PROJECT_EXISTS_MESSAGE = IDEWorkbenchMessages.RenameResourceAction_overwriteProjectQuestion;
-	
+
 	private static String PROJECT_EXISTS_TITLE = IDEWorkbenchMessages.RenameResourceAction_projectExists;
 
 	/**
 	 * Creates a new action. Using this constructor directly will rename using a
 	 * dialog rather than the inline editor of a ResourceNavigator.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
 	 * @deprecated see {@link #RenameResourceAction(IShellProvider)}
@@ -124,7 +124,7 @@
 	/**
 	 * Creates a new action. Using this constructor directly will rename using a
 	 * dialog rather than the inline editor of a ResourceNavigator.
-	 * 
+	 *
 	 * @param provider
 	 *            the IShellProvider for any dialogs
 	 * @since 3.4
@@ -133,7 +133,7 @@
 		super(provider, IDEWorkbenchMessages.RenameResourceAction_text);
 		initAction();
 	}
-	
+
 	private void initAction(){
 		setToolTipText(IDEWorkbenchMessages.RenameResourceAction_toolTip);
 		setId(ID);
@@ -142,7 +142,7 @@
 	}
 	/**
 	 * Creates a new action.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell for any dialogs
 	 * @param tree
@@ -155,10 +155,10 @@
 		this.navigatorTree = tree;
 		this.treeEditor = new TreeEditor(tree);
 	}
-	
+
 	/**
 	 * Creates a new action.
-	 * 
+	 *
 	 * @param provider
 	 *            the shell provider for any dialogs
 	 * @param tree
@@ -173,7 +173,7 @@
 
 	/**
 	 * Check if the user wishes to overwrite the supplied resource
-	 * 
+	 *
 	 * @returns true if there is no collision or delete was successful
 	 * @param shell
 	 *            the shell to create the dialog in
@@ -214,7 +214,7 @@
 	 * Check if the supplied resource is read only or null. If it is then ask
 	 * the user if they want to continue. Return true if the resource is not
 	 * read only or if the user has given permission.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	private boolean checkReadOnlyAndNull(IResource currentResource) {
@@ -256,7 +256,7 @@
 
 	/**
 	 * Create the text editor widget.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource to rename
 	 */
@@ -346,7 +346,7 @@
 	 * Returns the elements that the action is to be performed on. Return the
 	 * resource cached by the action as we cannot rely on the selection being
 	 * correct for inlined text.
-	 * 
+	 *
 	 * @return list of resource elements (element type: <code>IResource</code>)
 	 */
 	@Override
@@ -386,7 +386,7 @@
 
 	/**
 	 * Get the Tree being edited.
-	 * 
+	 *
 	 * @returnTree
 	 */
 	private Tree getTree() {
@@ -395,7 +395,7 @@
 
 	/**
 	 * Return the new name to be given to the target resource.
-	 * 
+	 *
 	 * @return java.lang.String
 	 * @param resource
 	 *            the resource to query status on
@@ -435,7 +435,7 @@
 	/**
 	 * Return the new name to be given to the target resource or
 	 * <code>null<code>
-	 * if the query was canceled. Rename the currently selected resource using the table editor. 
+	 * if the query was canceled. Rename the currently selected resource using the table editor.
 	 * Continue the action when the user is done.
 	 *
 	 * @param resource the resource to rename
@@ -506,7 +506,7 @@
 	/**
 	 * Return the currently selected resource. Only return an IResouce if there
 	 * is one and only one resource selected.
-	 * 
+	 *
 	 * @return IResource or <code>null</code> if there is zero or more than
 	 *         one resources selected.
 	 */
@@ -532,7 +532,7 @@
 
 	/**
 	 * Save the changes and dispose of the text widget.
-	 * 
+	 *
 	 * @param resource -
 	 *            the resource to move.
 	 */
@@ -612,7 +612,7 @@
 
 	/**
 	 * Set the text action handler.
-	 * 
+	 *
 	 * @param actionHandler
 	 *            the action handler
 	 */
@@ -623,7 +623,7 @@
 	/**
 	 * Returns the model provider ids that are known to the client that
 	 * instantiated this operation.
-	 * 
+	 *
 	 * @return the model provider ids that are known to the client that
 	 *         instantiated this operation.
 	 * @since 3.2
@@ -636,7 +636,7 @@
 	 * Sets the model provider ids that are known to the client that
 	 * instantiated this operation. Any potential side effects reported by these
 	 * models during validation will be ignored.
-	 * 
+	 *
 	 * @param modelProviderIds
 	 *            the model providers known to the client who is using this
 	 *            operation.
@@ -648,9 +648,9 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.WorkspaceAction#createOperation(org.eclipse.core.runtime.IStatus[])
-	 * 
+	 *
 	 * Overridden to create and execute an undoable operation that performs the
 	 * rename.
 	 * @since 3.3
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/SelectionListenerAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/SelectionListenerAction.java
index 76fb3e0..19cd9c4 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/SelectionListenerAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/SelectionListenerAction.java
@@ -83,7 +83,7 @@
 
 	/**
 	 * Creates a new action with the given text.
-	 * 
+	 *
 	 * @param text
 	 *            the string used as the text for the action, or
 	 *            <code>null</code> if there is no text
@@ -199,7 +199,7 @@
 	/**
 	 * Returns the elements in the current selection that are not
 	 * <code>IResource</code>s.
-	 * 
+	 *
 	 * @return list of elements (element type: <code>Object</code>)
 	 */
 	protected List getSelectedNonResources() {
@@ -212,14 +212,14 @@
 		if (nonResources == null) {
 			return EMPTY_LIST;
 		}
-		
+
 		return nonResources;
 	}
 
 	/**
 	 * Returns the elements in the current selection that are
 	 * <code>IResource</code>s.
-	 * 
+	 *
 	 * @return list of resource elements (element type: <code>IResource</code>)
 	 */
 	protected List getSelectedResources() {
@@ -238,7 +238,7 @@
 	/**
 	 * Returns whether the type of the given resource is among those in the
 	 * given resource type mask.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource
 	 * @param resourceMask
@@ -256,7 +256,7 @@
 	/**
 	 * Returns whether the current selection consists entirely of resources
 	 * whose types are among those in the given resource type mask.
-	 * 
+	 *
 	 * @param resourceMask
 	 *            a bitwise OR of resource types: <code>IResource</code>.{<code>FILE</code>,
 	 *            <code>FOLDER</code>, <code>PROJECT</code>,
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/TextActionHandler.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/TextActionHandler.java
index 81bcc32..a2019aa 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/TextActionHandler.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/TextActionHandler.java
@@ -303,10 +303,10 @@
             				break;
             			}
             		}
-            		
+
             		clipboard.dispose();
             	}
-            	
+
                 setEnabled(canPaste);
                 return;
             }
@@ -358,11 +358,11 @@
 
     /**
      * Creates a <code>Text</code> control action handler
-     * for the global Cut, Copy, Paste, Delete, and Select All 
+     * for the global Cut, Copy, Paste, Delete, and Select All
      * of the action bar.
      *
      * @param actionBar the action bar to register global
-     *    action handlers for Cut, Copy, Paste, Delete, 
+     *    action handlers for Cut, Copy, Paste, Delete,
      * 	  and Select All
      */
     public TextActionHandler(IActionBars actionBar) {
@@ -373,8 +373,8 @@
 
     /**
      * Updates the actions bars.
-     * 
-	 * @since 3.6 
+     *
+	 * @since 3.6
 	 */
 	public void updateActionBars() {
 		actionBars.setGlobalActionHandler(ActionFactory.CUT.getId(),
@@ -389,10 +389,10 @@
                 textDeleteAction);
 	}
 
-    
+
     /**
      * Add a <code>Text</code> control to the handler
-     * so that the Cut, Copy, Paste, Delete, and Select All 
+     * so that the Cut, Copy, Paste, Delete, and Select All
      * actions are redirected to it when active.
      *
      * @param textControl the inline <code>Text</code> control
@@ -430,7 +430,7 @@
 
     /**
      * Removes a <code>Text</code> control from the handler
-     * so that the Cut, Copy, Paste, Delete, and Select All 
+     * so that the Cut, Copy, Paste, Delete, and Select All
      * actions are no longer redirected to it when active.
      *
      * @param textControl the inline <code>Text</code> control
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java
index 859e589..e841e45 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceAction.java
@@ -44,7 +44,7 @@
 /**
  * The abstract superclass for actions which invoke commands implemented in
  * org.eclipse.core.* on a set of selected resources.
- * 
+ *
  * It iterates over all selected resources; errors are collected and displayed
  * to the user via a problems dialog at the end of the operation. User requests
  * to cancel the operation are passed along to the core.
@@ -78,7 +78,7 @@
 
 	/**
 	 * Creates a new action with the given text.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell (for the modal progress dialog and error messages)
 	 * @param text
@@ -96,10 +96,10 @@
 				return shell;
 			} };
 	}
-	
+
 	/**
 	 * Creates a new action with the given text.
-	 * 
+	 *
 	 * @param provider
 	 *            the shell provider (for the modal progress dialog and error
 	 *            messages)
@@ -119,7 +119,7 @@
 	 * <p>
 	 * Note that this method must be called from UI thread.
 	 * </p>
-	 * 
+	 *
 	 * @param message
 	 *            the message
 	 */
@@ -138,7 +138,7 @@
 	 * Note that if an action is running in the background, the same action
 	 * instance can be executed multiple times concurrently. This method must
 	 * not access or modify any mutable state on action class.
-	 * 
+	 *
 	 * @param monitor
 	 *            a progress monitor
 	 * @return The result of the execution
@@ -186,9 +186,9 @@
 	 * <p>
 	 * Subclasses must implement this method.
 	 * </p>
-	 * 
+	 *
 	 * @return the message
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	protected abstract String getOperationMessage();
@@ -201,9 +201,9 @@
 	 * problems occurred."). Subclasses may reimplement to provide something
 	 * more suited to the particular action.
 	 * </p>
-	 * 
+	 *
 	 * @return the problems message
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	protected String getProblemsMessage() {
@@ -217,9 +217,9 @@
 	 * a generic title (localized counterpart of "Problems"). Subclasses may
 	 * reimplement to provide something more suited to the particular action.
 	 * </p>
-	 * 
+	 *
 	 * @return the problems dialog title
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	protected String getProblemsTitle() {
@@ -229,7 +229,7 @@
 	/**
 	 * Returns the shell for this action. This shell is used for the modal
 	 * progress and error dialogs.
-	 * 
+	 *
 	 * @return the shell
 	 */
 	Shell getShell() {
@@ -250,26 +250,26 @@
 	 * {@link #createOperation(IStatus[])} and provide an empty implementation
 	 * for this method.
 	 * </p>
-	 * 
+	 *
 	 * @param resource
 	 *            one of the selected resources
 	 * @param monitor
 	 *            a progress monitor
 	 * @exception CoreException
 	 *                if the operation fails
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	@Deprecated
 	protected void invokeOperation(IResource resource,
 			IProgressMonitor monitor) throws CoreException {
-		
+
 	}
 
 	/**
 	 * Returns whether the given resource is a descendent of any of the
 	 * resources in the given list.
-	 * 
+	 *
 	 * @param resources
 	 *            the list of resources (element type: <code>IResource</code>)
 	 * @param child
@@ -287,7 +287,7 @@
 	/**
 	 * Performs pruning on the given list of resources, as described in
 	 * <code>shouldPerformResourcePruning</code>.
-	 * 
+	 *
 	 * @param resourceCollection
 	 *            the list of resources (element type: <code>IResource</code>)
 	 * @return the list of resources (element type: <code>IResource</code>)
@@ -309,7 +309,7 @@
 	/**
 	 * Records the core exception to be displayed to the user once the action is
 	 * finished.
-	 * 
+	 *
 	 * @param error
 	 *            a <code>CoreException</code>
 	 */
@@ -372,10 +372,10 @@
 	 * <code>true</code>. Subclasses should reimplement to return
 	 * <code>false</code> if pruning is not required.
 	 * </p>
-	 * 
+	 *
 	 * @return <code>true</code> if pruning should be performed, and
 	 *         <code>false</code> if pruning is not desired
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	protected boolean shouldPerformResourcePruning() {
@@ -409,7 +409,7 @@
 	 * return the selected resources.
 	 * <p>
 	 * Subclasses may override this method.
-	 * 
+	 *
 	 * @return list of resource elements (element type: <code>IResource</code>)
 	 */
 	protected List getActionResources() {
@@ -418,7 +418,7 @@
 
 	/**
 	 * Run the action in the background rather than with the progress dialog.
-	 * 
+	 *
 	 * @param rule
 	 *            The rule to apply to the background job or <code>null</code>
 	 *            if there isn't one.
@@ -429,14 +429,14 @@
 
 	/**
 	 * Run the action in the background rather than with the progress dialog.
-	 * 
+	 *
 	 * @param rule
 	 *            The rule to apply to the background job or <code>null</code>
 	 *            if there isn't one.
 	 * @param jobFamily
 	 *            a single family that the job should belong to or
 	 *            <code>null</code> if none.
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	public void runInBackground(ISchedulingRule rule, Object jobFamily) {
@@ -449,14 +449,14 @@
 
 	/**
 	 * Run the action in the background rather than with the progress dialog.
-	 * 
+	 *
 	 * @param rule
 	 *            The rule to apply to the background job or <code>null</code>
 	 *            if there isn't one.
 	 * @param jobFamilies
 	 *            the families the job should belong to or <code>null</code>
 	 *            if none.
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	public void runInBackground(ISchedulingRule rule, final Object[] jobFamilies) {
@@ -501,11 +501,11 @@
 	 * {@link #invokeOperation(IResource, IProgressMonitor)} or override this
 	 * method to provide a different operation. Subclasses typically override
 	 * this method when an undoable operation is to be provided.
-	 * 
+	 *
 	 * @param errorStatus
 	 *            an array of error status objects to which the result of
 	 *            running the operation should be added.
-	 * 
+	 *
 	 * @return the operation to perform when this action runs.
 	 * @since 3.3
 	 */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceModifyDelegatingOperation.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceModifyDelegatingOperation.java
index 12863ea..1c92fff 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceModifyDelegatingOperation.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/actions/WorkspaceModifyDelegatingOperation.java
@@ -36,7 +36,7 @@
     /**
      * Creates a new operation which will delegate its work to the given
      * runnable using the provided scheduling rule.
-     * 
+     *
      * @param content
      *            the runnable to delegate to when this operation is executed
      * @param rule
@@ -51,7 +51,7 @@
     /**
      * Creates a new operation which will delegate its work to the given
      * runnable. Schedule using the supplied s
-     * 
+     *
      * @param content
      *            the runnable to delegate to when this operation is executed
      */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java
index a5876b1..f34812a 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerGenerator.java
@@ -29,7 +29,7 @@
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 
 /**
- * For creating folder resources that currently do not exist, 
+ * For creating folder resources that currently do not exist,
  * along a given workspace path.
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerSelectionDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerSelectionDialog.java
index b53d8ee..6a560ff 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ContainerSelectionDialog.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *   IBM Corporation - initial API and implementation 
+ *   IBM Corporation - initial API and implementation
  *   Sebastian Davids <sdavids@gmx.de> - Fix for bug 19346 - Dialog
  *     font should be activated and used by other components.
  *******************************************************************************/
@@ -44,13 +44,13 @@
  *    new ContainerSelectionDialog(getShell(), initialSelection, allowNewContainerName(), msg);
  *	dialog.open();
  *	Object[] result = dialog.getResult();
- * </pre> 	
+ * </pre>
  * </p>
  * @noextend This class is not intended to be subclassed by clients.
  */
 public class ContainerSelectionDialog extends SelectionDialog {
     /**
-	 * 
+	 *
 	 */
 	private static final String EMPTY_STRING = ""; //$NON-NLS-1$
 
@@ -74,7 +74,7 @@
 
     /**
      * Creates a resource container selection dialog rooted at the given resource.
-     * All selections are considered valid. 
+     * All selections are considered valid.
      *
      * @param parentShell the parent shell
      * @param initialRoot the initial selection in the tree
@@ -107,7 +107,7 @@
 
     @Override
 	protected Control createDialogArea(Composite parent) {
-        // create composite 
+        // create composite
         Composite area = (Composite) super.createDialogArea(parent);
 
         Listener listener = new Listener() {
@@ -143,7 +143,7 @@
     }
 
     /**
-     * The <code>ContainerSelectionDialog</code> implementation of this 
+     * The <code>ContainerSelectionDialog</code> implementation of this
      * <code>Dialog</code> method builds a list of the selected resource containers
      * for later retrieval by the client and closes this dialog.
      */
@@ -160,8 +160,8 @@
     }
 
     /**
-     * Sets the validator to use.  
-     * 
+     * Sets the validator to use.
+     *
      * @param validator A selection validator
      */
     public void setValidator(ISelectionValidator validator) {
@@ -171,7 +171,7 @@
     /**
      * Set whether or not closed projects should be shown
      * in the selection dialog.
-     * 
+     *
      * @param show Whether or not to show closed projects.
      */
     public void showClosedProjects(boolean show) {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FileSelectionDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FileSelectionDialog.java
index 591c67e..0b73515 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FileSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FileSelectionDialog.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *   IBM Corporation - initial API and implementation 
+ *   IBM Corporation - initial API and implementation
  *   Sebastian Davids <sdavids@gmx.de> - Fix for bug 19346 - Dialog
  *      font should be activated and used by other components.
  *******************************************************************************/
@@ -46,7 +46,7 @@
  * <p>
  * Example:
  * <pre>
- *	FileSelectionDialog dialog = 
+ *	FileSelectionDialog dialog =
  *		new FileSelectionDialog(getShell(), rootElement, msg);
  *	dialog.setInitialSelections(selectedResources);
  *	dialog.open();
@@ -210,7 +210,7 @@
     }
 
     /**
-     * Returns a content provider for <code>FileSystemElement</code>s that returns 
+     * Returns a content provider for <code>FileSystemElement</code>s that returns
      * only files as children.
      */
     private ITreeContentProvider getFileProvider() {
@@ -226,7 +226,7 @@
     }
 
     /**
-     * Returns a content provider for <code>FileSystemElement</code>s that returns 
+     * Returns a content provider for <code>FileSystemElement</code>s that returns
      * only folders as children.
      */
     private ITreeContentProvider getFolderProvider() {
@@ -245,7 +245,7 @@
      * Initializes this dialog's controls.
      */
     private void initializeDialog() {
-        // initialize page	
+        // initialize page
         if (getInitialElementSelections().isEmpty()) {
 			getOkButton().setEnabled(false);
 		} else {
@@ -259,7 +259,7 @@
 
     /**
      * The <code>FileSelectionDialog</code> implementation of this
-     * <code>Dialog</code> method builds a list of the selected files for later 
+     * <code>Dialog</code> method builds a list of the selected files for later
      * retrieval by the client and closes this dialog.
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
index a88cd29..e24b0db 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/FilteredResourcesSelectionDialog.java
@@ -78,7 +78,7 @@
 /**
  * Shows a list of resources to the user with a text entry field for a string
  * pattern used to filter the list of resources.
- * 
+ *
  * @since 3.3
  */
 public class FilteredResourcesSelectionDialog extends
@@ -122,7 +122,7 @@
 
 	/**
 	 * Creates a new instance of the class
-	 * 
+	 *
 	 * @param shell
 	 *            the parent shell
 	 * @param multi
@@ -189,7 +189,7 @@
 		super.configureShell(shell);
 		PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, IIDEHelpContextIds.OPEN_RESOURCE_DIALOG);
 	}
-	
+
 	@Override
 	public void setTitle(String title) {
 		super.setTitle(title);
@@ -198,7 +198,7 @@
 
 	/**
 	 * Adds or replaces subtitle of the dialog
-	 * 
+	 *
 	 * @param text
 	 *            the new subtitle
 	 */
@@ -407,7 +407,7 @@
 				IResource resource2 = (IResource) o2;
 				String s1 = resource1.getName();
 				String s2 = resource2.getName();
-				
+
 				// Compare names without extension first
 				int s1Dot = s1.lastIndexOf('.');
 				int s2Dot = s2.lastIndexOf('.');
@@ -416,7 +416,7 @@
 				int comparability = collator.compare(n1, n2);
 				if (comparability != 0)
 					return comparability;
-				
+
 				// Compare full names
 				if (s1Dot != -1 || s2Dot != -1) {
 					comparability = collator.compare(s1, s2);
@@ -428,7 +428,7 @@
 				if (searchContainer != null) {
 					IContainer c1 = resource1.getParent();
 					IContainer c2 = resource2.getParent();
-					
+
 					// Return paths 'closer' to the searchContainer first
 					comparability = pathDistance(c1) - pathDistance(c2);
 					if (comparability != 0)
@@ -460,7 +460,7 @@
 	 * - Closest distance is if the item is the same folder as the search container.<br>
 	 * - Next are folders inside the search container.<br>
 	 * - After all those, distance increases with decreasing matching prefix folder count.<br>
-	 * 
+	 *
 	 * @param item
 	 *            parent of the resource being examined
 	 * @return the "distance" of the passed in IResource from the search
@@ -479,21 +479,21 @@
 		IPath itemPath = item.getFullPath();
 		if (itemPath.equals(containerPath))
 			return 0;
-		
+
 		int matching = containerPath.matchingFirstSegments(itemPath);
 		if (matching == 0)
 			return Integer.MAX_VALUE / 2;
-		
+
 		int containerSegmentCount = containerPath.segmentCount();
 		if (matching == containerSegmentCount) {
-			// inside searchContainer: 
+			// inside searchContainer:
 			return itemPath.segmentCount() - matching;
 		}
-		
+
 		//outside searchContainer:
 		return Integer.MAX_VALUE / 4 + containerSegmentCount - matching;
 	}
-	
+
 	@Override
 	protected void fillContentProvider(AbstractContentProvider contentProvider,
 			ItemsFilter itemsFilter, IProgressMonitor progressMonitor)
@@ -504,11 +504,11 @@
 					.beginTask(
 							WorkbenchMessages.FilteredItemsSelectionDialog_searchJob_taskName,
 							members.length);
-			
+
 			ResourceProxyVisitor visitor = new ResourceProxyVisitor(
 					contentProvider, (ResourceFilter) itemsFilter,
 					progressMonitor);
-			
+
 			if (visitor.visit(container.createProxy())) {
 				for (int i= 0; i < members.length; i++) {
 					IResource member = members[i];
@@ -519,7 +519,7 @@
 						break;
 				}
 			}
-			
+
 		}
 		progressMonitor.done();
 	}
@@ -594,7 +594,7 @@
 
 			return str;
 		}
-		
+
 		@Override
 		public StyledString getStyledText(Object element) {
 			if (!(element instanceof IResource)) {
@@ -610,7 +610,7 @@
 				str.append(" - ", StyledString.QUALIFIER_STYLER); //$NON-NLS-1$
 				str.append(res.getParent().getFullPath().makeRelative().toString(), StyledString.QUALIFIER_STYLER);
 			}
-			
+
 //Debugging:
 //			int pathDistance = pathDistance(res.getParent());
 //			if (pathDistance != Integer.MAX_VALUE / 2) {
@@ -619,7 +619,7 @@
 //				else
 //					str.append(" (" + pathDistance + " folders down from current selection)", StyledString.QUALIFIER_STYLER);
 //			}
-			
+
 			return str;
 		}
 
@@ -700,7 +700,7 @@
 
 		/**
 		 * Sets the active working set.
-		 * 
+		 *
 		 * @param workingSet
 		 *            the working set the filter should work with
 		 */
@@ -731,7 +731,7 @@
 
 		/**
 		 * Creates new ResourceProxyVisitor instance.
-		 * 
+		 *
 		 * @param contentProvider
 		 * @param resourceFilter
 		 * @param progressMonitor
@@ -790,7 +790,7 @@
 		 * @since 3.6
 		 */
 		private SearchPattern relativeContainerPattern;
-		
+
 		/**
 		 * Camel case pattern for the name part of the file name (without extension). Is <code>null</code> if there's no extension.
 		 * @since 3.6
@@ -801,12 +801,12 @@
 		 * @since 3.6
 		 */
 		SearchPattern extensionPattern;
-		
+
 		private int filterTypeMask;
 
 		/**
 		 * Creates new ResourceFilter instance
-		 * 
+		 *
 		 * @param container
 		 * @param showDerived
 		 *            flag which determine showing derived elements
@@ -822,9 +822,9 @@
 
 		/**
 		 * Creates new ResourceFilter instance
-		 * 
+		 *
 		 * @param container
-		 * @param searchContainer 
+		 * @param searchContainer
 		 *            IContainer to use for performing relative search
 		 * @param showDerived
 		 *            flag which determine showing derived elements
@@ -837,24 +837,24 @@
 			String stringPattern = getPattern();
 			int matchRule = getMatchRule();
 			String filenamePattern;
-			
+
 			int sep = stringPattern.lastIndexOf(IPath.SEPARATOR);
 			if (sep != -1) {
 				filenamePattern = stringPattern.substring(sep + 1, stringPattern.length());
 				if ("*".equals(filenamePattern)) //$NON-NLS-1$
 					filenamePattern= "**"; //$NON-NLS-1$
-				
+
 				if (sep > 0) {
 					if (filenamePattern.length() == 0) // relative patterns don't need a file name
 						filenamePattern= "**"; //$NON-NLS-1$
-						
+
 					String containerPattern = stringPattern.substring(0, sep);
-					
+
 					if (searchContainer != null) {
 						relativeContainerPattern = new SearchPattern(SearchPattern.RULE_EXACT_MATCH | SearchPattern.RULE_PATTERN_MATCH);
 						relativeContainerPattern.setPattern(searchContainer.getFullPath().append(containerPattern).toString());
 					}
-					
+
 					if (!containerPattern.startsWith("" + IPath.SEPARATOR)) //$NON-NLS-1$
 						containerPattern = IPath.SEPARATOR + containerPattern;
 					this.containerPattern= new SearchPattern(SearchPattern.RULE_EXACT_MATCH | SearchPattern.RULE_PREFIX_MATCH | SearchPattern.RULE_PATTERN_MATCH);
@@ -875,7 +875,7 @@
 			} else {
 				filenamePattern= stringPattern;
 			}
-			
+
 			int lastPatternDot = filenamePattern.lastIndexOf('.');
 			if (lastPatternDot != -1) {
 				if (matchRule != SearchPattern.RULE_EXACT_MATCH) {
@@ -950,8 +950,8 @@
 				}
 				return true;
 			}
-			
-			return false;			
+
+			return false;
 		}
 
 		private boolean nameMatches(String name) {
@@ -1007,7 +1007,7 @@
 
 		/**
 		 * Check show derived flag for a filter
-		 * 
+		 *
 		 * @return true if filter allow derived resources false if not
 		 */
 		public boolean isShowDerived() {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/MarkerResolutionSelectionDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/MarkerResolutionSelectionDialog.java
index 8651898..e4fd97e 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/MarkerResolutionSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/MarkerResolutionSelectionDialog.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *   IBM Corporation - initial API and implementation 
+ *   IBM Corporation - initial API and implementation
  *   Sebastian Davids <sdavids@gmx.de> - Fix for bug 19346 - Dialog font should be activated and used by other components.
  *   Simon Scholz <simon.scholz@vogella.com> - Bug 448060
  *******************************************************************************/
@@ -36,10 +36,10 @@
  * Dialog to allow the user to select from a list of marker
  * resolutions.
  * <p>
- * This dialog may be instantiated, it is not intented to 
+ * This dialog may be instantiated, it is not intented to
  * be subclassed.
  * </p>
- * 
+ *
  * @since 2.0
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -70,7 +70,7 @@
      * <p>
      * There must be at least one resolution.
      * </p>
-     * 
+     *
      * @param shell the parent shell
      * @param markerResolutions the resolutions to display
      */
@@ -99,7 +99,7 @@
 
         // Create label
         createMessageArea(composite);
-        // Create list viewer	
+        // Create list viewer
         listViewer = new ListViewer(composite, SWT.SINGLE | SWT.H_SCROLL
                 | SWT.V_SCROLL | SWT.BORDER);
         GridData data = new GridData(GridData.FILL_BOTH);
@@ -107,7 +107,7 @@
         data.widthHint = convertWidthInCharsToPixels(LIST_WIDTH);
         listViewer.getList().setLayoutData(data);
         listViewer.getList().setFont(parent.getFont());
-        // Set the label provider		
+        // Set the label provider
         listViewer.setLabelProvider(new LabelProvider() {
             @Override
 			public String getText(Object element) {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/NewFolderDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/NewFolderDialog.java
index 289773f..0dab4fe 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/NewFolderDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/NewFolderDialog.java
@@ -78,7 +78,7 @@
 	private boolean firstLinkCheck = true;
 
 	/**
-	 * Parent composite of the advanced widget group for creating 
+	 * Parent composite of the advanced widget group for creating
 	 * linked resources.
 	 */
 	private Composite linkedResourceParent;
@@ -89,14 +89,14 @@
 	private Composite linkedResourceComposite;
 
 	/**
-	 * Height of the dialog without the "advanced" linked resource group. 
-	 * Set when the advanced group is first made visible. 
+	 * Height of the dialog without the "advanced" linked resource group.
+	 * Set when the advanced group is first made visible.
 	 */
 	private int basicShellHeight = -1;
 
 	/**
 	 * Creates a NewFolderDialog
-	 * 
+	 *
 	 * @param parentShell parent of the new dialog
 	 * @param container parent of the new folder
 	 */
@@ -110,11 +110,11 @@
 	/**
 	 * Creates the folder using the name and link target entered
 	 * by the user.
-	 * Sets the dialog result to the created folder.  
+	 * Sets the dialog result to the created folder.
 	 */
 	@Override
 	protected void computeResult() {
-		//Do nothing here as we 
+		//Do nothing here as we
 		//need to know the result
 	}
 
@@ -138,7 +138,7 @@
 
 	/**
 	 * Creates the widget for advanced options.
-	 *  
+	 *
 	 * @param parent the parent composite
 	 */
 	protected void createAdvancedControls(Composite parent) {
@@ -241,8 +241,8 @@
 
 	/**
 	 * Creates a folder resource handle for the folder with the given name.
-	 * The folder handle is created relative to the container specified during 
-	 * object creation. 
+	 * The folder handle is created relative to the container specified during
+	 * object creation.
 	 *
 	 * @param folderName the name of the folder resource to create a handle for
 	 * @return the new folder resource handle
@@ -258,7 +258,7 @@
 	/**
 	 * Creates a new folder with the given name and optionally linking to
 	 * the specified link target.
-	 * 
+	 *
 	 * @param folderName name of the new folder
 	 * @param linkTarget name of the link target folder. may be null.
 	 * @return IFolder the new folder
@@ -322,7 +322,7 @@
 	}
 
 	/**
-	 * Shows/hides the advanced option widgets. 
+	 * Shows/hides the advanced option widgets.
 	 */
 	protected void handleAdvancedButtonSelect() {
 		Shell shell = getShell();
@@ -352,11 +352,11 @@
 	/**
 	 * Returns whether the container specified in the constructor is
 	 * a valid parent for creating linked resources.
-	 * 
-	 * @return boolean <code>true</code> if the container specified in 
+	 *
+	 * @return boolean <code>true</code> if the container specified in
 	 * 	the constructor is a valid parent for creating linked resources.
 	 * 	<code>false</code> if no linked resources may be created with the
-	 * 	specified container as a parent. 
+	 * 	specified container as a parent.
 	 */
 	private boolean isValidContainer() {
 		if (container.getType() != IResource.PROJECT
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationMoveDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationMoveDialog.java
index 0cf0455..811e793 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationMoveDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationMoveDialog.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    IBM Corporation - initial API and implementation 
+ *    IBM Corporation - initial API and implementation
  *    Sebastian Davids <sdavids@gmx.de> - Fix for bug 19346 - Dialog
  *        font should be activated and used by other components.
  *    Oakland Software Incorporated (Francis Upton) <francisu@ieee.org>
@@ -48,7 +48,7 @@
 	/**
 	 * Create a ProjectLocationMoveDialog on the supplied project parented by
 	 * the parentShell.
-	 * 
+	 *
 	 * @param parentShell
 	 * @param existingProject
 	 */
@@ -125,7 +125,7 @@
 			@Override
 			public void reportError(String errorMessage, boolean notError) {
 				setMessage(errorMessage);
-				
+
 			}
 		};
 	}
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationSelectionDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationSelectionDialog.java
index afc9d23..b7b17b1 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ProjectLocationSelectionDialog.java
@@ -64,7 +64,7 @@
 	/**
 	 * Create a ProjectLocationSelectionDialog on the supplied project parented
 	 * by the parentShell.
-	 * 
+	 *
 	 * @param parentShell
 	 * @param existingProject
 	 */
@@ -79,7 +79,7 @@
 	/**
 	 * Check the message. If it is null then continue otherwise inform the user
 	 * via the status value and disable the OK.
-	 * 
+	 *
 	 * @param errorMsg
 	 *            the error message to show if it is not <code>null</code>
 	 */
@@ -190,7 +190,7 @@
 
 	/**
 	 * Creates the project name specification controls.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -272,7 +272,7 @@
 
 	/**
 	 * Get an error reporter for the receiver.
-	 * 
+	 *
 	 * @return IErrorMessageReporter
 	 */
 	private IErrorMessageReporter getErrorReporter() {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceListSelectionDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceListSelectionDialog.java
index f4af792..594284c 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceListSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceListSelectionDialog.java
@@ -6,13 +6,13 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *  IBM Corporation - initial API and implementation 
+ *  IBM Corporation - initial API and implementation
  * 	Sebastian Davids <sdavids@gmx.de> - Fix for bug 19346 - Dialog font
  * 		should be activated and used by other components.
  *******************************************************************************/
 package org.eclipse.ui.dialogs;
 
-import com.ibm.icu.text.Collator; 
+import com.ibm.icu.text.Collator;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -53,13 +53,13 @@
  * Shows a list of resources to the user with a text entry field
  * for a string pattern used to filter the list of resources.
  * <p>
- * 
+ *
  * @since 2.1
  */
 public class ResourceListSelectionDialog extends SelectionDialog {
-	
+
 	private static final String DIALOG_SETTINGS_SECTION = "ResourceListSelectionDialogSettings"; //$NON-NLS-1$
-    
+
     Text pattern;
 
     Table resourceNames;
@@ -87,7 +87,7 @@
     int descriptorsSize;
 
     WorkbenchLabelProvider labelProvider = new WorkbenchLabelProvider();
-    
+
     boolean okEnabled = false;
 
     private boolean showDerived = false;
@@ -95,7 +95,7 @@
     private Button showDerivedButton;
 
     private boolean allowUserToToggleDerived;
-    
+
     static class ResourceDescriptor implements Comparable {
         String label;
 
@@ -121,7 +121,7 @@
             Display display = resourceNames.getDisplay();
             final int itemIndex[] = { 0 };
             final int itemCount[] = { 0 };
-            //Keep track of if the widget got disposed 
+            //Keep track of if the widget got disposed
             //so that we can abort if required
             final boolean[] disposed = { false };
             display.syncExec(new Runnable() {
@@ -145,8 +145,8 @@
                     && (patternString.endsWith("*")) && //$NON-NLS-1$
                     (patternString.indexOf('*') == patternString.length() - 1)) {
                 // Use a binary search to get first and last match when the pattern
-                // string ends with "*" and has no other embedded special characters.  
-                // For this case, we can be smarter about getting the first and last 
+                // string ends with "*" and has no other embedded special characters.
+                // For this case, we can be smarter about getting the first and last
                 // match since the items are in sorted order.
                 firstMatch = getFirstMatch();
                 if (firstMatch == -1) {
@@ -257,7 +257,7 @@
             Display display = resourceNames.getDisplay();
             final int itemIndex[] = { 0 };
             final int itemCount[] = { 0 };
-            //Keep track of if the widget got disposed 
+            //Keep track of if the widget got disposed
             //so that we can abort if required
             final boolean[] disposed = { false };
             display.syncExec(new Runnable() {
@@ -359,7 +359,7 @@
 
     /**
      * Creates a new instance of the class.
-     * 
+     *
      * @param parentShell shell to parent the dialog on
      * @param resources resources to display in the dialog
      */
@@ -372,10 +372,10 @@
     /**
      * Creates a new instance of the class.  When this constructor is used to
      * create the dialog, resources will be gathered dynamically as the pattern
-     * string is specified.  Only resources of the given types that match the 
+     * string is specified.  Only resources of the given types that match the
      * pattern string will be listed.  To further filter the matching resources,
      * @see #select(IResource)
-     * 
+     *
      * @param parentShell shell to parent the dialog on
      * @param container container to get resources from
      * @param typeMask mask containing IResource types to be considered
@@ -434,7 +434,7 @@
     /**
      * Creates the contents of this dialog, initializes the
      * listener and the update thread.
-     * 
+     *
      * @param parent parent to create the dialog widgets in
      */
     @Override
@@ -523,7 +523,7 @@
             });
             showDerivedButton.setSelection(getShowDerived());
         }
-            
+
         applyDialogFont(dialogArea);
         return dialogArea;
     }
@@ -531,7 +531,7 @@
     /**
      * Returns whether to include a "Show derived resources" checkbox in the dialog.
      * The default is <code>false</code>.
-     * 
+     *
      * @return <code>true</code> to include the checkbox, <code>false</code> to omit
      * @since 3.1
      */
@@ -541,14 +541,14 @@
 
     /**
      * Sets whether to include a "Show derived resources" checkbox in the dialog.
-     * 
+     *
      * @param allow <code>true</code> to include the checkbox, <code>false</code> to omit
      * @since 3.1
      */
     public void setAllowUserToToggleDerived(boolean allow) {
         allowUserToToggleDerived = allow;
     }
-    
+
     /**
      */
     private void filterResources(boolean force) {
@@ -573,7 +573,7 @@
                 && oldPattern.endsWith("*") && patternString.endsWith("*")) { //$NON-NLS-1$ //$NON-NLS-2$
             int matchLength = oldPattern.length() - 1;
             if (patternString.regionMatches(0, oldPattern, 0, matchLength)) {
-                // filter the previous list of items, this is done when the 
+                // filter the previous list of items, this is done when the
                 // new pattern is a derivative of the old pattern
                 updateFilterThread.firstMatch = oldThread.firstMatch;
                 updateFilterThread.lastMatch = oldThread.lastMatch;
@@ -590,7 +590,7 @@
 
     /**
      * Use a binary search to get the first match for the patternString.
-     * This method assumes the patternString does not contain any '?' 
+     * This method assumes the patternString does not contain any '?'
      * characters and that it contains only one '*' character at the end
      * of the string.
      */
@@ -670,7 +670,7 @@
 
     /**
      * Return an image for a resource descriptor.
-     * 
+     *
      * @param desc resource descriptor to return image for
      * @return an image for a resource descriptor.
      */
@@ -681,7 +681,7 @@
 
     /**
      * Use a binary search to get the last match for the patternString.
-     * This method assumes the patternString does not contain any '?' 
+     * This method assumes the patternString does not contain any '?'
      * characters and that it contains only one '*' character at the end
      * of the string.
      */
@@ -716,7 +716,7 @@
      * Gather the resources of the specified type that match the current
      * pattern string.  Gather the resources using the proxy visitor since
      * this is quicker than getting the entire resource.
-     * 
+     *
      * @param resources resources that match
      */
     private void getMatchingResources(final ArrayList resources) {
@@ -773,17 +773,17 @@
     /**
      * Returns whether derived resources should be shown in the list.
      * The default is <code>false</code>.
-     * 
+     *
      * @return <code>true</code> to show derived resources, <code>false</code> to hide them
      * @since 3.1
      */
     protected boolean getShowDerived() {
-       return showDerived ; 
+       return showDerived ;
     }
 
     /**
      * Sets whether derived resources should be shown in the list.
-     * 
+     *
      * @param show <code>true</code> to show derived resources, <code>false</code> to hide them
      * @since 3.1
      */
@@ -794,7 +794,7 @@
     /**
      * Creates a ResourceDescriptor for each IResource,
      * sorts them and removes the duplicated ones.
-     * 
+     *
      * @param resources resources to create resource descriptors for
      */
     private void initDescriptors(final IResource resources[]) {
@@ -829,7 +829,7 @@
                         current.resources.add(nextResource);
                         // If we are merging resources with the same name, into a single descriptor,
                         // then we must mark the descriptor unsorted so that we will sort the folder
-                        // names.  
+                        // names.
                         // See https://bugs.eclipse.org/bugs/show_bug.cgi?id=76496
                         current.resourcesSorted = false;
                     } else {
@@ -849,9 +849,9 @@
 
     /**
      * Returns true if the label matches the chosen pattern.
-     * 
+     *
      * @param label label to match with the current pattern
-     * @return true if the label matches the chosen pattern. 
+     * @return true if the label matches the chosen pattern.
      * 	false otherwise.
      */
     private boolean match(String label) {
@@ -890,10 +890,10 @@
     /**
      * Refreshes the filtered list of resources.
      * Called when the text in the pattern text entry has changed.
-     * 
+     *
      * @param force if <code>true</code> a refresh is forced, if <code>false</code> a refresh only
      *   occurs if the pattern has changed
-     * 
+     *
      * @since 3.1
      */
     protected void refresh(boolean force) {
@@ -907,7 +907,7 @@
     /**
      * A new resource has been selected. Change the contents
      * of the folder names list.
-     * 
+     *
      * @desc resource descriptor of the selected resource
      */
     private void updateFolders(final ResourceDescriptor desc) {
@@ -940,10 +940,10 @@
     }
 
     /**
-     * Update the specified item with the new info from the resource 
+     * Update the specified item with the new info from the resource
      * descriptor.
-     * Create a new table item if there is no item. 
-     * 
+     * Create a new table item if there is no item.
+     *
      * @param index index of the resource descriptor
      * @param itemPos position of the existing item to update
      * @param itemCount number of items in the resources table widget
@@ -974,7 +974,7 @@
         }
         updateOKState(true);
     }
-    
+
     /**
      * Update the enabled state of the OK button.  To be called when
      * the resource list is updated.
@@ -987,16 +987,16 @@
     		okEnabled = state;
     	}
     }
-    
-	
+
+
 	@Override
 	protected IDialogSettings getDialogBoundsSettings() {
         IDialogSettings settings = IDEWorkbenchPlugin.getDefault().getDialogSettings();
         IDialogSettings section = settings.getSection(DIALOG_SETTINGS_SECTION);
         if (section == null) {
             section = settings.addNewSection(DIALOG_SETTINGS_SECTION);
-        } 
+        }
         return section;
 	}
 }
-    
+
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceSelectionDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceSelectionDialog.java
index 1c57636..c92db01 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/ResourceSelectionDialog.java
@@ -166,7 +166,7 @@
     }
 
     /**
-     * Returns a content provider for <code>IResource</code>s that returns 
+     * Returns a content provider for <code>IResource</code>s that returns
      * only children of the given resource type.
      */
     private ITreeContentProvider getResourceProvider(final int resourceType) {
@@ -195,7 +195,7 @@
                 //input element case
                 if (o instanceof ArrayList) {
                     return ((ArrayList) o).toArray();
-                } 
+                }
                 return new Object[0];
             }
         };
@@ -221,8 +221,8 @@
     }
 
     /**
-     * The <code>ResourceSelectionDialog</code> implementation of this 
-     * <code>Dialog</code> method builds a list of the selected resources for later 
+     * The <code>ResourceSelectionDialog</code> implementation of this
+     * <code>Dialog</code> method builds a list of the selected resources for later
      * retrieval by the client and closes this dialog.
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/SaveAsDialog.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/SaveAsDialog.java
index fc37bad..abaa4f6 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/SaveAsDialog.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/SaveAsDialog.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *    IBM Corporation - initial API and implementation 
+ *    IBM Corporation - initial API and implementation
  *    Bob Foster <bob@objfac.com>
  *     - Fix for bug 23025 - SaveAsDialog should not assume what is being saved is an IFile
  *    Benjamin Muskalla <b.muskalla@gmx.net>
@@ -56,9 +56,9 @@
  * @noextend This class is not intended to be subclassed by clients.
  */
 public class SaveAsDialog extends TitleAreaDialog {
-	
+
 	private static final String DIALOG_SETTINGS_SECTION = "SaveAsDialogSettings"; //$NON-NLS-1$
-	
+
 	private IFile originalFile = null;
 
     private String originalName = null;
@@ -113,7 +113,7 @@
         return contents;
     }
 
-    /** 
+    /**
      * The <code>SaveAsDialog</code> implementation of this <code>Window</code>
      * method disposes of the banner image when the dialog is closed.
      */
@@ -169,7 +169,7 @@
      * Returns the full path entered by the user.
      * <p>
      * Note that the file and container might not exist and would need to be created.
-     * See the <code>IFile.create</code> method and the 
+     * See the <code>IFile.create</code> method and the
      * <code>ContainerGenerator</code> class.
      * </p>
      *
@@ -199,8 +199,8 @@
         IPath path = resourceGroup.getContainerFullPath().append(
                 resourceGroup.getResource());
 
-        //If the user does not supply a file extension and if the save 
-        //as dialog was provided a default file name append the extension 
+        //If the user does not supply a file extension and if the save
+        //as dialog was provided a default file name append the extension
         //of the default filename to the new name
         if (path.getFileExtension() == null) {
             if (originalFile != null && originalFile.getFileExtension() != null) {
@@ -292,10 +292,10 @@
             }
             return false;
         }
-        
+
         String resourceName = resourceGroup.getResource();
         IWorkspace workspace = ResourcesPlugin.getWorkspace();
-        
+
         // Do not allow a closed project to be selected
         IPath fullPath = resourceGroup.getContainerFullPath();
         if (fullPath != null) {
@@ -309,27 +309,27 @@
 	        	}
 	        }
         }
-        
+
         IStatus result = workspace.validateName(resourceName, IResource.FILE);
         if (!result.isOK()){
         	setErrorMessage(result.getMessage());
         	return false;
         }
-        
+
         setErrorMessage(null);
         return true;
     }
-    
+
 	@Override
 	protected IDialogSettings getDialogBoundsSettings() {
         IDialogSettings settings = IDEWorkbenchPlugin.getDefault().getDialogSettings();
         IDialogSettings section = settings.getSection(DIALOG_SETTINGS_SECTION);
         if (section == null) {
             section = settings.addNewSection(DIALOG_SETTINGS_SECTION);
-        } 
+        }
         return section;
 	}
-	
+
     @Override
 	protected boolean isResizable() {
     	return true;
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardDataTransferPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardDataTransferPage.java
index 7f7d120..c328e8f 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardDataTransferPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardDataTransferPage.java
@@ -167,7 +167,7 @@
     /**
      * Returns whether this page is complete. This determination is made based upon
      * the current contents of this page's controls.  Subclasses wishing to include
-     * their controls in this determination should override the hook methods 
+     * their controls in this determination should override the hook methods
      * <code>validateSourceGroup</code> and/or <code>validateOptionsGroup</code>.
      *
      * @return <code>true</code> if this page is complete, and <code>false</code> if
@@ -198,7 +198,7 @@
         if (text.length() == 0) {
 			return new Path(text);
 		}
-       
+
         return (new Path(text)).makeAbsolute();
     }
 
@@ -236,12 +236,12 @@
     }
 
     /**
-     * The <code>WizardDataTransfer</code> implementation of this 
-     * <code>IOverwriteQuery</code> method asks the user whether the existing 
+     * The <code>WizardDataTransfer</code> implementation of this
+     * <code>IOverwriteQuery</code> method asks the user whether the existing
      * resource at the given path should be overwritten.
      *
-     * @param pathString 
-     * @return the user's reply: one of <code>"YES"</code>, <code>"NO"</code>, <code>"ALL"</code>, 
+     * @param pathString
+     * @return the user's reply: one of <code>"YES"</code>, <code>"NO"</code>, <code>"ALL"</code>,
      *   or <code>"CANCEL"</code>
      */
     @Override
@@ -310,7 +310,7 @@
 
     /**
      * Restores control settings that were saved in the previous instance of this
-     * page.  
+     * page.
      * <p>
      * The <code>WizardDataTransferPage</code> implementation of this method does
      * nothing. Subclasses may override this hook method.
@@ -321,7 +321,7 @@
 
     /**
      * Saves control settings that are to be restored in the next instance of
-     * this page.  
+     * this page.
      * <p>
      * The <code>WizardDataTransferPage</code> implementation of this method does
      * nothing. Subclasses may override this hook method.
@@ -331,7 +331,7 @@
     }
 
     /**
-     * Determine if the page is complete and update the page appropriately. 
+     * Determine if the page is complete and update the page appropriately.
      */
     protected void updatePageCompletion() {
         boolean pageComplete = determinePageCompletion();
@@ -359,7 +359,7 @@
      * <code>true</code>. Subclasses may reimplement this hook method.
      * </p>
      *
-     * @return <code>true</code> indicating validity of all controls in the 
+     * @return <code>true</code> indicating validity of all controls in the
      *   destination specification group
      */
     protected boolean validateDestinationGroup() {
@@ -389,7 +389,7 @@
      * <code>true</code>. Subclasses may reimplement this hook method.
      * </p>
      *
-     * @return <code>true</code> indicating validity of all controls in the 
+     * @return <code>true</code> indicating validity of all controls in the
      *   source specification group
      */
     protected boolean validateSourceGroup() {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java
index 29a4f36..f468b24 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportPage.java
@@ -56,7 +56,7 @@
  * selection facilities.
  * </p>
  * <p>
- * Subclasses must implement 
+ * Subclasses must implement
  * <ul>
  *   <li><code>createDestinationGroup</code></li>
  * </ul>
@@ -124,7 +124,7 @@
     private static final String STORE_EXPORT_ALL_RESOURCES_ID = "WizardFileSystemExportPage1.STORE_EXPORT_ALL_RESOURCES_ID.";//$NON-NLS-1$
 
     /**
-     * Creates an export wizard page. If the current resource selection 
+     * Creates an export wizard page. If the current resource selection
      * is not empty then it will be used as the initial collection of resources
      * selected for export.
      *
@@ -137,8 +137,8 @@
     }
 
     /**
-     * The <code>WizardExportPage</code> implementation of this 
-     * <code>WizardDataTransferPage</code> method returns <code>false</code>. 
+     * The <code>WizardExportPage</code> implementation of this
+     * <code>WizardDataTransferPage</code> method returns <code>false</code>.
      * Subclasses may override this method.
      */
     @Override
@@ -223,7 +223,7 @@
         resourceBrowseButton.setLayoutData(new GridData(
                 GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
 
-        // export all types radio	
+        // export all types radio
         exportAllTypesRadio = new Button(sourceGroup, SWT.RADIO);
         exportAllTypesRadio.setText(IDEWorkbenchMessages.WizardExportPage_allTypes);
         exportAllTypesRadio.addListener(SWT.Selection, this);
@@ -319,12 +319,12 @@
     }
 
     /**
-     * Returns a new subcollection containing only those resources which are not 
+     * Returns a new subcollection containing only those resources which are not
      * local.
      *
-     * @param originalList the original list of resources (element type: 
+     * @param originalList the original list of resources (element type:
      *   <code>IResource</code>)
-     * @return the new list of non-local resources (element type: 
+     * @return the new list of non-local resources (element type:
      *   <code>IResource</code>)
      */
     protected List extractNonLocalResources(List originalList) {
@@ -381,11 +381,11 @@
     }
 
     /**
-     * Returns this page's collection of currently-specified resources to be 
-     * exported. This is the primary resource selection facility accessor for 
+     * Returns this page's collection of currently-specified resources to be
+     * exported. This is the primary resource selection facility accessor for
      * subclasses.
      *
-     * @return the collection of resources currently selected for export (element 
+     * @return the collection of resources currently selected for export (element
      *   type: <code>IResource</code>)
      */
     protected List getSelectedResources() {
@@ -404,7 +404,7 @@
      * Returns the resource object specified in the resource name entry field,
      * or <code>null</code> if such a resource does not exist in the workbench.
      *
-     * @return the resource specified in the resource name entry field, or 
+     * @return the resource specified in the resource name entry field, or
      *   <code>null</code>
      */
     protected IResource getSourceResource() {
@@ -441,7 +441,7 @@
     /**
      * Returns the resource extensions currently specified to be exported.
      *
-     * @return the resource extensions currently specified to be exported (element 
+     * @return the resource extensions currently specified to be exported (element
      *   type: <code>String</code>)
      */
     protected List getTypesToExport() {
@@ -460,7 +460,7 @@
     }
 
     /**
-     * The <code>WizardExportPage</code> implementation of this 
+     * The <code>WizardExportPage</code> implementation of this
      * <code>Listener</code> method handles all events and enablements for controls
      * on this page. Subclasses may extend.
      */
@@ -555,7 +555,7 @@
      * has been specified for export by the user.
      *
      * @param resourceName the resource name
-     * @return <code>true</code> if the resource name is suitable for export based 
+     * @return <code>true</code> if the resource name is suitable for export based
      *   upon its extension
      */
     protected boolean hasExportableExtension(String resourceName) {
@@ -583,7 +583,7 @@
     /**
      * Persists additional setting that are to be restored in the next instance of
      * this page.
-     * <p> 
+     * <p>
      * The <code>WizardImportPage</code> implementation of this method does
      * nothing. Subclasses may extend to persist additional settings.
      * </p>
@@ -594,10 +594,10 @@
     /**
      * Queries the user for the individual resources that are to be exported
      * and returns these resources as a collection.
-     * 
+     *
      * @param rootResource the resource to use as the root of the selection query
-     * @return the resources selected for export (element type: 
-     *   <code>IResource</code>), or <code>null</code> if the user canceled the 
+     * @return the resources selected for export (element type:
+     *   <code>IResource</code>), or <code>null</code> if the user canceled the
      *   selection
      */
     protected Object[] queryIndividualResourcesToExport(IAdaptable rootResource) {
@@ -613,8 +613,8 @@
      * Queries the user for the resource types that are to be exported and returns
      * these types as a collection.
      *
-     * @return the resource types selected for export (element type: 
-     *   <code>String</code>), or <code>null</code> if the user canceled the 
+     * @return the resource types selected for export (element type:
+     *   <code>String</code>), or <code>null</code> if the user canceled the
      *   selection
      */
     protected Object[] queryResourceTypesToExport() {
@@ -706,7 +706,7 @@
     /**
      * Persists resource specification control setting that are to be restored
      * in the next instance of this page. Subclasses wishing to persist additional
-     * setting for their controls should extend hook method 
+     * setting for their controls should extend hook method
      * <code>internalSaveWidgetValues</code>.
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportResourcesPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportResourcesPage.java
index 73fe964..f4b68a4 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportResourcesPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardExportResourcesPage.java
@@ -53,7 +53,7 @@
  * selection facilities.
  * </p>
  * <p>
- * Subclasses must implement 
+ * Subclasses must implement
  * <ul>
  *   <li><code>createDestinationGroup</code></li>
  * </ul>
@@ -88,7 +88,7 @@
     private final static String DESELECT_ALL_TITLE = IDEWorkbenchMessages.WizardTransferPage_deselectAll;
 
     /**
-     * Creates an export wizard page. If the current resource selection 
+     * Creates an export wizard page. If the current resource selection
      * is not empty then it will be used as the initial collection of resources
      * selected for export.
      *
@@ -103,8 +103,8 @@
     }
 
     /**
-     * The <code>addToHierarchyToCheckedStore</code> implementation of this 
-     * <code>WizardDataTransferPage</code> method returns <code>false</code>. 
+     * The <code>addToHierarchyToCheckedStore</code> implementation of this
+     * <code>WizardDataTransferPage</code> method returns <code>false</code>.
      * Subclasses may override this method.
      */
     @Override
@@ -120,14 +120,14 @@
      * including button presses and registers
      * default buttons with its shell.
      * The button id is stored as the buttons client data.
-     * Note that the parent's layout is assumed to be a GridLayout and 
+     * Note that the parent's layout is assumed to be a GridLayout and
      * the number of columns in this layout is incremented.
      * Subclasses may override.
      * </p>
      *
      * @param parent the parent composite
      * @param id the id of the button (see
-     *  <code>IDialogConstants.*_ID</code> constants 
+     *  <code>IDialogConstants.*_ID</code> constants
      *  for standard dialog button ids)
      * @param label the label from the button
      * @param defaultButton <code>true</code> if the button is to be the
@@ -254,7 +254,7 @@
         updateWidgetEnablements();
         setPageComplete(determinePageCompletion());
         setErrorMessage(null);	// should not initially have error message
-        
+
         setControl(composite);
     }
 
@@ -292,14 +292,14 @@
                 getResourceProvider(IResource.FILE), WorkbenchLabelProvider
                         .getDecoratingWorkbenchLabelProvider(), SWT.NONE,
                 DialogUtil.inRegularFontMode(parent));
-        
+
         ICheckStateListener listener = new ICheckStateListener() {
             @Override
 			public void checkStateChanged(CheckStateChangedEvent event) {
                 updateWidgetEnablements();
             }
         };
-        
+
         this.resourceGroup.addCheckStateListener(listener);
     }
 
@@ -323,12 +323,12 @@
     }
 
     /**
-     * Returns a new subcollection containing only those resources which are not 
+     * Returns a new subcollection containing only those resources which are not
      * local.
      *
-     * @param originalList the original list of resources (element type: 
+     * @param originalList the original list of resources (element type:
      *   <code>IResource</code>)
-     * @return the new list of non-local resources (element type: 
+     * @return the new list of non-local resources (element type:
      *   <code>IResource</code>)
      */
     protected List extractNonLocalResources(List originalList) {
@@ -346,7 +346,7 @@
     }
 
     /**
-     * Returns a content provider for <code>IResource</code>s that returns 
+     * Returns a content provider for <code>IResource</code>s that returns
      * only children of the given resource type.
      */
     private ITreeContentProvider getResourceProvider(final int resourceType) {
@@ -371,22 +371,22 @@
                         }
                     }
                     return results.toArray();
-                } 
+                }
                 //input element case
                 if (o instanceof ArrayList) {
                     return ((ArrayList) o).toArray();
-                } 
+                }
                 return new Object[0];
             }
         };
     }
 
     /**
-     * Returns this page's collection of currently-specified resources to be 
-     * exported. This is the primary resource selection facility accessor for 
+     * Returns this page's collection of currently-specified resources to be
+     * exported. This is the primary resource selection facility accessor for
      * subclasses.
      *
-     * @return a collection of resources currently selected 
+     * @return a collection of resources currently selected
      * for export (element type: <code>IResource</code>)
      */
     protected List getSelectedResources() {
@@ -400,11 +400,11 @@
     }
 
     /**
-     * Returns this page's collection of currently-specified resources to be 
-     * exported. This is the primary resource selection facility accessor for 
+     * Returns this page's collection of currently-specified resources to be
+     * exported. This is the primary resource selection facility accessor for
      * subclasses.
      *
-     * @return an iterator over the collection of resources currently selected 
+     * @return an iterator over the collection of resources currently selected
      * for export (element type: <code>IResource</code>). This will include
      * white checked folders and individually checked files.
      */
@@ -415,7 +415,7 @@
     /**
      * Returns the resource extensions currently specified to be exported.
      *
-     * @return the resource extensions currently specified to be exported (element 
+     * @return the resource extensions currently specified to be exported (element
      *   type: <code>String</code>)
      */
     protected List getTypesToExport() {
@@ -424,11 +424,11 @@
     }
 
     /**
-     * Returns this page's collection of currently-specified resources to be 
+     * Returns this page's collection of currently-specified resources to be
      * exported. This returns both folders and files - for just the files use
      * getSelectedResources.
      *
-     * @return a collection of resources currently selected 
+     * @return a collection of resources currently selected
      * for export (element type: <code>IResource</code>)
      */
     protected List getWhiteCheckedResources() {
@@ -458,7 +458,7 @@
      * has been specified for export by the user.
      *
      * @param resourceName the resource name
-     * @return <code>true</code> if the resource name is suitable for export based 
+     * @return <code>true</code> if the resource name is suitable for export based
      *   upon its extension
      */
     protected boolean hasExportableExtension(String resourceName) {
@@ -486,7 +486,7 @@
     /**
      * Persists additional setting that are to be restored in the next instance of
      * this page.
-     * <p> 
+     * <p>
      * The <code>WizardImportPage</code> implementation of this method does
      * nothing. Subclasses may extend to persist additional settings.
      * </p>
@@ -498,8 +498,8 @@
      * Queries the user for the resource types that are to be exported and returns
      * these types as an array.
      *
-     * @return the resource types selected for export (element type: 
-     *   <code>String</code>), or <code>null</code> if the user canceled the 
+     * @return the resource types selected for export (element type:
+     *   <code>String</code>), or <code>null</code> if the user canceled the
      *   selection
      */
     protected Object[] queryResourceTypesToExport() {
@@ -523,7 +523,7 @@
     /**
      * Persists resource specification control setting that are to be restored
      * in the next instance of this page. Subclasses wishing to persist additional
-     * setting for their controls should extend hook method 
+     * setting for their controls should extend hook method
      * <code>internalSaveWidgetValues</code>.
      */
     @Override
@@ -634,7 +634,7 @@
         return IDEWorkbenchPlugin.getDefault().getWorkbench().saveAllEditors(
                 true);
     }
-    
+
     /**
      * Check if widgets are enabled or disabled by a change in the dialog.
      */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardImportPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardImportPage.java
index be5c5e2..5199516 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardImportPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardImportPage.java
@@ -36,7 +36,7 @@
  * selection facilities.
  * </p>
  * <p>
- * Subclasses must implement 
+ * Subclasses must implement
  * <ul>
  *   <li><code>createSourceGroup</code></li>
  * </ul>
@@ -68,7 +68,7 @@
     private Button containerBrowseButton;
 
     /**
-     * Creates an import wizard page. If the initial resource selection 
+     * Creates an import wizard page. If the initial resource selection
      * contains exactly one container resource then it will be used as the default
      * import destination.
      *
@@ -97,8 +97,8 @@
     }
 
     /**
-     * The <code>WizardImportPage</code> implementation of this 
-     * <code>WizardDataTransferPage</code> method returns <code>true</code>. 
+     * The <code>WizardImportPage</code> implementation of this
+     * <code>WizardDataTransferPage</code> method returns <code>true</code>.
      * Subclasses may override this method.
      */
     @Override
@@ -259,7 +259,7 @@
     }
 
     /**
-     * The <code>WizardImportPage</code> implementation of this 
+     * The <code>WizardImportPage</code> implementation of this
      * <code>Listener</code> method handles all events and enablements for controls
      * on this page. Subclasses may extend.
      */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFileCreationPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFileCreationPage.java
index 926c740..28f2009 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFileCreationPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFileCreationPage.java
@@ -117,7 +117,7 @@
 	/**
 	 * The file extension to use for this page's file name field when it does
 	 * not exist yet.
-	 * 
+	 *
 	 * @see WizardNewFileCreationPage#setFileExtension(String)
 	 * @since 3.3
 	 */
@@ -142,7 +142,7 @@
 	 * Creates a new file creation wizard page. If the initial resource
 	 * selection contains exactly one container resource then it will be used as
 	 * the default container resource.
-	 * 
+	 *
 	 * @param pageName
 	 *            the name of the page
 	 * @param selection
@@ -157,7 +157,7 @@
 
 	/**
 	 * Creates the widget for advanced options.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -267,7 +267,7 @@
 
 	/**
 	 * Creates a file resource given the file handle and contents.
-	 * 
+	 *
 	 * @param fileHandle
 	 *            the file handle to create a file resource with
 	 * @param contents
@@ -279,7 +279,7 @@
 	 *                if the operation fails
 	 * @exception OperationCanceledException
 	 *                if the operation is canceled
-	 * 
+	 *
 	 * @deprecated As of 3.3, use or override {@link #createNewFile()} which
 	 *             uses the undoable operation support. To supply customized
 	 *             file content for a subclass, use
@@ -334,7 +334,7 @@
 	 * Creates a file resource handle for the file with the given workspace
 	 * path. This method does not create the file resource; this is the
 	 * responsibility of <code>createFile</code>.
-	 * 
+	 *
 	 * @param filePath
 	 *            the path of the file resource to create a handle for
 	 * @return the new file resource handle
@@ -370,7 +370,7 @@
 	 * This method should be called within a workspace modify operation since it
 	 * creates resources.
 	 * </p>
-	 * 
+	 *
 	 * @return the created file resource, or <code>null</code> if the file was
 	 *         not created
 	 */
@@ -387,7 +387,7 @@
 		final InputStream initialContents = getInitialContents();
 
 		createLinkTarget();
-		
+
 		if (linkTargetPath != null) {
 			URI resolvedPath = newFileHandle.getPathVariableManager().resolveURI(linkTargetPath);
 			try {
@@ -396,7 +396,7 @@
 					if (!store.fetchInfo().exists()) {
 						MessageDialog dlg = new MessageDialog(getContainer().getShell(),
 								IDEWorkbenchMessages.WizardNewFileCreationPage_createLinkLocationTitle,
-								null, 
+								null,
 								NLS.bind(
 										IDEWorkbenchMessages.WizardNewFileCreationPage_createLinkLocationQuestion, linkTargetPath),
 								MessageDialog.QUESTION_WITH_CANCEL,
@@ -423,7 +423,7 @@
 										.bind(
 												IDEWorkbenchMessages.WizardNewFileCreationPage_internalErrorMessage,
 												e.getMessage()), SWT.SHEET);
-	
+
 				return null;
 			} catch (IOException e) {
 				MessageDialog
@@ -434,7 +434,7 @@
 										.bind(
 												IDEWorkbenchMessages.WizardNewFileCreationPage_internalErrorMessage,
 												e.getMessage()), SWT.SHEET);
-	
+
 				return null;
 			}
 		}
@@ -448,7 +448,7 @@
 				try {
 					// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=219901
 					// directly execute the operation so that the undo state is
-					// not preserved.  Making this undoable resulted in too many 
+					// not preserved.  Making this undoable resulted in too many
 					// accidental file deletions.
 					op.execute(monitor, WorkspaceUndoUtil
 							.getUIInfoAdapter(getShell()));
@@ -521,7 +521,7 @@
 	 * Returns the scheduling rule to use when creating the resource at the
 	 * given container path. The rule should be the creation rule for the
 	 * top-most non-existing parent.
-	 * 
+	 *
 	 * @param resource
 	 *            The resource being created
 	 * @return The scheduling rule for creating the given resource
@@ -546,7 +546,7 @@
 	/**
 	 * Returns the current full path of the containing resource as entered or
 	 * selected by the user, or its anticipated initial value.
-	 * 
+	 *
 	 * @return the container's full path, anticipated initial value, or
 	 *         <code>null</code> if no path is known
 	 */
@@ -560,9 +560,9 @@
 	 * <br>
 	 * The current file name will include the file extension if the
 	 * preconditions are met.
-	 * 
+	 *
 	 * @see WizardNewFileCreationPage#setFileExtension(String)
-	 * 
+	 *
 	 * @return the file name, its anticipated initial value, or
 	 *         <code>null</code> if no file name is known
 	 */
@@ -576,7 +576,7 @@
 
 	/**
 	 * Returns the file extension to use when creating the new file.
-	 * 
+	 *
 	 * @return the file extension or <code>null</code>.
 	 * @see WizardNewFileCreationPage#setFileExtension(String)
 	 * @since 3.3
@@ -592,7 +592,7 @@
 	 * Returns a stream containing the initial contents to be given to new file
 	 * resource instances. <b>Subclasses</b> may wish to override. This default
 	 * implementation provides no initial contents.
-	 * 
+	 *
 	 * @return initial contents to be given to new file resource instances
 	 */
 	protected InputStream getInitialContents() {
@@ -605,7 +605,7 @@
 	 * <p>
 	 * Subclasses may reimplement.
 	 * </p>
-	 * 
+	 *
 	 * @return the label to display in the file name specification visual
 	 *         component group
 	 */
@@ -657,7 +657,7 @@
 						if (path != null)
 							setDefaultLinkValue = path.toPortableString().length() > 0;
 					}
-					
+
 					if (setDefaultLinkValue) {
 						IPath containerPath = resourceGroup.getContainerFullPath();
 						IPath newFilePath = containerPath.append(resourceGroup.getResource());
@@ -722,7 +722,7 @@
 	/**
 	 * Sets the flag indicating whether existing resources are permitted to be
 	 * specified on this page.
-	 * 
+	 *
 	 * @param value
 	 *            <code>true</code> if existing resources are permitted, and
 	 *            <code>false</code> otherwise
@@ -739,7 +739,7 @@
 	/**
 	 * Sets the value of this page's container name field, or stores it for
 	 * future use if this page's controls do not exist yet.
-	 * 
+	 *
 	 * @param path
 	 *            the full path to the container
 	 */
@@ -754,7 +754,7 @@
 	/**
 	 * Sets the value of this page's file name field, or stores it for future
 	 * use if this page's controls do not exist yet.
-	 * 
+	 *
 	 * @param value
 	 *            new file name
 	 */
@@ -781,7 +781,7 @@
 	 * <br>
 	 * The file extension will not be reflected in the actual file name field
 	 * until the file name field loses focus.
-	 * 
+	 *
 	 * @param value
 	 *            The file extension without the '.' prefix (e.g. 'java', 'xml')
 	 * @since 3.3
@@ -797,7 +797,7 @@
 	/**
 	 * Checks whether the linked resource target is valid. Sets the error
 	 * message accordingly and returns the status.
-	 * 
+	 *
 	 * @return IStatus validation result from the CreateLinkedResourceGroup
 	 */
 	protected IStatus validateLinkedResource() {
@@ -823,7 +823,7 @@
 
 	/**
 	 * Returns whether this page's controls currently all contain valid values.
-	 * 
+	 *
 	 * @return <code>true</code> if all controls are valid, and
 	 *         <code>false</code> if at least one is invalid
 	 */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java
index a6da2b1..4397a1e 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewFolderMainPage.java
@@ -104,18 +104,18 @@
 	private Button useDefaultLocation;
 	private Button useVirtualFolder;
 	private Button useLinkedResource;
-	
+
 	private Button filterButton;
-	
+
 	private CreateLinkedResourceGroup linkedResourceGroup;
 
 	private Composite advancedComposite;
-	
+
 	private Composite linkedResourceComposite;
 	private Composite linkedGroupComposite;
 
 	private UIResourceFilterDescription[] filterList = null;
-	
+
 	/**
 	 * Height of the "advanced" linked resource group. Set when the advanced
 	 * group is first made visible.
@@ -131,7 +131,7 @@
 	 * Creates a new folder creation wizard page. If the initial resource
 	 * selection contains exactly one container resource then it will be used as
 	 * the default container resource.
-	 * 
+	 *
 	 * @param pageName
 	 *            the name of the page
 	 * @param selection
@@ -147,7 +147,7 @@
 
 	/**
 	 * Creates the widget for advanced options.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -165,7 +165,7 @@
 			layout.marginWidth = 0;
 			advancedComposite.setLayout(layout);
 
-			
+
 			advancedButton = new Button(advancedComposite, SWT.PUSH);
 			advancedButton.setFont(advancedComposite.getFont());
 			advancedButton.setText(IDEWorkbenchMessages.showAdvanced);
@@ -237,7 +237,7 @@
 						if (path != null)
 							setDefaultLinkValue = path.toPortableString().length() > 0;
 					}
-					
+
 					if (setDefaultLinkValue) {
 						IPath containerPath = resourceGroup.getContainerFullPath();
 						IPath newFilePath = containerPath.append(resourceGroup.getResource());
@@ -289,7 +289,7 @@
 
 	/**
 	 * Creates a folder resource given the folder handle.
-	 * 
+	 *
 	 * @param folderHandle
 	 *            the folder handle to create a folder resource for
 	 * @param monitor
@@ -298,7 +298,7 @@
 	 *                if the operation fails
 	 * @exception OperationCanceledException
 	 *                if the operation is canceled
-	 * 
+	 *
 	 * @deprecated As of 3.3, use {@link #createNewFolder()} which uses the
 	 *   undoable operation support.
 	 */
@@ -355,7 +355,7 @@
 	 * Creates a folder resource handle for the folder with the given workspace
 	 * path. This method does not create the folder resource; this is the
 	 * responsibility of <code>createFolder</code>.
-	 * 
+	 *
 	 * @param folderPath
 	 *            the path of the folder resource to create a handle for
 	 * @return the new folder resource handle
@@ -369,7 +369,7 @@
 	/**
 	 * Creates a container resource handle for the container with the given workspace path. This
 	 * method does not create the resource.
-	 * 
+	 *
 	 * @param containerPath the path of the container resource to create a handle for
 	 * @return the new container resource handle
 	 * @see #createFolder
@@ -408,7 +408,7 @@
 	 * This method should be called within a workspace modify operation since it
 	 * creates resources.
 	 * </p>
-	 * 
+	 *
 	 * @return the created folder resource, or <code>null</code> if the folder
 	 *         was not created
 	 */
@@ -431,7 +431,7 @@
 				if (!store.fetchInfo().exists()) {
 					MessageDialog dlg = new MessageDialog(getContainer().getShell(),
 							IDEWorkbenchMessages.WizardNewFolderCreationPage_createLinkLocationTitle,
-							null, 
+							null,
 							NLS.bind(
 									IDEWorkbenchMessages.WizardNewFolderCreationPage_createLinkLocationQuestion, linkTargetPath),
 							MessageDialog.QUESTION_WITH_CANCEL,
@@ -455,9 +455,9 @@
 										.bind(
 												IDEWorkbenchMessages.WizardNewFileCreationPage_internalErrorMessage,
 												e.getMessage()), SWT.SHEET);
-	
+
 				return null;
-			} 
+			}
 		}
 		IRunnableWithProgress op = new IRunnableWithProgress() {
 			@Override
@@ -571,14 +571,14 @@
 					IDEWorkbenchPlugin.IDE_WORKBENCH,
 			"$nl$/icons/full/ovr16/link_ovr.png")}; //$NON-NLS-1$
 
-			CompositeImageDescriptor linkedFolderDescriptor = new OverlayIcon(folderDescriptor, linkedResourceOverlayMap, new Point(16, 16)); 
+			CompositeImageDescriptor linkedFolderDescriptor = new OverlayIcon(folderDescriptor, linkedResourceOverlayMap, new Point(16, 16));
 
 			ImageDescriptor[][] virtualFolderOverlayMap = new ImageDescriptor[4][1];
 			virtualFolderOverlayMap[1]= new ImageDescriptor[] {AbstractUIPlugin.imageDescriptorFromPlugin(
 					IDEWorkbenchPlugin.IDE_WORKBENCH,
 				"$nl$/icons/full/ovr16/virt_ovr.png")}; //$NON-NLS-1$
 
-			CompositeImageDescriptor virtualFolderDescriptor = new OverlayIcon(folderDescriptor, virtualFolderOverlayMap, new Point(16, 16)); 
+			CompositeImageDescriptor virtualFolderDescriptor = new OverlayIcon(folderDescriptor, virtualFolderOverlayMap, new Point(16, 16));
 
 			Image folderImage = folderDescriptor.createImage();
 			useDefaultLocation = new Button(advancedComposite, SWT.RADIO);
@@ -621,13 +621,13 @@
 					handleRadioSelect();
 				}
 			};
-			
+
 			useLinkedResource.addSelectionListener(radioListener);
 			useVirtualFolder.addSelectionListener(radioListener);
 			useDefaultLocation.addSelectionListener(radioListener);
-			
+
 			useDefaultLocation.setSelection(true);
-			
+
 			linkedGroupComposite = new Composite(advancedComposite, 0);
 			data = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
 			data.horizontalIndent = indent;
@@ -685,7 +685,7 @@
 		if (dialog.open() == Window.OK)
 			filterList = dialog.getFilters();
 	}
-	
+
 	/**
 	 * The <code>WizardNewFolderCreationPage</code> implementation of this
 	 * <code>Listener</code> method handles all events and enablements for
@@ -738,7 +738,7 @@
 	/**
 	 * Checks whether the linked resource target is valid. Sets the error
 	 * message accordingly and returns the status.
-	 * 
+	 *
 	 * @return IStatus validation result from the CreateLinkedResourceGroup
 	 */
 	protected IStatus validateLinkedResource() {
@@ -763,7 +763,7 @@
 
 	/**
 	 * Returns whether this page's controls currently all contain valid values.
-	 * 
+	 *
 	 * @return <code>true</code> if all controls are valid, and
 	 *         <code>false</code> if at least one is invalid
 	 */
@@ -804,16 +804,16 @@
 			setMessage(null);
 			setErrorMessage(null);
 		}
-		
+
 		if (isFilteredByParent()) {
 			setMessage(IDEWorkbenchMessages.WizardNewFolderCreationPage_resourceWillBeFilteredWarning, IMessageProvider.ERROR);
 			setupLinkedResourceTarget();
 			valid = false;
 		}
-		
+
 		return valid;
 	}
-	
+
 	private boolean isFilteredByParent() {
 		boolean createVirtualFolder = useVirtualFolder != null && useVirtualFolder.getSelection();
 		if (createVirtualFolder)
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewLinkPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewLinkPage.java
index 614e58e..4014972 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewLinkPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewLinkPage.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *   IBM Corporation - initial API and implementation 
+ *   IBM Corporation - initial API and implementation
  *   Sebastian Davids <sdavids@gmx.de> - Fix for bug 19346 - Dialog
  * 	 	font should be activated and used by other components.
  *******************************************************************************/
@@ -47,7 +47,7 @@
 import org.eclipse.ui.internal.ide.dialogs.IDEResourceInfoUtils;
 
 /**
- * Standard resource link page for a wizard that creates a file or 
+ * Standard resource link page for a wizard that creates a file or
  * folder resource.
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
@@ -72,10 +72,10 @@
     private Button variablesButton;
 
     /**
-     * Creates a new resource link wizard page. 
+     * Creates a new resource link wizard page.
      *
      * @param pageName the name of the page
-     * @param type specifies the type of resource to link to. 
+     * @param type specifies the type of resource to link to.
      * 	<code>IResource.FILE</code> or <code>IResource.FOLDER</code>
      */
     public WizardNewLinkPage(String pageName, int type) {
@@ -195,7 +195,7 @@
     }
 
     /**
-     * Returns the link target location entered by the user. 
+     * Returns the link target location entered by the user.
      *
      * @return the link target location entered by the user. null if the user
      * 	choose not to create a link.
@@ -273,7 +273,7 @@
 
     /**
      * Sets the container to use for link validation.
-     * This should be the parent of the new resource that is being 
+     * This should be the parent of the new resource that is being
      * linked.
      *
      * @param container the container to use for link validation.
@@ -284,7 +284,7 @@
 
     /**
      * Sets the value of the link target field
-     * 
+     *
      * @param target the value of the link target field
      */
     public void setLinkTarget(String target) {
@@ -297,7 +297,7 @@
     /**
      * Validates the type of the given file against the link type specified
      * during page creation.
-     * 
+     *
      * @param linkTargetStore file to validate
      * @return boolean <code>true</code> if the link target type is valid
      * 	and <code>false</code> otherwise.
@@ -340,7 +340,7 @@
     }
 
     /**
-     * Returns whether this page's controls currently all contain valid 
+     * Returns whether this page's controls currently all contain valid
      * values.
      *
      * @return <code>true</code> if all controls are valid, and
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectCreationPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectCreationPage.java
index 430d91e..b2b2450 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectCreationPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectCreationPage.java
@@ -71,7 +71,7 @@
         	setLocationForSelection();
             boolean valid = validatePage();
             setPageComplete(valid);
-                
+
         }
     };
 
@@ -94,11 +94,11 @@
 
     /**
 	 * Creates a new project creation wizard page.
-	 * 
+	 *
 	 * @param pageName
 	 * @param selection
 	 * @param workingSetTypes
-	 * 
+	 *
 	 * @deprecated default placement of the working set group has been removed.
 	 *             If you wish to use the working set block please call
 	 *             {@link #createWorkingSetGroup(Composite, IStructuredSelection, String[])}
@@ -118,7 +118,7 @@
     @Override
 	public void createControl(Composite parent) {
         Composite composite = new Composite(parent, SWT.NULL);
-    
+
 
         initializeDialogUnits(parent);
 
@@ -133,10 +133,10 @@
         if(initialProjectFieldValue != null) {
 			locationArea.updateProjectName(initialProjectFieldValue);
 		}
-        
+
 		// Scale the button based on the rest of the dialog
 		setButtonLayoutData(locationArea.getBrowseButton());
-		
+
         setPageComplete(validatePage());
         // Show description on opening
         setErrorMessage(null);
@@ -144,11 +144,11 @@
         setControl(composite);
         Dialog.applyDialogFont(composite);
     }
-    
+
     /**
 	 * Create a working set group for this page. This method can only be called
 	 * once.
-	 * 
+	 *
 	 * @param composite
 	 *            the composite in which to create the group
 	 * @param selection
@@ -168,7 +168,7 @@
 				supportedWorkingSetTypes);
 		return workingSetGroup;
 	}
-    
+
     /**
 	 * Get an error reporter for the receiver.
 	 * @return IErrorMessageReporter
@@ -187,7 +187,7 @@
 				if(valid) {
 					valid = validatePage();
 				}
-				
+
 				setPageComplete(valid);
 			}
 		};
@@ -229,7 +229,7 @@
 
 
     /**
-     * Returns the current project location path as entered by 
+     * Returns the current project location path as entered by
      * the user, or its anticipated initial value.
      * Note that if the default has been returned the path
      * in a project description used to create a project
@@ -240,10 +240,10 @@
     public IPath getLocationPath() {
         return new Path(locationArea.getProjectLocation());
     }
-    
+
     /**
     /**
-     * Returns the current project location URI as entered by 
+     * Returns the current project location URI as entered by
      * the user, or <code>null</code> if a valid project location
      * has not been entered.
      *
@@ -262,7 +262,7 @@
 	 * responsibility of <code>IProject::create</code> invoked by the new
 	 * project resource wizard.
 	 * </p>
-	 * 
+	 *
 	 * @return the new project resource handle
 	 */
     public IProject getProjectHandle() {
@@ -288,7 +288,7 @@
     /**
      * Returns the value of the project name field
      * with leading and trailing spaces removed.
-     * 
+     *
      * @return the project name in the field
      */
     private String getProjectNameFieldValue() {
@@ -304,15 +304,15 @@
      * created. The name is ignored if the createControl(Composite)
      * method has already been called. Leading and trailing spaces
      * in the name are ignored.
-     * Providing the name of an existing project will not necessarily 
-     * cause the wizard to warn the user.  Callers of this method 
-     * should first check if the project name passed already exists 
+     * Providing the name of an existing project will not necessarily
+     * cause the wizard to warn the user.  Callers of this method
+     * should first check if the project name passed already exists
      * in the workspace.
-     * 
+     *
      * @param name initial project name for this page
-     * 
+     *
      * @see IWorkspace#validateName(String, int)
-     * 
+     *
      */
     public void setInitialProjectName(String name) {
         if (name == null) {
@@ -332,9 +332,9 @@
     	locationArea.updateProjectName(getProjectNameFieldValue());
     }
 
-  
+
     /**
-     * Returns whether this page's controls currently all contain valid 
+     * Returns whether this page's controls currently all contain valid
      * values.
      *
      * @return <code>true</code> if all controls are valid, and
@@ -362,11 +362,11 @@
             setErrorMessage(IDEWorkbenchMessages.WizardNewProjectCreationPage_projectExistsMessage);
             return false;
         }
-                
+
         IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(
 				getProjectNameFieldValue());
 		locationArea.setExistingProject(project);
-		
+
 		String validLocationMessage = locationArea.checkValidLocation();
 		if (validLocationMessage != null) { // there is no destination location given
 			setErrorMessage(validLocationMessage);
@@ -400,7 +400,7 @@
     /**
 	 * Return the selected working sets, if any. If this page is not configured
 	 * to interact with working sets this will be an empty array.
-	 * 
+	 *
 	 * @return the selected working sets
 	 * @since 3.4
 	 */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java
index 5f99b85..db4bc11 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardNewProjectReferencePage.java
@@ -32,7 +32,7 @@
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 
 /**
- * Standard project reference page for a wizard that creates a 
+ * Standard project reference page for a wizard that creates a
  * project resource.
  * <p>
  * This page may be used by clients as-is; it may be also be
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardResourceImportPage.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardResourceImportPage.java
index c457b3d..1252f1f 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardResourceImportPage.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/dialogs/WizardResourceImportPage.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Martin Boyle <martingboyle@gmail.com> - Fix for 
+ *     Martin Boyle <martingboyle@gmail.com> - Fix for
  *     		Bug 183013 [Wizards] Error importing into linked EFS folder - "undefined path variable"
  *     Marc-Andre Laperle (Ericsson) - Bug 279902 - [Import/Export] WizardResourceImportPage.createDestinationGroup is final
  *******************************************************************************/
@@ -57,7 +57,7 @@
  * selection facilities.
  * </p>
  * <p>
- * Subclasses must implement 
+ * Subclasses must implement
  * <ul>
  *   <li><code>createSourceGroup</code></li>
  * </ul>
@@ -91,7 +91,7 @@
     /**
 	 * The <code>selectionGroup</code> field should have been created with a
 	 * private modifier. Subclasses should not access this field directly.
-	 * 
+	 *
 	 * @noreference This field is not intended to be referenced by clients.
 	 */
     protected ResourceTreeAndListGroup selectionGroup;
@@ -100,11 +100,11 @@
     private static final String EMPTY_FOLDER_MESSAGE = IDEWorkbenchMessages.WizardImportPage_specifyFolder;
 
     private static final String EMPTY_PROJECT_MESSAGE = IDEWorkbenchMessages.WizardImportPage_specifyProject;
-    
+
     private static final String INACCESSABLE_FOLDER_MESSAGE = IDEWorkbenchMessages.WizardImportPage_folderMustExist;
 
     /**
-     * Creates an import wizard page. If the initial resource selection 
+     * Creates an import wizard page. If the initial resource selection
      * contains exactly one container resource then it will be used as the default
      * import destination.
      *
@@ -141,8 +141,8 @@
     }
 
     /**
-     * The <code>WizardResourceImportPage</code> implementation of this 
-     * <code>WizardDataTransferPage</code> method returns <code>true</code>. 
+     * The <code>WizardResourceImportPage</code> implementation of this
+     * <code>WizardDataTransferPage</code> method returns <code>true</code>.
      * Subclasses may override this method.
      */
     @Override
@@ -297,13 +297,13 @@
     }
 
     /**
-     * Returns a content provider for <code>FileSystemElement</code>s that returns 
+     * Returns a content provider for <code>FileSystemElement</code>s that returns
      * only files as children.
      */
     protected abstract ITreeContentProvider getFileProvider();
 
     /**
-     * Returns a content provider for <code>FileSystemElement</code>s that returns 
+     * Returns a content provider for <code>FileSystemElement</code>s that returns
      * only folders as children.
      */
     protected abstract ITreeContentProvider getFolderProvider();
@@ -325,11 +325,11 @@
     }
 
     /**
-     * Returns this page's list of currently-specified resources to be 
-     * imported. This is the primary resource selection facility accessor for 
+     * Returns this page's list of currently-specified resources to be
+     * imported. This is the primary resource selection facility accessor for
      * subclasses.
      *
-     * @return a list of resources currently selected 
+     * @return a list of resources currently selected
      * for export (element type: <code>IResource</code>)
      */
     protected java.util.List getSelectedResources() {
@@ -337,7 +337,7 @@
     }
 
     /**
-     * Returns this page's list of currently-specified resources to be 
+     * Returns this page's list of currently-specified resources to be
      * imported filtered by the IElementFilter.
      * @since 3.10
      */
@@ -347,7 +347,7 @@
 
     /**
      * <bold>DO NOT USE THIS METHOD</bold>
-     * Returns this page's list of currently-specified resources to be 
+     * Returns this page's list of currently-specified resources to be
      * imported filtered by the IElementFilter.
      * @deprecated Should use the API {@link IElementFilter}
      */
@@ -372,9 +372,9 @@
 				return null;
 			}
         	return (IContainer) resource;
-        	
+
         }
-            
+
 
         return null;
     }
@@ -406,7 +406,7 @@
     }
 
     /**
-     * The <code>WizardResourceImportPage</code> implementation of this 
+     * The <code>WizardResourceImportPage</code> implementation of this
      * <code>Listener</code> method handles all events and enablements for controls
      * on this page. Subclasses may extend.
      * @param event Event
@@ -532,7 +532,7 @@
         	if(IDEWorkbenchPlugin.getPluginWorkspace().getRoot().exists(getContainerFullPath())) {
 				return false;
 			}
-        	
+
             //if it is does not exist be sure the project does
             IWorkspace workspace = IDEWorkbenchPlugin.getPluginWorkspace();
             IPath projectPath = containerPath.removeLastSegments(containerPath
@@ -543,7 +543,7 @@
 			}
             setErrorMessage(IDEWorkbenchMessages.WizardImportPage_projectNotExist);
             return false;
-        } 
+        }
         if (!container.isAccessible()) {
              setErrorMessage(INACCESSABLE_FOLDER_MESSAGE);
              return false;
@@ -556,7 +556,7 @@
           }
          return false;
         }
-        
+
 
         if (sourceConflictsWithDestination(containerPath)) {
             setErrorMessage(getSourceConflictMessage());
@@ -583,7 +583,7 @@
      * Returns whether or not the source location conflicts
      * with the destination resource. By default this is not
      * checked, so <code>false</code> is returned.
-     * 
+     *
      * @param sourcePath the path being checked
      * @return <code>true</code> if the source location conflicts with the
      *   destination resource, <code>false</code> if not
@@ -597,7 +597,7 @@
      */
     @Override
 	protected boolean determinePageCompletion() {
-        //Check for valid projects before making the user do anything 
+        //Check for valid projects before making the user do anything
         if (noOpenProjects()) {
             setErrorMessage(IDEWorkbenchMessages.WizardImportPage_noOpenProjects);
             return false;
@@ -606,7 +606,7 @@
     }
 
     /**
-     * Returns whether or not the passed workspace has any 
+     * Returns whether or not the passed workspace has any
      * open projects
      * @return boolean
      */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/model/WorkbenchContentProvider.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/model/WorkbenchContentProvider.java
index 51bf3f5..0515642 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/model/WorkbenchContentProvider.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/model/WorkbenchContentProvider.java
@@ -112,17 +112,17 @@
 
 	/**
 	 * Process the resource delta.
-	 * 
+	 *
 	 * @param delta
 	 */
-	protected void processDelta(IResourceDelta delta) {		
+	protected void processDelta(IResourceDelta delta) {
 
 		Control ctrl = viewer.getControl();
 		if (ctrl == null || ctrl.isDisposed()) {
 			return;
 		}
-		
-		
+
+
 		final Collection runnables = new ArrayList();
 		processDelta(delta, runnables);
 
@@ -145,7 +145,7 @@
 					if (ctrl == null || ctrl.isDisposed()) {
 						return;
 					}
-					
+
 					runUpdates(runnables);
 				}
 			});
@@ -162,7 +162,7 @@
 		while(runnableIterator.hasNext()){
 			((Runnable)runnableIterator.next()).run();
 		}
-		
+
 	}
 
 	/**
@@ -178,7 +178,7 @@
 
 		// Get the affected resource
 		final IResource resource = delta.getResource();
-	
+
 		// If any children have changed type, just do a full refresh of this
 		// parent,
 		// since a simple update on such children won't work,
@@ -281,7 +281,7 @@
 		}
 		// heuristic test for items moving within same folder (i.e. renames)
 		final boolean hasRename = numMovedFrom > 0 && numMovedTo > 0;
-		
+
 		Runnable addAndRemove = new Runnable(){
 			@Override
 			public void run() {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInput.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInput.java
index c7bb870..c278b0c 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInput.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInput.java
@@ -46,7 +46,7 @@
 public class FileEditorInput extends PlatformObject implements IFileEditorInput, IPathEditorInput, IURIEditorInput,
 		IPersistableElement {
 	private IFile file;
-	
+
 	/**
 	 * Return whether or not file is local. Only {@link IFile}s with a local
 	 * value should call {@link IPathEditorInput#getPath()}
@@ -79,7 +79,7 @@
 					"Failed to obtain file store for resource", e); //$NON-NLS-1$
 			return false;
 		}
-	
+
 	}
 
 	/**
@@ -91,7 +91,7 @@
 		if (file == null)
 			throw new IllegalArgumentException();
 		this.file = file;
-	
+
 	}
 
 	/* (non-Javadoc)
@@ -195,7 +195,7 @@
 		FileEditorInputFactory.saveState(memento, this);
 	}
 
-	
+
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.IURIEditorInput#getURI()
@@ -204,8 +204,8 @@
 	public URI getURI() {
 		return file.getLocationURI();
 	}
-	
-	
+
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.IPathEditorInput#getPath()
 	 */
@@ -244,12 +244,12 @@
 	public String toString() {
 		return getClass().getName() + "(" + getFile().getFullPath() + ")"; //$NON-NLS-1$ //$NON-NLS-2$
 	}
-	
+
 	/*
 	 * Allows for the return of an {@link IWorkbenchAdapter} adapter.
-	 * 
+	 *
 	 * @since 3.5
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.PlatformObject#getAdapter(java.lang.Class)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInputFactory.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInputFactory.java
index 66fae70..7e881d7 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInputFactory.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileEditorInputFactory.java
@@ -71,7 +71,7 @@
 
     /**
      * Returns the element factory id for this class.
-     * 
+     *
      * @return the element factory id
      */
     public static String getFactoryId() {
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileInPlaceEditorInput.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileInPlaceEditorInput.java
index dc3f584..9907802 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileInPlaceEditorInput.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/FileInPlaceEditorInput.java
@@ -25,7 +25,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @since 3.0
  * @noextend This class is not intended to be subclassed by clients.
  */
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/MarkerTransfer.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/MarkerTransfer.java
index d657986..9d50988 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/MarkerTransfer.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/MarkerTransfer.java
@@ -26,18 +26,18 @@
 import org.eclipse.swt.dnd.TransferData;
 
 /**
- * A <code>MarkerTransfer</code> is used to transfer an array of 
- * <code>IMarker</code>s from one part to another in a drag and drop 
+ * A <code>MarkerTransfer</code> is used to transfer an array of
+ * <code>IMarker</code>s from one part to another in a drag and drop
  * operation.
  * <p>
- * In every drag and drop operation there is a <code>DragSource</code> and 
- * a <code>DropTarget</code>.  When a drag occurs a <code>Transfer</code> is 
- * used to marshall the drag data from the source into a byte array.  If a drop 
+ * In every drag and drop operation there is a <code>DragSource</code> and
+ * a <code>DropTarget</code>.  When a drag occurs a <code>Transfer</code> is
+ * used to marshall the drag data from the source into a byte array.  If a drop
  * occurs another <code>Transfer</code> is used to marshall the byte array into
  * drop data for the target.
  * </p><p>
  * This class can be used for a <code>Viewer<code> or an SWT component directly.
- * A singleton is provided which may be serially reused (see <code>getInstance</code>).  
+ * A singleton is provided which may be serially reused (see <code>getInstance</code>).
  * It is not intended to be subclassed.
  * </p>
  *
diff --git a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/ResourceTransfer.java b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/ResourceTransfer.java
index cc4bd69..7f02f0f 100644
--- a/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/ResourceTransfer.java
+++ b/bundles/org.eclipse.ui.ide/extensions/org/eclipse/ui/part/ResourceTransfer.java
@@ -27,25 +27,25 @@
 
 /**
  * The <code>ResourceTransfer</code> class is used to transfer an
- * array of <code>IResource</code>s from one part to another in a 
+ * array of <code>IResource</code>s from one part to another in a
  * drag and drop operation or a cut, copy, paste action.
  * <p>
- * In every drag and drop operation there is a <code>DragSource</code> and 
- * a <code>DropTarget</code>.  When a drag occurs a <code>Transfer</code> is 
- * used to marshal the drag data from the source into a byte array.  If a drop 
+ * In every drag and drop operation there is a <code>DragSource</code> and
+ * a <code>DropTarget</code>.  When a drag occurs a <code>Transfer</code> is
+ * used to marshal the drag data from the source into a byte array.  If a drop
  * occurs another <code>Transfer</code> is used to marshal the byte array into
- * drop data for the target.  
+ * drop data for the target.
  * </p>
  * <p>
- * When a <code>CutAction</code> or a <code>CopyAction</code> is performed, 
- * this transfer is used to place references to the selected resources 
- * on the <code>Clipboard</code>.  When a <code>PasteAction</code> is performed, the 
+ * When a <code>CutAction</code> or a <code>CopyAction</code> is performed,
+ * this transfer is used to place references to the selected resources
+ * on the <code>Clipboard</code>.  When a <code>PasteAction</code> is performed, the
  * references on the clipboard are used to move or copy the resources
  * to the selected destination.
  * </p>
  * <p>
  * This class can be used for a <code>Viewer<code> or an SWT component directly.
- * A singleton is provided which may be serially reused (see <code>getInstance</code>).  
+ * A singleton is provided which may be serially reused (see <code>getInstance</code>).
  * It is not intended to be subclassed.
  * </p>
  * <p>
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInput.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInput.java
index d24dc5b..4174228 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInput.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInput.java
@@ -23,10 +23,10 @@
 import org.eclipse.ui.model.IWorkbenchAdapter;
 
 /**
- * Implements an IEditorInput instance appropriate for 
+ * Implements an IEditorInput instance appropriate for
  * <code>IFileStore</code> elements that represent files
  * that are not part of the current workspace.
- * 
+ *
  * @since 3.3
  *
  */
@@ -134,7 +134,7 @@
 	@Override
 	public void saveState(IMemento memento) {
 		FileStoreEditorInputFactory.saveState(memento, this);
-		
+
 	}
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInputFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInputFactory.java
index e832f30..ad8e885 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInputFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/FileStoreEditorInputFactory.java
@@ -23,17 +23,17 @@
 
 
 /**
- * Factory for saving and restoring a <code>FileStoreEditorInput</code>. 
+ * Factory for saving and restoring a <code>FileStoreEditorInput</code>.
  * The stored representation of a <code>FileStoreEditorInput</code> remembers
  * the path of the editor input.
  * <p>
  * The workbench will automatically create instances of this class as required.
  * It is not intended to be instantiated or subclassed by the client.</p>
- * 
+ *
  * @since 3.3
  */
 public class FileStoreEditorInputFactory implements IElementFactory {
-	
+
 	/**
 	 * This factory's ID.
 	 * <p>
@@ -41,7 +41,7 @@
 	 * the <code>"org.eclipse.ui.elementFactories"<code> extension point.
 	 */
 	static final String ID = "org.eclipse.ui.ide.FileStoreEditorInputFactory"; //$NON-NLS-1$
-	
+
 	/**
 	 * Saves the state of the given editor input into the given memento.
 	 *
@@ -67,14 +67,14 @@
 		String uriString = memento.getString(TAG_URI);
 		if (uriString == null)
 			return null;
-		
+
 		URI uri;
 		try {
 			uri = new URI(uriString);
 		} catch (URISyntaxException e) {
 			return null;
 		}
-		
+
 		try {
 			return new FileStoreEditorInput(EFS.getStore(uri));
 		} catch (CoreException e) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IContributorResourceAdapter2.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IContributorResourceAdapter2.java
index 922f65e..a3f190f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IContributorResourceAdapter2.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IContributorResourceAdapter2.java
@@ -15,19 +15,19 @@
 import org.eclipse.ui.IContributorResourceAdapter;
 
 /**
- * An extension to the <code>IContributorResourceAdapter</code> that adapts 
+ * An extension to the <code>IContributorResourceAdapter</code> that adapts
  * a model object to a <code>ResourceMapping</code>.
- * 
+ *
  * @since 3.2
  */
 public interface IContributorResourceAdapter2 extends IContributorResourceAdapter {
 
     /**
-     * Return the resource mapping that the supplied adaptable 
+     * Return the resource mapping that the supplied adaptable
      * adapts to. An <code>IContributorResourceAdapter2</code> assumes
      * that any object passed to it adapts to one equivalent
      * resource mapping.
-     * 
+     *
      * @param adaptable the adaptable being queried
      * @return a resource mapping, or <code>null</code> if there
      *  is no adapted resource mapping for this type
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDE.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDE.java
index 89a04f0..2c3cefe1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDE.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDE.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2015 IBM Corporation and others.
+ * Copyright (c) 2003, 2013 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -81,7 +81,7 @@
  * Collection of IDE-specific APIs factored out of existing workbench. This
  * class cannot be instantiated; all functionality is provided by static methods
  * and fields.
- * 
+ *
  * @since 3.0
  */
 public final class IDE {
@@ -90,7 +90,7 @@
 	 * preferred editor ID to use.
 	 * <p>
 	 * Example of retrieving the persisted editor id:
-	 * 
+	 *
 	 * <pre><code>
 	 *  IFile file = ...
 	 *  IEditorDescriptor editorDesc = null;
@@ -103,11 +103,11 @@
 	 *  	// handle problem accessing persistent property here
 	 *  }
 	 * </code></pre>
-	 * 
+	 *
 	 * </p>
 	 * <p>
 	 * Example of persisting the editor id:
-	 * 
+	 *
 	 * <pre><code>
 	 *  IFile file = ...
 	 *  try {
@@ -116,7 +116,7 @@
 	 *  	// handle problem setting persistent property here
 	 *  }
 	 * </code></pre>
-	 * 
+	 *
 	 * </p>
 	 */
 	public static final QualifiedName EDITOR_KEY = new QualifiedName(
@@ -149,7 +149,7 @@
 	 * <p>
 	 * This interface is not intended to be implemented by clients.
 	 * </p>
-	 * 
+	 *
 	 * @see org.eclipse.ui.ISharedImages
 	 */
 	public interface SharedImages {
@@ -194,10 +194,10 @@
 		 * <p>
 		 * Value is of type <code>String</code>. The possible values are
 		 * defined by the constants
-		 * <code>OPEN_PERSPECTIVE_WINDOW, OPEN_PERSPECTIVE_PAGE, 
+		 * <code>OPEN_PERSPECTIVE_WINDOW, OPEN_PERSPECTIVE_PAGE,
 		 * OPEN_PERSPECTIVE_REPLACE, and NO_NEW_PERSPECTIVE</code>.
 		 * </p>
-		 * 
+		 *
 		 * @see org.eclipse.ui.IWorkbenchPreferenceConstants#OPEN_PERSPECTIVE_WINDOW
 		 * @see org.eclipse.ui.IWorkbenchPreferenceConstants#OPEN_PERSPECTIVE_PAGE
 		 * @see org.eclipse.ui.IWorkbenchPreferenceConstants#OPEN_PERSPECTIVE_REPLACE
@@ -213,7 +213,7 @@
 		 * <p>
 		 * The default value for this preference is <code>true</code>.
 		 * </p>
-		 * 
+		 *
 		 * @since 3.1
 		 */
 		public static final String SHOW_WORKSPACE_SELECTION_DIALOG = "SHOW_WORKSPACE_SELECTION_DIALOG"; //$NON-NLS-1$
@@ -223,7 +223,7 @@
 		 * Stores the maximum number of workspaces that should be displayed in
 		 * the ChooseWorkspaceDialog.
 		 * </p>
-		 * 
+		 *
 		 * @since 3.1
 		 */
 		public static final String MAX_RECENT_WORKSPACES = "MAX_RECENT_WORKSPACES"; //$NON-NLS-1$
@@ -232,7 +232,7 @@
 		 * <p>
 		 * Stores a comma separated list of the recently used workspace paths.
 		 * </p>
-		 * 
+		 *
 		 * @since 3.1
 		 */
 		public static final String RECENT_WORKSPACES = "RECENT_WORKSPACES"; //$NON-NLS-1$
@@ -242,7 +242,7 @@
 		 * Stores the version of the protocol used to decode/encode the list of
 		 * recent workspaces.
 		 * </p>
-		 * 
+		 *
 		 * @since 3.1
 		 */
 		public static final String RECENT_WORKSPACES_PROTOCOL = "RECENT_WORKSPACES_PROTOCOL"; //$NON-NLS-1$
@@ -264,7 +264,7 @@
 
 	/**
 	 * Returns the marker help registry for the workbench.
-	 * 
+	 *
 	 * @return the marker help registry
 	 */
 	public static IMarkerHelpRegistry getMarkerHelpRegistry() {
@@ -281,7 +281,7 @@
 	 * editor does not provide an <code>IGotoMarker</code> interface (either
 	 * directly or via <code>IAdaptable.getAdapter</code>), this has no
 	 * effect.
-	 * 
+	 *
 	 * @param editor
 	 *            the editor
 	 * @param marker
@@ -305,7 +305,7 @@
 	 * If the page already has an editor open on the target object then that
 	 * editor is brought to front; otherwise, a new editor is opened.
 	 * <p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param input
@@ -339,7 +339,7 @@
 	 * If the page already has an editor open on the target object then that
 	 * editor is brought to front; otherwise, a new editor is opened.
 	 * </p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param uri
@@ -351,10 +351,10 @@
 	 * @return an open editor or <code>null</code> if an external editor was
 	 * @exception PartInitException
 	 *                if the editor could not be initialized
-	 * 
+	 *
 	 * @see org.eclipse.ui.IWorkbenchPage#openEditor(IEditorInput, String)
 	 * @see EFS#getStore(URI)
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	public static IEditorPart openEditor(IWorkbenchPage page, URI uri,
@@ -383,7 +383,7 @@
 	 * The result is a normal file editor input if the file exists in the
 	 * workspace and, if not, we create a wrapper capable of managing an
 	 * 'external' file using its <code>IFileStore</code>.
-	 * 
+	 *
 	 * @param fileStore
 	 *            The file store to provide the editor input for
 	 * @return The editor input associated with the given file store
@@ -399,7 +399,7 @@
 	/**
 	 * Determine whether or not the <code>IFileStore</code> represents a file
 	 * currently in the workspace.
-	 * 
+	 *
 	 * @param fileStore
 	 *            The <code>IFileStore</code> to test
 	 * @return The workspace's <code>IFile</code> if it exists or
@@ -419,7 +419,7 @@
 	/**
 	 * Filter the incoming array of <code>IFile</code> elements by removing
 	 * any that do not currently exist in the workspace.
-	 * 
+	 *
 	 * @param files
 	 *            The array of <code>IFile</code> elements
 	 * @return The filtered array
@@ -444,7 +444,7 @@
 	 * editor is brought to front; otherwise, a new editor is opened. If
 	 * <code>activate == true</code> the editor will be activated.
 	 * <p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param input
@@ -481,7 +481,7 @@
 	 * editor is brought to front; otherwise, a new editor is opened. If
 	 * <code>activate == true</code> the editor will be activated.
 	 * <p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param input
@@ -510,7 +510,7 @@
 	 * editor is brought to front; otherwise, a new editor is opened. If
 	 * <code>activate == true</code> the editor will be activated.
 	 * <p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param input
@@ -550,7 +550,7 @@
 	 * If the page already has an editor open on the target object then that
 	 * editor is brought to front; otherwise, a new editor is opened.
 	 * <p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param input
@@ -579,7 +579,7 @@
 	 * If the page already has an editor open on the target object then that
 	 * editor is brought to front; otherwise, a new editor is opened.
 	 * <p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param input
@@ -610,7 +610,7 @@
 	 * editor is brought to front; otherwise, a new editor is opened. If
 	 * <code>activate == true</code> the editor will be activated.
 	 * <p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param input
@@ -661,7 +661,7 @@
 	 * default text editor is available.</li>
 	 * </ol>
 	 * </p>
-	 * 
+	 *
 	 * @param file
 	 *            the file
 	 * @return an editor descriptor, appropriate for opening the file
@@ -698,7 +698,7 @@
 	 * default text editor is available.</li>
 	 * </ol>
 	 * </p>
-	 * 
+	 *
 	 * @param file
 	 *            the file
 	 * @param determineContentType
@@ -721,7 +721,7 @@
 	}
 
 	/**
-	 * Returns an editor descriptor appropriate for opening the given file
+	 * Returns an editor id appropriate for opening the given file
 	 * store.
 	 * <p>
 	 * The editor descriptor is determined using a multi-step process. This
@@ -741,15 +741,14 @@
 	 * default text editor is available.</li>
 	 * </ol>
 	 * </p>
-	 * 
+	 *
 	 * @param fileStore
 	 *            the file store
-	 * @return the editor descriptor, appropriate for opening the file
+	 * @return the id of an editor, appropriate for opening the file
 	 * @throws PartInitException
 	 *             if no editor can be found
-	 * @since 3.11
 	 */
-	public static IEditorDescriptor getEditorDescriptorForFileStore(IFileStore fileStore) throws PartInitException {
+	private static String getEditorId(IFileStore fileStore) throws PartInitException {
 		String name = fileStore.fetchInfo().getName();
 		if (name == null) {
 			throw new IllegalArgumentException();
@@ -776,7 +775,7 @@
 
 		IEditorDescriptor defaultEditor = editorReg.getDefaultEditor(name, contentType);
 		defaultEditor = overrideDefaultEditorAssociation(new FileStoreEditorInput(fileStore), contentType, defaultEditor);
-		return getEditorDescriptor(name, editorReg, defaultEditor);
+		return getEditorDescriptor(name, editorReg, defaultEditor).getId();
 	}
 
 	/**
@@ -787,7 +786,7 @@
 	 * calling {@link #getDefaultEditor(IFile, boolean)}. This method here should only be used if
 	 * this is not possible for whatever reason.
 	 * </p>
-	 * 
+	 *
 	 * @param editorInput the editor input for the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptor the current association for the given input or <code>null</code> if
@@ -809,7 +808,7 @@
 	/**
 	 * Applies the <code>org.eclipse.ui.ide.editorAssociationOverride</code> extensions to the given
 	 * input.
-	 * 
+	 *
 	 * @param fileName the name of the file for which to choose the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptor the current association for the given input or <code>null</code> if
@@ -831,7 +830,7 @@
 	/**
 	 * Applies the <code>org.eclipse.ui.ide.editorAssociationOverride</code> extensions to the given
 	 * input.
-	 * 
+	 *
 	 * @param editorInput the editor input for the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptors the current association for the given input
@@ -852,7 +851,7 @@
 	/**
 	 * Applies the <code>org.eclipse.ui.ide.editorAssociationOverride</code> extensions to the given
 	 * input.
-	 * 
+	 *
 	 * @param fileName the name of the file for which to choose the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptors the current association for the given input
@@ -890,7 +889,7 @@
 	 * default text editor is available.</li>
 	 * </ol>
 	 * </p>
-	 * 
+	 *
 	 * @param name
 	 *            the file name
 	 * @return an editor descriptor, appropriate for opening the file
@@ -924,7 +923,7 @@
 	 * default text editor is available.</li>
 	 * </ol>
 	 * </p>
-	 * 
+	 *
 	 * @param name
 	 *            the file name
 	 * @param inferContentType
@@ -955,7 +954,7 @@
 	/**
 	 * Get the editor descriptor for a given name using the editorDescriptor
 	 * passed in as a default as a starting point.
-	 * 
+	 *
 	 * @param name
 	 *            The name of the element to open.
 	 * @param editorReg
@@ -965,7 +964,7 @@
 	 * @return IEditorDescriptor
 	 * @throws PartInitException
 	 *             if no valid editor can be found
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	private static IEditorDescriptor getEditorDescriptor(String name,
@@ -1019,7 +1018,7 @@
 	 * attribute value will be used to determine the editor type to be opened.
 	 * If not, the registered editor for the marker resource file will be used.
 	 * </p>
-	 * 
+	 *
 	 * @param page
 	 *            the workbench page to open the editor in
 	 * @param marker
@@ -1049,7 +1048,7 @@
 	 * attribute value will be used to determine the editor type to be opened.
 	 * If not, the registered editor for the marker resource file will be used.
 	 * </p>
-	 * 
+	 *
 	 * @param page
 	 *            the workbench page to open the editor in
 	 * @param marker
@@ -1116,10 +1115,10 @@
      * If the page already has an editor open on the target object then that
      * editor is brought to front; otherwise, a new editor is opened.
      * </p>
-     * 
+     *
      * @param page
      *            the page in which the editor will be opened
-     * @param fileStore 
+     * @param fileStore
      *            the IFileStore representing the file to open
      * @return an open editor or <code>null</code> if an external editor was opened
      * @exception PartInitException
@@ -1134,8 +1133,8 @@
 		}
 
         IEditorInput input = getEditorInput(fileStore);
-		String editorId = getEditorDescriptorForFileStore(fileStore).getId();
-        
+        String editorId = getEditorId(fileStore);
+
         // open the editor on the file
         return page.openEditor(input, editorId);
     }
@@ -1150,7 +1149,7 @@
 	 * If the page already has an editor open on the target object then that
 	 * editor is brought to front; otherwise, a new editor is opened.
 	 * </p>
-	 * 
+	 *
 	 * @param page
 	 *            the page in which the editor will be opened
 	 * @param fileStore
@@ -1225,9 +1224,9 @@
 	 * resource of one of the <code>IResource</code>'s provided. Opens a
 	 * dialog to prompt the user if <code>confirm</code> is true. Return true
 	 * if successful. Return false if the user has canceled the command.
-	 * 
+	 *
 	 * @since 3.0
-	 * 
+	 *
 	 * @param resourceRoots the resource roots under which editor input should
 	 *            be saved, other will be left dirty
 	 * @param confirm <code>true</code> to ask the user before saving unsaved
@@ -1269,7 +1268,7 @@
 	 * Sets the default editor id for a given file. This value will be used to
 	 * determine the default editor descriptor for the file in future calls to
 	 * <code>getDefaultEditor(IFile)</code>.
-	 * 
+	 *
 	 * @param file
 	 *            the file
 	 * @param editorID
@@ -1294,7 +1293,7 @@
 	 * default editor is determined by taking the file name for the file and
 	 * obtaining the default editor for that name.
 	 * </p>
-	 * 
+	 *
 	 * @param file
 	 *            the file
 	 * @return the descriptor of the default editor, or <code>null</code> if
@@ -1316,7 +1315,7 @@
 	 * default editor is determined by taking the file name for the file and
 	 * obtaining the default editor for that name.
 	 * </p>
-	 * 
+	 *
 	 * @param file
 	 *            the file
 	 * @param determineContentType
@@ -1356,7 +1355,7 @@
 	/**
 	 * Extracts and returns the <code>IResource</code>s in the given
 	 * selection or the resource objects they adapts to.
-	 * 
+	 *
 	 * @param originalSelection
 	 *            the original selection, possibly empty
 	 * @return list of resources (element type: <code>IResource</code>),
@@ -1391,7 +1390,7 @@
 
 	/**
 	 * Return the content type for the given file.
-	 * 
+	 *
 	 * @param file
 	 *            the file to test
 	 * @return the content type, or <code>null</code> if it cannot be
@@ -1421,7 +1420,7 @@
 
 	/**
 	 * Guess at the content type of the given file based on the filename.
-	 * 
+	 *
 	 * @param file
 	 *            the file to test
 	 * @return the content type, or <code>null</code> if it cannot be
@@ -1448,7 +1447,7 @@
 	 * providers. A model provider can be ignored if it is the client calling
 	 * this API. Any message from the provided model provider id or any model
 	 * providers it extends will be ignored.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell to parent the prompt dialog
 	 * @param title
@@ -1557,7 +1556,7 @@
 	 * <b>Note:</b> this method should only be called once, in your
 	 * application's WorkbenchAdvisor#initialize(IWorkbenchConfigurer) method.
 	 * </p>
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	public static void registerAdapters() {
@@ -1602,12 +1601,12 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * Opens editors on given file resources.
 	 * <p>
 	 * If the page already has an editor open on the target object then that
-	 * editor is brought to front; otherwise, a new editor is opened. The editor created 
+	 * editor is brought to front; otherwise, a new editor is opened. The editor created
 	 * for the first input will be activated.
 	 * </p>
 	 * @param page the page in which the editor will be opened
@@ -1619,9 +1618,9 @@
 	public static IEditorReference[] openEditors(IWorkbenchPage page, IFile[] inputs) throws MultiPartInitException {
 		if ((page == null) || (inputs == null))
 			throw new IllegalArgumentException();
-		
-		String[] editorDescriptions = new String[inputs.length]; 
-		IEditorInput[] editorInputs = new IEditorInput[inputs.length]; 
+
+		String[] editorDescriptions = new String[inputs.length];
+		IEditorInput[] editorInputs = new IEditorInput[inputs.length];
 		for(int i = 0 ; i < inputs.length; i++) {
 			editorInputs[i] = new FileEditorInput(inputs[i]);
 			try {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEActionFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEActionFactory.java
index c1401e8..bb1e49a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEActionFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEActionFactory.java
@@ -42,7 +42,7 @@
  * menu.add(closeProjectAction);
  * </pre>
  * </p>
- * 
+ *
  * @since 3.0
  */
 public final class IDEActionFactory {
@@ -71,7 +71,7 @@
      * This action is a {@link RetargetAction}. This action maintains its enablement state.
      */
     public static final ActionFactory ADD_TASK = new ActionFactory("addTask", //$NON-NLS-1$
-    		IWorkbenchCommandConstants.EDIT_ADD_TASK) { 
+    		IWorkbenchCommandConstants.EDIT_ADD_TASK) {
         /* (non-javadoc) method declared on ActionFactory */
         @Override
 		public IWorkbenchAction create(IWorkbenchWindow window) {
@@ -91,7 +91,7 @@
      * This action is a {@link RetargetAction}. This action maintains its enablement state.
      */
     public static final ActionFactory BOOKMARK = new ActionFactory("bookmark", //$NON-NLS-1$
-    		IWorkbenchCommandConstants.EDIT_ADD_BOOKMARK) { 
+    		IWorkbenchCommandConstants.EDIT_ADD_BOOKMARK) {
         /* (non-javadoc) method declared on ActionFactory */
         @Override
 		public IWorkbenchAction create(IWorkbenchWindow window) {
@@ -217,11 +217,11 @@
      * Close unrelated projects.
      * <p>
      * This action closes all projects that are unrelated to the selected projects. A
-     * project is unrelated if it is not directly or transitively referenced by one 
+     * project is unrelated if it is not directly or transitively referenced by one
      * of the selected projects, and does not directly or transitively reference
      * one of the selected projects.
      * </p>
-     * This action is a {@link RetargetAction} with 
+     * This action is a {@link RetargetAction} with
      * id "closeUnrelatedProjects". This action maintains its enablement state.
      * @see IProject#getReferencedProjects()
      * @see IProject#getReferencingProjects()
@@ -239,7 +239,7 @@
             RetargetAction action = new RetargetAction(getId(), IDEWorkbenchMessages.CloseUnrelatedProjectsAction_text);
             action.setToolTipText(IDEWorkbenchMessages.CloseUnrelatedProjectsAction_toolTip);
             window.getPartService().addPartListener(action);
-            action.setActionDefinitionId(getCommandId()); 
+            action.setActionDefinitionId(getCommandId());
             return action;
         }
     };
@@ -282,7 +282,7 @@
             RetargetAction action = new RetargetAction(getId(), IDEWorkbenchMessages.OpenResourceAction_text);
             action.setToolTipText(IDEWorkbenchMessages.OpenResourceAction_toolTip);
             window.getPartService().addPartListener(action);
-            action.setActionDefinitionId(getCommandId()); 
+            action.setActionDefinitionId(getCommandId());
             return action;
         }
     };
@@ -326,7 +326,7 @@
     /**
      * IDE-specific workbench action (id: "quickStart"): Quick start.
      * This action maintains its enablement state.
-     * 
+     *
      * @deprecated the IDE now uses the new intro mechanism
      */
     @Deprecated
@@ -347,7 +347,7 @@
     /**
      * IDE-specific workbench action (id: "rebuildAll"): Full build.
      * This action maintains its enablement state.
-     * 
+     *
      * @deprecated as of 3.0, this action no longer appears in the UI (was deprecated in 3.1)
      */
     @Deprecated
@@ -368,9 +368,9 @@
 
     /**
      * IDE-specific workbench action (id: "rebuildProject"): Rebuild project.
-     * This action is a {@link RetargetAction} with 
+     * This action is a {@link RetargetAction} with
      * id "rebuildProject". This action maintains its enablement state.
-     * 
+     *
      * @deprecated as of 3.0, this action no longer appears in the UI (was deprecated in 3.1)
      */
     @Deprecated
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEEncoding.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEEncoding.java
index fe9a262..4f987ec 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEEncoding.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IDEEncoding.java
@@ -33,13 +33,13 @@
  * This class provides all its functionality via static methods.
  * It is not intended to be instantiated or subclassed.
  * </p>
- * 
+ *
  * @see org.eclipse.ui.WorkbenchEncoding
  * @see org.eclipse.core.resources.ResourcesPlugin
  * @since 3.1
  */
 public final class IDEEncoding {
-	
+
 	private IDEEncoding () {
         // prevent instantiation
 	}
@@ -69,7 +69,7 @@
 	/**
 	 * Get all of the available encodings including any that were saved as a
 	 * preference in the IDE or in core resources.
-	 * 
+	 *
 	 * @return List of String
 	 */
 	public static List getIDEEncodings() {
@@ -89,7 +89,7 @@
 	/**
 	 * Get the current value of the encoding preference. If the value is not set
 	 * return <code>null</code>.
-	 * 
+	 *
 	 * @return String
 	 */
 	public static String getResourceEncoding() {
@@ -103,7 +103,7 @@
 
 	/**
 	 * Add value to the list of workbench encodings.
-	 * 
+	 *
 	 * @param value
 	 */
 	public static void addIDEEncoding(String value) {
@@ -149,13 +149,13 @@
 
 	/**
 	 * Get the value of the encodings preference.
-	 * 
+	 *
 	 * @return List
 	 */
 	private static List getIDEEncodingsPreference() {
-		
+
 		boolean updateRequired = false;
-		
+
 		String encodings = IDEWorkbenchPlugin.getDefault().getPreferenceStore().getString(
 				IDE_ENCODINGS_PREFERENCE);
 
@@ -181,9 +181,9 @@
 				WorkbenchPlugin.log(NLS.bind(IDEWorkbenchMessages.WorkbenchEncoding_invalidCharset, string));
 				updateRequired = true;
 			}
-				
+
 		}
-		
+
 		if(updateRequired) {
 			writeEncodingsPreference(null, result);
 		}
@@ -201,7 +201,7 @@
 	/**
 	 * Get the displayable string for the byte order marking from the supplied
 	 * file description.
-	 * 
+	 *
 	 * @param description
 	 *            The description to query. May be <code>null</code>.
 	 * @return String or <code>null</code> if the byte order mark cannot be
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IEditorAssociationOverride.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IEditorAssociationOverride.java
index 8ad55da..47576b4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IEditorAssociationOverride.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IEditorAssociationOverride.java
@@ -24,7 +24,7 @@
  * <p>
  * Clients may implement this interface.
  * </p>
- * 
+ *
  * @since 3.8
  */
 public interface IEditorAssociationOverride {
@@ -32,7 +32,7 @@
 	/**
 	 * Allows to override the given editor descriptors for the given editor input with different
 	 * ones.
-	 * 
+	 *
 	 * @param editorInput the editor input for the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptors the current association for the given input
@@ -43,7 +43,7 @@
 
 	/**
 	 * Allows to override the given editor descriptors for the given file name with different ones.
-	 * 
+	 *
 	 * @param fileName the name of the file for which to choose the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptors the current association for the given input
@@ -60,7 +60,7 @@
 	 * the user for the given input. This is the case when
 	 * <code>IFile#getPersistentProperty(IDE.EDITOR_KEY) != null</code>.
 	 * </p>
-	 * 
+	 *
 	 * @param editorInput the editor input for the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptor the current association for the given input or <code>null</code> if
@@ -73,7 +73,7 @@
 	/**
 	 * Allows to override the given editor descriptor for the given input with a different one.
 	 * Normally, this is used to override the default editor for the given input.
-	 * 
+	 *
 	 * @param fileName the name of the file for which to choose the editor
 	 * @param contentType the content type of the input or <code>null</code> if not available
 	 * @param editorDescriptor the current association for the given input or <code>null</code> if
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IGotoMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IGotoMarker.java
index 5092341..7676552 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IGotoMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IGotoMarker.java
@@ -15,14 +15,14 @@
 /**
  * An adapter interface for editors, which allows the editor
  * to reveal the position of a given marker.
- * 
+ *
  * @since 3.0
  */
 public interface IGotoMarker {
     /**
-     * Sets the cursor and selection state for an editor to 
+     * Sets the cursor and selection state for an editor to
      * reveal the position of the given marker.
-     *  
+     *
      * @param marker the marker
      */
     public void gotoMarker(IMarker marker);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IIDEActionConstants.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IIDEActionConstants.java
index c6309e7..3e607ea 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IIDEActionConstants.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/IIDEActionConstants.java
@@ -16,10 +16,10 @@
  * This interface contains constants only; it is not intended to be implemented
  * or extended.
  * </p>
- * 
+ *
  * Note: want to move IDE-specific stuff out of IWorkbenchActionConstants.
  *   There's still some cleanup to be done here (and there).
- * 
+ *
  * @since 3.0
  * @noimplement This interface is not intended to be implemented by clients.
  */
@@ -136,52 +136,52 @@
 
     /**
      * Workbench toolbar id for file toolbar group.
-     * 
+     *
      * @since 2.1
      */
     public static final String TOOLBAR_FILE = "org.eclipse.ui.workbench.file"; //$NON-NLS-1$
 
     /**
      * Workbench toolbar id for navigate toolbar group.
-     * 
+     *
      * @since 2.1
      */
     public static final String TOOLBAR_NAVIGATE = "org.eclipse.ui.workbench.navigate"; //$NON-NLS-1$
 
-    // Workbench toolbar group ids.  To add an item at the beginning of the group, 
+    // Workbench toolbar group ids.  To add an item at the beginning of the group,
     // use the GROUP id.  To add an item at the end of the group, use the EXT id.
 
     /**
      * Group id for pin toolbar group.
-     * 
+     *
      * @since 2.1
      */
     public static final String PIN_GROUP = "pin.group"; //$NON-NLS-1$
 
     /**
      * Group ids for history toolbar group.
-     * 
+     *
      * @since 2.1
      */
     public static final String HISTORY_GROUP = "history.group"; //$NON-NLS-1$
 
     /**
      * Group ids for new toolbar group.
-     * 
+     *
      * @since 2.1
      */
     public static final String NEW_GROUP = "new.group"; //$NON-NLS-1$
 
     /**
      * Group ids for save toolbar group.
-     * 
+     *
      * @since 2.1
      */
     public static final String SAVE_GROUP = "save.group"; //$NON-NLS-1$
 
     /**
      * Group ids for build toolbar group.
-     * 
+     *
      * @since 2.1
      */
     public static final String BUILD_GROUP = "build.group"; //$NON-NLS-1$
@@ -204,7 +204,7 @@
 
     /**
      * Pop-up menu: name of group for Show In actions (value <code>"group.showIn"</code>).
-     * 
+     *
      * @since 2.1
      */
     public static final String GROUP_SHOW_IN = "group.showIn"; //$NON-NLS-1$
@@ -248,7 +248,7 @@
     /**
      * Navigate menu: name of standard Go To Resource global action
      * (value <code>"goToResource"</code>).
-     * 
+     *
      * Note:should be in an action factory
      */
     public static final String GO_TO_RESOURCE = "goToResource"; // Global action. //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSaveableFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSaveableFilter.java
index ff7eba6..09a892f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSaveableFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSaveableFilter.java
@@ -27,9 +27,9 @@
 /**
  * A saveable filter where the given savable must either match one of the given roots or be a direct
  * or indirect child of one of the roots.
- * 
+ *
  * @since 3.9
- * 
+ *
  */
 public class ResourceSaveableFilter implements ISaveableFilter {
 
@@ -37,7 +37,7 @@
 
 	/**
 	 * Creates a new filter.
-	 * 
+	 *
 	 * @param roots the save roots
 	 */
 	public ResourceSaveableFilter(IResource[] roots) {
@@ -65,7 +65,7 @@
 	/**
 	 * Return whether the given saveable contains any resources that are descendants of the root
 	 * resources.
-	 * 
+	 *
 	 * @param saveable the saveable
 	 * @return whether the given saveable contains any resources that are descendants of the root
 	 *         resources
@@ -107,7 +107,7 @@
 	/**
 	 * Return whether the given resource is either equal to or a descendant of one of the given
 	 * roots.
-	 * 
+	 *
 	 * @param resource the resource to be tested
 	 * @return whether the given resource is either equal to or a descendant of one of the given
 	 *         roots
@@ -125,7 +125,7 @@
 	/**
 	 * Return whether the given dirty editor part is editing resources that are
 	 * descendants of the given roots.
-	 * 
+	 *
 	 * @param part the dirty editor part
 	 * @return whether the given dirty editor part is editing resources that are
 	 *         descendants of the given roots
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSelectionUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSelectionUtil.java
index 0de815a..6665f46 100755
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSelectionUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceSelectionUtil.java
@@ -35,9 +35,9 @@
     }
 
     /**
-     * Returns whether the types of the resources in the given selection are among 
+     * Returns whether the types of the resources in the given selection are among
      * the specified resource types.
-     * 
+     *
      * @param selection the selection
      * @param resourceMask resource mask formed by bitwise OR of resource type
      *   constants (defined on <code>IResource</code>)
@@ -64,7 +64,7 @@
     /**
      * Returns the selection adapted to IResource. Returns null
      * if any of the entries are not adaptable.
-     * 
+     *
      * @param selection the selection
      * @param resourceMask resource mask formed by bitwise OR of resource type
      *   constants (defined on <code>IResource</code>)
@@ -94,13 +94,13 @@
     }
 
     /**
-     * Returns whether the type of the given resource is among the specified 
+     * Returns whether the type of the given resource is among the specified
      * resource types.
-     * 
+     *
      * @param resource the resource
      * @param resourceMask resource mask formed by bitwise OR of resource type
      *   constants (defined on <code>IResource</code>)
-     * @return <code>true</code> if the resources has a matching type, and 
+     * @return <code>true</code> if the resources has a matching type, and
      *   <code>false</code> otherwise
      * @see IResource#getType()
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceUtil.java
index d5c352f..4db5f04 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/ResourceUtil.java
@@ -26,7 +26,7 @@
 import org.eclipse.ui.statushandlers.StatusManager;
 
 /**
- * Utility class for manipulating resources and determining correspondences 
+ * Utility class for manipulating resources and determining correspondences
  * between resources and workbench objects.
  * <p>
  * This class provides all its functionality via static methods.
@@ -43,9 +43,9 @@
 
     /**
      * Returns the file corresponding to the given editor input, or <code>null</code>
-     * if there is no applicable file.  
+     * if there is no applicable file.
      * Returns <code>null</code> if the given editor input is <code>null</code>.
-     * 
+     *
      * @param editorInput the editor input, or <code>null</code>
      * @return the file corresponding to the editor input, or <code>null</code>
      */
@@ -66,7 +66,7 @@
      * Returns the resource corresponding to the given editor input, or <code>null</code>
      * if there is no applicable resource.
      * Returns <code>null</code> if the given editor input is <code>null</code>.
-     * 
+     *
      * @param editorInput the editor input
      * @return the file corresponding to the editor input, or <code>null</code>
      */
@@ -87,7 +87,7 @@
     /**
      * Returns the editor in the given page whose input represents the given file,
      * or <code>null</code> if there is no such editor.
-     * 
+     *
      * @param page the workbench page
      * @param file the file
      * @return the matching editor, or <code>null</code>
@@ -113,11 +113,11 @@
         }
         return null;
     }
-    
+
     /**
      * Returns the resource corresponding to the given model element, or <code>null</code>
      * if there is no applicable resource.
-     * 
+     *
      * @param element the model element, or <code>null</code>
      * @return the resource corresponding to the model element, or <code>null</code>
      * @since 3.2
@@ -135,7 +135,7 @@
     /**
      * Returns the file corresponding to the given model element, or <code>null</code>
      * if there is no applicable file.
-     * 
+     *
      * @param element the model element, or <code>null</code>
      * @return the resource corresponding to the model element, or <code>null</code>
      * @since 3.2
@@ -144,24 +144,24 @@
 		if (element == null) {
 			return null;
 		}
-		
+
 		// try direct instanceof check
 		if (element instanceof IFile) {
 			return (IFile) element;
 		}
-		
+
 		// try for ResourceMapping
 		ResourceMapping mapping = getResourceMapping(element);
 		if (mapping != null) {
 			return getFileFromResourceMapping(mapping);
 		}
-		
+
 		// try for IFile adapter (before IResource adapter, since it's more specific)
 		Object adapter = getAdapter(element, IFile.class, true);
 		if (adapter instanceof IFile) {
 			return (IFile) adapter;
 		}
-		
+
 		// try for IResource adapter
 		adapter = getAdapter(element, IResource.class, true);
 		if (adapter instanceof IFile) {
@@ -173,7 +173,7 @@
 	/**
      * Returns the resource mapping corresponding to the given model element, or <code>null</code>
      * if there is no applicable resource mapping.
-     * 
+     *
      * @param element the model element, or <code>null</code>
      * @return the resource mapping corresponding to the model element, or <code>null</code>
      * @since 3.2
@@ -182,12 +182,12 @@
 		if (element == null) {
 			return null;
 		}
-		
+
 		// try direct instanceof check
 		if (element instanceof ResourceMapping) {
 			return (ResourceMapping) element;
 		}
-		
+
 		// try for ResourceMapping adapter
 		Object adapter = getAdapter(element, ResourceMapping.class, true);
 		if (adapter instanceof ResourceMapping) {
@@ -195,12 +195,12 @@
 		}
 		return null;
 	}
-    
+
     /**
      * Tries to extra a single file from the given resource mapping.
      * Returns the file if the mapping maps to a single file, or <code>null</code>
      * if it maps to zero or multiple files.
-     * 
+     *
      * @param mapping the resource mapping
      * @return the file, or <code>null</code>
      */
@@ -211,12 +211,12 @@
     	}
     	return null;
     }
-    
+
     /**
      * Tries to extra a single resource from the given resource mapping.
      * Returns the resource if the mapping maps to a single resource, or <code>null</code>
      * if it maps to zero or multiple resources.
-     * 
+     *
      * @param mapping the resource mapping
      * @return the resource, or <code>null</code>
      */
@@ -243,10 +243,10 @@
 	/**
      * Returns the specified adapter for the given element, or <code>null</code>
      * if no such adapter was found.
-     * 
+     *
      * @param element the model element
 	 * @param adapterType the type of adapter to look up
-	 * @param forceLoad <code>true</code> to force loading of the plug-in providing the adapter, 
+	 * @param forceLoad <code>true</code> to force loading of the plug-in providing the adapter,
 	 *   <code>false</code> otherwise
      * @return the adapter
      * @since 3.2
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java
index 0933e2f..1f7ea21 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/AbstractEncodingFieldEditor.java
@@ -42,7 +42,7 @@
  * Subclasses may extend, but must call <code>createEncodingGroup</code>
  * during <code>doFillIntoGrid</code>.
  * </p>
- * 
+ *
  * @see org.eclipse.ui.ide.IDEEncoding
  * @since 3.1
  */
@@ -74,7 +74,7 @@
 	/**
 	 * Creates a new encoding field editor with the given preference name, label
 	 * and parent.
-	 * 
+	 *
 	 * @param name
 	 *            the name of the preference this field editor works on
 	 * @param labelText
@@ -90,7 +90,7 @@
 	/**
 	 * Creates a new encoding field editor with the given preference name, label
 	 * and parent.
-	 * 
+	 *
 	 * @param name
 	 *            the name of the preference this field editor works on
 	 * @param labelText
@@ -133,7 +133,7 @@
 
 	/**
 	 * Returns the value that is currently stored for the encoding.
-	 * 
+	 *
 	 * @return the currently stored encoding
 	 */
 	protected abstract String getStoredValue();
@@ -178,7 +178,7 @@
 	 * <p>
 	 * Subclasses may extend.
 	 * </p>
-	 * 
+	 *
 	 * @param parent
 	 *            the parent widget
 	 * @param numColumns
@@ -256,12 +256,12 @@
 			otherEncodingButton.setEnabled(enabled);
 		if (encodingCombo != null)
 			encodingCombo.setEnabled(enabled && otherEncodingButton.getSelection());
-		
+
 	}
 
 	/**
 	 * Returns the default encoding for the object being shown.
-	 * 
+	 *
 	 * @return the default encoding for the object being shown
 	 */
 	protected String findDefaultEncoding() {
@@ -270,7 +270,7 @@
 
 	/**
 	 * Returns the text for the default encoding button.
-	 * 
+	 *
 	 * @return the text for the default encoding button
 	 */
 	protected String defaultButtonText() {
@@ -283,7 +283,7 @@
 	 * Populates the encodings combo. Sets the text based on the selected
 	 * encoding. If there is no selected encoding, the text is set to the
 	 * default encoding.
-	 * 
+	 *
 	 * @param encodings
 	 *            the list of encodings (list of String)
 	 * @param selectedEncoding
@@ -332,7 +332,7 @@
 
 	/**
 	 * Returns the currently selected encoding.
-	 * 
+	 *
 	 * @return the currently selected encoding
 	 */
 	protected String getSelectedEncoding() {
@@ -349,7 +349,7 @@
 
 	/**
 	 * Returns whether or not the given encoding is valid.
-	 * 
+	 *
 	 * @param enc
 	 *            the encoding to validate
 	 * @return <code>true</code> if the encoding is valid, <code>false</code>
@@ -367,7 +367,7 @@
 
 	/**
 	 * Returns the default encoding.
-	 * 
+	 *
 	 * @return the default encoding
 	 */
 	protected String getDefaultEnc() {
@@ -376,7 +376,7 @@
 
 	/**
 	 * Returns whether or not the encoding setting changed.
-	 * 
+	 *
 	 * @param encodingSetting
 	 *            the setting from the page.
 	 * @return boolean <code>true</code> if the resource encoding is the same
@@ -395,7 +395,7 @@
 
 	/**
 	 * Return whether or not the default has been selected.
-	 * 
+	 *
 	 * @return <code>true</code> if the default button has been selected.
 	 */
 	boolean isDefaultSelected() {
@@ -406,10 +406,10 @@
 	 * Set the title of the group to groupTitle. If this is not called a default
 	 * title is used. If groupTitle is <code>null</code> the control will be
 	 * unlabelled (by default a {@link Composite} instead of a {@link Group}.
-	 * 
+	 *
 	 * <strong>NOTE</strong> this value must be set before
 	 * {@link #createControl(Composite)} is called or it will be ignored.
-	 * 
+	 *
 	 * @param groupTitle
 	 *            The groupTitle to set.
      * @since 3.3
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/EncodingFieldEditor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/EncodingFieldEditor.java
index ce2417c..d8ba670 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/EncodingFieldEditor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/EncodingFieldEditor.java
@@ -22,16 +22,16 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @since 3.1
  */
 public final class EncodingFieldEditor extends AbstractEncodingFieldEditor {
 
-	
+
 	/**
 	 * Creates a new encoding field editor with the given preference name, label
 	 * and parent.
-	 * 
+	 *
 	 * @param name
 	 *            the name of the preference this field editor works on
 	 * @param labelText
@@ -69,17 +69,17 @@
 	protected String getStoredValue() {
 		return getPreferenceStore().getString(getPreferenceName());
 	}
-	
+
 	@Override
 	protected void doStore() {
 		String encoding = getSelectedEncoding();
-		
+
 		if(hasSameEncoding(encoding)) {
 			return;
 		}
-		
+
 		IDEEncoding.addIDEEncoding(encoding);
-		
+
 		if (encoding.equals(getDefaultEnc())) {
 			getPreferenceStore().setToDefault(getPreferenceName());
 		} else {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/IElementFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/IElementFilter.java
index 366f6da..e420757 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/IElementFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/IElementFilter.java
@@ -15,9 +15,9 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 
 /**
- * The {@link IElementFilter} is a interface that defines the API for filtering the current selection of 
+ * The {@link IElementFilter} is a interface that defines the API for filtering the current selection of
  * a {@link ResourceTreeAndListGroup} in order to find a subset to update as the result of a type filtering.
- * 
+ *
  * @noextend This interface is not intended to be extended by clients.
  * @since 3.10
  */
@@ -25,7 +25,7 @@
 
     /**
      * Callback to filter the given collection of elements
-     * 
+     *
      * @param elements the raw list of elements to filter
      * @param monitor the progress monitor
      * @throws InterruptedException thrown if the monitor is cancelled
@@ -34,7 +34,7 @@
 
     /**
      * Callback to filter the given array of objects
-     * 
+     *
      * @param elements the raw array of elements to filter
      * @param monitor the progress monitor
      * @throws InterruptedException thrown if the monitor is cancelled
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ImportTypeDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ImportTypeDialog.java
index ff5c56b..60748cf 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ImportTypeDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ImportTypeDialog.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:
  *     Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
  *******************************************************************************/
@@ -43,7 +43,7 @@
 /**
  * Dialog to let the user customise how files and resources are created in a project
  * hierarchy after the user drag and drop items on a workspace container.
- * 
+ *
  * Files and folders can be created either by copying the source objects, creating
  * linked resources, and/or creating virtual folders.
  * @noextend This class is not intended to be subclassed by clients.
@@ -76,7 +76,7 @@
 	 * Recreate the file and folder hierarchy using groups and links
 	 */
 	public final static int IMPORT_VIRTUAL_FOLDERS_AND_LINKS = 2;
-	
+
 	private Button copyButton = null;
 
 	private int currentSelection;
@@ -90,13 +90,13 @@
 	private IResource receivingResource = null;
 	private Button shadowCopyButton = null;
 	private String variable = null;
-	
+
 	private RelativePathVariableGroup relativePathVariableGroup;
-	
+
 	/**
 	 * Creates the Import Type Dialog when resources are dragged and dropped from an Eclipse
 	 * view.
-	 * 
+	 *
 	 * @param shell
 	 * 			the parent Shell
 	 * @param dropOperation
@@ -110,11 +110,11 @@
 			IResource[] sources, IContainer target) {
 		this(shell, selectAppropriateMask(dropOperation, sources, target), RelativePathVariableGroup.getPreferredVariable(sources, target));
 	}
-	
+
 	/**
 	 * Creates the Import Type Dialog when files are dragged and dropped from the
 	 * operating system's shell (Windows Explorer on Windows Platform, for example).
-	 * 
+	 *
 	 * @param shell
 	 * 			the parent Shell
 	 * @param dropOperation
@@ -127,14 +127,14 @@
 	public ImportTypeDialog(Shell shell, int dropOperation, String[] names, IContainer target) {
 		this(shell, selectAppropriateMask(dropOperation, names, target), RelativePathVariableGroup.getPreferredVariable(names, target));
 	}
-	
+
 	/**
 	 * @param parentShell
 	 * @param operationMask
 	 */
 	private ImportTypeDialog(Shell parentShell, int operationMask, String preferredVariable) {
 		super(parentShell);
-		
+
 		this.preferredVariable = preferredVariable;
 		this.operationMask = operationMask;
 		currentSelection = 0;
@@ -158,7 +158,7 @@
 	public boolean close() {
 		return super.close();
 	}
-	
+
 	/**
 	 * Get the user selection from the dialog.
 	 * @return The current selection (one of IMPORT_COPY, IMPORT_VIRTUAL_FOLDERS_AND_LINKS, IMPORT_LINK and IMPORT_MOVE)
@@ -166,7 +166,7 @@
 	public int getSelection() {
 		return currentSelection;
 	}
-	
+
 	/**
 	 * Get the selected variable if the selection is either IMPORT_VIRTUAL_FOLDERS_AND_LINKS or IMPORT_LINK
 	 * @return The currently selected variable, or AUTOMATIC or ABSOLUTE_PATH
@@ -174,14 +174,14 @@
 	public String getVariable() {
 		return variable;
 	}
-	
+
 	/** Set the project that is the destination of the import operation
 	 * @param resource
 	 */
 	public void setResource(IResource resource) {
 		receivingResource = resource;
 	}
-	
+
 	private boolean hasFlag(int flag) {
 		return (operationMask & flag) != 0;
 	}
@@ -199,7 +199,7 @@
 		}
 		return ""; //$NON-NLS-1$
 	}
-	
+
 	private void refreshSelection() {
 		if (copyButton != null)
 			copyButton.setSelection(currentSelection == IMPORT_COPY);
@@ -273,7 +273,7 @@
  		composite.setLayoutData(gridData);
  		composite.setFont(parent.getFont());
 
-		
+
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 1;
 		layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
@@ -297,7 +297,7 @@
 				refreshSelection();
 			}
 		};
-		
+
 		if (hasFlag(IMPORT_COPY)) {
 			copyButton = new Button(composite, SWT.RADIO);
 			copyButton.setText(hasFlag(IMPORT_FILES_ONLY) ? IDEWorkbenchMessages.ImportTypeDialog_copyFiles: IDEWorkbenchMessages.ImportTypeDialog_copyFilesAndDirectories);
@@ -307,7 +307,7 @@
 			copyButton.addSelectionListener(listener);
 			copyButton.setFont(parent.getFont());
 		}
-		
+
 		if (hasFlag(IMPORT_MOVE)) {
 			moveButton = new Button(composite, SWT.RADIO);
 			moveButton.setText(hasFlag(IMPORT_FILES_ONLY) ? IDEWorkbenchMessages.ImportTypeDialog_moveFiles:IDEWorkbenchMessages.ImportTypeDialog_moveFilesAndDirectories);
@@ -353,21 +353,21 @@
 					return variable;
 				}
 			});
-			
+
 			int groupIndent = 0;
-			
+
 			if (!linkIsOnlyChoice) {
 				Button tmp = new Button(composite, SWT.CHECK);
 				tmp.setText("."); //$NON-NLS-1$
 				groupIndent = tmp.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
 				tmp.dispose();
-				
+
 				Label tmpLabel = new Label(composite, SWT.NONE);
 				tmpLabel.setText("."); //$NON-NLS-1$
 				groupIndent -= tmpLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
 				tmpLabel.dispose();
 			}
-			
+
 			Composite variableGroup = new Composite(composite, 0);
 			gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
 			gridData.horizontalIndent = groupIndent;
@@ -386,7 +386,7 @@
 			else
 				relativePathVariableGroup.selectVariable(preferredVariable);
 		}
-		
+
 		if (linkIsOnlyChoice) {
 			currentSelection = IMPORT_LINK;
 			parent.getShell().setText(IDEWorkbenchMessages.ImportTypeDialog_titleFilesLinking);
@@ -424,7 +424,7 @@
  		composite.setLayoutData(gridData);
 		composite.setFont(parent.getFont());
 
-		
+
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 1;
 		layout.marginTop= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
@@ -444,7 +444,7 @@
 		}
 		return composite;
 	}
-	
+
 	/**
 	 * @param resources
 	 * 		The list of items that were dragged
@@ -491,11 +491,11 @@
 			mask |= ImportTypeDialog.IMPORT_FILES_ONLY;
 		return mask;
 	}
-	
+
 	/**
 	 * Select the most appropriate mode that should be used for the dialog given
 	 * the items dropped on the container, the container type, and the drop operation.
-	 * 
+	 *
 	 * @param dropOperation
 	 * @param names
 	 * 		The list of items that were dragged
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/PathVariableSelectionDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/PathVariableSelectionDialog.java
index 018da5c..ddf7cc7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/PathVariableSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/PathVariableSelectionDialog.java
@@ -39,9 +39,9 @@
 import org.eclipse.ui.internal.ide.dialogs.PathVariablesGroup;
 
 /**
- * A selection dialog which shows the path variables defined in the 
+ * A selection dialog which shows the path variables defined in the
  * workspace.
- * The <code>getResult</code> method returns the name(s) of the 
+ * The <code>getResult</code> method returns the name(s) of the
  * selected path variable(s).
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
@@ -53,9 +53,9 @@
  *    new PathVariableSelectionDialog(getShell(), IResource.FOLDER);
  *	dialog.open();
  *	String[] result = (String[]) dialog.getResult();
- * </pre> 	
+ * </pre>
  * </p>
- * 
+ *
  * @since 3.1
  */
 public final class PathVariableSelectionDialog extends SelectionDialog {
@@ -71,7 +71,7 @@
      * Creates a path variable selection dialog.
      *
      * @param parentShell the parent shell
-     * @param variableType the type of variables that are displayed in 
+     * @param variableType the type of variables that are displayed in
      * 	this dialog. <code>IResource.FILE</code> and/or <code>IResource.FOLDER</code>
      * 	logically ORed together.
      */
@@ -144,24 +144,24 @@
 
     @Override
 	protected Control createDialogArea(Composite parent) {
-        // create composite 
+        // create composite
         Composite dialogArea = (Composite) super.createDialogArea(parent);
 
         pathVariablesGroup.createContents(dialogArea);
         return dialogArea;
     }
 
-    
+
     @Override
 	public boolean close() {
         pathVariablesGroup.dispose();
         return super.close();
     }
 
-  
+
     @Override
 	protected void okPressed() {
-		//Sets the dialog result to the selected path variable name(s). 
+		//Sets the dialog result to the selected path variable name(s).
         if (pathVariablesGroup.performOk()) {
             PathVariablesGroup.PathVariableElement[] selection = pathVariablesGroup
                     .getSelection();
@@ -179,7 +179,7 @@
 
     /**
      * Sets the dialog result to the concatenated variable name and extension.
-     * 
+     *
      * @param variable variable selected in the variables list and extended
      * 	by <code>extensionFile</code>
      * @param extensionFile file selected to extend the variable.
@@ -199,7 +199,7 @@
     }
 
     /**
-     * Updates the enabled state of the Extend button based on the 
+     * Updates the enabled state of the Extend button based on the
      * current variable selection.
      */
     private void updateExtendButtonState() {
@@ -224,7 +224,7 @@
 			} else {
 				extendButton.setEnabled(false);
 			}
-                
+
         } else {
 			extendButton.setEnabled(false);
 		}
@@ -232,7 +232,7 @@
 
 	/**
 	 * Sets the resource for which the path variable is being edited.
-	 * 
+	 *
 	 * @param resource
 	 * @since 3.6
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java
index f9ce61c..e480578 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceEncodingFieldEditor.java
@@ -52,7 +52,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @since 3.1
  */
 public final class ResourceEncodingFieldEditor extends AbstractEncodingFieldEditor {
@@ -73,14 +73,14 @@
 	/**
 	 * Creates a new encoding field editor for setting the encoding on the given
 	 * resource.
-	 * 
+	 *
 	 * @param labelText
 	 *            the label text of the field editor
 	 * @param parent
 	 *            the parent of the field editor's control
 	 * @param charsetResource
 	 *            must be an <code>IContainer</code> or an <code>IFile</code>.
-	 * 
+	 *
 	 * @see org.eclipse.core.resources.IContainer#getDefaultCharset()
 	 * @see org.eclipse.core.resources.IFile#getCharset()
 	 */
@@ -90,11 +90,11 @@
 		setLabelAndResource(labelText, charsetResource);
 		createControl(parent);
 	}
-	
+
 	/**
 	 * Creates a new encoding field editor for setting the encoding on the given
 	 * resource.
-	 * 
+	 *
 	 * @param labelText
 	 *            the label text of the field editor
 	 * @param parent
@@ -105,7 +105,7 @@
 	 *  		  the title for the field editor's control. If groupTitle is
 	 *            <code>null</code> the control will be unlabelled
 	 *            (by default a {@link Composite} instead of a {@link Group}.
-	 * 
+	 *
 	 * @see org.eclipse.core.resources.IContainer#getDefaultCharset()
 	 * @see org.eclipse.core.resources.IFile#getCharset()
 	 * @see AbstractEncodingFieldEditor#setGroupTitle(String)
@@ -330,7 +330,7 @@
 
 	/**
 	 * Returns the charset from the content description if there is one.
-	 * 
+	 *
 	 * @return the charset from the content description, or <code>null</code>
 	 */
 	private String getCharsetFromDescription() {
@@ -420,7 +420,7 @@
 	/**
 	 * Returns the content description of the resource if it is a file and it
 	 * has a content description.
-	 * 
+	 *
 	 * @return the content description or <code>null</code> if resource is not
 	 *         an <code>IFile</code> or it does not have a description
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceTreeAndListGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceTreeAndListGroup.java
index 7860cca..8f7e874 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceTreeAndListGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/ResourceTreeAndListGroup.java
@@ -56,10 +56,10 @@
  * @since 3.10
  */
 public class ResourceTreeAndListGroup extends EventManager {
-    
+
 	/**
 	 * Default attached listener that delegates to clients that register their own {@link ICheckStateListener}
-	 * 
+	 *
 	 * @see ResourceTreeAndListGroup#addCheckStateListener(ICheckStateListener)
 	 */
 	private class CheckListener implements ICheckStateListener {
@@ -81,10 +81,10 @@
 	                });
 		}
 	}
-	
+
 	/**
 	 * Default attached listener for selections
-	 * 
+	 *
 	 * TODO do we want to make this extensible like checked listeners?
 	 */
 	private class SelectionListener implements ISelectionChangedListener {
@@ -104,12 +104,12 @@
 			}
 	        currentTreeSelection = selectedElement;
 		}
-		
+
 	}
-	
+
 	/**
 	 * Default attached tree listener
-	 * 
+	 *
 	 * TODO do we want to make this extensible like checked listeners?
 	 */
 	private class TreeListener implements ITreeViewerListener {
@@ -122,11 +122,11 @@
 			expandTreeElement(event.getElement());
 		}
 	}
-	
+
 	private CheckListener checkListener = new CheckListener();
 	private SelectionListener selectionListener = new SelectionListener();
 	private TreeListener treeListener = new TreeListener();
-	
+
 	private Object root;
     private Object currentTreeSelection;
     private Collection expandedTreeNodes = new HashSet();
@@ -148,7 +148,7 @@
      *	Create an instance of this class.  Use this constructor if you wish to specify
      *	the width and/or height of the combined widget (to only hard-code one of the
      *	sizing dimensions, specify the other dimension's value as -1)
-     *  
+     *
      * @param parent
      * @param rootObject
      * @param treeContentProvider
@@ -392,7 +392,7 @@
     public void collapseAll() {
     	treeViewer.collapseAll();
     }
-    
+
     /**
      *	Expand an element in a tree viewer
      */
@@ -440,7 +440,7 @@
      * @param treeElement The tree elements being queried
      * @param addAll a boolean to indicate if the checked state store needs to be queried
      * @param filter IElementFilter - the filter being used on the data
-     * @param monitor IProgressMonitor or null that the cancel is polled for 
+     * @param monitor IProgressMonitor or null that the cancel is polled for
      */
     private void findAllSelectedListElements(Object treeElement, String parentLabel, boolean addAll, IElementFilter filter,
             IProgressMonitor monitor) throws InterruptedException {
@@ -510,7 +510,7 @@
 	 * Returns a flat list of all of the leaf elements which are checked. Filter
 	 * then based on the supplied ElementFilter. If monitor is cancelled then
 	 * return null
-	 * 
+	 *
 	 * @param filter -
 	 *            the filter for the data
 	 * @param monitor
@@ -528,7 +528,7 @@
         }
     }
 
-    /** 
+    /**
      * Returns whether all items in the list are checked.
      * This method is required, because this widget will keep items grey
      * checked even though all children are selected (see grayUpdateHierarchy()).
@@ -548,7 +548,7 @@
         return true;
     }
 
-	/**Verifies of all list items of the tree element are checked, and 
+	/**Verifies of all list items of the tree element are checked, and
 	 * if all children are white checked.  If not, verify their children
 	 * so that if an element is not white checked, but all its children
 	 * are while checked, then, all items are considered checked.
@@ -650,7 +650,7 @@
     /**
      *	Returns a list of all of the items that are white checked.
      * 	Any folders that are white checked are added and then any files
-     *  from white checked folders are added. 
+     *  from white checked folders are added.
      *
      *	@return the list of all of the items that are white checked
      */
@@ -750,7 +750,7 @@
         selectAndReveal(parent);
         //Check the element in the viewer as if it had been manually checked
         listViewer.setChecked(element, true);
-        //As this is not done from the UI then set the box for updating from the selection to false 
+        //As this is not done from the UI then set the box for updating from the selection to false
         listItemChecked(element, true, false);
         grayUpdateHierarchy(parent);
     }
@@ -950,7 +950,7 @@
 
     /**
      * Set the comparator that is to be applied to self's list viewer
-     * 
+     *
      * @param comparator the sorter for the list
      */
     public void setListComparator(ViewerComparator comparator) {
@@ -960,7 +960,7 @@
     /**
      * Set the root of the widget to be new Root. Regenerate all of the tables and lists from this
      * value.
-     * @param newRoot 
+     * @param newRoot
      */
     public void setRoot(Object newRoot) {
         this.root = newRoot;
@@ -1007,7 +1007,7 @@
 
     /**
      * Set the comparator that is to be applied to self's tree viewer
-     * 
+     *
      * @param comparator the comparator for the tree
      */
     public void setTreeComparator(ViewerComparator comparator) {
@@ -1043,7 +1043,7 @@
 			return;
 		}
 
-        // now update upwards in the tree hierarchy 
+        // now update upwards in the tree hierarchy
         if (state) {
 			grayCheckHierarchy(parent);
 		} else {
@@ -1072,8 +1072,8 @@
      * Update the selections of the tree elements in items to reflect the new
      * selections provided.
      * @param items Map with keys of Object (the tree element) and values of List (the selected
-     * list elements).  
-     * NOTE: This method does not special case keys with no values (i.e., 
+     * list elements).
+     * NOTE: This method does not special case keys with no values (i.e.,
      * a tree element with an empty list).  If a tree element does not have any selected
      * items, do not include the element in the Map.
      */
@@ -1091,13 +1091,13 @@
         while (keyIterator.hasNext()) {
             Object key = keyIterator.next();
             List selections = (List) items.get(key);
-            //Replace the items in the checked state store with those from the supplied items			
+            //Replace the items in the checked state store with those from the supplied items
             checkedStateStore.put(key, selections);
             selectedNodes.add(key);
             // proceed up the tree element hierarchy
             Object parent = treeContentProvider.getParent(key);
             if (parent != null) {
-                // proceed up the tree element hierarchy and make sure everything is in the table		
+                // proceed up the tree element hierarchy and make sure everything is in the table
                 primeHierarchyForSelection(parent, selectedNodes);
             }
         }
@@ -1116,7 +1116,7 @@
         }
     }
 
-    /** 
+    /**
      * Set the focus on to the list widget.
      */
     public void setFocus() {
@@ -1128,7 +1128,7 @@
         		treeViewer.setSelection(selection);
         	}
         }
-        	
+
     }
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/UIResourceFilterDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/UIResourceFilterDescription.java
index df9d0fa..a7f8e31 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/UIResourceFilterDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/dialogs/UIResourceFilterDescription.java
@@ -36,7 +36,7 @@
 	 * @return the description
 	 */
 	abstract public FileInfoMatcherDescription getFileInfoMatcherDescription();
-	
+
 	/**
 	 * @param iResourceFilterDescription
 	 * @return a UIResourceFilterDescription
@@ -52,12 +52,12 @@
 			public IPath getPath() {
 				return iResourceFilterDescription.getResource().getProjectRelativePath();
 			}
-	
+
 			@Override
 			public IProject getProject() {
 				return iResourceFilterDescription.getResource().getProject();
 			}
-	
+
 			@Override
 			public int getType() {
 				return iResourceFilterDescription.getType();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/fileSystem/FileSystemContributor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/fileSystem/FileSystemContributor.java
index 9c4a907..4a383fa 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/fileSystem/FileSystemContributor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/fileSystem/FileSystemContributor.java
@@ -19,14 +19,14 @@
 /**
  * The abstract base class for all UI file system contributors. This class
  * provides the infrastructure for defining a contributor and fulfills the contract
- * specified by the <code>org.eclipse.ui.ide.filesystemSupport</code> 
+ * specified by the <code>org.eclipse.ui.ide.filesystemSupport</code>
  * extension point.
- * 
+ *
  * @since 3.2
  * @see org.eclipse.core.filesystem.IFileSystem
  */
 public abstract class FileSystemContributor {
-	
+
 	/**
 	 * Browse the file system for a URI to display to the user.
 	 * @param initialPath The path to initialize the selection with.
@@ -35,11 +35,11 @@
 	 * <code>null</code> if a URI could not be determined.
 	 */
 	public abstract URI browseFileSystem(String initialPath, Shell shell);
-	
+
 	/**
 	 * Return a URI for the supplied String from the user.
 	 * @param string
-	 * @return URI or <code>null</code> if the string is 
+	 * @return URI or <code>null</code> if the string is
 	 * invalid.
 	 */
 	public URI getURI(String string){
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCopyOrMoveResourcesOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCopyOrMoveResourcesOperation.java
index 6b964f4..148ae40 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCopyOrMoveResourcesOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCopyOrMoveResourcesOperation.java
@@ -24,11 +24,11 @@
  * An AbstractCopyOrMoveResourcesOperation represents an undoable operation for
  * moving or copying one or more resources in the workspace. Clients may call
  * the public API from a background thread.
- * 
+ *
  * This class is not intended to be subclassed by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 abstract class AbstractCopyOrMoveResourcesOperation extends
 		AbstractResourcesOperation {
@@ -49,10 +49,10 @@
 	 * Create an AbstractCopyOrMoveResourcesOperation that moves or copies all
 	 * of the specified resources to the specified paths. The destination paths
 	 * must include the names of the resources at their new location.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be moved or copied.  May not contain null
-	 *            resources, or resources that are descendants of already 
+	 *            resources, or resources that are descendants of already
 	 *            included resources.
 	 * @param destinationPaths
 	 *            the destination paths for the resources, including the name to
@@ -60,7 +60,7 @@
 	 *            null paths, and must be the same length as the resources array.
 	 * @param label
 	 *            the label of the operation
-	 *            
+	 *
 	 */
 	AbstractCopyOrMoveResourcesOperation(IResource[] resources,
 			IPath[] destinationPaths, String label) {
@@ -92,7 +92,7 @@
 	 * Create an AbstractCopyOrMoveResourcesOperation that moves or copies all
 	 * of the specified resources to the same target location, using their
 	 * existing names.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be moved or copied
 	 * @param destinationPath
@@ -110,7 +110,7 @@
 	/**
 	 * Create an AbstractCopyOrMoveResourcesOperation whose destination is not
 	 * yet specified.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be modified
 	 * @param label
@@ -127,7 +127,7 @@
 	 * successful. A status severity of <code>ERROR</code> indicates that the
 	 * operation is no longer valid. Other status severities are open to
 	 * interpretation by the caller.
-	 * 
+	 *
 	 * Note this method may be called on initial moving or copying of a
 	 * resource, or when a move or copy is undone or redone. Therefore, this
 	 * method should check conditions that can change over the life of the
@@ -136,7 +136,7 @@
 	 * typically be done by the caller so that the user is not continually
 	 * prompted or warned about conditions that were acceptable at the time of
 	 * original execution and do not change over time.
-	 * 
+	 *
 	 * @return the status indicating the projected outcome of moving or copying
 	 *         the resources.
 	 */
@@ -176,7 +176,7 @@
 	/**
 	 * Return the destination path that should be used to move or copy the
 	 * specified resource. This path is relative to the workspace.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource being moved or copied
 	 * @param index
@@ -204,7 +204,7 @@
 	/**
 	 * Return a boolean indicating whether the proposed destination path for a
 	 * resource is valid.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource whose path is to be checked
 	 * @param index
@@ -218,7 +218,7 @@
 
 	/**
 	 * Return a string indicating the proposed name for the resource
-	 * 
+	 *
 	 * @param resource
 	 *            the resource whose path is to be checked
 	 * @param index
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCreateResourcesOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCreateResourcesOperation.java
index 38e43f5..3dbc0b4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCreateResourcesOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractCreateResourcesOperation.java
@@ -23,18 +23,18 @@
  * A CreateResourcesOperation represents an undoable operation for creating
  * resources in the workspace. Clients may call the public API from a background
  * thread.
- * 
+ *
  * This class is not intended to be subclassed by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 abstract class AbstractCreateResourcesOperation extends
 		AbstractResourcesOperation {
 
 	/**
 	 * Create an AbstractCreateResourcesOperation.
-	 * 
+	 *
 	 * @param resourceDescriptions
 	 *            the resourceDescriptions describing resources to be created
 	 * @param label
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java
index bbf8513..63e54a8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractMarkersOperation.java
@@ -33,11 +33,11 @@
  * markers on a resource. It provides implementations for marker creation,
  * deletion, and updating. Clients may call the public API from a background
  * thread.
- * 
+ *
  * This class is not intended to be subclassed by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 abstract class AbstractMarkersOperation extends AbstractWorkspaceOperation {
 
@@ -50,7 +50,7 @@
 	/**
 	 * Create an AbstractMarkersOperation by specifying a combination of markers
 	 * and attributes or marker descriptions.
-	 * 
+	 *
 	 * @param markers
 	 *            the markers used in the operation or <code>null</code> if no
 	 *            markers yet exist
@@ -92,14 +92,14 @@
 	/**
 	 * Delete any currently known markers and save their information in marker
 	 * descriptions so that they can be restored.
-	 * 
+	 *
 	 * @param work
 	 *            the number of work ticks to be used by the delete
 	 * @param monitor
 	 *            the progress monitor to use for the delete
 	 * @throws CoreException
 	 *             propagates any CoreExceptions thrown from the resources API
-	 * 
+	 *
 	 */
 	protected void deleteMarkers(int work, IProgressMonitor monitor)
 			throws CoreException {
@@ -119,7 +119,7 @@
 
 	/**
 	 * Create markers from any currently known marker descriptions.
-	 * 
+	 *
 	 * @param work
 	 *            the number of work ticks to be used by the create
 	 * @param monitor
@@ -146,7 +146,7 @@
 	/**
 	 * Update the currently known markers with the corresponding array of marker
 	 * descriptions.
-	 * 
+	 *
 	 * @param work
 	 *            the number of work ticks to be used by the update
 	 * @param monitor
@@ -156,7 +156,7 @@
 	 *            considered to be a replacement of the previous attributes.
 	 * @throws CoreException
 	 *             propagates any CoreExceptions thrown from the resources API
-	 * 
+	 *
 	 */
 	protected void updateMarkers(int work, IProgressMonitor monitor,
 			boolean mergeAttributes) throws CoreException {
@@ -192,7 +192,7 @@
 
 	/**
 	 * Set the marker descriptions that describe markers that can be created.
-	 * 
+	 *
 	 * @param descriptions
 	 *            the descriptions of markers that can be created.
 	 */
@@ -228,7 +228,7 @@
 	/*
 	 * Add undo contexts according to marker types. Any unknown marker types
 	 * will cause the workspace undo context to be added.
-	 * 
+	 *
 	 * This is an optimization that allows us to add specific undo contexts for
 	 * tasks and bookmarks, without also adding the workspace undo context. Note
 	 * that clients with different marker types may still assign their own
@@ -287,7 +287,7 @@
 
 	/**
 	 * Return the array of markers that has been updated or created.
-	 * 
+	 *
 	 * @return the array of markers that have been updated or created, or
 	 *         <code>null</code> if no markers have been created or updated.
 	 */
@@ -297,7 +297,7 @@
 
 	/**
 	 * Return whether the markers known by this operation currently exist.
-	 * 
+	 *
 	 * @return <code>true</code> if there are existing markers and
 	 *         <code>false</code> if there are no known markers or any one of
 	 *         them does not exist
@@ -319,7 +319,7 @@
 	 * Return a status indicating the projected outcome of undoing the marker
 	 * operation. The receiver is not responsible for remembering the result of
 	 * this computation.
-	 * 
+	 *
 	 * @return the status indicating whether the operation can be undone
 	 */
 	protected abstract IStatus getBasicUndoStatus();
@@ -328,7 +328,7 @@
 	 * Return a status indicating the projected outcome of redoing the marker
 	 * operation. The receiver is not responsible for remembering the result of
 	 * this computation.
-	 * 
+	 *
 	 * @return the status indicating whether the operation can be undone
 	 */
 	protected abstract IStatus getBasicRedoStatus();
@@ -375,10 +375,10 @@
 	 * status severity of <code>ERROR</code> indicates that the operation is
 	 * no longer valid. Other status severities are open to interpretation by
 	 * the caller.
-	 * 
+	 *
 	 * @return the status indicating the projected outcome of deleting the
 	 *         markers.
-	 * 
+	 *
 	 */
 	protected IStatus getMarkerDeletionStatus() {
 		if (markersExist()) {
@@ -393,10 +393,10 @@
 	 * status severity of <code>ERROR</code> indicates that the operation is
 	 * no longer valid. Other status severities are open to interpretation by
 	 * the caller.
-	 * 
+	 *
 	 * @return the status indicating the projected outcome of creating the
 	 *         markers.
-	 * 
+	 *
 	 */
 	protected IStatus getMarkerCreationStatus() {
 		if (!resourcesExist()) {
@@ -413,10 +413,10 @@
 	 * status severity of <code>ERROR</code> indicates that the operation is
 	 * no longer valid. Other status severities are open to interpretation by
 	 * the caller.
-	 * 
+	 *
 	 * @return the status indicating the projected outcome of updating the
 	 *         markers.
-	 * 
+	 *
 	 */
 	protected IStatus getMarkerUpdateStatus() {
 		if (!markersExist()) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractResourcesOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractResourcesOperation.java
index e07996a..af0c940 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractResourcesOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractResourcesOperation.java
@@ -30,20 +30,20 @@
  * An AbstractResourcesOperation represents an undoable operation that
  * manipulates resources. It provides implementations for resource rename,
  * delete, creation, and modification. It also assigns the workspace undo
- * context as the undo context for operations of this type. 
- * 
+ * context as the undo context for operations of this type.
+ *
  * Resource operations record a snapshot of the workspace state when they
  * are created.  It is expected that an operation will be created and
  * executed without there being any intermediate changes to the resources
  * described in the operation between construction of the operation and
  * execution of the operation.
- * 
+ *
  * Clients may call the public API from a background thread.
- * 
+ *
  * This class is not intended to be subclassed by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 abstract class AbstractResourcesOperation extends AbstractWorkspaceOperation {
 
@@ -67,7 +67,7 @@
 
 	/**
 	 * Create an Abstract Resources Operation
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be modified
 	 * @param label
@@ -82,7 +82,7 @@
 
 	/**
 	 * Create an Abstract Resources Operation
-	 * 
+	 *
 	 * @param resourceDescriptions
 	 *            the resourceDescriptions describing resources to be created
 	 * @param label
@@ -98,7 +98,7 @@
 	/**
 	 * Delete any resources known by this operation. Store enough information to
 	 * undo and redo the operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
@@ -124,7 +124,7 @@
 	/**
 	 * Recreate any resources known by this operation. Store enough information
 	 * to undo and redo the operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
@@ -149,7 +149,7 @@
 	 * successful. A status severity of <code>ERROR</code> indicates that the
 	 * operation is no longer valid. Other status severities are open to
 	 * interpretation by the caller.
-	 * 
+	 *
 	 * Note this method may be called on initial creation of a resource, or when
 	 * a create or delete operation is being undone or redone. Therefore, this
 	 * method should check conditions that can change over the life of the
@@ -158,7 +158,7 @@
 	 * caller (such as the action that creates the operation) so that the user
 	 * is not continually prompted or warned about conditions that were
 	 * acceptable at the time of original execution.
-	 * 
+	 *
 	 * @param allowOverwrite
 	 *            a boolean that specifies whether resource creation should be
 	 *            allowed to overwrite an existent resource.
@@ -190,7 +190,7 @@
 	 * status severity of <code>ERROR</code> indicates that the operation is
 	 * no longer valid. Other status severities are open to interpretation by
 	 * the caller.
-	 * 
+	 *
 	 * Note this method may be called on initial deletion of a resource, or when
 	 * a create or delete operation is being undone or redone. Therefore, this
 	 * method should check conditions that can change over the life of the
@@ -240,7 +240,7 @@
 	/**
 	 * Set the array of resource descriptions describing resources to be
 	 * restored when undoing or redoing this operation.
-	 * 
+	 *
 	 * @param descriptions
 	 *            the array of resource descriptions
 	 */
@@ -262,7 +262,7 @@
 
 	/**
 	 * Compute a scheduling rule for creating resources.
-	 * 
+	 *
 	 * @return a scheduling rule appropriate for creating the resources
 	 *         specified in the resource descriptions
 	 */
@@ -290,7 +290,7 @@
 
 	/**
 	 * Compute a scheduling rule for deleting resources.
-	 * 
+	 *
 	 * @return a scheduling rule appropriate for deleting the resources
 	 *         specified in the receiver.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractWorkspaceOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractWorkspaceOperation.java
index 0176165..a74a027 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractWorkspaceOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/AbstractWorkspaceOperation.java
@@ -76,7 +76,7 @@
 
 	/**
 	 * Create an AbstractWorkspaceOperation with the specified name.
-	 * 
+	 *
 	 * @param name
 	 *            the name used to describe the operation
 	 */
@@ -95,7 +95,7 @@
 
 	/**
 	 * Set the ids of any model providers for the resources involved.
-	 * 
+	 *
 	 * @param ids
 	 *            the array of String model provider ids that provide models
 	 *            associated with the resources involved in this operation
@@ -106,7 +106,7 @@
 
 	/**
 	 * Set the resources which are affected by this operation
-	 * 
+	 *
 	 * @param resources
 	 *            an array of resources
 	 */
@@ -116,7 +116,7 @@
 
 	/**
 	 * Return the workspace manipulated by this operation.
-	 * 
+	 *
 	 * @return the IWorkspace used by this operation.
 	 */
 	protected IWorkspace getWorkspace() {
@@ -125,7 +125,7 @@
 
 	/**
 	 * Return the workspace rule factory associated with this operation.
-	 * 
+	 *
 	 * @return the IResourceRuleFactory associated with this operation.
 	 */
 	protected IResourceRuleFactory getWorkspaceRuleFactory() {
@@ -135,7 +135,7 @@
 	/**
 	 * Mark this operation invalid due to some external change. May be used by
 	 * subclasses.
-	 * 
+	 *
 	 */
 	protected void markInvalid() {
 		isValid = false;
@@ -170,7 +170,7 @@
 	 * operation in a workspace runnable and catches any CoreExceptions
 	 * resulting from the operation. Unhandled CoreExceptions are propagated as
 	 * ExecutionExceptions.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
@@ -185,7 +185,7 @@
 	 *         to represent an incompletion of the execution.
 	 * @throws ExecutionException
 	 *             if an exception occurred during execution.
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.operations.IUndoableOperation#execute(org.eclipse.core.runtime.IProgressMonitor,
 	 *      org.eclipse.core.runtime.IAdaptable)
 	 */
@@ -213,7 +213,7 @@
 	 * a workspace runnable and catches any CoreExceptions resulting from the
 	 * operation. Unhandled CoreExceptions are propagated as
 	 * ExecutionExceptions.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
@@ -256,7 +256,7 @@
 	 * a workspace runnable and catches any CoreExceptions resulting from the
 	 * operation. Unhandled CoreExceptions are propagated as
 	 * ExecutionExceptions.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
@@ -296,7 +296,7 @@
 
 	/**
 	 * Perform the specific work involved in undoing this operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
@@ -313,7 +313,7 @@
 
 	/**
 	 * Perform the specific work involved in executing this operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
@@ -324,7 +324,7 @@
 	 *            org.eclipse.swt.widgets.Shell.class
 	 * @throws CoreException
 	 *             propagates any CoreExceptions thrown from the resources API
-	 * 
+	 *
 	 */
 	protected abstract void doExecute(IProgressMonitor monitor,
 			IAdaptable uiInfo) throws CoreException;
@@ -333,7 +333,7 @@
 	 * Return whether the proposed operation is valid. The default
 	 * implementation simply checks to see if the flag has been marked as
 	 * invalid, relying on subclasses to mark the flag invalid when appropriate.
-	 * 
+	 *
 	 * @return the validity flag
 	 */
 	protected boolean isValid() {
@@ -357,13 +357,13 @@
 	 * {@link org.eclipse.core.commands.operations.IOperationApprover2}) who
 	 * wish to perform advanced validation of an operation before attempting to
 	 * execute it.
-	 * 
+	 *
 	 * If an ERROR status is returned, the operation will not proceed and the
 	 * user notified if deemed necessary by the caller. The validity flag on the
 	 * operation should be marked as invalid. If an OK status is returned, the
 	 * operation will proceed. The caller must interpret any other returned
 	 * status severity, and may choose to prompt the user as to how to proceed.
-	 * 
+	 *
 	 * If there are multiple conditions that result in an ambiguous status
 	 * severity, it is best for the implementor of this method to consult the
 	 * user as to how to proceed for each one, and return an OK or ERROR status
@@ -372,16 +372,16 @@
 	 * may potentially consult the user. (Note that the user should not be
 	 * consulted at all if a client has called {@link #setQuietCompute(boolean)}
 	 * with a value of <code>true</code>.)
-	 * 
+	 *
 	 * This implementation computes the validity of execution by computing the
 	 * resource delta that would be generated on execution, and checking whether
 	 * any registered model providers are affected by the operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to be used for computing the status
 	 * @return the status indicating the projected outcome of executing the
 	 *         receiver
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.operations.IAdvancedUndoableOperation#computeUndoableStatus(org.eclipse.core.runtime.IProgressMonitor)
 	 * @see #setQuietCompute(boolean)
 	 */
@@ -421,13 +421,13 @@
 	 * {@link org.eclipse.core.commands.operations.IOperationApprover2}) who
 	 * wish to perform advanced validation of an operation before attempting to
 	 * undo it.
-	 * 
+	 *
 	 * If an ERROR status is returned, the undo will not proceed and the user
 	 * notified if deemed necessary by the caller. The validity flag on the
 	 * operation should be marked as invalid. If an OK status is returned, the
 	 * undo will proceed. The caller must interpret any other returned status
 	 * severity, and may choose to prompt the user as to how to proceed.
-	 * 
+	 *
 	 * If there are multiple conditions that result in an ambiguous status
 	 * severity, it is best for the implementor of this method to consult the
 	 * user as to how to proceed for each one, and return an OK or ERROR status
@@ -436,16 +436,16 @@
 	 * may potentially consult the user. (Note that the user should not be
 	 * consulted at all if a client has called {@link #setQuietCompute(boolean)}
 	 * with a value of <code>true</code>.)
-	 * 
+	 *
 	 * This implementation computes the validity of undo by computing the
 	 * resource delta that would be generated on undo, and checking whether any
 	 * registered model providers are affected by the operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to be used for computing the status
 	 * @return the status indicating the projected outcome of undoing the
 	 *         receiver
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.operations.IAdvancedUndoableOperation#computeUndoableStatus(org.eclipse.core.runtime.IProgressMonitor)
 	 * @see #setQuietCompute(boolean)
 	 */
@@ -484,13 +484,13 @@
 	 * {@link org.eclipse.core.commands.operations.IOperationApprover2}) who
 	 * wish to perform advanced validation of an operation before attempting to
 	 * redo it.
-	 * 
+	 *
 	 * If an ERROR status is returned, the redo will not proceed and the user
 	 * notified if deemed necessary by the caller. The validity flag on the
 	 * operation should be marked as invalid. If an OK status is returned, the
 	 * redo will proceed. The caller must interpret any other returned status
 	 * severity, and may choose to prompt the user as to how to proceed.
-	 * 
+	 *
 	 * If there are multiple conditions that result in an ambiguous status
 	 * severity, it is best for the implementor of this method to consult the
 	 * user as to how to proceed for each one, and return an OK or ERROR status
@@ -499,16 +499,16 @@
 	 * may potentially consult the user. (Note that the user should not be
 	 * consulted at all if a client has called {@link #setQuietCompute(boolean)}
 	 * with a value of <code>true</code>.)
-	 * 
+	 *
 	 * This implementation computes the validity of redo by computing the
 	 * resource delta that would be generated on redo, and checking whether any
 	 * registered model providers are affected by the operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to be used for computing the status
 	 * @return the status indicating the projected outcome of redoing the
 	 *         receiver
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.operations.IAdvancedUndoableOperation#computeUndoableStatus(org.eclipse.core.runtime.IProgressMonitor)
 	 * @see #setQuietCompute(boolean)
 	 */
@@ -546,7 +546,7 @@
 	 * implementation does not update the factory. Subclasses are expected to
 	 * override this method to more specifically describe their modifications to
 	 * the workspace.
-	 * 
+	 *
 	 * @param factory
 	 *            the factory to update
 	 * @param operation
@@ -562,7 +562,7 @@
 	/**
 	 * Return an error status describing an invalid operation using the provided
 	 * message.
-	 * 
+	 *
 	 * @param message
 	 *            the message to be used in the status, or <code>null</code>
 	 *            if a generic message should be used
@@ -583,7 +583,7 @@
 	/**
 	 * Return a warning status describing the warning state of an operation
 	 * using the provided message and code.
-	 * 
+	 *
 	 * @param message
 	 *            the message to be used in the status, or <code>null</code>
 	 *            if a generic message should be used
@@ -605,7 +605,7 @@
 
 	/**
 	 * Return whether the resources known by this operation currently exist.
-	 * 
+	 *
 	 * @return <code>true</code> if there are existing resources and
 	 *         <code>false</code> if there are no known resources or any one
 	 *         of them does not exist
@@ -625,7 +625,7 @@
 	/**
 	 * Return whether the resources known by this operation contain any
 	 * projects.
-	 * 
+	 *
 	 * @return <code>true</code> if there is one or more projects known by
 	 *         this operation and false if there are no projects.
 	 */
@@ -643,15 +643,15 @@
 
 	/**
 	 * Return a scheduling rule appropriate for executing this operation.
-	 * 
+	 *
 	 * The default implementation is to return a rule that locks out the entire
 	 * workspace. Subclasses are encouraged to provide more specific rules that
 	 * affect only their resources.
-	 * 
+	 *
 	 * @return the scheduling rule to use when executing this operation, or
 	 *         <code>null</code> if there are no scheduling restrictions for
 	 *         this operation.
-	 * 
+	 *
 	 * @see IWorkspace#run(IWorkspaceRunnable, ISchedulingRule, int,
 	 *      IProgressMonitor)
 	 */
@@ -661,15 +661,15 @@
 
 	/**
 	 * Return a scheduling rule appropriate for undoing this operation.
-	 * 
+	 *
 	 * The default implementation is to return a rule that locks out the entire
 	 * workspace. Subclasses are encouraged to provide more specific rules that
 	 * affect only their resources.
-	 * 
+	 *
 	 * @return the scheduling rule to use when undoing this operation, or
 	 *         <code>null</code> if there are no scheduling restrictions for
 	 *         this operation.
-	 * 
+	 *
 	 * @see IWorkspace#run(IWorkspaceRunnable, ISchedulingRule, int,
 	 *      IProgressMonitor)
 	 */
@@ -679,14 +679,14 @@
 
 	/**
 	 * Return a scheduling rule appropriate for redoing this operation.
-	 * 
+	 *
 	 * The default implementation considers the redo scheduling rule the same as
 	 * the original execution scheduling rule.
-	 * 
+	 *
 	 * @return the scheduling rule to use when redoing this operation, or
 	 *         <code>null</code> if there are no scheduling restrictions for
 	 *         this operation.
-	 * 
+	 *
 	 * @see IWorkspace#run(IWorkspaceRunnable, ISchedulingRule, int,
 	 *      IProgressMonitor)
 	 */
@@ -712,7 +712,7 @@
 	 * Append any descriptive text to the specified string buffer to be shown in
 	 * the receiver's {@link #toString()} text.
 	 * <p>Note that this method is not intend to be subclassed by clients.
-	 * 
+	 *
 	 * @param text
 	 *            the StringBuffer on which to append the text
 	 */
@@ -725,17 +725,17 @@
 	/**
 	 * Return the shell described by the specified adaptable, or the active
 	 * shell if no shell has been specified in the adaptable.
-	 * 
+	 *
 	 * @param uiInfo
 	 *            the IAdaptable (or <code>null</code>) provided by the
 	 *            caller in order to supply UI information for prompting the
 	 *            user if necessary. When this parameter is not
 	 *            <code>null</code>, it contains an adapter for the
 	 *            org.eclipse.swt.widgets.Shell.class
-	 * 
+	 *
 	 * @return the shell specified in the adaptable, or the active shell if no
 	 *         shell has been specified
-	 * 
+	 *
 	 */
 	protected Shell getShell(IAdaptable uiInfo) {
 		if (uiInfo != null) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyProjectOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyProjectOperation.java
index 5a8d67c..3a3fee7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyProjectOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyProjectOperation.java
@@ -35,12 +35,12 @@
  * A CopyProjectOperation represents an undoable operation for copying a
  * project, also specifying the location of its contents. Clients may call the
  * public API from a background thread.
- * 
+ *
  * <p>
  * This class is intended to be instantiated and used by clients. It is not
  * intended to be subclassed by clients.
  * </p>
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
  * @since 3.3
  */
@@ -55,7 +55,7 @@
 	/**
 	 * Create a CopyProjectOperation that copies the specified project and sets
 	 * its location to the specified location.
-	 * 
+	 *
 	 * @param project
 	 *            the project to be copied
 	 * @param name
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyResourcesOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyResourcesOperation.java
index 47f75e6..8c4617c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyResourcesOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CopyResourcesOperation.java
@@ -28,7 +28,7 @@
  * A CopyResourcesOperation represents an undoable operation for copying one or
  * more resources in the workspace. Clients may call the public API from a
  * background thread.
- * 
+ *
  * <p>
  * This operation can track any overwritten resources and restore them when the
  * copy is undone. It is up to clients to determine whether overwrites are
@@ -37,12 +37,12 @@
  * location for the copy is assumed to have already been validated by the
  * client. It will not be revalidated on undo and redo.
  * </p>
- * 
+ *
  * <p>
  * This class is intended to be instantiated and used by clients. It is not
  * intended to be subclassed by clients.
  * </p>
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
  * @since 3.3
  */
@@ -56,7 +56,7 @@
 	/**
 	 * Create a CopyResourcesOperation that copies a single resource to a new
 	 * location. The new location includes the name of the copy.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource to be copied
 	 * @param newPath
@@ -75,7 +75,7 @@
 	 * Create a CopyResourcesOperation that copies all of the specified
 	 * resources to a single target location. The original resource name will be
 	 * used when copied to the new location.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be copied
 	 * @param destinationPath
@@ -95,7 +95,7 @@
 	 * resources to its corresponding destination path in the destination path
 	 * array. The resource name for the target is included in the corresponding
 	 * destination path.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be copied. Must not contain null resources.
 	 * @param destinationPaths
@@ -125,7 +125,7 @@
 	 * Move or copy any known resources according to the destination parameters
 	 * known by this operation. Store enough information to undo and redo the
 	 * operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFileOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFileOperation.java
index 2a39c7a..80c833c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFileOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFileOperation.java
@@ -29,8 +29,8 @@
  * be linked to the file at the specified location. If a link location is not
  * specified, the file will be created in the location specified by the handle,
  * and the entire containment path of the file will be created if it does not
- * exist.  The file should not already exist, and the existence of the 
- * containment path should not be changed between the time this operation 
+ * exist.  The file should not already exist, and the existence of the
+ * containment path should not be changed between the time this operation
  * is created and the time it is executed.
  * <p>
  * Clients may call the public API from a background thread.
@@ -46,7 +46,7 @@
 
 	/**
 	 * Create a CreateFileOperation
-	 * 
+	 *
 	 * @param fileHandle
 	 *            the file to be created
 	 * @param linkLocation
@@ -111,7 +111,7 @@
 			}
 		};
 	}
-	
+
 	@Override
 	public IStatus computeExecutionStatus(IProgressMonitor monitor) {
 		IStatus status = super.computeExecutionStatus(monitor);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFolderOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFolderOperation.java
index 5c6368a..207573b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFolderOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateFolderOperation.java
@@ -23,7 +23,7 @@
  * considered to be linked to the specified location. If a link location is not
  * specified, the folder will be created in the location specified by the
  * handle, and the entire containment path of the folder will be created if it
- * does not exist.  The folder should not already exist, and the existence 
+ * does not exist.  The folder should not already exist, and the existence
  * of the containment path should not be changed between the time this operation
  * is created and the time it is executed.
  * <p>
@@ -40,7 +40,7 @@
 
 	/**
 	 * Create a CreateFolderOperation
-	 * 
+	 *
 	 * @param folderHandle
 	 *            the folder to be created
 	 * @param linkLocation
@@ -56,7 +56,7 @@
 
 	/**
 	 * Create a CreateFolderOperation
-	 * 
+	 *
 	 * @param folderHandle
 	 *            the folder to be created
 	 * @param linkLocation
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateMarkersOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateMarkersOperation.java
index 9d132d0..58f6cf0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateMarkersOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateMarkersOperation.java
@@ -26,19 +26,19 @@
  * A CreateMarkersOperation represents an undoable operation for creating one or
  * more markers on one or more resources in the workspace. Clients may call the
  * public API from a background thread.
- * 
+ *
  * This class is intended to be instantiated and used by clients. It is not
  * intended to be subclassed by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class CreateMarkersOperation extends AbstractMarkersOperation {
 
 	/**
 	 * Create an undoable operation that can create a marker of a specific type
 	 * on a resource.
-	 * 
+	 *
 	 * @param type
 	 *            the type of marker to be created
 	 * @param attributes
@@ -48,7 +48,7 @@
 	 * @param name
 	 *            the name used to describe the operation that creates the
 	 *            marker
-	 * 
+	 *
 	 * @see org.eclipse.core.resources.IMarker
 	 */
 	public CreateMarkersOperation(String type, Map attributes,
@@ -60,7 +60,7 @@
 	/**
 	 * Create an undoable operation that can create multiple markers of various
 	 * types on multiple resources.
-	 * 
+	 *
 	 * @param types
 	 *            an array describing the types of markers to be created
 	 * @param attributes
@@ -87,7 +87,7 @@
 	/**
 	 * Create an undoable operation that can create multiple markers of a single
 	 * type on multiple resources.
-	 * 
+	 *
 	 * @param type
 	 *            the type of markers to be created
 	 * @param attributes
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateProjectOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateProjectOperation.java
index 1713427..c74f163 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateProjectOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/CreateProjectOperation.java
@@ -29,7 +29,7 @@
 
 	/**
 	 * Create a CreateProjectOperation
-	 * 
+	 *
 	 * @param projectDescription
 	 *            the project to be created
 	 * @param label
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteMarkersOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteMarkersOperation.java
index 6a0ceb9..dcc25b8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteMarkersOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteMarkersOperation.java
@@ -23,18 +23,18 @@
  * A DeleteMarkersOperation represents an undoable operation for deleting one or
  * more markers in the workspace. Clients may call the public API from a
  * background thread.
- * 
+ *
  * This class is intended to be instantiated and used by clients. It is not
  * intended to be subclassed by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class DeleteMarkersOperation extends AbstractMarkersOperation {
 
 	/**
 	 * Create an undoable operation that can delete the specified markers.
-	 * 
+	 *
 	 * @param markers
 	 *            the markers to be deleted
 	 * @param name
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteResourcesOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteResourcesOperation.java
index f6d2047..5edcdb9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteResourcesOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/DeleteResourcesOperation.java
@@ -40,7 +40,7 @@
 
 	/**
 	 * Create a DeleteResourcesOperation
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be deleted
 	 * @param label
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveProjectOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveProjectOperation.java
index eac2550..d666c55 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveProjectOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveProjectOperation.java
@@ -35,10 +35,10 @@
  * This class is intended to be instantiated and used by clients. It is not
  * intended to be subclassed by clients.
  * </p>
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
  * @since 3.3
- * 
+ *
  */
 public class MoveProjectOperation extends AbstractCopyOrMoveResourcesOperation {
 
@@ -47,7 +47,7 @@
 	/**
 	 * Create a MoveProjectOperation that moves the specified project contents
 	 * to a new location.
-	 * 
+	 *
 	 * @param project
 	 *            the project to be moved
 	 * @param location
@@ -79,7 +79,7 @@
 	private IProject getProject() {
 		return (IProject) resources[0];
 	}
-	
+
 	@Override
 	protected boolean isDestinationPathValid(IResource resource, int index) {
 		// path has already been validated in #computeMoveOrCopyStatus()
@@ -124,7 +124,7 @@
 			throws CoreException {
 		doExecute(monitor, uiInfo);
 	}
-	
+
 	/*
 	 * Move the project to its new location, returning its previous location.
 	 */
@@ -132,19 +132,19 @@
 			throws CoreException {
 		monitor
 				.setTaskName(UndoMessages.AbstractCopyOrMoveResourcesOperation_moveProjectProgress);
-	
+
 		IProjectDescription description = project.getDescription();
 		// Record the original path so this can be undone
 		URI newDestinationURI = description.getLocationURI();
 		// Set the new location into the project's description
 		description.setLocationURI(locationURI);
-	
+
 		project.move(description, IResource.FORCE | IResource.SHALLOW, monitor);
-	
+
 		// Now adjust the projectLocation so this can be undone/redone.
 		return newDestinationURI;
 	}
-	
+
 	/*
 	 * Map undo to move status.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveResourcesOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveResourcesOperation.java
index b9de7c0..f4ab6c4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveResourcesOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/MoveResourcesOperation.java
@@ -42,7 +42,7 @@
  * <p>
  * @noextend This class is not intended to be subclassed by clients.
  * @since 3.3
- * 
+ *
  */
 public class MoveResourcesOperation extends
 		AbstractCopyOrMoveResourcesOperation {
@@ -56,7 +56,7 @@
 	/**
 	 * Create a MoveResourcesOperation that moves all of the specified resources
 	 * to the same target location, using their existing names.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be moved
 	 * @param destinationPath
@@ -77,7 +77,7 @@
 	 * Create a MoveResourcesOperation that moves a single resource to a new
 	 * location. The new location includes the name of the resource, so this may
 	 * be used for a move/rename operation or a simple move.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource to be moved
 	 * @param newPath
@@ -105,7 +105,7 @@
 	/**
 	 * Move any known resources according to the destination parameters known by
 	 * this operation. Store enough information to undo and redo the operation.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use for the operation
 	 * @param uiInfo
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/ResourceDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/ResourceDescription.java
index b3cbc2b..4ddc191 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/ResourceDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/ResourceDescription.java
@@ -24,18 +24,18 @@
 /**
  * ResourceDescription is a lightweight description that describes the common
  * attributes of a resource to be created.
- * 
+ *
  * This class is not intended to be extended by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public abstract class ResourceDescription {
 
 	/**
 	 * Create a resource description given the specified resource. The resource
 	 * is assumed to exist.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource from which a description should be created
 	 * @return the resource description
@@ -51,12 +51,12 @@
 			throw new IllegalArgumentException();
 		}
 	}
-	
+
 	/**
 	 * Create a resource handle that can be used to create a resource from this
 	 * resource description. This handle can be used to create the actual
 	 * resource, or to describe the creation to a resource delta factory.
-	 * 
+	 *
 	 * @return the resource handle that can be used to create a resource from
 	 *         this description
 	 */
@@ -64,25 +64,25 @@
 
 	/**
 	 * Get the name of this resource.
-	 * 
+	 *
 	 * @return the name of the Resource
 	 */
 	public abstract String getName();
-	
+
 	/**
 	 * Create an existent resource from this resource description.
-	 * 
+	 *
 	 * @param monitor
 	 *            the progress monitor to use
 	 * @return a resource that has the attributes of this resource description
 	 * @throws CoreException
 	 */
 	public abstract IResource createResource(IProgressMonitor monitor) throws CoreException;
-	
+
 	/**
 	 * Given a resource handle, create an actual resource with the attributes of
 	 * the receiver resource description.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource handle
 	 * @param monitor
@@ -91,20 +91,20 @@
 	 */
 	public abstract void createExistentResourceFromHandle(IResource resource,
 			IProgressMonitor monitor) throws CoreException;
-	
+
 	/**
 	 * Return a boolean indicating whether this resource description has enough
 	 * information to create a resource.
-	 * 
+	 *
 	 * @return <code>true</code> if the resource can be created, and
 	 *         <code>false</code> if it does not have enough information
 	 */
 	public abstract boolean isValid();
-	
+
 	/**
 	 * Record the appropriate state of this resource description using
 	 * any available resource history.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource whose state is to be recorded.
 	 * @param monitor
@@ -113,17 +113,17 @@
 	 */
 	public abstract void recordStateFromHistory(IResource resource,
 			IProgressMonitor monitor) throws CoreException;
-	
+
 	/**
 	 * Return a boolean indicating whether this description represents an
 	 * existent resource.
-	 * 
+	 *
 	 * @param checkMembers
 	 *            Use <code>true</code> if members should also exist in order
 	 *            for this description to be considered existent. A value of
 	 *            <code>false</code> indicates that the existence of members
 	 *            does not matter.
-	 * 
+	 *
 	 * @return a boolean indicating whether this description represents an
 	 *         existent resource.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/UpdateMarkersOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/UpdateMarkersOperation.java
index fd4950d..b8b9c7e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/UpdateMarkersOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/UpdateMarkersOperation.java
@@ -25,12 +25,12 @@
  * An UpdateMarkersOperation represents an undoable operation for updating one
  * or more markers in the workspace with one or more sets of attributes. Clients
  * may call the public API from a background thread.
- * 
+ *
  * This class is intended to be instantiated and used by clients. It is not
  * intended to be subclassed by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class UpdateMarkersOperation extends AbstractMarkersOperation {
 
@@ -41,7 +41,7 @@
 	/**
 	 * Create an undoable operation that can update the specified marker with
 	 * the specified attributes.
-	 * 
+	 *
 	 * @param marker
 	 *            the marker to be updated
 	 * @param attributes
@@ -67,7 +67,7 @@
 	/**
 	 * Create an undoable operation that updates many markers to have the same
 	 * set of attributes.
-	 * 
+	 *
 	 * @param markers
 	 *            the markers to be updated
 	 * @param attributes
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
index 93f9f15..963d223 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/ide/undo/WorkspaceUndoUtil.java
@@ -53,7 +53,7 @@
 /**
  * WorkspaceUndoUtil defines common utility methods and constants used by
  * clients who create undoable workspace operations.
- * 
+ *
  * @since 3.3
  */
 public class WorkspaceUndoUtil {
@@ -65,7 +65,7 @@
 
 	/**
 	 * Return the undo context that should be used for workspace-wide operations
-	 * 
+	 *
 	 * @return the undo context suitable for workspace-level operations.
 	 */
 	public static IUndoContext getWorkspaceUndoContext() {
@@ -76,7 +76,7 @@
 	/**
 	 * Return the undo context that should be used for operations involving
 	 * tasks.
-	 * 
+	 *
 	 * @return the tasks undo context
 	 */
 	public static IUndoContext getTasksUndoContext() {
@@ -91,7 +91,7 @@
 	/**
 	 * Return the undo context that should be used for operations involving
 	 * bookmarks.
-	 * 
+	 *
 	 * @return the bookmarks undo context
 	 */
 	public static IUndoContext getBookmarksUndoContext() {
@@ -106,7 +106,7 @@
 	/**
 	 * Return the undo context that should be used for operations involving
 	 * problems.
-	 * 
+	 *
 	 * @return the problems undo context
 	 * @since 3.7
 	 */
@@ -126,12 +126,12 @@
 	 * {@link org.eclipse.core.commands.operations.IOperationHistory} method
 	 * that requires an {@link org.eclipse.core.runtime.IAdaptable}
 	 * <code>uiInfo</code> parameter.
-	 * 
+	 *
 	 * @param shell
 	 *            the shell that should be returned by the IAdaptable when asked
 	 *            to adapt a shell. If this parameter is <code>null</code>,
 	 *            the returned shell will also be <code>null</code>.
-	 * 
+	 *
 	 * @return an IAdaptable that will return the specified shell.
 	 */
 	public static IAdaptable getUIInfoAdapter(final Shell shell) {
@@ -153,7 +153,7 @@
 	/**
 	 * Delete all of the specified resources, returning resource descriptions
 	 * that can be used to restore them.
-	 * 
+	 *
 	 * @param resourcesToDelete
 	 *            an array of resources to be deleted
 	 * @param monitor
@@ -164,7 +164,7 @@
 	 *            user if necessary. When this parameter is not
 	 *            <code>null</code>, it contains an adapter for the
 	 *            org.eclipse.swt.widgets.Shell.class
-	 * 
+	 *
 	 * @param deleteContent
 	 *            a boolean indicating whether project content should be deleted
 	 *            when a project resource is to be deleted
@@ -237,7 +237,7 @@
 	/**
 	 * Copies the resources to the given destination. This method can be called
 	 * recursively to merge folders during folder copy.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be copied
 	 * @param destination
@@ -533,7 +533,7 @@
 	 * is "VAR" and points to "C:\foo\bar\").
 	 *
 	 * @param locationURI
-	 * @param resource 
+	 * @param resource
 	 * @return an URI that was made relative to a variable
 	 */
 	static private URI createRelativePath(URI locationURI, String relativeVariable, IResource resource) {
@@ -552,7 +552,7 @@
 	/**
 	 * Moves the resources to the given destination. This method can be called
 	 * recursively to merge folders during folder move.
-	 * 
+	 *
 	 * @param resources
 	 *            the resources to be moved
 	 * @param destination
@@ -717,7 +717,7 @@
 
 	/**
 	 * Recreate the resources from the specified resource descriptions.
-	 * 
+	 *
 	 * @param resourcesToRecreate
 	 *            the ResourceDescriptions describing resources to be recreated
 	 * @param monitor
@@ -764,7 +764,7 @@
 	/**
 	 * Delete the specified resources, returning a resource description that can
 	 * be used to restore it.
-	 * 
+	 *
 	 * @param resourceToDelete
 	 *            the resource to be deleted
 	 * @param monitor
@@ -901,7 +901,7 @@
 	/*
 	 * Ask the user whether the given resource should be deleted despite being
 	 * out of sync with the file system.
-	 * 
+	 *
 	 * Return one of the IDialogConstants constants indicating which of the Yes,
 	 * Yes to All, No, Cancel options has been selected by the user.
 	 */
@@ -1017,14 +1017,14 @@
 	/**
 	 * Return the shell described by the specified adaptable, or the active
 	 * shell if no shell has been specified in the adaptable.
-	 * 
+	 *
 	 * @param uiInfo
 	 *            the IAdaptable (or <code>null</code>) provided by the
 	 *            caller in order to supply UI information for prompting the
 	 *            user if necessary. When this parameter is not
 	 *            <code>null</code>, it contains an adapter for the
 	 *            org.eclipse.swt.widgets.Shell.class
-	 * 
+	 *
 	 * @return the Shell that can be used to show information
 	 */
 	public static Shell getShell(IAdaptable uiInfo) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/AboutInfo.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/AboutInfo.java
index 2f0975c..deccd1f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/AboutInfo.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/AboutInfo.java
@@ -28,8 +28,8 @@
 
 /**
  * The information within this object is obtained from the about INI file.
- * This file resides within an install configurations directory and must be a 
- * standard java property file.  
+ * This file resides within an install configurations directory and must be a
+ * standard java property file.
  * <p>
  * This class is not intended to be instantiated or subclassed by clients.
  * </p>
@@ -59,7 +59,7 @@
 
     /**
      * Returns the configuration information for the feature with the given id.
-     * 
+     *
      * @param featureId
      *            the feature id
      * @param versionId
@@ -106,10 +106,10 @@
     }
 
     /**
-     * Returns the descriptor for an image which can be shown in an "about" dialog 
-     * for this product. Products designed to run "headless" typically would not 
+     * Returns the descriptor for an image which can be shown in an "about" dialog
+     * for this product. Products designed to run "headless" typically would not
      * have such an image.
-     * 
+     *
      * @return the descriptor for an about image, or <code>null</code> if none
      */
     public ImageDescriptor getAboutImage() {
@@ -118,9 +118,9 @@
     }
 
     /**
-     * Returns the descriptor for an image which can be shown in an "about features" 
+     * Returns the descriptor for an image which can be shown in an "about features"
      * dialog. Products designed to run "headless" typically would not have such an image.
-     * 
+     *
      * @return the descriptor for a feature image, or <code>null</code> if none
      */
     public ImageDescriptor getFeatureImage() {
@@ -130,7 +130,7 @@
 
     /**
      * Returns the simple name of the feature image file.
-     * 
+     *
      * @return the simple name of the feature image file,
      * or <code>null</code> if none
      */
@@ -145,7 +145,7 @@
 
     /**
      * Returns the CRC of the feature image as supplied in the properties file.
-     * 
+     *
      * @return the CRC of the feature image, or <code>null</code> if none
      */
     public Long getFeatureImageCRC() {
@@ -212,7 +212,7 @@
 
     /**
      * Returns the id for this feature.
-     * 
+     *
      * @return the feature id
      */
     public String getFeatureId() {
@@ -222,13 +222,13 @@
 		} else if (bundleGroupProperties != null) {
 			id = bundleGroupProperties.getFeatureId();
 		}
-        return id != null ? id : ""; //$NON-NLS-1$ 
+        return id != null ? id : ""; //$NON-NLS-1$
     }
 
     /**
      * Returns the text to show in an "about" dialog for this product.
      * Products designed to run "headless" typically would not have such text.
-     * 
+     *
      * @return the about text, or <code>null</code> if none
      */
     public String getAboutText() {
@@ -246,7 +246,7 @@
      * </p>
      *
      * @return the application name, or <code>null</code>
-     * 
+     *
      * @see org.eclipse.swt.widgets.Display#setAppName
      */
     public String getAppName() {
@@ -287,7 +287,7 @@
     /**
      * Returns a <code>URL</code> for the welcome page.
      * Products designed to run "headless" typically would not have such an page.
-     * 
+     *
      * @return the welcome page, or <code>null</code> if none
      */
     public URL getWelcomePageURL() {
@@ -303,7 +303,7 @@
     /**
      * Returns the ID of a perspective in which to show the welcome page.
      * May be <code>null</code>.
-     * 
+     *
      * @return the welcome page perspective id, or <code>null</code> if none
      */
     public String getWelcomePerspectiveId() {
@@ -313,7 +313,7 @@
 
     /**
      * Returns a <code>String</code> for the tips and trick href.
-     * 
+     *
      * @return the tips and tricks href, or <code>null</code> if none
      */
     public String getTipsAndTricksHref() {
@@ -326,7 +326,7 @@
      * this product. The expectations is that the elements will be the same
      * image rendered at different sizes. Products designed to run "headless"
      * typically would not have such images.
-     * 
+     *
      * @return an array of the image descriptors for the window images, or
      *         <code>null</code> if none
      * @since 3.0
@@ -335,12 +335,12 @@
         return productProperties == null ? null : productProperties
                 .getWindowImages();
     }
-    
+
     public String getBrandingBundleId() {
     	return bundleGroupProperties == null ? null : bundleGroupProperties
                 .getBrandingBundleId();
     }
-    
+
     public String getBrandingBundleVersion() {
     	return bundleGroupProperties == null ? null : bundleGroupProperties
                 .getBrandingBundleVersion();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java
index 64d46f3..e919799 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceData.java
@@ -66,13 +66,13 @@
      * workspace list into a comma-separated list.
      */
     private static final int PERS_ENCODING_VERSION_CONFIG_PREFS = 2;
-    
+
     /**
 	 * This is the second version of the encode/decode protocol that uses the
 	 * confi area preferences store for persistence. This version is the same as
 	 * the previous version except it uses a \n character to seperate the path
 	 * entries instead of commas. (see bug 98467)
-	 * 
+	 *
 	 * @since 3.3.1
 	 */
 	private static final int PERS_ENCODING_VERSION_CONFIG_PREFS_NO_COMMAS = 3;
@@ -222,7 +222,7 @@
 
 		// move the new selection to the front of the list
 		if (selection != null) {
-			File newFolder = new File(selection);			
+			File newFolder = new File(selection);
 			String oldEntry = recentWorkspaces[0];
 			recentWorkspaces[0] = selection;
 			for (int i = 1; i < recentWorkspaces.length && oldEntry != null; ++i) {
@@ -258,7 +258,7 @@
 	 * Look for and read data that might have been persisted from some previous
 	 * run. Leave the receiver in a default state if no persistent data is
 	 * found.
-	 * 
+	 *
 	 * @return true if a file was successfully read and false otherwise
 	 */
     private boolean readPersistedData_file() {
@@ -376,10 +376,10 @@
     /**
 	 * Look in the config area preference store for the list of recently used
 	 * workspaces.
-	 * 
+	 *
 	 * NOTE: During the transition phase the file will be checked if no config
 	 * preferences are found.
-	 * 
+	 *
 	 * @return true if the values were successfully retrieved and false
 	 *         otherwise
 	 */
@@ -472,7 +472,7 @@
 		if (tokens == null) // unknown version? corrupt file? we can't log it
 							// because we dont have a workspace yet...
 			return new String[0];
-			
+
 
 		StringTokenizer tokenizer = new StringTokenizer(prefValue, tokens);
 		for (int i = 0; i < paths.length && tokenizer.hasMoreTokens(); ++i) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceDialog.java
index 0c1ffd2..3770c5e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceDialog.java
@@ -45,9 +45,9 @@
  * A dialog that prompts for a directory to use as a workspace.
  */
 public class ChooseWorkspaceDialog extends TitleAreaDialog {
-	
+
 	private static final String DIALOG_SETTINGS_SECTION = "ChooseWorkspaceDialogSettings"; //$NON-NLS-1$
-	
+
 	private ChooseWorkspaceData launchData;
 
     private Combo text;
@@ -60,10 +60,10 @@
      * argument data object.
      * @param parentShell the parent shell for this dialog
      * @param launchData the launch data from past launches
-     * 
+     *
      * @param suppressAskAgain
      *            true means the dialog will not have a "don't ask again" button
-     * @param centerOnMonitor indicates whether the dialog should be centered on 
+     * @param centerOnMonitor indicates whether the dialog should be centered on
      * the monitor or according to it's parent if there is one
      */
     public ChooseWorkspaceDialog(Shell parentShell,
@@ -81,7 +81,7 @@
      * The parameter can be used to override the users preference.  For example,
      * this is important in cases where the default selection is already in use
      * and the user is forced to choose a different one.
-     * 
+     *
      * @param force
      *            true if the dialog should be opened regardless of the value of
      *            the show dialog checkbox
@@ -141,8 +141,8 @@
         if (!suppressAskAgain) {
 			createShowDialogButton(composite);
 		}
-        
-        // look for the eclipse.gcj property.  
+
+        // look for the eclipse.gcj property.
         // If true, then we dont need any warning messages.
         // someone is asserting that we're okay on GCJ
         boolean gcj = Boolean.getBoolean("eclipse.gcj"); //$NON-NLS-1$
@@ -159,14 +159,14 @@
 				}
 			});
 		}
-        
+
         Dialog.applyDialogFont(composite);
         return composite;
     }
 
 	/**
 	 * Returns the title that the dialog (or splash) should have.
-	 * 
+	 *
 	 * @return the window title
 	 * @since 3.4
 	 */
@@ -187,10 +187,10 @@
      * in it.
      * <p>
      * The default implementation of this framework method
-     * sets the shell's image and gives it a grid layout. 
+     * sets the shell's image and gives it a grid layout.
      * Subclasses may extend or reimplement.
      * </p>
-     * 
+     *
      * @param shell the shell
      */
     @Override
@@ -255,7 +255,7 @@
         label.setText(IDEWorkbenchMessages.ChooseWorkspaceDialog_workspaceEntryLabel);
 
         text = new Combo(panel, SWT.BORDER | SWT.LEAD | SWT.DROP_DOWN);
-        text.setFocus();        
+        text.setFocus();
         text.setLayoutData(new GridData(400, SWT.DEFAULT));
         text.addModifyListener(new ModifyListener(){
         	@Override
@@ -303,7 +303,7 @@
      * works toward the root until there is a directory for which File.exists
      * returns true. Return the current working dir if the text box does not
      * contain a valid path.
-     * 
+     *
      * @return closest parent that exists or an empty string
      */
     private String getInitialBrowsePath() {
@@ -317,12 +317,12 @@
     }
 
 	/*
-	 * see org.eclipse.jface.Window.getInitialLocation() 
+	 * see org.eclipse.jface.Window.getInitialLocation()
 	 */
 	@Override
 	protected Point getInitialLocation(Point initialSize) {
 		Composite parent = getShell().getParent();
-		
+
 		if (!centerOnMonitor || parent == null) {
 			return super.getInitialLocation(initialSize);
 		}
@@ -374,7 +374,7 @@
         text.setText(TextProcessor.process((text.getItemCount() > 0 ? text
 				.getItem(0) : launchData.getInitialDefault())));
     }
-    
+
 	@Override
 	protected IDialogSettings getDialogBoundsSettings() {
 		// If we were explicitly instructed to center on the monitor, then
@@ -383,12 +383,12 @@
 		if (centerOnMonitor) {
 			return null;
 		}
-		
+
         IDialogSettings settings = IDEWorkbenchPlugin.getDefault().getDialogSettings();
         IDialogSettings section = settings.getSection(DIALOG_SETTINGS_SECTION);
         if (section == null) {
             section = settings.addNewSection(DIALOG_SETTINGS_SECTION);
-        } 
+        }
         return section;
 	}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java
index 354faa4..da6d89f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ChooseWorkspaceWithSettingsDialog.java
@@ -52,9 +52,9 @@
 /**
  * The ChooseWorkspaceWithSettingsDialog is the dialog used to switch workspaces
  * with an optional settings export.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class ChooseWorkspaceWithSettingsDialog extends ChooseWorkspaceDialog {
 
@@ -79,7 +79,7 @@
 
 	/**
 	 * Open a new instance of the receiver.
-	 * 
+	 *
 	 * @param parentShell
 	 * @param launchData
 	 * @param suppressAskAgain
@@ -104,7 +104,7 @@
 
 	/**
 	 * Create the controls for selecting the controls we are going to export.
-	 * 
+	 *
 	 * @param workArea
 	 */
 	private void createSettingsControls(Composite workArea) {
@@ -114,7 +114,7 @@
 			@Override
 			public void widgetDisposed(DisposeEvent e) {
 				toolkit.dispose();
-				
+
 			}});
 		final ScrolledForm form = toolkit.createScrolledForm(workArea);
 		form.setBackground(workArea.getBackground());
@@ -172,7 +172,7 @@
 
 	/**
 	 * Create the buttons for the settings transfer.
-	 * 
+	 *
 	 * @param toolkit
 	 * @param sectionClient
 	 * @return boolean <code>true</code> if any were selected
@@ -227,7 +227,7 @@
 
 	/**
 	 * Get the settings for the receiver based on the entries in section.
-	 * 
+	 *
 	 * @param section
 	 * @return String[] or <code>null</code>
 	 */
@@ -275,7 +275,7 @@
 
 	/**
 	 * Save the ids of the selected elements.
-	 * 
+	 *
 	 * @param selectionIDs
 	 */
 	private void saveSettings(String[] selectionIDs) {
@@ -292,7 +292,7 @@
 
 	/**
 	 * Take the values from element and execute the class for path.
-	 * 
+	 *
 	 * @param elem
 	 * @param path
 	 * @return IStatus the result of the settings transfer.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ContentTypeDecorator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ContentTypeDecorator.java
index 0f160fe..0e3ccc0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ContentTypeDecorator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ContentTypeDecorator.java
@@ -27,9 +27,9 @@
 
 /**
  * Lightweight decorator for more specific file icons.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class ContentTypeDecorator implements ILightweightLabelDecorator {
 
@@ -44,7 +44,7 @@
 		IWorkbench workbench = PlatformUI.getWorkbench();
 		if (workbench.isClosing())
 			return;
-		
+
 		IFile file = (IFile) element;
 		ImageDescriptor image = null;
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DefaultContributorResourceAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DefaultContributorResourceAdapter.java
index 9a5e7c7..9324931 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DefaultContributorResourceAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DefaultContributorResourceAdapter.java
@@ -18,7 +18,7 @@
 
 /**
  * The DefaultContributorResourceAdapter is the default
- * implementation of the IContributorResourceAdapter used for 
+ * implementation of the IContributorResourceAdapter used for
  * one to one resource adaption.
  */
 public class DefaultContributorResourceAdapter implements
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DialogUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DialogUtil.java
index 8a064db..c07ea59 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DialogUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/DialogUtil.java
@@ -76,9 +76,9 @@
 
     /**
      * Return whether or not the font in the parent is the size of a regular
-     * font.  Typically used to know if a font is smaller than the High Contrast 
+     * font.  Typically used to know if a font is smaller than the High Contrast
      * Font. This method is used to make layout decisions based on screen space.
-     * 
+     *
      * @param parent The Composite whose Font will be queried.
      * @return boolean. True if there are more than 50 lines of possible
      * text in the display.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAreaDropAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAreaDropAdapter.java
index d1e2c34..73ae607 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAreaDropAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAreaDropAdapter.java
@@ -94,7 +94,7 @@
         /* Open Editor for generic IEditorInput */
         if (EditorInputTransfer.getInstance().isSupportedType(
                 event.currentDataType)) {
-            /* event.data is an array of EditorInputData, which contains an IEditorInput and 
+            /* event.data is an array of EditorInputData, which contains an IEditorInput and
              * the corresponding editorId */
             Assert.isTrue(event.data instanceof EditorInputTransfer.EditorInputData[]);
             EditorInputTransfer.EditorInputData[] editorInputs = (EditorInputTransfer.EditorInputData []) event.data;
@@ -123,7 +123,7 @@
             for (int i = 0; i < files.length; i++) {
                 if (files[i] instanceof IFile) {
                     IFile file = (IFile) files[i];
-                    
+
                     if (!file.isPhantom())
                     	openNonExternalEditor(page, file);
                 }
@@ -153,7 +153,7 @@
      * an editor, we never open an external editor in this case (since external
      * editors appear in their own window and not in the editor area).
      * The operation fails silently if there is no suitable editor to open.
-     * 
+     *
      * @param page the workbench page
      * @param file the file to open
      * @return the editor part that was opened, or <code>null</code> if no editor
@@ -207,7 +207,7 @@
      * an editor, we never open an external editor in this case (since external
      * editors appear in their own window and not in the editor area).
      * The operation fails silently if there is no suitable editor to open.
-     * 
+     *
      * @param page the workbench page
      * @param marker the marker to open
      * @return the editor part that was opened, or <code>null</code> if no editor
@@ -264,7 +264,7 @@
      * editor in this case (since external editors appear in their own window and
      * not in the editor area). The operation fails silently if the editor
      * cannot be opened.
-     * 
+     *
      * @param page the workbench page
      * @param editorInput the editor input
      * @param editorId the editor id
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAssociationOverrideDescriptor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAssociationOverrideDescriptor.java
index a16440c..5d40097 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAssociationOverrideDescriptor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/EditorAssociationOverrideDescriptor.java
@@ -31,7 +31,7 @@
 
 /**
  * Describes a contribution to the 'org.eclipse.ui.ide.editorAssociationOverride' extension point.
- * 
+ *
  * @since 3.8
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
@@ -50,7 +50,7 @@
 
 	/**
 	 * Returns descriptors for all editor association override extensions.
-	 * 
+	 *
 	 * @return an array with the contributed editor association overrides
 	 */
 	public static EditorAssociationOverrideDescriptor[] getContributedEditorAssociationOverrides() {
@@ -72,7 +72,7 @@
 
 	/**
 	 * Creates a new {@link IEditorAssociationOverride}.
-	 * 
+	 *
 	 * @return the editor association override or <code>null</code> if the plug-in isn't loaded yet
 	 * @throws CoreException if a failure occurred during creation
 	 */
@@ -112,7 +112,7 @@
 
 	/**
 	 * Returns the editor association override's id.
-	 * 
+	 *
 	 * @return the editor association override's id
 	 */
 	public String getId() {
@@ -121,7 +121,7 @@
 
 	/**
 	 * Returns the editor association override's name.
-	 * 
+	 *
 	 * @return the editor association override's name
 	 */
 	public String getName() {
@@ -130,7 +130,7 @@
 
 	/**
 	 * Returns the editor association override's description.
-	 * 
+	 *
 	 * @return the editor association override's description or <code>null</code> if not provided
 	 */
 	public String getDescription() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/FeatureSelectionDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/FeatureSelectionDialog.java
index 36129f2..8fe4e94 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/FeatureSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/FeatureSelectionDialog.java
@@ -70,7 +70,7 @@
      * <p>
      * There must be at least one feature.
      * </p>
-     * 
+     *
      * @param shell  the parent shell
      * @param features  the features to display
      * @param primaryFeatureId  the id of the primary feature or null if none
@@ -121,7 +121,7 @@
             }
         }
 
-        // set a safe default		
+        // set a safe default
         setInitialSelections(new Object[0]);
     }
 
@@ -138,7 +138,7 @@
 
         // Create label
         createMessageArea(composite);
-        // Create list viewer	
+        // Create list viewer
         listViewer = new ListViewer(composite, SWT.SINGLE | SWT.H_SCROLL
                 | SWT.V_SCROLL | SWT.BORDER);
         GridData data = new GridData(GridData.FILL_BOTH);
@@ -146,7 +146,7 @@
         data.widthHint = convertWidthInCharsToPixels(LIST_WIDTH);
         listViewer.getList().setLayoutData(data);
         listViewer.getList().setFont(parent.getFont());
-        // Set the label provider		
+        // Set the label provider
         listViewer.setLabelProvider(new LabelProvider() {
             @Override
 			public String getText(Object element) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalPreferences.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalPreferences.java
index 9ee950f..78fc8b9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalPreferences.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalPreferences.java
@@ -20,10 +20,10 @@
  * The IDEInternalPreferences are the internal constants used by the Workbench.
  */
 public interface IDEInternalPreferences {
-    // (boolean) Save all dirty editors before running a full or incremental build 
+    // (boolean) Save all dirty editors before running a full or incremental build
     public static final String SAVE_ALL_BEFORE_BUILD = "SAVE_ALL_BEFORE_BUILD"; //$NON-NLS-1$
 
-    // (boolean) Refresh workspace on startup 
+    // (boolean) Refresh workspace on startup
     public static final String REFRESH_WORKSPACE_ON_STARTUP = "REFRESH_WORKSPACE_ON_STARTUP"; //$NON-NLS-1$
 
     // (int) Workspace save interval in minutes
@@ -43,12 +43,12 @@
 
     /**
      * (String) Whether to open required projects when opening a project.
-     */ 
+     */
     public static final String OPEN_REQUIRED_PROJECTS = "OPEN_REQUIRED_PROJECTS"; //$NON-NLS-1$
-    
+
     /**
      * (String) Whether to confirm closing unrelated projects.
-     */ 
+     */
     public static final String CLOSE_UNRELATED_PROJECTS = "CLOSE_UNRELATED_PROJECTS"; //$NON-NLS-1$
 
     public static final String PSPM_PROMPT = MessageDialogWithToggle.PROMPT;
@@ -59,50 +59,50 @@
 
     // (boolean) Whether or not to display the Welcome dialog on startup.
     public static final String WELCOME_DIALOG = "WELCOME_DIALOG"; //$NON-NLS-1$
-    
+
     //Whether or not to limit problems
     public static final String LIMIT_PROBLEMS = "LIMIT_PROBLEMS"; //$NON-NLS-1$
-    
+
     //The list of defined problems filters
     public static final String PROBLEMS_FILTERS = "PROBLEMS_FILTERS"; //$NON-NLS-1$
-    
+
     //problem limits
     public static final String PROBLEMS_LIMIT = "PROBLEMS_LIMIT"; //$NON-NLS-1$
-    
+
     //Whether or not to limit tasks
     public static final String LIMIT_TASKS = "LIMIT_TASKS"; //$NON-NLS-1$
-    
+
     //tasks limits
     public static final String TASKS_LIMIT = "TASKS_LIMIT"; //$NON-NLS-1$
-    
+
     //The list of defined tasks filters
     public static final String TASKS_FILTERS = "TASKS_FILTERS"; //$NON-NLS-1$
-    
+
     //Whether or not to limit bookmarks
     public static final String LIMIT_BOOKMARKS = "LIMIT_BOOKMARKS"; //$NON-NLS-1$
-    
+
     //bookmark limits
     public static final String BOOKMARKS_LIMIT = "BOOKMARKS_LIMIT"; //$NON-NLS-1$
-    
+
 //  The list of defined tasks filters
     public static final String BOOKMARKS_FILTERS = "BOOKMARKS_FILTERS"; //$NON-NLS-1$
-    
+
     //Enablement of marker limits
     public static final String USE_MARKER_LIMITS = "USE_MARKER_LIMITS"; //$NON-NLS-1$
-    	
+
    	//Value of marker limits
     public static final String MARKER_LIMITS_VALUE = "MARKER_LIMITS_VALUE"; //$NON-NLS-1$
 
     // Type of import
     public static final String IMPORT_FILES_AND_FOLDERS_TYPE = "IMPORT_FILES_AND_FOLDERS_TYPE"; //$NON-NLS-1$
-    
+
     // (boolean) Using variable relative paths for the import file and folder dialog
     public static final String IMPORT_FILES_AND_FOLDERS_RELATIVE = "IMPORT_FILES_AND_FOLDERS_RELATIVE"; //$NON-NLS-1$
 
-    // (string) Save all dirty editors before running a full or incremental build 
+    // (string) Save all dirty editors before running a full or incremental build
     public static final String IMPORT_FILES_AND_FOLDERS_MODE = "IMPORT_FILES_AND_FOLDERS_MODE"; //$NON-NLS-1$
 
-    // (string) Save all dirty editors before running a full or incremental build 
+    // (string) Save all dirty editors before running a full or incremental build
     public static final String IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE = "IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE"; //$NON-NLS-1$
 
     public static final String IMPORT_FILES_AND_FOLDERS_MODE_PROMPT = MessageDialogWithToggle.PROMPT;
@@ -110,7 +110,7 @@
     public static final String IMPORT_FILES_AND_FOLDERS_MODE_MOVE_COPY = "MOVE_COPY"; //$NON-NLS-1$
 
     public static final String IMPORT_FILES_AND_FOLDERS_MODE_LINK = "LINK"; //$NON-NLS-1$
-    
+
     public static final String IMPORT_FILES_AND_FOLDERS_MODE_LINK_AND_VIRTUAL_FOLDER = "LINK_AND_VIRTUAL_FOLDER"; //$NON-NLS-1$
 
     // Always show this import window
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java
index 7819475..33cf1b1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEInternalWorkbenchImages.java
@@ -14,8 +14,8 @@
 import org.eclipse.ui.PlatformUI;
 
 /**
- * This class defines internal constants for images that intended to be 
- * available only within the IDE UI proper. Use 
+ * This class defines internal constants for images that intended to be
+ * available only within the IDE UI proper. Use
  * <code>IDEInternalWorkbenchImages.getImageDescriptor} to retrieve image
  * descriptors for any of the images named in this class.
  * <p>
@@ -58,7 +58,7 @@
 	public final static String IMG_ETOOL_PROBLEMS_VIEW_WARNING= "IMG_ETOOL_PROBLEMS_VIEW_WARNING"; //$NON-NLS-1$
 
     public final static String IMG_LCL_FLAT_LAYOUT = "IMG_LCL_FLAT_LAYOUT"; //$NON-NLS-1$
-    
+
     public final static String IMG_LCL_HIERARCHICAL_LAYOUT = "IMG_LCL_HIERARCHICAL_LAYOUT"; //$NON-NLS-1$
 
     //wizard images
@@ -77,16 +77,16 @@
     public final static String IMG_WIZBAN_EXPORTZIP_WIZ = "IMG_WIZBAN_EXPORTZIP_WIZ"; //$NON-NLS-1$
 
     public final static String IMG_WIZBAN_RESOURCEWORKINGSET_WIZ = "IMG_WIZBAN_EXPORTZIP_WIZ"; //$NON-NLS-1$
-    
+
     public final static String IMG_DLGBAN_SAVEAS_DLG = "IMG_DLGBAN_SAVEAS_DLG"; //$NON-NLS-1$
-    
+
     public final static String IMG_DLGBAN_QUICKFIX_DLG = "IMG_DLGBAN_QUICKFIX_DLG"; //$NON-NLS-1$
 
     // task objects
     public final static String IMG_OBJS_COMPLETE_TSK = "IMG_OBJS_COMPLETE_TSK"; //$NON-NLS-1$
 
     public final static String IMG_OBJS_INCOMPLETE_TSK = "IMG_OBJS_INCOMPLETE_TSK"; //$NON-NLS-1$
-    
+
     //problems images
     public static final String IMG_OBJS_ERROR_PATH = "IMG_OBJS_ERROR_PATH"; //$NON-NLS-1$
 
@@ -99,7 +99,7 @@
 
     // welcome
     public final static String IMG_OBJS_WELCOME_ITEM = "IMG_OBJS_WELCOME_ITEM"; //$NON-NLS-1$
-    
+
     public final static String IMG_OBJS_WELCOME_BANNER = "IMG_OBJS_WELCOME_BANNER"; //$NON-NLS-1$
 
     //Quick fix images
@@ -107,7 +107,7 @@
 	public static final String IMG_ELCL_QUICK_FIX_ENABLED = "IMG_ELCL_QUICK_FIX_ENABLED"; //$NON-NLS-1$
 	public static final String IMG_OBJS_FIXABLE_WARNING= "IMG_OBJS_FIXABLE_WARNING"; //$NON-NLS-1$
 	public static final String IMG_OBJS_FIXABLE_ERROR= "IMG_OBJS_FIXABLE_ERROR"; //$NON-NLS-1$
-	
+
 
     /**
      * Returns the image descriptor for the workbench image with the given
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEPreferenceInitializer.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEPreferenceInitializer.java
index a24ed88..fd9d5d9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEPreferenceInitializer.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEPreferenceInitializer.java
@@ -71,10 +71,10 @@
 
 		node.putBoolean(IDEInternalPreferences.LIMIT_TASKS, true);
 		node.putInt(IDEInternalPreferences.TASKS_LIMIT, 100);
-		
+
 		node.putBoolean(IDEInternalPreferences.USE_MARKER_LIMITS, true);
 		node.putInt(IDEInternalPreferences.MARKER_LIMITS_VALUE, 100);
-		
+
 		node.put(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_TYPE, ""); //$NON-NLS-1$
 		node.putBoolean(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_RELATIVE, true);
 
@@ -82,7 +82,7 @@
 		node.putBoolean(MarkerSupportInternalUtilities.MIGRATE_BOOKMARK_FILTERS, false);
 		node.putBoolean(MarkerSupportInternalUtilities.MIGRATE_TASK_FILTERS, false);
 		node.putBoolean(MarkerSupportInternalUtilities.MIGRATE_PROBLEM_FILTERS, false);
-		
+
 		node.put(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE, IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT);
 		node.put(IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE, IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT);
 
@@ -91,13 +91,13 @@
 
 	/**
 	 * The default command for launching the system explorer on this platform.
-	 * 
+	 *
 	 * @return The default command which launches the system explorer on this system, or an empty
 	 *         string if no default exists
 	 * @see ShowInSystemExplorerHandler#getDefaultCommand()
 	 */
 	public static String getShowInSystemExplorerCommand() {
-		// See https://bugs.eclipse.org/419940 why it is implemented in here and not in ShowInSystemExplorerHandler#getDefaultCommand() 
+		// See https://bugs.eclipse.org/419940 why it is implemented in here and not in ShowInSystemExplorerHandler#getDefaultCommand()
 		if (Util.isGtk()) {
 			return "dbus-send --print-reply --dest=org.freedesktop.FileManager1 /org/freedesktop/FileManager1 org.freedesktop.FileManager1.ShowItems array:string:\"${selected_resource_uri}\" string:\"\""; //$NON-NLS-1$
 		} else if (Util.isWindows()) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDESelectionConversionService.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDESelectionConversionService.java
index 844f0ed..3cb368e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDESelectionConversionService.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDESelectionConversionService.java
@@ -30,7 +30,7 @@
 /**
  * The IDESelectionConversionService is the selection service that uses the
  * resource support available to the IDE.
- * 
+ *
  * @since 3.2
  */
 public class IDESelectionConversionService implements
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchActivityHelper.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchActivityHelper.java
index 3ed1d5a..3b8aca8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchActivityHelper.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchActivityHelper.java
@@ -41,15 +41,15 @@
 
 /**
  * Utility class that manages promotion of activites in response to workspace changes.
- * 
+ *
  * @since 3.0
  */
 public class IDEWorkbenchActivityHelper {
 
     private static final String NATURE_POINT = "org.eclipse.ui.ide.natures"; //$NON-NLS-1$
-    
+
     /**
-     * Resource listener that reacts to new projects (and associated natures) 
+     * Resource listener that reacts to new projects (and associated natures)
      * coming into the workspace.
      */
     private IResourceChangeListener listener;
@@ -64,12 +64,12 @@
      * Lock for the list of nature ids to be processed.
      */
 	private final IDEWorkbenchActivityHelper lock;
-	
+
 	/**
 	 * The update job.
 	 */
 	private WorkbenchJob fUpdateJob;
-	
+
 	/**
 	 * The collection of natures to process.
 	 */
@@ -93,7 +93,7 @@
     }
 
     /**
-     * Create a new <code>IDEWorkbenchActivityHelper</code> which will listen 
+     * Create a new <code>IDEWorkbenchActivityHelper</code> which will listen
      * for workspace changes and promote activities accordingly.
      */
     private IDEWorkbenchActivityHelper() {
@@ -148,7 +148,7 @@
 
     /**
      * Get a change listener for listening to resource changes.
-     * 
+     *
      * @return the resource change listeners
      */
     private IResourceChangeListener getChangeListener() {
@@ -249,7 +249,7 @@
 		}
 		if (needsUpdate) {
 			if (fUpdateJob == null) {
-				fUpdateJob = new WorkbenchJob(IDEWorkbenchMessages.IDEWorkbenchActivityHelper_jobName) { 
+				fUpdateJob = new WorkbenchJob(IDEWorkbenchMessages.IDEWorkbenchActivityHelper_jobName) {
 					@Override
 					public IStatus runInUIThread(
 							IProgressMonitor monitor) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchErrorHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchErrorHandler.java
index ce51bc5..0903b9d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchErrorHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchErrorHandler.java
@@ -40,7 +40,7 @@
  * returned from IDEWorkbenchAdvisor#getWorkbenchErrorHandler(). All handled
  * statuses are checked against severity and logged using logging facility (by
  * superclass).
- * 
+ *
  * @since 3.3
  */
 public class IDEWorkbenchErrorHandler extends WorkbenchErrorHandler {
@@ -68,10 +68,10 @@
 	private static String MSG_FATAL_ERROR_Recursive = IDEWorkbenchMessages.FatalError_RecursiveError;
 
 	private static String MSG_FATAL_ERROR_Title = IDEWorkbenchMessages.InternalError;
-	
+
 	// cache handled statuses
-	private final Map map = Collections.synchronizedMap(new WeakHashMap()); 
- 	
+	private final Map map = Collections.synchronizedMap(new WeakHashMap());
+
 	/**
 	 * @param configurer
 	 */
@@ -283,7 +283,7 @@
 
 		/**
 		 * Updates the dialog message
-		 * 
+		 *
 		 * @param message
 		 *            new message
 		 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
index 9e3ec8f..9c6281f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchMessages.java
@@ -39,7 +39,7 @@
 
 	public static String QuickStartAction_errorDialogTitle;
 	public static String QuickStartAction_infoReadError;
-	
+
 	public static String ConfigurationLogUpdateSection_installConfiguration;
 	public static String ConfigurationLogUpdateSection_lastChangedOn;
 	public static String ConfigurationLogUpdateSection_location;
@@ -105,7 +105,7 @@
 	public static String ResourceFilterPage_multiWithin;
 	public static String ResourceFilterPage_true;
 	public static String ResourceFilterPage_false;
-	
+
 	//
 	//
 	// Copies from org.eclipse.ui.workbench
@@ -116,7 +116,7 @@
 	public static String useDefaultLocation;
 	public static String createLinkedFolder;
 	public static String createVirtualFolder;
-	
+
 	// ==============================================================================
 	// Workbench Actions
 	// ==============================================================================
@@ -185,7 +185,7 @@
 	public static String BuildSetAction_noBuildTitle;
 	public static String BuildSetAction_noProjects;
 
-	
+
 	// --- Window Menu ---
 	public static String Workbench_window;
 	public static String Workbench_openPerspective;
@@ -305,14 +305,14 @@
 	public static String OpenLocalFileAction_message_errorOnOpen;
 	public static String OpenLocalFileAction_title_selectWorkspaceFile;
 	public static String OpenLocalFileAction_message_fileLinkedToMultiple;
-	
+
 	public static String OpenResourceAction_text;
 	public static String OpenResourceAction_toolTip;
 	public static String OpenResourceAction_dialogTitle;
 	public static String OpenResourceAction_problemMessage;
 	public static String OpenResourceAction_operationMessage;
 	public static String OpenResourceAction_openRequiredProjects;
-	
+
 	public static String CloseResourceAction_text;
 	public static String CloseResourceAction_warningForOne;
 	public static String CloseResourceAction_warningForMultiple;
@@ -499,7 +499,7 @@
 	public static String WorkbenchPreference_otherEncoding;
 	public static String WorkbenchPreference_unsupportedEncoding;
 	public static String WorkbenchPreference_encoding_encodingMessage;
-	
+
 	// ---workspace ---
 	public static String IDEWorkspacePreference_autobuild;
 	public static String IDEWorkspacePreference_autobuildToolTip;
@@ -684,14 +684,14 @@
 	public static String linkedResourceEditor_OK;
 	public static String LinkedResourceEditor_unableToCreateVariable;
 	public static String LinkedResourceEditor_unableToFindCommonPathSegments;
-	public static String LinkedResourceEditor_convertAbsolutePathLocations;	
+	public static String LinkedResourceEditor_convertAbsolutePathLocations;
 	public static String LinkedResourceEditor_descriptionBlock;
 	public static String LinkedResourceEditor_convertTitle;
 	public static String LinkedResourceEditor_convertMessage;
 	public static String LinkedResourceEditor_removeTitle;
 	public static String LinkedResourceEditor_removeMessage;
 	public static String LinkedResourceEditor_removingMessage;
-	
+
 	// ==============================================================================
 	// Editors
 	// ==============================================================================
@@ -754,9 +754,9 @@
 	public static String MarkerResolutionSelectionDialog_messageLabel;
 	public static String MarkerDeleteHandler_JobTitle;
 	public static String MarkerDeleteHandler_JobMessageLabel;
-	
+
 	public static String FilteredResourcesSelectionDialog_showDerivedResourcesAction;
-	
+
 	public static String ResourceSelectionDialog_label;
 	public static String ResourceSelectionDialog_matching;
 	public static String ResourceSelectionDialog_folders;
@@ -786,7 +786,7 @@
 	public static String CreateLinkedResourceGroup_variablesButton;
 	public static String CreateLinkedResourceGroup_resolvedPathLabel;
 	public static String CreateLinkedResourceGroup_targetSelectionLabel;
-	public static String CreateLinkedResourceGroup_targetSelectionTitle;	
+	public static String CreateLinkedResourceGroup_targetSelectionTitle;
 	public static String CreateLinkedResourceGroup_linkTargetNotFile;
 	public static String CreateLinkedResourceGroup_linkTargetNotFolder;
 	public static String CreateLinkedResourceGroup_linkTargetNonExistent;
@@ -922,7 +922,7 @@
 	public static String ResourceWorkingSetPage_selectAll_toolTip;
 	public static String ResourceWorkingSetPage_deselectAll_label;
 	public static String ResourceWorkingSetPage_deselectAll_toolTip;
-	
+
 	public static String ResourceEncodingFieldEditor_ErrorLoadingMessage;
 	public static String ResourceEncodingFieldEditor_ErrorStoringMessage;
 	public static String ResourceEncodingFieldEditor_EncodingConflictTitle;
@@ -938,13 +938,13 @@
 	public static String ChooseWorkspaceDialog_directoryBrowserTitle;
 	public static String ChooseWorkspaceDialog_directoryBrowserMessage;
 	public static String ChooseWorkspaceDialog_useDefaultMessage;
-	
+
 	public static String ChooseWorkspaceWithSettingsDialog_SettingsGroupName;
 	public static String ChooseWorkspaceWithSettingsDialog_ProblemsTransferTitle;
 	public static String ChooseWorkspaceWithSettingsDialog_TransferFailedMessage;
 	public static String ChooseWorkspaceWithSettingsDialog_SaveSettingsFailed;
 	public static String ChooseWorkspaceWithSettingsDialog_ClassCreationFailed;
-	
+
 	public static String IDEApplication_workspaceMandatoryTitle;
 	public static String IDEApplication_workspaceMandatoryMessage;
 	public static String IDEApplication_workspaceInUseTitle;
@@ -993,18 +993,18 @@
 	public static String IDE_sideEffectWarning;
 
 	public static String IDE_areYouSure;
-	
+
 	public static String IDEIdleHelper_backgroundGC;
-	
+
 	public static String SystemSettingsChange_title;
 	public static String SystemSettingsChange_message;
 	public static String SystemSettingsChange_yes;
 	public static String SystemSettingsChange_no;
-	
+
 	public static String UnsupportedVM_message;
-	
+
 	public static String IDEWorkbenchActivityHelper_jobName;
-	
+
 	public static String OpenDelayedFileAction_title;
 	public static String OpenDelayedFileAction_message_errorOnOpen;
 	public static String OpenDelayedFileAction_message_fileNotFound;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
index 5f6a79c..c63b017 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IDEWorkbenchPlugin.java
@@ -50,9 +50,9 @@
  * This class is responsible for tracking various registries
  * font, preference, graphics, dialog store.
  *
- * This class is explicitly referenced by the 
+ * This class is explicitly referenced by the
  * IDE workbench plug-in's  "plugin.xml"
- * 
+ *
  * @since 3.0
  */
 public class IDEWorkbenchPlugin extends AbstractUIPlugin {
@@ -84,7 +84,7 @@
     public static final String PL_CAPABILITIES = "capabilities"; //$NON-NLS-1$
 
     public static final String PL_PROJECT_NATURE_IMAGES = "projectNatureImages"; //$NON-NLS-1$
-	
+
 	private final static String ICONS_PATH = "$nl$/icons/full/";//$NON-NLS-1$
 
 	private static final int PROBLEMS_VIEW_CREATION_DELAY= 6000;
@@ -167,14 +167,14 @@
 
     /**
      * Logs the given message to the platform log.
-     * 
+     *
      * If you have an exception in hand, call log(String, Throwable) instead.
-     * 
+     *
      * If you have a status object in hand call log(String, IStatus) instead.
-     * 
+     *
      * This convenience method is for internal use by the IDE Workbench only and
      * must not be called outside the IDE Workbench.
-     * 
+     *
      * @param message
      *            A high level UI message describing when the problem happened.
      */
@@ -185,12 +185,12 @@
 
     /**
      * Logs the given message and throwable to the platform log.
-     * 
+     *
      * If you have a status object in hand call log(String, IStatus) instead.
-     * 
+     *
      * This convenience method is for internal use by the IDE Workbench only and
      * must not be called outside the IDE Workbench.
-     * 
+     *
      * @param message
      *            A high level UI message describing when the problem happened.
      * @param t
@@ -200,15 +200,15 @@
         IStatus status = StatusUtil.newStatus(IStatus.ERROR, message, t);
         log(message, status);
     }
-    
+
     /**
      * Logs the given throwable to the platform log, indicating the class and
      * method from where it is being logged (this is not necessarily where it
      * occurred).
-     * 
+     *
      * This convenience method is for internal use by the IDE Workbench only and
      * must not be called outside the IDE Workbench.
-     * 
+     *
      * @param clazz
      *            The calling class.
      * @param methodName
@@ -221,13 +221,13 @@
                 new Object[] { clazz.getName(), methodName, t });
         log(msg, t);
     }
-    
+
     /**
      * Logs the given message and status to the platform log.
-     * 
+     *
      * This convenience method is for internal use by the IDE Workbench only and
      * must not be called outside the IDE Workbench.
-     * 
+     *
      * @param message
      *            A high level UI message describing when the problem happened.
      *            May be <code>null</code>.
@@ -282,7 +282,7 @@
     /**
      * Returns the about information of all known features,
      * omitting any features which are missing this information.
-     * 
+     *
      * @return a possibly empty list of about infos
      */
     public AboutInfo[] getFeatureInfos() {
@@ -305,15 +305,15 @@
 
     /**
      * Returns the about information of the primary feature.
-     * 
-     * @return info about the primary feature, or <code>null</code> if there 
+     *
+     * @return info about the primary feature, or <code>null</code> if there
      * is no primary feature or if this information is unavailable
      */
     public AboutInfo getPrimaryInfo() {
         IProduct product = Platform.getProduct();
         return product == null ? null : new AboutInfo(product);
     }
-	
+
 	/**
 	 * Get the workbench image with the given path relative to
 	 * ICON_PATH.
@@ -333,7 +333,7 @@
 		}
 		return resourceManager;
 	}
-	
+
 	@Override
 	public void stop(BundleContext context) throws Exception {
 		super.stop(context);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IIDEHelpContextIds.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IIDEHelpContextIds.java
index c8ff9b5..e69a8f1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IIDEHelpContextIds.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IIDEHelpContextIds.java
@@ -26,7 +26,7 @@
             + "add_bookmark_action_context"; //$NON-NLS-1$
 
     public static final String ADD_TASK_ACTION = PREFIX
-            + "add_task_action_context"; //$NON-NLS-1$	
+            + "add_task_action_context"; //$NON-NLS-1$
 
     public static final String INCREMENTAL_BUILD_ACTION = PREFIX
             + "incremental_build_action_context"; //$NON-NLS-1$
@@ -45,7 +45,7 @@
 
     public static final String OPEN_FILE_ACTION = PREFIX
             + "open_file_action_context"; //$NON-NLS-1$
-    
+
     public static final String OPEN_LOCAL_FILE_ACTION = PREFIX
     + "open_local_file_action_context"; //$NON-NLS-1$
 
@@ -187,7 +187,7 @@
 
     public static final String NEW_FILE_WIZARD_PAGE = PREFIX
     		+ "new_file_wizard_page_context"; //$NON-NLS-1$
-    
+
     // Wizard pages
     public static final String NEW_PROJECT_WIZARD_PAGE = PREFIX
             + "new_project_wizard_page_context"; //$NON-NLS-1$
@@ -197,10 +197,10 @@
 
     public static final String NEW_FOLDER_WIZARD_PAGE = PREFIX
             + "new_folder_wizard_page_context"; //$NON-NLS-1$
-    
+
     public static final String LINKED_RESOURCE_PAGE = PREFIX
     		+ "linked_resource_page_context"; //$NON-NLS-1$
-   
+
     public static final String NEW_GROUP_WIZARD_PAGE = PREFIX
     		+ "new_group_wizard_page_context"; //$NON-NLS-1$
 
@@ -208,13 +208,13 @@
             + "new_link_wizard_page_context"; //$NON-NLS-1$
 
    public static final String WORKING_SET_RESOURCE_PAGE = PREFIX
-   			+ "working_set_resource_page"; //$NON-NLS-1$	
+   			+ "working_set_resource_page"; //$NON-NLS-1$
 
    public static final String WORKSPACE_PREFERENCE_PAGE = PREFIX
    			+ "workspace_preference_page_context"; //$NON-NLS-1$
 
     // Wizards
-   
+
    public static final String NEW_FILE_WIZARD = PREFIX
    + "new_file_wizard_context"; //$NON-NLS-1$
 
@@ -223,7 +223,7 @@
 
    public static final String NEW_PROJECT_WIZARD = PREFIX
    	+ "new_project_wizard_context"; //$NON-NLS-1$
-   
+
    public static final String SWITCH_WORKSPACE_ACTION = PREFIX
 	+ "switch_workspace_dialog_context"; //$NON-NLS-1$
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IURIEditorInputAdapterFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IURIEditorInputAdapterFactory.java
index dffabdf..a11bba2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IURIEditorInputAdapterFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/IURIEditorInputAdapterFactory.java
@@ -25,7 +25,7 @@
 
 /**
  * Adapter factory for <code>IURIEditorInput</code>.
- * 
+ *
  * @since 3.3
  */
 public class IURIEditorInputAdapterFactory implements IAdapterFactory {
@@ -34,7 +34,7 @@
 
 		/**
 		 * Creates a new adapter for the given file store.
-		 * 
+		 *
 		 * @param fileStore the file store;
 		 */
 		public PathEditorInputAdapter(IFileStore fileStore) {
@@ -47,12 +47,12 @@
 		}
 	}
 
-	
+
 	/** The list of provided adapters. */
 	private static final Class[] ADAPTER_LIST= new Class[] { IPathEditorInput.class };
 
-	
-	
+
+
 	@Override
 	public Object getAdapter(Object adaptableObject, Class adapterType) {
 		if (IPathEditorInput.class.equals(adapterType)) {
@@ -71,7 +71,7 @@
 		return null;
 	}
 
-	
+
 	@Override
 	public Class[] getAdapterList() {
 		return ADAPTER_LIST;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java
index bfd295d..eef0c8f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LineDelimiterEditor.java
@@ -36,7 +36,7 @@
 
 /**
  * A class to handle editing of the line delimiter preferences in core.
- * 
+ *
  * @since 3.1
  */
 public class LineDelimiterEditor {
@@ -58,7 +58,7 @@
 
 	/**
 	 * Creates a new line delimiter editor for workspace.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the field editor's control
 	 */
@@ -68,7 +68,7 @@
 
 	/**
 	 * Creates a new line delimiter editor for the given project.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the field editor's control
 	 * @param project
@@ -82,7 +82,7 @@
 	/**
 	 * Creates this field editor's main control containing all of its basic
 	 * controls.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent control
 	 */
@@ -180,7 +180,7 @@
 
 	/**
 	 * Returns the value that is currently stored for the line delimiter.
-	 * 
+	 *
 	 * @param node
 	 *            preferences node from which the value should be read
 	 * @return the currently stored line delimiter
@@ -200,7 +200,7 @@
 	 * Answer the <code>Preferences</code> for the receiver, this will be a
 	 * project preferences if the receiver is editing project preferences,
 	 * otherwise instance preferences.
-	 * 
+	 *
 	 * @param project
 	 *            the project for which the line editor will be modified
 	 * @return the preferences
@@ -215,7 +215,7 @@
 
 	/**
 	 * Returns the default setting for the object being shown.
-	 * 
+	 *
 	 * @return the default setting for the object being shown
 	 */
 	private String[] getChoices() {
@@ -284,7 +284,7 @@
 
 	/**
 	 * Set whether or not the controls in the field editor are enabled.
-	 * 
+	 *
 	 * @param enabled
 	 *            The enabled state.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java
index c9015e6..5bdf313 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/LinkedResourceDecorator.java
@@ -23,9 +23,9 @@
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
- * A LinkedResourceDecorator decorates an element's image with a linked 
- * resource overlay. 
- * 
+ * A LinkedResourceDecorator decorates an element's image with a linked
+ * resource overlay.
+ *
  * @since 2.1
  */
 public class LinkedResourceDecorator implements ILightweightLabelDecorator {
@@ -81,7 +81,7 @@
     /**
      * Adds the linked resource overlay if the given element is a linked
      * resource.
-     * 
+     *
      * @param element element to decorate
      * @param decoration  The decoration we are adding to
      * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(Object, IDecoration)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/Policy.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/Policy.java
index 0ee1506..25519e1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/Policy.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/Policy.java
@@ -19,7 +19,7 @@
  *
  */
 public class Policy {
-	
+
 	/**
 	 * The default value
 	 */
@@ -29,12 +29,12 @@
      * Option for opening an error dialog on internal error.
      */
     public static boolean DEBUG_OPEN_ERROR_DIALOG = DEFAULT;
-    
+
     /**
      * Option for reporting on garbage collection jobs.
      */
     public static boolean DEBUG_GC = DEFAULT;
-    
+
     /**
      * Option for monitoring undo.
      */
@@ -59,7 +59,7 @@
 
 	/**
 	 * Handle the core exception.
-	 * 
+	 *
 	 * @param exception
 	 */
 	public static void handle(CoreException exception) {
@@ -67,6 +67,6 @@
 		if (DEBUG_CORE_EXCEPTIONS)
 			StatusManager.getManager().handle(exception,
 					IDEWorkbenchPlugin.IDE_WORKBENCH);
-	
+
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceDragAndDropEditor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceDragAndDropEditor.java
index 7a4df72..0ce3cfc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceDragAndDropEditor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceDragAndDropEditor.java
@@ -21,7 +21,7 @@
 
 /**
  * A class to handle editing of the Line delimiter preferences in core.
- * 
+ *
  * @since 3.1
  */
 public class ResourceDragAndDropEditor {
@@ -34,14 +34,14 @@
 		String[] labels;
 		String[] values;
 		Button[] buttons;
-		
+
 		public PreferenceGroup(String title, String pref, String[] labels, String[] values) {
 			this.preferenceKey = pref;
 			this.title = title;
 			this.labels = labels;
 			this.values = values;
 		}
-		
+
 		public void createControl(Composite parent) {
 			Font font = parent.getFont();
 			group = new Group(parent, SWT.NONE);
@@ -63,7 +63,7 @@
 		}
 
 		/**
-		 * 
+		 *
 		 */
 		public void doLoad() {
 			String resourcePreference = getStoredValue(false);
@@ -80,7 +80,7 @@
 		}
 
 		/**
-		 * 
+		 *
 		 */
 		public void loadDefault() {
 			String value = getStoredValue(true);
@@ -88,8 +88,8 @@
 		}
 		/**
 		 * Returns the value that is currently stored for the encoding.
-		 * @param useDefault 
-		 * 
+		 * @param useDefault
+		 *
 		 * @return the currently stored encoding
 		 */
 		public String getStoredValue(boolean useDefault) {
@@ -111,7 +111,7 @@
 		}
 
 		/**
-		 * 
+		 *
 		 */
 		public void store() {
 			IPreferenceStore store = IDEWorkbenchPlugin.getDefault().getPreferenceStore();
@@ -127,16 +127,16 @@
 				if (buttons[i] != null && !buttons[i].isDisposed())
 					buttons[i].setEnabled(enableLinking);
 			}
-			
+
 		}
 	}
-	
+
 	PreferenceGroup folderPref;
 	PreferenceGroup virtualFolderPref;
 	/**
 	 * Creates a new drag and drop resource editor with the given preference name, label
 	 * and parent.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the field editor's control
 	 */
@@ -146,7 +146,7 @@
 				new String[] {
 				IDEWorkbenchMessages.Prompt,
 				IDEWorkbenchMessages.linkedResourcesPreference_copy,
-				IDEWorkbenchMessages.LinkedResourcesPreference_link, 
+				IDEWorkbenchMessages.LinkedResourcesPreference_link,
 				IDEWorkbenchMessages.LinkedResourcesPreference_linkAndVirtualFolder },
 				new String[] {IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT,
 				IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_MOVE_COPY,
@@ -156,7 +156,7 @@
 				IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_VIRTUAL_FOLDER_MODE,
 				new String[] {
 				IDEWorkbenchMessages.LinkedResourcesPreference_promptVirtual,
-				IDEWorkbenchMessages.LinkedResourcesPreference_linkVirtual, 
+				IDEWorkbenchMessages.LinkedResourcesPreference_linkVirtual,
 				IDEWorkbenchMessages.LinkedResourcesPreference_linkAndVirtualFolderVirtual },
 				new String[] {IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_PROMPT,
 				IDEInternalPreferences.IMPORT_FILES_AND_FOLDERS_MODE_LINK,
@@ -167,7 +167,7 @@
 	/**
 	 * Creates this field editor's main control containing all of its basic
 	 * controls.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent control
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java
index cf6a8b6..1eef777 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/ResourceWorkingSetUpdater.java
@@ -27,7 +27,7 @@
 
 /**
  * A working set updater that updates resource working sets on resource deltas
- * 
+ *
  * @since 3.2
  */
 public class ResourceWorkingSetUpdater implements IWorkingSetUpdater,
@@ -45,7 +45,7 @@
 
 		/**
 		 * Create a new instance of this class.
-		 * 
+		 *
 		 * @param workingSet
 		 *            the working set to track.
 		 */
@@ -56,7 +56,7 @@
 
 		/**
 		 * Returns the index of this element in the list of known elements.
-		 * 
+		 *
 		 * @param element
 		 *            the element to search for
 		 * @return the index, or -1 if unknown.
@@ -67,7 +67,7 @@
 
 		/**
 		 * Add a new element to the list of known elements.
-		 * 
+		 *
 		 * @param index
 		 *            the index at which to place the element
 		 * @param element
@@ -80,7 +80,7 @@
 
 		/**
 		 * Remove an element from the list of known elements.
-		 * 
+		 *
 		 * @param index
 		 *            the index of the element to remove
 		 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StatusUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StatusUtil.java
index 29ac104..45edf0f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StatusUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StatusUtil.java
@@ -20,10 +20,10 @@
 
 /**
  * Utility class to create status objects.
- * 
+ *
  * PRIVATE This class is an internal implementation class and should not be
  * referenced or sub-classed outside of the workbench
- * 
+ *
  * @since 3.0
  */
 public class StatusUtil {
@@ -56,7 +56,7 @@
 
 	/**
 	 * This method must not be called outside the workbench.
-	 * 
+	 *
 	 * Utility method for creating status.
 	 */
 	protected static IStatus newStatus(IStatus[] stati, String message,
@@ -69,10 +69,10 @@
 				stati, message, exception);
 	}
 
-	
+
 	/**
 	 * This method must not be called outside the workbench.
-	 * 
+	 *
 	 * Utility method for creating status.
 	 * @param severity
 	 * @param message
@@ -97,10 +97,10 @@
 				statusMessage, exception);
 	}
 
-	
+
 	/**
 	 * This method must not be called outside the workbench.
-	 * 
+	 *
 	 * Utility method for creating status.
 	 * @param children
 	 * @param message
@@ -125,5 +125,5 @@
 		return newStatus(stati, message, exception);
 	}
 
-	
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StringMatcher.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StringMatcher.java
index 2a4baa9..6a7bbf8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StringMatcher.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/StringMatcher.java
@@ -55,14 +55,14 @@
     }
 
     /**
-     * StringMatcher constructor takes in a String object that is a simple 
+     * StringMatcher constructor takes in a String object that is a simple
      * pattern which may contain &#39*&#39 for 0 and many characters and
-     * &#39;&#63;&#39; for exactly one character.  
+     * &#39;&#63;&#39; for exactly one character.
      *
-     * Literal &#39;*&#39; and &#39;*&#39; characters must be escaped in the pattern 
+     * Literal &#39;*&#39; and &#39;*&#39; characters must be escaped in the pattern
      * e.g. &quot;&#92;*&quot; means literal &quot;*&quot;, etc.
      *
-     * Escaping any other character (including the escape character itself), 
+     * Escaping any other character (including the escape character itself),
      * just results in that character in the pattern.
      * e.g. &quot;&#92;a&quot; means &quot;a&quot; and &quot;&#92;&#92;&quot; means &quot;&#92;&quot;
      *
@@ -92,13 +92,13 @@
     }
 
     /**
-     * Find the first occurrence of the pattern between <code>start</code)(inclusive) 
-     * and <code>end</code>(exclusive).  
-     * @param text  the String object to search in 
+     * Find the first occurrence of the pattern between <code>start</code)(inclusive)
+     * and <code>end</code>(exclusive).
+     * @param text  the String object to search in
      * @param start  the starting index of the search range, inclusive
      * @param end  the ending index of the search range, exclusive
-     * @return an <code>StringMatcher.Position</code> object that keeps the starting 
-     * (inclusive) and ending positions (exclusive) of the first occurrence of the 
+     * @return an <code>StringMatcher.Position</code> object that keeps the starting
+     * (inclusive) and ending positions (exclusive) of the first occurrence of the
      * pattern in the specified range of the text; return null if not found or subtext
      * is empty (start==end). A pair of zeros is returned if pattern is empty string
      * Note that for pattern like &quot;*abc*&quot; with leading and trailing stars, position of &quot;abc&quot;
@@ -156,21 +156,21 @@
     }
 
     /**
-     * match the given <code>text</code> with the pattern 
+     * match the given <code>text</code> with the pattern
      * @return true if matched eitherwise false
-     * @param text  a String object 
+     * @param text  a String object
      */
     public boolean match(String text) {
         return match(text, 0, text.length());
     }
 
     /**
-     * Given the starting (inclusive) and the ending (exclusive) positions in the   
-     * <code>text</code>, determine if the given substring matches with aPattern  
+     * Given the starting (inclusive) and the ending (exclusive) positions in the
+     * <code>text</code>, determine if the given substring matches with aPattern
      * @return true if the specified portion of the text matches the pattern
-     * @param text  a <code>String</code> object that contains the substring to match 
+     * @param text  a <code>String</code> object that contains the substring to match
      * @param start  marks the starting position (inclusive) of the substring
-     * @param end  marks the ending index (exclusive) of the substring 
+     * @param end  marks the ending index (exclusive) of the substring
      */
     public boolean match(String text, int start, int end) {
         if (null == text) {
@@ -330,11 +330,11 @@
         temp.copyInto(fSegments);
     }
 
-    /** 
+    /**
      * @param text  a string which contains no wildcard
      * @param start  the starting index in the text for search, inclusive
      * @param end  the stopping point of search, exclusive
-     * @return the starting index in the text of the pattern , or -1 if not found 
+     * @return the starting index in the text of the pattern , or -1 if not found
      */
     protected int posIn(String text, int start, int end) {//no wild card in pattern
         int max = end - fLength;
@@ -356,12 +356,12 @@
         return -1;
     }
 
-    /** 
+    /**
      * @param text  a simple regular expression that may only contain '&#63;'(s)
      * @param start  the starting index in the text for search, inclusive
      * @param end  the stopping point of search, exclusive
      * @param p  a simple regular expression that may contains '&#63;'
-     * @return the starting index in the text of the pattern , or -1 if not found 
+     * @return the starting index in the text of the pattern , or -1 if not found
      */
     protected int regExpPosIn(String text, int start, int end, String p) {
         int plen = p.length();
@@ -376,13 +376,13 @@
     }
 
     /**
-     * 
+     *
      * @return boolean
      * @param  text  a String to match
      * @param tStart  int that indicates the starting index of match, inclusive
      * @param p  String,  String, a simple regular expression that may contain '&#63;'
      * @param pStart
-     * @param plen 	
+     * @param plen
      */
     protected boolean regExpRegionMatches(String text, int tStart, String p,
             int pStart, int plen) {
@@ -417,12 +417,12 @@
         return true;
     }
 
-    /** 
+    /**
      * @param text  the string to match
      * @param start  the starting index in the text for search, inclusive
      * @param end  the stopping point of search, exclusive
      * @param p  a string that has no wildcard
-     * @return the starting index in the text of the pattern , or -1 if not found 
+     * @return the starting index in the text of the pattern , or -1 if not found
      */
     protected int textPosIn(String text, int start, int end, String p) {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/TipsAndTricksAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/TipsAndTricksAction.java
index 585da74..30447d4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/TipsAndTricksAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/TipsAndTricksAction.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Sebastian Davids <sdavids@gmx.de> - Fix for bug 93373 - [Intro] 
+ *     Sebastian Davids <sdavids@gmx.de> - Fix for bug 93373 - [Intro]
  *     		TipsAndTricksAction should not use magic numbers
  *******************************************************************************/
 package org.eclipse.ui.internal.ide;
@@ -41,7 +41,7 @@
 
     /**
      * Create an instance of this class.
-     * 
+     *
      * @param window the window
      */
     public TipsAndTricksAction(IWorkbenchWindow window) {
@@ -94,7 +94,7 @@
                 IIDEHelpContextIds.TIPS_AND_TRICKS_PAGE_SELECTION_DIALOG);
         d.create();
         d.getOkButton().setEnabled(false);
-        
+
         if (d.open() != Window.OK || d.getResult().length != 1) {
 			return;
 		}
@@ -128,7 +128,7 @@
             IStatus status = new Status(IStatus.ERROR,
                     IDEWorkbenchPlugin.IDE_WORKBENCH, IStatus.INFO, IDEWorkbenchMessages.TipsAndTricksErrorDialog_noHref, null);
             ErrorDialog.openError(shell, IDEWorkbenchMessages.TipsAndTricksErrorDialog_title,
-                    IDEWorkbenchMessages.TipsAndTricksErrorDialog_noFeatures, 
+                    IDEWorkbenchMessages.TipsAndTricksErrorDialog_noFeatures,
                     status);
         }
     }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java
index 8812f1d..96d1f35 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/VirtualResourceDecorator.java
@@ -71,7 +71,7 @@
 
 	/**
 	 * Replaces the resource image, if the given element is a virtual resource.
-	 * 
+	 *
 	 * @param element
 	 *            element to decorate
 	 * @param decoration
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java
index 37cedbe..625f79a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/WorkbenchActionBuilder.java
@@ -79,7 +79,7 @@
     private IWorkbenchAction closeAction;
 
     private IWorkbenchAction closeAllAction;
-    
+
     private IWorkbenchAction closeOthersAction;
 
     private IWorkbenchAction closeAllSavedAction;
@@ -89,13 +89,13 @@
     private IWorkbenchAction saveAllAction;
 
     private IWorkbenchAction newWindowAction;
-    
+
     private IWorkbenchAction helpContentsAction;
 
     private IWorkbenchAction helpSearchAction;
-	
+
     private IWorkbenchAction dynamicHelpAction;
-    
+
     private IWorkbenchAction aboutAction;
 
     private IWorkbenchAction openPreferencesAction;
@@ -131,7 +131,7 @@
     private IWorkbenchAction activateEditorAction;
 
     private IWorkbenchAction maximizePartAction;
-    
+
     private IWorkbenchAction minimizePartAction;
 
     private IWorkbenchAction switchToEditorAction;
@@ -173,7 +173,7 @@
     private IWorkbenchAction newWizardDropDownAction;
 
     private IWorkbenchAction importResourcesAction;
-    
+
     private IWorkbenchAction exportResourcesAction;
 
 	private IWorkbenchAction buildAllAction; // Incremental workspace build
@@ -196,19 +196,19 @@
 
     // IDE-specific retarget actions
 	private IWorkbenchAction buildProjectAction;
-	
+
 	private CommandContributionItem minimizeItem;
-	
+
 	private CommandContributionItem zoomItem;
 
 	private CommandContributionItem fullscreenItem;
 
 	private CommandContributionItem arrangeWindowsItem;
-	
+
     // contribution items
     // @issue should obtain from ContributionItemFactory
     private NewWizardMenu newWizardMenu;
-    
+
     // @issue class is workbench internal
     private StatusLineContributionItem statusLineItem;
 
@@ -221,7 +221,7 @@
     private IPageListener pageListener;
 
     private IResourceChangeListener resourceListener;
-    
+
     /**
      * Indicates if the action builder has been disposed
      */
@@ -230,7 +230,7 @@
     /**
      * Constructs a new action builder which contributes actions
      * to the given window.
-     * 
+     *
      * @param configurer the action bar configurer for the window
      */
     public WorkbenchActionBuilder(IActionBarConfigurer configurer) {
@@ -305,7 +305,7 @@
         /*
          * In order to ensure that the pin action toolbar sets its size
          * correctly, the pin action should set its visiblity before we call updatePinActionToolbar().
-         * 
+         *
          * In other words we always want the PinActionContributionItem to be notified before the
          * WorkbenchActionBuilder.
          */
@@ -398,9 +398,9 @@
         }
 
         coolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_EDITOR));
-     
+
         coolBar.add(new GroupMarker(IWorkbenchActionConstants.GROUP_HELP));
-        
+
         { // Help group
             IToolBarManager helpToolBar = actionBarConfigurer.createToolBarManager();
             helpToolBar.add(new Separator(IWorkbenchActionConstants.GROUP_HELP));
@@ -446,7 +446,7 @@
             newMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
             menu.add(newMenu);
         }
-		
+
         menu.add(new GroupMarker(IWorkbenchActionConstants.NEW_EXT));
         menu.add(new Separator());
 
@@ -483,7 +483,7 @@
         menu.add(ContributionItemFactory.REOPEN_EDITORS.create(getWindow()));
         menu.add(new GroupMarker(IWorkbenchActionConstants.MRU));
         menu.add(new Separator());
-        
+
         // If we're on OS X we shouldn't show this command in the File menu. It
 		// should be invisible to the user. However, we should not remove it -
 		// the carbon UI code will do a search through our menu structure
@@ -612,11 +612,11 @@
                 IDEWorkbenchMessages.Workbench_window, IWorkbenchActionConstants.M_WINDOW);
 
         addMacWindowMenuItems(menu);
-        
+
         menu.add(newWindowAction);
-		
+
         menu.add(new Separator());
-        
+
         menu.add(addShowView());
 		menu.add(addPerspectiveActions());
         menu.add(new Separator());
@@ -624,10 +624,10 @@
         Separator sep = new Separator(IWorkbenchActionConstants.MB_ADDITIONS);
 		sep.setVisible(!Util.isMac());
 		menu.add(sep);
-		
+
 		if(Util.isCocoa())
 			menu.add(arrangeWindowsItem);
-        
+
         // See the comment for quit in createFileMenu
         ActionContributionItem openPreferencesItem = new ActionContributionItem(openPreferencesAction);
         openPreferencesItem.setVisible(!Util.isMac());
@@ -752,7 +752,7 @@
 		addSeparatorOrGroupMarker(menu, IWorkbenchActionConstants.MB_ADDITIONS);
 		// about should always be at the bottom
 		menu.add(new Separator("group.about")); //$NON-NLS-1$
-		
+
 		ActionContributionItem aboutItem = new ActionContributionItem(aboutAction);
 		aboutItem.setVisible(!Util.isMac());
         menu.add(aboutItem);
@@ -765,7 +765,7 @@
 	 * The test for whether a separator should be added is done by checking for
 	 * the existence of a preference matching the string
 	 * useSeparator.MENUID.GROUPID that is set to <code>true</code>.
-	 * 
+	 *
 	 * @param menu
 	 *            the menu to add to
 	 * @param groupId
@@ -781,7 +781,7 @@
 			menu.add(new GroupMarker(groupId));
 		}
 	}
-    
+
     /**
      * Disposes any resources and unhooks any listeners that are no longer needed.
      * Called when the window is closed.
@@ -815,7 +815,7 @@
 
         showInQuickMenu.dispose();
         newQuickMenu.dispose();
-        
+
 
         // null out actions to make leak debugging easier
         closeAction = null;
@@ -953,7 +953,7 @@
 
         exportResourcesAction = ActionFactory.EXPORT.create(window);
         register(exportResourcesAction);
-        
+
         buildAllAction = IDEActionFactory.BUILD.create(window);
         register(buildAllAction);
 
@@ -972,7 +972,7 @@
 
         saveAllAction = ActionFactory.SAVE_ALL.create(window);
         register(saveAllAction);
-		
+
         newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(getWindow());
         newWindowAction.setText(IDEWorkbenchMessages.Workbench_openNewWindow);
         register(newWindowAction);
@@ -1001,10 +1001,10 @@
 
         helpSearchAction = ActionFactory.HELP_SEARCH.create(window);
         register(helpSearchAction);
-		
+
         dynamicHelpAction = ActionFactory.DYNAMIC_HELP.create(window);
         register(dynamicHelpAction);
-        
+
         aboutAction = ActionFactory.ABOUT.create(window);
         aboutAction
                 .setImageDescriptor(IDEInternalWorkbenchImages
@@ -1014,7 +1014,7 @@
         openPreferencesAction = ActionFactory.PREFERENCES.create(window);
         register(openPreferencesAction);
 
-        
+
 
 
 
@@ -1058,7 +1058,7 @@
 
 		minimizePartAction = ActionFactory.MINIMIZE.create(window);
 		register(minimizePartAction);
-        
+
         switchToEditorAction = ActionFactory.SHOW_OPEN_EDITORS
                 .create(window);
         register(switchToEditorAction);
@@ -1066,7 +1066,7 @@
         workbookEditorsAction = ActionFactory.SHOW_WORKBOOK_EDITORS
         		.create(window);
         register(workbookEditorsAction);
-        
+
         quickAccessAction = ActionFactory.SHOW_QUICK_ACCESS
         	.create(window);
 
@@ -1157,8 +1157,8 @@
             }
         };
         register(newQuickMenu);
-        
-        
+
+
 		if (Util.isCocoa()) {
 
 			CommandContributionItemParameter minimizeParam = new CommandContributionItemParameter(window, null,
@@ -1182,7 +1182,7 @@
      */
     private void makeFeatureDependentActions(IWorkbenchWindow window) {
         AboutInfo[] infos = null;
-        
+
         IPreferenceStore prefs = IDEWorkbenchPlugin.getDefault().getPreferenceStore();
 
         // Optimization: avoid obtaining the about infos if the platform state is
@@ -1194,7 +1194,7 @@
         if (!sameState) {
         	prefs.putValue(stateKey, currentState);
         }
-        
+
         // See if a welcome page is specified.
         // Optimization: if welcome pages were found on a previous run, then just add the action.
         String quickStartKey = IDEActionFactory.QUICK_START.getId();
@@ -1216,7 +1216,7 @@
                 register(quickStartAction);
 	        }
         }
-        
+
         // See if a tips and tricks page is specified.
         // Optimization: if tips and tricks were found on a previous run, then just add the action.
         String tipsAndTricksKey = IDEActionFactory.TIPS_AND_TRICKS.getId();
@@ -1246,7 +1246,7 @@
 
     /**
      * Returns whether any of the given infos have a welcome page.
-     * 
+     *
      * @param infos the infos
      * @return <code>true</code> if a welcome page was found, <code>false</code> if not
      */
@@ -1261,7 +1261,7 @@
 
     /**
      * Returns whether any of the given infos have tips and tricks.
-     * 
+     *
      * @param infos the infos
      * @return <code>true</code> if tips and tricks were found, <code>false</code> if not
      */
@@ -1277,7 +1277,7 @@
 	/**
 	 * Update the build actions on the toolbar and menu bar based on the current
 	 * state of autobuild. This method can be called from any thread.
-	 * 
+	 *
 	 * @param immediately
 	 *            <code>true</code> to update the actions immediately,
 	 *            <code>false</code> to queue the update to be run in the
@@ -1299,7 +1299,7 @@
 		        buildProjectAction.setEnabled(enabled);
 		        toggleAutoBuildAction.setChecked(workspace.isAutoBuilding());
 		        cleanAction.setEnabled(BuildUtilities.isEnabled(projects, IncrementalProjectBuilder.CLEAN_BUILD));
-		
+
 		        //update the cool bar build button
 		        ICoolBarManager coolBarManager = getActionBarConfigurer()
 		                .getCoolBarManager();
@@ -1379,11 +1379,11 @@
         toolBarManager.update(false);
         toolBarItem.update(ICoolBarManager.SIZE);
     }
-    
+
     private IContributionItem getPinEditorItem() {
     	return ContributionItemFactory.PIN_EDITOR.create(window);
     }
-    
+
     private IContributionItem getCutItem() {
 		return getItem(
 				ActionFactory.CUT.getId(),
@@ -1393,7 +1393,7 @@
 				WorkbenchMessages.Workbench_cut,
 				WorkbenchMessages.Workbench_cutToolTip, null);
 	}
-    
+
     private IContributionItem getCopyItem() {
 		return getItem(
 				ActionFactory.COPY.getId(),
@@ -1403,7 +1403,7 @@
 				WorkbenchMessages.Workbench_copy,
 				WorkbenchMessages.Workbench_copyToolTip, null);
 	}
-    
+
     private IContributionItem getResetPerspectiveItem() {
 		return getItem(
 				ActionFactory.RESET_PERSPECTIVE.getId(),
@@ -1411,10 +1411,10 @@
 				null,
 				null,
 				WorkbenchMessages.ResetPerspective_text,
-				WorkbenchMessages.ResetPerspective_toolTip, 
+				WorkbenchMessages.ResetPerspective_toolTip,
 				IWorkbenchHelpContextIds.RESET_PERSPECTIVE_ACTION);
     }
-    
+
     private IContributionItem getSavePerspectiveItem() {
 		return getItem(
 				ActionFactory.SAVE_PERSPECTIVE.getId(),
@@ -1422,10 +1422,10 @@
 				null,
 				null,
 				WorkbenchMessages.SavePerspective_text,
-				WorkbenchMessages.SavePerspective_toolTip, 
+				WorkbenchMessages.SavePerspective_toolTip,
 				IWorkbenchHelpContextIds.SAVE_PERSPECTIVE_ACTION);
     }
-    
+
     private IContributionItem getPasteItem() {
 		return getItem(
 				ActionFactory.PASTE.getId(),
@@ -1435,7 +1435,7 @@
 				WorkbenchMessages.Workbench_paste,
 				WorkbenchMessages.Workbench_pasteToolTip, null);
 	}
-    
+
     private IContributionItem getPrintItem() {
 		return getItem(
 				ActionFactory.PRINT.getId(),
@@ -1445,7 +1445,7 @@
 				WorkbenchMessages.Workbench_print,
 				WorkbenchMessages.Workbench_printToolTip, null);
 	}
-    
+
     private IContributionItem getSelectAllItem() {
 		return getItem(
 				ActionFactory.SELECT_ALL.getId(),
@@ -1453,7 +1453,7 @@
 				null, null, WorkbenchMessages.Workbench_selectAll,
 				WorkbenchMessages.Workbench_selectAllToolTip, null);
 	}
-    
+
     private IContributionItem getFindItem() {
 		return getItem(
 				ActionFactory.FIND.getId(),
@@ -1461,7 +1461,7 @@
 				null, null, WorkbenchMessages.Workbench_findReplace,
 				WorkbenchMessages.Workbench_findReplaceToolTip, null);
 	}
-    
+
     private IContributionItem getBookmarkItem() {
 		return getItem(
 				IDEActionFactory.BOOKMARK.getId(),
@@ -1469,7 +1469,7 @@
 				null, null, IDEWorkbenchMessages.Workbench_addBookmark,
 				IDEWorkbenchMessages.Workbench_addBookmarkToolTip, null);
 	}
-    
+
     private IContributionItem getTaskItem() {
 		return getItem(
 				IDEActionFactory.ADD_TASK.getId(),
@@ -1477,7 +1477,7 @@
 				null, null, IDEWorkbenchMessages.Workbench_addTask,
 				IDEWorkbenchMessages.Workbench_addTaskToolTip, null);
 	}
-    
+
     private IContributionItem getDeleteItem() {
         return getItem(ActionFactory.DELETE.getId(),
         		ActionFactory.DELETE.getCommandId(),
@@ -1487,7 +1487,7 @@
         		WorkbenchMessages.Workbench_deleteToolTip,
         		IWorkbenchHelpContextIds.DELETE_RETARGET_ACTION);
     }
-    
+
     private IContributionItem getRevertItem() {
 		return getItem(
 				ActionFactory.REVERT.getId(),
@@ -1495,42 +1495,42 @@
 				null, null, WorkbenchMessages.Workbench_revert,
 				WorkbenchMessages.Workbench_revertToolTip, null);
 	}
-    
+
     private IContributionItem getRefreshItem() {
 		return getItem(ActionFactory.REFRESH.getId(),
 				ActionFactory.REFRESH.getCommandId(), null, null,
 				WorkbenchMessages.Workbench_refresh,
 				WorkbenchMessages.Workbench_refreshToolTip, null);
 	}
-    
+
     private IContributionItem getPropertiesItem() {
 		return getItem(ActionFactory.PROPERTIES.getId(),
 				ActionFactory.PROPERTIES.getCommandId(), null, null,
 				WorkbenchMessages.Workbench_properties,
 				WorkbenchMessages.Workbench_propertiesToolTip, null);
 	}
-    
+
     private IContributionItem getMoveItem() {
 		return getItem(ActionFactory.MOVE.getId(),
 				ActionFactory.MOVE.getCommandId(),
 				null, null, WorkbenchMessages.Workbench_move,
 				WorkbenchMessages.Workbench_moveToolTip, null);
 	}
-    
+
     private IContributionItem getRenameItem() {
 		return getItem(ActionFactory.RENAME.getId(),
 				ActionFactory.RENAME.getCommandId(), null, null,
 				WorkbenchMessages.Workbench_rename,
 				WorkbenchMessages.Workbench_renameToolTip, null);
 	}
-    
+
     private IContributionItem getOpenProjectItem() {
 		return getItem(IDEActionFactory.OPEN_PROJECT.getId(),
 				IDEActionFactory.OPEN_PROJECT.getCommandId(), null, null,
 				IDEWorkbenchMessages.OpenResourceAction_text,
 				IDEWorkbenchMessages.OpenResourceAction_toolTip, null);
 	}
-    
+
     private IContributionItem getCloseProjectItem() {
 		return getItem(
 				IDEActionFactory.CLOSE_PROJECT.getId(),
@@ -1538,7 +1538,7 @@
 				null, null, IDEWorkbenchMessages.CloseResourceAction_text,
 				IDEWorkbenchMessages.CloseResourceAction_text, null);
 	}
-    
+
     private IContributionItem getItem(String actionId, String commandId,
     		String image, String disabledImage, String label, String tooltip, String helpContextId) {
 		ISharedImages sharedImages = getWindow().getWorkbench()
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildCleanAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildCleanAction.java
index 47ed714..eacb6f1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildCleanAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildCleanAction.java
@@ -22,7 +22,7 @@
  * state for all projects in the workspace, and deletes all problem markers.
  * The next time a build is run, projects will have to be built from scratch.
  * Technically this is only necessary if an incremental builder misbehaves.
- * 
+ *
  * @since 3.0
  */
 public class BuildCleanAction extends Action implements ActionFactory.IWorkbenchAction {
@@ -30,7 +30,7 @@
 
 	/**
 	 * Creates a new BuildCleanAction
-	 * 
+	 *
 	 * @param window The window for parenting this action
 	 */
 	public BuildCleanAction(IWorkbenchWindow window) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetAction.java
index df89004..a5b6851 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetAction.java
@@ -25,7 +25,7 @@
 
 /**
  * This class will perform an incremental build on a working set.
- * 
+ *
  * @since 3.0
  */
 public class BuildSetAction extends Action {
@@ -63,8 +63,8 @@
 		window.getWorkbench().getWorkingSetManager().addRecentWorkingSet(workingSet);
 		IProject[] projects = BuildUtilities.extractProjects(workingSet.getElements());
 		if (projects.length == 0) {
-			MessageDialog.openInformation(window.getShell(), 
-					IDEWorkbenchMessages.BuildSetAction_noBuildTitle, 
+			MessageDialog.openInformation(window.getShell(),
+					IDEWorkbenchMessages.BuildSetAction_noBuildTitle,
 					IDEWorkbenchMessages.BuildSetAction_noProjects);
 			return;
 		}
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetMenu.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetMenu.java
index 709bbc3..838e703 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetMenu.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildSetMenu.java
@@ -7,8 +7,8 @@
  *
  * Contributors:
  * IBM - Initial API and implementation
- * hzhou@actuate.com - Fix for  Bug 71695 - 
- * [WorkingSets]Removed Working Set is still shown under the menu item 
+ * hzhou@actuate.com - Fix for  Bug 71695 -
+ * [WorkingSets]Removed Working Set is still shown under the menu item
  * when it is the recently used working set
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.actions;
@@ -28,7 +28,7 @@
 
 /**
  * Sub-menu off project menu for showing MRU list of working set builds.
- * 
+ *
  * @since 3.0
  */
 public class BuildSetMenu extends ContributionItem {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildUtilities.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildUtilities.java
index 67af7fd..0972fc9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildUtilities.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/BuildUtilities.java
@@ -37,13 +37,13 @@
  * This class contains convenience methods used by the various build commands
  * to determine enablement.  These utilities cannot be factored into a common
  * class because some build actions are API and some are not.
- * 
+ *
  * @since 3.1
  */
 public class BuildUtilities {
 	/**
 	 * Extracts the selected projects from a selection.
-	 * 
+	 *
 	 * @param selection The selection to analyze
 	 * @return The selected projects
 	 */
@@ -77,7 +77,7 @@
 
 	/**
 	 * Finds and returns the selected projects in the given window
-	 * 
+	 *
 	 * @param window The window to find the selection in
 	 * @return The selected projects, or an empty array if no selection could be found.
 	 */
@@ -138,7 +138,7 @@
 	/**
 	 * Returns whether one of the projects has a builder whose trigger setting
 	 * for the given trigger matches the given value.
-	 * 
+	 *
 	 * @param projects The projects to check
 	 * @param trigger The trigger to look for
 	 * @param value The trigger value to look for
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/LTKLauncher.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/LTKLauncher.java
index 42c4e88..b6606d7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/LTKLauncher.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/LTKLauncher.java
@@ -27,7 +27,7 @@
 
 /**
  * Launch the LTK aware resource operations ... but sneaky!
- * 
+ *
  * @since 3.4
  */
 public class LTKLauncher {
@@ -37,10 +37,10 @@
 
 	/**
 	 * Open the LTK delete resources wizard if available.
-	 * 
+	 *
 	 * @param structuredSelection
 	 *            The action current selection.
-	 * 
+	 *
 	 * @return <code>true</code> if we can launch the wizard
 	 */
 	public static boolean openDeleteWizard(
@@ -50,10 +50,10 @@
 
 	/**
 	 * Open the LTK move resources wizard if available.
-	 * 
+	 *
 	 * @param structuredSelection
 	 *            The action current selection.
-	 * 
+	 *
 	 * @return <code>true</code> if we can launch the wizard
 	 */
 	public static boolean openMoveWizard(
@@ -63,10 +63,10 @@
 
 	/**
 	 * Open the LTK rename resource wizard if available.
-	 * 
+	 *
 	 * @param structuredSelection
 	 *            The action current selection.
-	 * 
+	 *
 	 * @return <code>true</code> if we can launch the wizard
 	 */
 	public static boolean openRenameWizard(
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenLocalFileAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenLocalFileAction.java
index 4a9c392..c748f26 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenLocalFileAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenLocalFileAction.java
@@ -36,7 +36,7 @@
 
 
 /**
- * Standard action for opening an editor on local file(s). 
+ * Standard action for opening an editor on local file(s).
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java
index 697d98f..b24de2f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/OpenWorkspaceAction.java
@@ -41,7 +41,7 @@
 /**
  * Implements the open workspace action. Opens a dialog prompting for a
  * directory and then restarts the IDE on that workspace.
- * 
+ *
  * @since 3.0
  */
 public class OpenWorkspaceAction extends Action implements
@@ -50,9 +50,9 @@
 	/**
 	 * Action responsible for opening the "Other..." dialog (ie: the workspace
 	 * chooser).
-	 * 
+	 *
 	 * @since 3.3
-	 * 
+	 *
 	 */
 	class OpenDialogAction extends Action {
 
@@ -69,7 +69,7 @@
 
 	/**
 	 * Action responsible for opening a specific workspace location
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	class WorkspaceMRUAction extends Action {
@@ -113,8 +113,8 @@
 	private static final String NEW_LINE = "\n"; //$NON-NLS-1$
 
 	private IWorkbenchWindow window;
-	
-	
+
+
 	private IContributionItem[] getContributionItems() {
 		ArrayList list = new ArrayList();
 		final ChooseWorkspaceData data = new ChooseWorkspaceData(Platform
@@ -134,7 +134,7 @@
 		return (IContributionItem[]) list
 				.toArray(new IContributionItem[list.size()]);
 	}
-	
+
 	class MenuCreator implements IMenuCreator {
 		ArrayList menus = new ArrayList();
 
@@ -212,7 +212,7 @@
 	/**
 	 * Set definition for this action and text so that it will be used for File
 	 * -&gt; Open Workspace in the argument window.
-	 * 
+	 *
 	 * @param window
 	 *            the window in which this action should appear
 	 */
@@ -244,7 +244,7 @@
 
 	/**
 	 * Restart the workbench using the specified path as the workspace location.
-	 * 
+	 *
 	 * @param path
 	 *            the location
 	 * @since 3.3
@@ -262,7 +262,7 @@
 
 	/**
 	 * Use the ChooseWorkspaceDialog to get the new workspace from the user.
-	 * 
+	 *
 	 * @return a string naming the new workspace and null if cancel was selected
 	 */
 	private String promptForWorkspace() {
@@ -288,7 +288,7 @@
 	 * Create and return a string with command line options for eclipse.exe that
 	 * will launch a new workbench that is the same as the currently running
 	 * one, but using the argument directory as its workspace.
-	 * 
+	 *
 	 * @param workspace
 	 *            the directory to use as the new workspace
 	 * @return a string of command line options or null on error
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/ProjectPropertyDialogAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/ProjectPropertyDialogAction.java
index 84ed8ce..2c0e33f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/ProjectPropertyDialogAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/ProjectPropertyDialogAction.java
@@ -43,7 +43,7 @@
 
     /**
      * Create a new dialog.
-     * 
+     *
      * @param window the window
      */
     public ProjectPropertyDialogAction(IWorkbenchWindow window) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/QuickMenuAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/QuickMenuAction.java
index 521b9d1..64178ff 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/QuickMenuAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/QuickMenuAction.java
@@ -21,7 +21,7 @@
 /**
  * A quick menu actions provides support to assign short cuts
  * to sub menus.
- * 
+ *
  * @since 3.0
  */
 public abstract class QuickMenuAction extends Action {
@@ -35,9 +35,9 @@
 
     /**
      * Creates a new quick menu action with the given command id.
-     * 
+     *
      * @param commandId the command id of the short cut used to open
-     *  the sub menu 
+     *  the sub menu
      */
     public QuickMenuAction(String commandId) {
         setId(commandId);
@@ -51,7 +51,7 @@
 	public void run() {
     	creator.createMenu();
     }
-    
+
     /**
      * Dispose of this menu action.
      */
@@ -64,15 +64,15 @@
 
     /**
      * Hook to fill a menu manager with the items of the sub menu.
-     * 
+     *
      * @param menu the sub menu to fill
      */
     protected abstract void fillMenu(IMenuManager menu);
-    
+
     /**
      * Returns the short cut assigned to the sub menu or <code>null</code> if
      * no short cut is assigned.
-     * 
+     *
      * @return the short cut as a human readable string or <code>null</code>
      */
     public String getShortCutString() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/RetargetActionWithDefault.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/RetargetActionWithDefault.java
index c99d510..b5608e2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/RetargetActionWithDefault.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/RetargetActionWithDefault.java
@@ -18,7 +18,7 @@
  * handler when the active part does not supply one.  Enablement of this
  * action is based on enablement of the handler, or enablement of the default
  * handler if no explicit handler is available.
- * 
+ *
  * @since 3.1
  */
 public class RetargetActionWithDefault extends RetargetAction {
@@ -27,7 +27,7 @@
 
 	/**
 	 * Constructs a RetargetActionWithDefault with the given action id and text.
-	 * 
+	 *
 	 * @param actionID the retargetable action id
 	 * @param text the action's text, or <code>null</code> if there is no text
 	 */
@@ -42,7 +42,7 @@
 	protected void setActionHandler(IAction newHandler) {
 		super.setActionHandler(newHandler);
 		// Only set the default handler after clearing the old handler above.
-		// This triggers enablement updating on the default handler which 
+		// This triggers enablement updating on the default handler which
 		// might be needed since the active part has changed.
 		if (newHandler == null) {
 			super.setActionHandler(defaultHandler);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/SelectBuildWorkingSetAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/SelectBuildWorkingSetAction.java
index 39d758a..7849389 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/SelectBuildWorkingSetAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/actions/SelectBuildWorkingSetAction.java
@@ -22,7 +22,7 @@
 /**
  * This action asks the user to select a working set, and then creates
  * and runs a corresponding BuildSetAction.
- * 
+ *
  * @since 3.0
  */
 public class SelectBuildWorkingSetAction extends Action implements
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java
index 71c165b..ea7fdd2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyBuildIdToClipboardHandler.java
@@ -23,9 +23,9 @@
 /**
  * Copies the build ID to the clipboard. Useful for debugging and bug
  * reporting/verification.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class CopyBuildIdToClipboardHandler extends AbstractHandler {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyConfigToClipboardHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyConfigToClipboardHandler.java
index 13d7bc2..590d6b7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyConfigToClipboardHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/CopyConfigToClipboardHandler.java
@@ -21,7 +21,7 @@
 
 /**
  * Copies the configuration data present in the about dialog to the clipboard.
- * 
+ *
  * @since 3.4
  */
 public class CopyConfigToClipboardHandler extends AbstractHandler {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/ResourcePathConverter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/ResourcePathConverter.java
index ecf755c..4ce97b9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/ResourcePathConverter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/commands/ResourcePathConverter.java
@@ -21,7 +21,7 @@
 /**
  * A command parameter value converter to convert between IResources and strings
  * encoding the path of a resource.
- * 
+ *
  * @since 3.2
  */
 public final class ResourcePathConverter extends
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/BuildOrderPreferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/BuildOrderPreferencePage.java
index 6827e3f..405991d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/BuildOrderPreferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/BuildOrderPreferencePage.java
@@ -51,8 +51,8 @@
 import org.eclipse.ui.internal.ide.IIDEHelpContextIds;
 import org.eclipse.ui.internal.util.PrefUtil;
 
-/**	
- * Page used to determine what order projects will be built in 
+/**
+ * Page used to determine what order projects will be built in
  * by the workspace.
  */
 public class BuildOrderPreferencePage extends PreferencePage implements
@@ -180,7 +180,7 @@
                 | SWT.H_SCROLL | SWT.V_SCROLL);
         this.buildList.setEnabled(enabled);
         GridData data = new GridData();
-        //Set heightHint with a small value so the list size will be defined by 
+        //Set heightHint with a small value so the list size will be defined by
         //the space available in the dialog instead of resizing the dialog to
         //fit all the items in the list.
         data.heightHint = buildList.getItemHeight();
@@ -252,7 +252,7 @@
 
     /**
      * Adds in a spacer.
-     * 
+     *
      * @param composite the parent composite
      */
     private void createSpacer(Composite composite) {
@@ -373,7 +373,7 @@
 
     /**
      * Create the field for the maximum number of iterations in the presence
-     * of cycles. 
+     * of cycles.
      */
     private void createMaxIterationsField(Composite composite) {
         Composite maxItersComposite = new Composite(composite, SWT.NONE);
@@ -443,7 +443,7 @@
     /**
      * Get the project names for the current custom build
      * order stored in the workspace description.
-     * 
+     *
      * @return java.lang.String[] or null if there is no setting
      */
     private String[] getCurrentBuildOrder() {
@@ -458,7 +458,7 @@
     /**
      * Get the project names in the default build order
      * based on the current Workspace settings.
-     * 
+     *
      * @return java.lang.String[]
      */
     private String[] getDefaultProjectOrder() {
@@ -553,7 +553,7 @@
         super.performDefaults();
     }
 
-    /** 
+    /**
      * OK has been pressed. If the defualt button is pressed then reset the build order to false;
      * otherwise set it to the contents of the list.
      */
@@ -624,10 +624,10 @@
     }
 
     /**
-     * Return a sorted array of the names of the projects that are already in the currently 
+     * Return a sorted array of the names of the projects that are already in the currently
      * displayed names.
      * @return String[]
-     * @param allProjects - all of the projects in the workspace 
+     * @param allProjects - all of the projects in the workspace
      * @param currentlyDisplayed - the names of the projects already being displayed
      */
     private String[] sortedDifference(IProject[] allProjects,
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java
index 3fe1a6d..e512c25 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CleanDialog.java
@@ -59,7 +59,7 @@
  * Dialog that asks the user to confirm a clean operation, and to configure
  * settings in relation to the clean. Clicking ok in the dialog will perform the
  * clean operation.
- * 
+ *
  * @since 3.0
  */
 public class CleanDialog extends MessageDialog {
@@ -84,7 +84,7 @@
     private static final String TOGGLE_SELECTED = "TOGGLE_SELECTED"; //$NON-NLS-1$
     private static final String BUILD_NOW = "BUILD_NOW"; //$NON-NLS-1$
     private static final String BUILD_ALL = "BUILD_ALL"; //$NON-NLS-1$
-    
+
     private Button allButton, selectedButton, buildNowButton, globalBuildButton, projectBuildButton;
 
     private CheckboxTableViewer projectNames;
@@ -108,7 +108,7 @@
 
     /**
      * Creates a new clean dialog.
-     * 
+     *
      * @param window the window to create it in
      * @param selection the currently selected projects (may be empty)
      */
@@ -211,7 +211,7 @@
 
         //second row
         createProjectSelectionTable(area);
-        
+
         //third row
         //only prompt for immediate build if autobuild is off
         if (!ResourcesPlugin.getWorkspace().isAutoBuilding()) {
@@ -353,30 +353,30 @@
     protected void updateBuildRadioEnablement() {
         projectBuildButton.setSelection(!globalBuildButton.getSelection());
     }
-    
+
     @Override
 	public boolean close() {
         persistDialogSettings(getShell(), DIALOG_SETTINGS_SECTION);
         return super.close();
     }
-    
+
     @Override
 	protected Point getInitialLocation(Point initialSize) {
         Point p = getInitialLocation(DIALOG_SETTINGS_SECTION);
         return p != null ? p : super.getInitialLocation(initialSize);
     }
-    
+
     @Override
 	protected Point getInitialSize() {
         Point p = super.getInitialSize();
         return getInitialSize(DIALOG_SETTINGS_SECTION, p);
     }
-    
+
     /**
      * Returns the initial location which is persisted in the IDE Plugin dialog settings
      * under the provided dialog setttings section name.
      * If location is not persisted in the settings, the <code>null</code> is returned.
-     * 
+     *
      * @param dialogSettingsSectionName The name of the dialog settings section
      * @return The initial location or <code>null</code>
      */
@@ -390,7 +390,7 @@
         }
         return null;
     }
-    
+
     private IDialogSettings getDialogSettings(String dialogSettingsSectionName) {
         IDialogSettings settings = IDEWorkbenchPlugin.getDefault().getDialogSettings();
         IDialogSettings section = settings.getSection(dialogSettingsSectionName);
@@ -403,7 +403,7 @@
     /**
      * Persists the location and dimensions of the shell and other user settings in the
      * plugin's dialog settings under the provided dialog settings section name
-     * 
+     *
      * @param shell The shell whose geometry is to be stored
      * @param dialogSettingsSectionName The name of the dialog settings section
      */
@@ -429,7 +429,7 @@
      * Returns the initial size which is the larger of the <code>initialSize</code> or
      * the size persisted in the IDE UI Plugin dialog settings under the provided dialog setttings section name.
      * If no size is persisted in the settings, the <code>initialSize</code> is returned.
-     * 
+     *
      * @param initialSize The initialSize to compare against
      * @param dialogSettingsSectionName The name of the dialog settings section
      * @return the initial size
@@ -445,7 +445,7 @@
         }
         return initialSize;
     }
-    
+
     @Override
 	protected boolean isResizable() {
         return true;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ConfigurationLogUpdateSection.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ConfigurationLogUpdateSection.java
index 0e8416d..f34dcb4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ConfigurationLogUpdateSection.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ConfigurationLogUpdateSection.java
@@ -34,7 +34,7 @@
 
 /**
  * Writes information about the update configurer into the system summary.
- * 
+ *
  * @since 3.0
  */
 public class ConfigurationLogUpdateSection implements ISystemSummarySection {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CreateLinkedResourceGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CreateLinkedResourceGroup.java
index 2a5fda7..a0b0048 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CreateLinkedResourceGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/CreateLinkedResourceGroup.java
@@ -60,7 +60,7 @@
 
 /**
  * Widget group for specifying a linked file or folder target.
- * 
+ *
  * @since 2.1
  */
 public class CreateLinkedResourceGroup {
@@ -93,13 +93,13 @@
 	/**
 	 * Helper interface intended for updating a string value based on the
 	 * currently selected link target.
-	 * 
+	 *
 	 * @since 3.2
 	 */
 	public static interface IStringValue {
 		/**
 		 * Sets the String value.
-		 * 
+		 *
 		 * @param string
 		 *            a non-null String
 		 */
@@ -107,14 +107,14 @@
 
 		/**
 		 * Gets the String value.
-		 * 
+		 *
 		 * @return the current value, or <code>null</code>
 		 */
 		String getValue();
 
 		/**
 		 * Gets the resource to which the resource will belong
-		 * 
+		 *
 		 * @return the IResource object, or <code>null</code>
 		 */
 		IResource getResource();
@@ -126,7 +126,7 @@
 
 	/**
 	 * Creates a link target group
-	 * 
+	 *
 	 * @param type
 	 *            specifies the type of resource to link to.
 	 *            <code>IResource.FILE</code> or <code>IResource.FOLDER</code>
@@ -151,7 +151,7 @@
 
 	/**
 	 * Creates the widgets
-	 * 
+	 *
 	 * @param parent
 	 *            parent composite of the widget group
 	 * @return the widget group
@@ -162,7 +162,7 @@
 
 	/**
 	 * Creates the widgets without the checkbox button
-	 * 
+	 *
 	 * @param parent
 	 *            parent composite of the widget group
 	 * @return the widget group
@@ -173,7 +173,7 @@
 
 	/**
 	 * Creates the widgets
-	 * 
+	 *
 	 * @param parent
 	 *            parent composite of the widget group
 	 * @return the widget group
@@ -238,10 +238,10 @@
 	public boolean isEnabled() {
 		return createLink;
 	}
-	
+
 	/**
 	 * Creates the link target location widgets.
-	 * 
+	 *
 	 * @param locationGroup
 	 *            the parent composite
 	 * @param enabled
@@ -341,7 +341,7 @@
 
 	/**
 	 * Create the file system selection area.
-	 * 
+	 *
 	 * @param composite
 	 * @param enabled
 	 *            the initial enablement state.
@@ -354,7 +354,7 @@
 		}
 
 		fileSystemSelectionArea = new FileSystemSelectionArea();
-		
+
 		Composite parent = new Composite(composite, SWT.NONE);
 		parent.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 4, 1));
 		GridLayout layout = new GridLayout(2, false);
@@ -364,13 +364,13 @@
 		parent.setFont(composite.getFont());
 
 		fileSystemSelectionArea.createContents(parent);
-		
+
 		fileSystemSelectionArea.setEnabled(enabled);
 	}
 
 	/**
 	 * Create the composite for the resolved path.
-	 * 
+	 *
 	 * @param locationGroup
 	 * @param indent
 	 */
@@ -402,7 +402,7 @@
 
 	/**
 	 * Returns a new status object with the given severity and message.
-	 * 
+	 *
 	 * @return a new status object with the given severity and message.
 	 */
 	private IStatus createStatus(int severity, String message) {
@@ -421,7 +421,7 @@
 
 	/**
 	 * Returns the link target location entered by the user.
-	 * 
+	 *
 	 * @return the link target location entered by the user. null if the user
 	 *         chose not to create a link.
 	 */
@@ -437,7 +437,7 @@
 			IPath path = Path.fromOSString(linkTarget);
 			if (path != null && path.toFile().exists())
 				return URIUtil.toURI(path);
-			
+
 			uri = new URI(linkTarget);
 			URI resolved = getPathVariableManager().resolveURI(uri);
 			try {
@@ -459,7 +459,7 @@
 		// validate non-local file system location
 		return configuration.getContributor().getURI(string);
 	}
-	
+
 	/**
 	 * Opens a file or directory browser depending on the link type.
 	 */
@@ -538,7 +538,7 @@
 	/**
 	 * Return the selected configuration or <code>null</code> if there is not
 	 * one selected.
-	 * 
+	 *
 	 * @return FileSystemConfiguration or <code>null</code>
 	 */
 	private FileSystemConfiguration getSelectedConfiguration() {
@@ -579,7 +579,7 @@
 	 * This method must be called before <code>setButtonLayoutData</code> is
 	 * called.
 	 * </p>
-	 * 
+	 *
 	 * @param control
 	 *            a control from which to obtain the current font
 	 */
@@ -609,10 +609,10 @@
 		URI resolvedURI = pathVariableManager.resolveURI(uri);
 		String resolvedString;
 		if (isURL)
-			resolvedString = resolvedURI.toString(); 
+			resolvedString = resolvedURI.toString();
 		else
 			resolvedString = URIUtil.toPath(resolvedURI).toOSString();
-		
+
 		if (linkTarget.equals(resolvedString)) {
 			resolvedPathLabelText.setVisible(false);
 			resolvedPathLabelData.setVisible(false);
@@ -631,14 +631,14 @@
 				&& updatableResourceName.getResource() != null)
 			return updatableResourceName.getResource().getPathVariableManager();
 		return ResourcesPlugin.getWorkspace().getPathVariableManager();
-	}	
+	}
 
 	/**
 	 * Sets the <code>GridData</code> on the specified button to be one that
 	 * is spaced for the current dialog page units. The method
 	 * <code>initializeDialogUnits</code> must be called once before calling
 	 * this method for the first time.
-	 * 
+	 *
 	 * @param button
 	 *            the button to set the <code>GridData</code>
 	 * @return the <code>GridData</code> set on the specified button
@@ -655,7 +655,7 @@
 
 	/**
 	 * Sets the value of the link target field
-	 * 
+	 *
 	 * @param target
 	 *            the value of the link target field
 	 */
@@ -669,7 +669,7 @@
 	/**
 	 * Validates the type of the given file against the link type specified in
 	 * the constructor.
-	 * 
+	 *
 	 * @param linkTargetFile
 	 *            file to validate
 	 * @return IStatus indicating the validation result. IStatus.OK if the given
@@ -690,10 +690,10 @@
 
 	/**
 	 * Validates this page's controls.
-	 * 
+	 *
 	 * @param linkHandle
 	 *            The target to check
-	 * 
+	 *
 	 * @return IStatus indicating the validation result. IStatus.OK if the
 	 *         specified link target is valid given the linkHandle.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileFolderSelectionDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileFolderSelectionDialog.java
index ff56e88..cb873b8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileFolderSelectionDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileFolderSelectionDialog.java
@@ -31,7 +31,7 @@
 /**
  * Selection dialog to select files and/or folders on the file system. Use
  * setInput to set input to an IFileStore that points to a folder.
- * 
+ *
  * @since 2.1
  */
 public class FileFolderSelectionDialog extends ElementTreeSelectionDialog {
@@ -77,7 +77,7 @@
 
 		/**
 		 * Creates a new instance of the receiver.
-		 * 
+		 *
 		 * @param showFiles
 		 *            <code>true</code> files and folders are returned by the
 		 *            receiver. <code>false</code> only folders are returned.
@@ -160,7 +160,7 @@
 
 		/**
 		 * Creates a new instance of the receiver.
-		 * 
+		 *
 		 * @param multiSelect
 		 *            <code>true</code> if multi selection is allowed.
 		 *            <code>false</code> if only single selection is allowed.
@@ -195,7 +195,7 @@
 
 				}
 			}
-			
+
 			// Return an ok status with no message as SelectionStatusDialog will display default ok message
 			return new Status(IStatus.OK, pluginId, IDEResourceInfoUtils.EMPTY_STRING);
 		}
@@ -203,7 +203,7 @@
 
 	/**
 	 * Creates a new instance of the receiver.
-	 * 
+	 *
 	 * @param parent
 	 * @param multiSelect
 	 *            <code>true</code> if multi selection is allowed.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java
index d2abd6a..7fffe75 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileStatesPage.java
@@ -67,7 +67,7 @@
     private long STATE_SIZE_MAXIMUM = 100;
 
     private static final int INDENT = 20;
-    
+
     /**
      * This method takes the string for the title of a text field and the value for the
      * text of the field.
@@ -326,7 +326,7 @@
     /**
      * Validate a text entry for a long field. Return the result if there are
      * no errors, otherwise return -1 and set the entry field error.
-     * @param scale the scale (factor by which the value is multiplied when it is persisted) 
+     * @param scale the scale (factor by which the value is multiplied when it is persisted)
      * @return long
      */
     private long validateLongTextEntry(Text text, long scale) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileSystemSelectionArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileSystemSelectionArea.java
index 8aff992..c5b8329 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileSystemSelectionArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/FileSystemSelectionArea.java
@@ -27,19 +27,19 @@
 /**
  * FileSystemSelectionArea is the area used to select the file system.
  * @since 3.2
- * 
+ *
  */
 
 public class FileSystemSelectionArea {
 
 	private Label fileSystemTitle;
 	private ComboViewer fileSystems;
-	
+
 	/**
 	 * Create a new instance of the receiver.
 	 */
 	public FileSystemSelectionArea(){
-		
+
 	}
 
 	/**
@@ -96,14 +96,14 @@
 	 */
 	public FileSystemConfiguration getSelectedConfiguration() {
 		ISelection selection = fileSystems.getSelection();
-		
+
 		if (selection instanceof IStructuredSelection) {
 			IStructuredSelection structured = (IStructuredSelection) selection;
 			if (structured.size() == 1) {
 				return (FileSystemConfiguration) structured.getFirstElement();
 			}
 		}
-		
+
 		return null;
 	}
 
@@ -114,6 +114,6 @@
 	public void setEnabled(boolean enabled) {
 		fileSystemTitle.setEnabled(enabled);
 		fileSystems.getControl().setEnabled(enabled);
-		
+
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEEditorsPreferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEEditorsPreferencePage.java
index e6d7b1d..e8d2ebc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEEditorsPreferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEEditorsPreferencePage.java
@@ -23,7 +23,7 @@
 
 /**
  * Extends the Editors preference page with IDE-specific settings.
- * 
+ *
  * Note: want IDE settings to appear in main Editors preference page (via
  * subclassing), however the superclass, EditorsPreferencePage, is internal
  */
@@ -32,7 +32,7 @@
 	@Override
 	protected Control createContents(Composite parent) {
 		Composite composite = createComposite(parent);
-        
+
 		PreferenceLinkArea fileEditorsArea = new PreferenceLinkArea(composite, SWT.NONE,
 				"org.eclipse.ui.preferencePages.FileEditors", IDEWorkbenchMessages.IDEEditorsPreferencePage_WorkbenchPreference_FileEditorsRelatedLink,//$NON-NLS-1$
 				(IWorkbenchPreferenceContainer) getContainer(),null);
@@ -43,17 +43,17 @@
         PreferenceLinkArea contentTypeArea = new PreferenceLinkArea(composite, SWT.NONE,
                 "org.eclipse.ui.preferencePages.ContentTypes", IDEWorkbenchMessages.IDEEditorsPreferencePage_WorkbenchPreference_contentTypesRelatedLink,//$NON-NLS-1$
                 (IWorkbenchPreferenceContainer) getContainer(),null);
-        
+
         data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
         contentTypeArea.getControl().setLayoutData(data);
-        
+
 		PreferenceLinkArea appearanceArea = new PreferenceLinkArea(composite, SWT.NONE,
 				"org.eclipse.ui.preferencePages.Views", IDEWorkbenchMessages.IDEEditorsPreferencePage_WorkbenchPreference_viewsRelatedLink,//$NON-NLS-1$
 				(IWorkbenchPreferenceContainer) getContainer(),null);
 
 		data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL);
 		appearanceArea.getControl().setLayoutData(data);
-			
+
 		createEditorHistoryGroup(composite);
 
 		createSpace(composite);
@@ -65,10 +65,10 @@
 		((TabBehaviour)Tweaklets.get(TabBehaviour.KEY)).setPreferenceVisibility(editorReuseGroup, showMultipleEditorTabs);
 
 		applyDialogFont(composite);
-		
+
         super.setHelpContext(parent);
-        
+
 		return composite;
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEPerspectivesPreferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEPerspectivesPreferencePage.java
index 63f4d2a..d25ff0a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEPerspectivesPreferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEPerspectivesPreferencePage.java
@@ -25,7 +25,7 @@
 
 /**
  * Extends the Perspectives preference page with IDE-specific settings.
- * 
+ *
  * Note: want IDE settings to appear in main Perspectives preference page (via
  * subclassing), however the superclass, PerspectivesPreferencePage, is
  * internal
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEResourceInfoUtils.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEResourceInfoUtils.java
index e50a9fb..8afeb2e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEResourceInfoUtils.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEResourceInfoUtils.java
@@ -39,9 +39,9 @@
 
 /**
  * Utility class supporting common information required from resources.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class IDEResourceInfoUtils {
 
@@ -80,7 +80,7 @@
 
 	/**
 	 * Return whether or not the file called pathName exists.
-	 * 
+	 *
 	 * @param pathName
 	 * @return boolean <code>true</code> if the file exists.
 	 * @see IFileInfo#exists()
@@ -106,7 +106,7 @@
 	/**
 	 * Return the value for the date String for the timestamp of the supplied
 	 * resource.
-	 * 
+	 *
 	 * @param resource
 	 *            The resource to query
 	 * @return String
@@ -145,7 +145,7 @@
 	/**
 	 * Return the fileInfo at pathName or <code>null</code> if the format is
 	 * invalid or if the file info cannot be determined.
-	 * 
+	 *
 	 * @param pathName
 	 * @return IFileInfo or <code>null</code>
 	 */
@@ -160,7 +160,7 @@
 	/**
 	 * Return the fileInfo at pathName or <code>null</code> if the format is
 	 * invalid or if the file info cannot be determined.
-	 * 
+	 *
 	 * @param pathName
 	 * @return IFileInfo or <code>null</code>
 	 */
@@ -175,7 +175,7 @@
 	/**
 	 * Return the fileInfo for location. Return <code>null</code> if there is
 	 * a CoreException looking it up
-	 * 
+	 *
 	 * @param location
 	 * @return String or <code>null</code>
 	 */
@@ -191,7 +191,7 @@
 
 	/**
 	 * Get the file store for the local file system path.
-	 * 
+	 *
 	 * @param string
 	 * @return IFileStore or <code>null</code> if there is a
 	 *         {@link CoreException}.
@@ -208,7 +208,7 @@
 
 	/**
 	 * Get the file store for the URI.
-	 * 
+	 *
 	 * @param uri
 	 * @return IFileStore or <code>null</code> if there is a
 	 *         {@link CoreException}.
@@ -224,7 +224,7 @@
 
 	/**
 	 * Get the location of a resource
-	 * 
+	 *
 	 * @param resource
 	 * @return String the text to display the location
 	 */
@@ -247,7 +247,7 @@
 
 		if (resolvedLocation.getScheme() == null)
 			return location.toString();
-		
+
 		IFileStore store = getFileStore(resolvedLocation);
 		// don't access the file system for closed projects (bug 151089)
 		boolean isPathVariable = isPathVariable(resource);
@@ -275,7 +275,7 @@
 	/**
 	 * Get the resolved location of a resource. This resolves path variables if
 	 * present in the resource path.
-	 * 
+	 *
 	 * @param resource
 	 * @return String
 	 */
@@ -295,7 +295,7 @@
 
 		if (location.getScheme() == null)
 			return UNKNOWN_LABEL;
-		
+
 		IFileStore store = getFileStore(location);
 		if (store == null) {
 			return UNKNOWN_LABEL;
@@ -311,7 +311,7 @@
 
 	/**
 	 * Return a String that indicates the size of the supplied file.
-	 * 
+	 *
 	 * @param resource
 	 * @return String
 	 */
@@ -349,7 +349,7 @@
 
 	/**
 	 * Get the string that identifies the type of this resource.
-	 * 
+	 *
 	 * @param resource
 	 * @param description
 	 * @return String
@@ -393,7 +393,7 @@
 	/**
 	 * Returns whether the given resource is a linked resource bound to a path
 	 * variable.
-	 * 
+	 *
 	 * @param resource
 	 *            resource to test
 	 * @return boolean <code>true</code> the given resource is a linked
@@ -429,7 +429,7 @@
 
 	/**
 	 * Return the file stores that are a child of store that the filter accepts.
-	 * 
+	 *
 	 * @param store
 	 * @param fileFilter
 	 * @param monitor
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkbenchPreferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkbenchPreferencePage.java
index cedf6c3..6b3a876 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkbenchPreferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkbenchPreferencePage.java
@@ -24,7 +24,7 @@
 
 /**
  * The IDE workbench main preference page.
- * 
+ *
  *Note: want IDE settings to appear in main Workbench preference page (via subclassing),
  *   however the superclass, WorkbenchPreferencePage, is internal
  */
@@ -39,7 +39,7 @@
 
         Composite composite = createComposite(parent);
 
-        createSettings(composite);        
+        createSettings(composite);
         createOpenModeGroup(composite);
 
         applyDialogFont(composite);
@@ -70,5 +70,5 @@
 	public boolean performOk() {
         return super.performOk();
     }
-   
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
index dc68057..b1fb9c5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IDEWorkspacePreferencePage.java
@@ -88,7 +88,7 @@
 	private ResourceEncodingFieldEditor encodingEditor;
 
 	private LineDelimiterEditor lineSeparatorEditor;
-	
+
     //A boolean to indicate if the user settings were cleared.
 	private boolean clearUserSettings = false;
 
@@ -130,17 +130,17 @@
 		createSpace(composite);
 		createSystemExplorerGroup(composite);
 		createSpace(composite);
-		
+
 		Composite lower = new Composite(composite,SWT.NONE);
 		GridLayout lowerLayout = new GridLayout();
 		lowerLayout.marginWidth = 0;
 		lowerLayout.numColumns = 2;
 		lowerLayout.makeColumnsEqualWidth = true;
 		lower.setLayout(lowerLayout);
-		
+
 		lower.setLayoutData(new GridData(
                 GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
-		
+
 		createEncodingEditorControls(lower);
 		createLineSeparatorEditorControls(lower);
 		applyDialogFont(composite);
@@ -235,7 +235,7 @@
     /**
      * Create a composite that contains entry fields specifying save interval
      * preference.
-     * 
+     *
      * @param composite the Composite the group is created in.
      */
     private void createSaveIntervalGroup(Composite composite) {
@@ -284,7 +284,7 @@
     /**
      * Create a composite that contains entry fields specifying the workspace name
      * preference.
-     * 
+     *
      * @param composite the Composite the group is created in.
      */
     private void createWindowTitleGroup(Composite composite) {
@@ -335,12 +335,12 @@
 	 *
 	 * @param parent
 	 */
-    private void createEncodingEditorControls(Composite parent){    			
+    private void createEncodingEditorControls(Composite parent){
 		Composite encodingComposite = new Composite(parent,SWT.NONE);
 		encodingComposite.setLayout(new GridLayout());
 		encodingComposite.setLayoutData(new GridData(
                 GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
-		
+
 		encodingEditor = new ResourceEncodingFieldEditor(IDEWorkbenchMessages.WorkbenchPreference_encoding, encodingComposite, ResourcesPlugin
 				.getWorkspace().getRoot());
 
@@ -356,10 +356,10 @@
 			}
 		});
     }
-    
+
     /**
      * Create a composite that contains the line delimiter controls
-     * 
+     *
      * @param parent
      */
     private void createLineSeparatorEditorControls(Composite parent){
@@ -371,14 +371,14 @@
 
 		lineComposite.setLayoutData(new GridData(
                 GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
-		
+
 		lineSeparatorEditor = new LineDelimiterEditor(lineComposite);
 		lineSeparatorEditor.doLoad();
     }
 
 	/**
 	 * Create the widget for the system explorer command.
-	 * 
+	 *
 	 * @param composite
 	 */
 	protected void createSystemExplorerGroup(Composite composite) {
@@ -420,10 +420,10 @@
     protected IPreferenceStore getIDEPreferenceStore() {
         return IDEWorkbenchPlugin.getDefault().getPreferenceStore();
     }
-	
+
 	/**
      * Creates a tab of one horizontal spans.
-     * 
+     *
      * @param parent
      *            the parent in which the tab should be created
      */
@@ -441,7 +441,7 @@
 	/**
      * Creates the composite which will contain all the preference controls for
      * this page.
-     * 
+     *
      * @param parent
      *            the parent composite
      * @return the composite for this page
@@ -461,7 +461,7 @@
 	public void init(org.eclipse.ui.IWorkbench workbench) {
 		e4Context = workbench.getService(IEclipseContext.class);
     }
-    
+
     /**
      * The default button has been pressed.
      */
@@ -480,7 +480,7 @@
         saveInterval.loadDefault();
 		showLocationInWindowTitle.setSelection(store.getDefaultBoolean(IDEInternalPreferences.SHOW_LOCATION));
         workspaceName.loadDefault();
-        
+
         boolean closeUnrelatedProj = store.getDefaultBoolean(IDEInternalPreferences.CLOSE_UNRELATED_PROJECTS);
         closeUnrelatedProjectButton.setSelection(closeUnrelatedProj);
 
@@ -553,7 +553,7 @@
                                 .getStatus());
             }
         }
-        
+
 		store.setValue(IDEInternalPreferences.SHOW_LOCATION, showLocationInWindowTitle.getSelection());
 
         workspaceName.store();
@@ -570,8 +570,8 @@
 
         boolean closeUnrelatedProj = closeUnrelatedProjectButton.getSelection();
         getIDEPreferenceStore().setValue(IDEInternalPreferences.CLOSE_UNRELATED_PROJECTS, closeUnrelatedProj);
-        
-        
+
+
         if (clearUserSettings) {
 			IDEEncoding.clearUserEncodings();
 		}
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IFileStoreFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IFileStoreFilter.java
index fdb6336..a871f60 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IFileStoreFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/IFileStoreFilter.java
@@ -20,7 +20,7 @@
  *
  */
 public interface IFileStoreFilter {
-	
+
 	/**
 	 * Return whether or not this store is accepted by the receiver.
 	 * @param store IFileStore
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/InternalErrorDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/InternalErrorDialog.java
index 98d4c68..d75b3b4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/InternalErrorDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/InternalErrorDialog.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Sebastian Davids <sdavids@gmx.de> - Fix for bug 93353 - 
+ *     Sebastian Davids <sdavids@gmx.de> - Fix for bug 93353 -
  *     [Dialogs] InternalErrorDialog#buttonPressed should explicitly call super
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.dialogs;
@@ -39,7 +39,7 @@
 
     private Text text;
 
-    //Workaround. SWT does not seem to set the default button if 
+    //Workaround. SWT does not seem to set the default button if
     //there is not control with focus. Bug: 14668
     private int defaultButtonIndex = 0;
 
@@ -50,7 +50,7 @@
 
     /**
      * Create a new dialog.
-     * 
+     *
      * @param parentShell the parent shell
      * @param dialogTitle the  title
      * @param dialogTitleImage the title image
@@ -70,7 +70,7 @@
         setShellStyle(getShellStyle() | SWT.APPLICATION_MODAL);
     }
 
-    //Workaround. SWT does not seem to set rigth the default button if 
+    //Workaround. SWT does not seem to set rigth the default button if
     //there is not control with focus. Bug: 14668
     @Override
 	public int open() {
@@ -153,13 +153,13 @@
         text.setLayoutData(data);
     }
 
-    /** 
+    /**
      * Convenience method to open a simple Yes/No question dialog.
      *
      * @param parent the parent shell of the dialog, or <code>null</code> if none
      * @param title the dialog's title, or <code>null</code> if none
      * @param message the message
-     * @param detail the error 
+     * @param detail the error
      * @param defaultIndex the default index of the button to select
      * @return <code>true</code> if the user presses the OK button,
      *    <code>false</code> otherwise
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java
index a12117a..fdd83ac 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourceEditor.java
@@ -80,11 +80,11 @@
 /**
  * UI to edit the location of the linked resources contained in a project.
  * @since 3.5
- * 
+ *
  */
 public class LinkedResourceEditor {
 
-	
+
 	private static int NAME_COLUMN = 0;
 	private static int PATH_COLUMN = -1;
 	private static int LOCATION_COLUMN = 1;
@@ -156,7 +156,7 @@
 				removeSelection();
 			}
 		});
-		
+
 		updateSelection();
 	}
 
@@ -181,7 +181,7 @@
 	/**
 	 * Creates the widget group. Callers must call <code>dispose</code> when the
 	 * group is no longer needed.
-	 * 
+	 *
 	 * @param parent
 	 *            the widget parent
 	 * @return container of the widgets
@@ -290,7 +290,7 @@
     }
 
     /**
-     * 
+     *
     */
 	public void dispose() {
 		fixedImg.dispose();
@@ -382,7 +382,7 @@
 		@Override
 		public Object[] getChildren(Object parentElement) {
 			if (parentElement instanceof LinkedResourceEditor) {
-				ArrayList list = new ArrayList(); 
+				ArrayList list = new ArrayList();
 				Object[] objs = { BROKEN, ABSOLUTE, FIXED };
 				for (int i = 0; i < objs.length; i++) {
 					Object[] children = getChildren(objs[i]);
@@ -543,8 +543,8 @@
 	}
 
 	private void convertLocation() {
-		if (MessageDialog.openConfirm(fConvertAbsoluteButton.getShell(), 
-				IDEWorkbenchMessages.LinkedResourceEditor_convertTitle, 
+		if (MessageDialog.openConfirm(fConvertAbsoluteButton.getShell(),
+				IDEWorkbenchMessages.LinkedResourceEditor_convertTitle,
 				IDEWorkbenchMessages.LinkedResourceEditor_convertMessage)) {
 			ArrayList/* <IResource> */resources = new ArrayList/* <IResource> */();
 			IResource[] selectedResources = getSelectedResource();
@@ -642,7 +642,7 @@
 	/**
 	 * @param res
 	 * @param location
-	 * @throws CoreException 
+	 * @throws CoreException
 	 */
 	private void setLinkLocation(IResource res, IPath location) throws CoreException {
 		if (res.getType() == IResource.FILE)
@@ -719,7 +719,7 @@
 	private void convertToRelative(ArrayList/* <IResource> */resources,
 			IResource[] selectedResources) {
 		ArrayList/* <String> */report = new ArrayList/* <String> */();
-		
+
 		// first, try to use the automatic converter
 		ArrayList/* <IResource> */remaining = new ArrayList/* <IResource> */();
 		Iterator/* <IResource> */it = resources.iterator();
@@ -882,7 +882,7 @@
 			IPath commonPath = resLocation.removeLastSegments(1);
 			String variableName = getSuitablePathVariable(commonPath);
 			try {
-				fProject.getPathVariableManager().setURIValue(variableName, 
+				fProject.getPathVariableManager().setURIValue(variableName,
 						URIUtil.toURI(commonPath));
 			} catch (CoreException e) {
 				report
@@ -1052,7 +1052,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	public void reloadContent() {
 		refreshContent();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourcesPreferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourcesPreferencePage.java
index fe3257c..58c35eb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourcesPreferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/LinkedResourcesPreferencePage.java
@@ -34,12 +34,12 @@
 import org.eclipse.ui.internal.ide.ResourceDragAndDropEditor;
 
 /**
- * Preference page for linked resources. 
- * This preference page allows enabling and disabling the workbench linked 
+ * Preference page for linked resources.
+ * This preference page allows enabling and disabling the workbench linked
  * resource support.
- * It also shows all path variables currently defined in the workspace's path 
- * variable manager. The user may add, edit and remove path variables. 
- *  
+ * It also shows all path variables currently defined in the workspace's path
+ * variable manager. The user may add, edit and remove path variables.
+ *
  * @see org.eclipse.ui.internal.ide.dialogs.PathVariableDialog
  */
 public class LinkedResourcesPreferencePage extends PreferencePage implements
@@ -49,7 +49,7 @@
     /**
      */
     public static String PREF_ID = "org.eclipse.ui.preferencePages.LinkedResources"; //$NON-NLS-1$
-    
+
     private PathVariablesGroup pathVariablesGroup;
 
 	private ResourceDragAndDropEditor dragAndDropHandlingEditor;
@@ -67,7 +67,7 @@
 
     /**
      * Resets this page's internal state and creates its UI contents.
-     * 
+     *
      * @see PreferencePage#createContents(org.eclipse.swt.widgets.Composite)
      */
     @Override
@@ -144,7 +144,7 @@
 
 	/**
      * Create a composite that contains the line delimiter controls
-     * 
+     *
      * @param parent
      */
     private void createLineSeparatorEditorControls(Composite parent){
@@ -157,7 +157,7 @@
 
 		lineComposite.setLayoutData(new GridData(
                 GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
-		
+
 		dragAndDropHandlingEditor = new ResourceDragAndDropEditor(lineComposite);
 		dragAndDropHandlingEditor.doLoad();
     }
@@ -190,7 +190,7 @@
 
     /**
      * Empty implementation. This page does not use the workbench.
-     * 
+     *
      * @see IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
      */
     @Override
@@ -200,7 +200,7 @@
     /**
      * Commits the temporary state to the path variable manager in response to user
      * confirmation.
-     * 
+     *
      * @see PreferencePage#performOk()
      * @see PathVariablesGroup#performOk()
      */
@@ -212,7 +212,7 @@
 
     /**
      * Set the widget enabled state
-     * 
+     *
      * @param enableLinking the new widget enabled state
      */
     protected void updateWidgetState(boolean enableLinking) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java
index 0ceb4c5..e4501df 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/OpenResourceDialog.java
@@ -63,7 +63,7 @@
 /**
  * Shows a list of resources to the user with a text entry field for a string
  * pattern used to filter the list of resources.
- * 
+ *
  * @since 2.1
  */
 public class OpenResourceDialog extends FilteredResourcesSelectionDialog {
@@ -112,7 +112,7 @@
 					computeResult();
 					setResult(Collections.EMPTY_LIST);
 					close();
-					
+
 					IWorkbenchPage page = getActivePage();
 					IViewPart view;
 					try {
@@ -137,13 +137,13 @@
 
 	private static final int OPEN_WITH_ID = IDialogConstants.CLIENT_ID + 1;
 	private static final int SHOW_IN_ID = IDialogConstants.CLIENT_ID + 2;
-	
+
 	private Button showInButton;
 	private Button openWithButton;
 
 	/**
 	 * Creates a new instance of the class.
-	 * 
+	 *
 	 * @param parentShell
 	 *            the parent shell
 	 * @param container
@@ -165,14 +165,14 @@
 		if (selectedItems.isEmpty()) {
 			return;
 		}
-		
+
 		IWorkbenchPage activePage = getActivePage();
 		if (activePage == null) {
 			return;
 		}
 
 		menuManager.add(new Separator());
-		
+
 		// Add 'Open' menu item
 		OpenFileAction openFileAction = new OpenFileAction(activePage) {
 			@Override
@@ -183,10 +183,10 @@
 		openFileAction.selectionChanged(selectedItems);
 		if (openFileAction.isEnabled()) {
 			menuManager.add(openFileAction);
-			
+
 			IAdaptable selectedAdaptable = getSelectedAdaptable();
 			if (selectedAdaptable != null) {
-				
+
 				// Add 'Open With' sub-menu
 				MenuManager subMenu = new MenuManager(IDEWorkbenchMessages.OpenResourceDialog_openWithMenu_label);
 				OpenWithMenu openWithMenu = new ResourceOpenWithMenu(activePage, selectedAdaptable);
@@ -194,8 +194,8 @@
 				menuManager.add(subMenu);
 			}
 		}
-		
-		
+
+
 		// Add 'Show In' sub-menu
 		MenuManager showInMenuManager = new MenuManager(IDEWorkbenchMessages.OpenResourceDialog_showInMenu_label);
 		ShowInMenu showInMenu = new ResourceShowInMenu(selectedItems, activePage.getWorkbenchWindow());
@@ -216,7 +216,7 @@
 					}
 				});
 		setButtonLayoutData(showInButton);
-		
+
 		openWithButton = createDropdownButton(parent, OPEN_WITH_ID, IDEWorkbenchMessages.OpenResourceDialog_openWithButton_text,
 				new MouseAdapter() {
 					@Override
@@ -225,16 +225,16 @@
 					}
 				});
 		setButtonLayoutData(openWithButton);
-		
+
 		GridData showInLayoutData = (GridData) showInButton.getLayoutData();
 		GridData openWithLayoutData = (GridData) openWithButton.getLayoutData();
 		int buttonWidth = Math.max(showInLayoutData.widthHint, openWithLayoutData.widthHint);
 		showInLayoutData.widthHint = buttonWidth;
 		openWithLayoutData.widthHint = buttonWidth;
-		
+
 		new Label(parent, SWT.NONE).setLayoutData(new GridData(5, 0));
 		parentLayout.numColumns++;
-		
+
 		Button okButton = createButton(parent, IDialogConstants.OK_ID, IDEWorkbenchMessages.OpenResourceDialog_openButton_text, true);
 		Button cancelButton = createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
 
@@ -327,7 +327,7 @@
 		if (selectedItems.isEmpty()) {
 			return;
 		}
-		
+
 		ShowInMenu showInMenu = new ResourceShowInMenu(selectedItems, activePage.getWorkbenchWindow());
 		showMenu(showInButton, showInMenu);
 	}
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableDialog.java
index 188af54..1c83e51 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableDialog.java
@@ -63,7 +63,7 @@
     private Label variableNameLabel;
 
     private Label variableValueLabel;
-    
+
     private Label variableResolvedValueLabel;
 
     private Text variableNameField;
@@ -140,12 +140,12 @@
     private String validationMessage;
 
     /**
-     * Whether a variable name has been entered.  
+     * Whether a variable name has been entered.
      */
     private boolean nameEntered = false;
 
     /**
-     * Whether a variable location has been entered.  
+     * Whether a variable location has been entered.
      */
     private boolean locationEntered = false;
 
@@ -177,14 +177,14 @@
 
     /**
      * Constructs a dialog for editing a new/existing path variable.
-     * 
+     *
      * @param parentShell the parent shell
      * @param type the dialog type: <code>NEW_VARIABLE</code> or
      * 	<code>EXISTING_VARIABLE</code>
-     * @param variableType the type of variable that can be edited in 
+     * @param variableType the type of variable that can be edited in
      * 	this dialog. <code>IResource.FILE</code> or <code>IResource.FOLDER</code>
      * @param pathVariableManager a reference to the path variable manager
-     * @param namesInUse a set of variable names currently in use 
+     * @param namesInUse a set of variable names currently in use
      */
     public PathVariableDialog(Shell parentShell, int type, int variableType,
             IPathVariableManager pathVariableManager, Set namesInUse) {
@@ -207,7 +207,7 @@
 
     /**
      * Configures this dialog's shell, setting the shell's text.
-     * 
+     *
      * @see org.eclipse.jface.window.Window#configureShell(Shell)
      */
     @Override
@@ -223,7 +223,7 @@
 
     /**
      * Creates and returns the contents of this dialog (except for the button bar).
-     * 
+     *
      * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea
      */
     @Override
@@ -232,11 +232,11 @@
         Composite parentComposite = (Composite) super.createDialogArea(parent);
 
         initializeDialogUnits(parentComposite);
-        
+
         // creates dialog area composite
         Composite contents = createComposite(parentComposite);
 
-        // creates and lay outs dialog area widgets 
+        // creates and lay outs dialog area widgets
         createWidgets(contents);
 
         // validate possibly already incorrect variable definitions
@@ -246,13 +246,13 @@
         }
 
         Dialog.applyDialogFont(parentComposite);
-        
+
         return contents;
     }
 
     /**
      * Creates and configures this dialog's main composite.
-     * 
+     *
      * @param parentComposite parent's composite
      * @return this dialog's main composite
      */
@@ -275,7 +275,7 @@
 
     /**
      * Creates widgets for this dialog.
-     * 
+     *
      * @param contents the parent composite where to create widgets
      */
     private void createWidgets(Composite contents) {
@@ -301,7 +301,7 @@
 	            }
 	        });
         }
-        
+
         // variable value label
         variableValueLabel = new Label(contents, SWT.LEAD);
         variableValueLabel.setText(valueLabelText);
@@ -318,7 +318,7 @@
                 variableValueModified();
             }
         });
-        
+
         Composite buttonsComposite = new Composite(contents, SWT.NONE);
         buttonsComposite.setLayoutData(new GridData(SWT.END, SWT.CENTER, false,
         		false, 1, 1));
@@ -334,7 +334,7 @@
 	        fileButton.setText(IDEWorkbenchMessages.PathVariableDialog_file);
 	        fileButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,
 	        		false));
-	
+
 	        fileButton.addSelectionListener(new SelectionAdapter() {
 	            @Override
 				public void widgetSelected(SelectionEvent e) {
@@ -351,7 +351,7 @@
 	        folderButton.setText(IDEWorkbenchMessages.PathVariableDialog_folder);
 	        folderButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,
 	        		false));
-	
+
 	        folderButton.addSelectionListener(new SelectionAdapter() {
 	            @Override
 				public void widgetSelected(SelectionEvent e) {
@@ -366,10 +366,10 @@
         	layout.numColumns++;
 	    	variableButton = new Button(buttonsComposite, SWT.PUSH);
 	    	variableButton.setText(IDEWorkbenchMessages.PathVariableDialog_variable);
-	
+
 	 	    variableButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false,
 	    		false));
-	
+
 	        variableButton.addSelectionListener(new SelectionAdapter() {
 	            @Override
 				public void widgetSelected(SelectionEvent e) {
@@ -395,7 +395,7 @@
     		return currentResource.getPathVariableManager();
     	return ResourcesPlugin.getWorkspace().getPathVariableManager();
     }
-    
+
     private String getVariableResolvedValue() {
         if (currentResource != null) {
         	IPathVariableManager pathVariableManager2 = currentResource.getPathVariableManager();
@@ -405,7 +405,7 @@
         	URI resolvedURI = pathVariableManager2.resolveURI(uri);
         	String resolveValue = URIUtil.toPath(resolvedURI).toOSString();
         	// Delete intermediate variables that might have been created as
-        	// as a side effect of converting arbitrary relative paths to an internal string. 
+        	// as a side effect of converting arbitrary relative paths to an internal string.
         	String[] newVariables = pathVariableManager2.getPathVariableNames();
         	for (int i = 0; i < newVariables.length; i++) {
         		boolean found = false;
@@ -427,7 +427,7 @@
         }
         return variableValue;
     }
-    
+
     /**
      * Fires validations (variable name first) and updates enabled state for the
      * "Ok" button accordingly.
@@ -451,7 +451,7 @@
         okButton.setEnabled(validateVariableValue() && validateVariableName());
         locationEntered = true;
         if (variableResolvedValueField != null)
-        	variableResolvedValueField.setText(TextProcessor.process(getVariableResolvedValue()));        
+        	variableResolvedValueField.setText(TextProcessor.process(getVariableResolvedValue()));
     }
 
     /**
@@ -512,7 +512,7 @@
 
 	/**
      * Adds buttons to this dialog's button bar.
-     * 
+     *
      * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar
      */
     @Override
@@ -527,7 +527,7 @@
 
     /**
      * Validates the current variable name, and updates this dialog's message.
-     * 
+     *
      * @return true if the name is valid, false otherwise
      */
     private boolean validateVariableName() {
@@ -575,7 +575,7 @@
             validationStatus = newValidationStatus;
             validationMessage = message;
         }
-        // only set the message here if it is not going to be set in 
+        // only set the message here if it is not going to be set in
         // validateVariableValue to avoid flashing.
         if (allowFinish == false) {
 			setMessage(validationMessage, validationStatus);
@@ -585,7 +585,7 @@
 
     /**
      * Validates the current variable value, and updates this dialog's message.
-     * 
+     *
      * @return true if the value is valid, false otherwise
      */
     private boolean validateVariableValue() {
@@ -661,7 +661,7 @@
 
     /**
      * Returns the variable name.
-     * 
+     *
      * @return the variable name
      */
     public String getVariableName() {
@@ -670,7 +670,7 @@
 
     /**
      * Returns the variable value.
-     * 
+     *
      * @return the variable value
      */
     public String getVariableValue() {
@@ -683,7 +683,7 @@
 
     /**
      * Sets the variable name.
-     * 
+     *
      * @param variableName the new variable name
      */
     public void setVariableName(String variableName) {
@@ -693,7 +693,7 @@
 
     /**
      * Sets the variable value.
-     * 
+     *
      * @param variable the new variable value
      */
     public void setVariableValue(String variable) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableEditDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableEditDialog.java
index 1da7adc..5d0522d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableEditDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariableEditDialog.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
  *     Serge Beauchamp (Freescale Semiconductor) - [229633] Project Path Variable Support
@@ -25,7 +25,7 @@
 /**
  * A dialog that allows a user to browse, edit, add, and remove path variables
  * for a given project.
- * 
+ *
  * @since 3.6
  */
 public class PathVariableEditDialog extends SelectionDialog {
@@ -34,7 +34,7 @@
 
 	/**
 	 * Creates a path variable selection dialog.
-	 * 
+	 *
 	 * @param parentShell
 	 *            the parent shell
 	 */
@@ -105,7 +105,7 @@
 
 	/**
 	 * Sets the project for which variables are being edited
-	 * 
+	 *
 	 * @param resource
 	 *            The project whose variables are being edited
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java
index a7322d3..69b021a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/PathVariablesGroup.java
@@ -74,9 +74,9 @@
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 
 /**
- * A widget group that displays path variables. 
+ * A widget group that displays path variables.
  * Includes buttons to edit, remove existing variables and create new ones.
- * 
+ *
  * @since 2.1
  */
 public class PathVariablesGroup {
@@ -134,7 +134,7 @@
 
     // if set to true, variables will be saved after each change
     private boolean saveVariablesOnChange = false;
-    
+
     // file image
     private final Image FILE_IMG = PlatformUI.getWorkbench().getSharedImages()
             .getImage(ISharedImages.IMG_OBJ_FILE);
@@ -153,12 +153,12 @@
     private IResource currentResource = null;
 
     private final static String PARENT_VARIABLE_NAME = "PARENT"; //$NON-NLS-1$
-    
+
 	/**
      * Creates a new PathVariablesGroup.
      *
      * @param multiSelect create a multi select tree
-     * @param variableType the type of variables that are displayed in 
+     * @param variableType the type of variables that are displayed in
      * 	the widget group. <code>IResource.FILE</code> and/or <code>IResource.FOLDER</code>
      * 	logically ORed together.
      */
@@ -177,7 +177,7 @@
      * Creates a new PathVariablesGroup.
      *
      * @param multiSelect create a multi select tree
-     * @param variableType the type of variables that are displayed in 
+     * @param variableType the type of variables that are displayed in
      * 	the widget group. <code>IResource.FILE</code> and/or <code>IResource.FOLDER</code>
      * 	logically ORed together.
      * @param selectionListener listener notified when the selection changes
@@ -217,9 +217,9 @@
 
     /**
      * Creates the widget group.
-     * Callers must call <code>dispose</code> when the group is no 
+     * Callers must call <code>dispose</code> when the group is no
      * longer needed.
-     * 
+     *
      * @param parent the widget parent
      * @return container of the widgets
      */
@@ -267,7 +267,7 @@
         if (multiSelect) {
             tableStyle |= SWT.MULTI;
         }
-        
+
 		Composite tableComposite = new Composite(pageComponent, SWT.NONE);
 		data = new GridData(SWT.FILL, SWT.FILL, true, true);
 		data.grabExcessHorizontalSpace = true;
@@ -284,7 +284,7 @@
 				}
             }
         });
-        
+
         variableTable.getTable().setFont(font);
 		ColumnViewerToolTipSupport.enableFor(variableTable, ToolTip.NO_RECREATE);
 
@@ -295,7 +295,7 @@
         TableViewerColumn valueColumn = new TableViewerColumn(variableTable, SWT.NONE);
         valueColumn.setLabelProvider(new ValueLabelProvider());
         valueColumn.getColumn().setText(IDEWorkbenchMessages.PathVariablesBlock_valueColumn);
-        
+
         TableColumnLayout tableLayout = new TableColumnLayout();
 		tableComposite.setLayout( tableLayout );
 
@@ -330,7 +330,7 @@
 		        updateEnabledState();
 			}
         });
-        
+
         variableTable.getTable().setToolTipText(null);
         variableTable.setContentProvider(new ContentProvider());
         variableTable.setInput(this);
@@ -373,9 +373,9 @@
             else
             	cell.setImage(BUILTIN_IMG);
 		}
-    	
+
     }
-    
+
     class ValueLabelProvider extends CellLabelProvider
     {
 		@Override
@@ -406,11 +406,11 @@
             IPath value = (IPath) tempPathVariables.get(cell.getElement());
 			cell.setText(TextProcessor.process(removeParentVariable(value.toOSString())));
 		}
-    	
+
     }
 
 	/**
-     * Disposes the group's resources. 
+     * Disposes the group's resources.
      */
     public void dispose() {
         if (imageUnkown != null) {
@@ -461,9 +461,9 @@
 
     /**
      * Returns the enabled state of the group's widgets.
-     * Returns <code>true</code> if called prior to calling 
+     * Returns <code>true</code> if called prior to calling
      * <code>createContents</code>.
-     * 
+     *
      * @return boolean the enabled state of the group's widgets.
      * 	 <code>true</code> if called prior to calling <code>createContents</code>.
      */
@@ -476,14 +476,14 @@
 
     /**
      * Automatically save the path variable list when new variables
-     * are added, changed, or removed by the user. 
-     * @param value 
+     * are added, changed, or removed by the user.
+     * @param value
      *
      */
     public void setSaveVariablesOnChange(boolean value) {
     	saveVariablesOnChange = value;
     }
-    
+
     private void saveVariablesIfRequired() {
     	if (saveVariablesOnChange) {
     		performOk();
@@ -491,9 +491,9 @@
     }
     /**
      * Returns the selected variables.
-     *  
-     * @return the selected variables. Returns an empty array if 
-     * 	the widget group has not been created yet by calling 
+     *
+     * @return the selected variables. Returns an empty array if
+     * 	the widget group has not been created yet by calling
      * 	<code>createContents</code>
      */
     public PathVariableElement[] getSelection() {
@@ -514,7 +514,7 @@
 
     /**
      * Creates the add/edit/remove buttons
-     * 
+     *
      * @param parent the widget parent
      */
     private void createButtonGroup(Composite parent) {
@@ -569,7 +569,7 @@
      * Initializes the computation of horizontal and vertical dialog units
      * based on the size of current font.
      * <p>
-     * This method must be called before <code>setButtonLayoutData</code> 
+     * This method must be called before <code>setButtonLayoutData</code>
      * is called.
      * </p>
      *
@@ -631,10 +631,10 @@
 		public Object[] getElements(Object inputElement) {
 			return tempPathVariables.keySet().toArray();
 		}
-		
+
 		@Override
 		public void dispose() { }
-		
+
 		@Override
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { }
 	}
@@ -647,7 +647,7 @@
     private String removeParentVariable(String value) {
     	return pathVariableManager.convertToUserEditableFormat(value, false);
     }
-    
+
     /**
      * Commits the temporary state to the path variable manager in response to user
      * confirmation.
@@ -656,7 +656,7 @@
      */
     public boolean performOk() {
         try {
-            // first process removed variables  
+            // first process removed variables
             for (Iterator removed = removedVariableNames.iterator(); removed
                     .hasNext();) {
                 String removedVariableName = (String) removed.next();
@@ -746,7 +746,7 @@
     /**
      * Sets the enabled state of the group's widgets.
      * Does nothing if called prior to calling <code>createContents</code>.
-     * 
+     *
      * @param enabled the new enabled state of the group's widgets
      */
     public void setEnabled(boolean enabled) {
@@ -764,11 +764,11 @@
     }
 
     /**
-     * Updates the widget's current state: refreshes the table with the current 
-     * defined variables, selects the item corresponding to the given variable 
-     * (selects the first item if <code>null</code> is provided) and updates 
+     * Updates the widget's current state: refreshes the table with the current
+     * defined variables, selects the item corresponding to the given variable
+     * (selects the first item if <code>null</code> is provided) and updates
      * the enabled state for the Add/Remove/Edit buttons.
-     * 
+     *
      */
     private void updateWidgetState() {
     	variableTable.refresh();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java
index 5baa0b8..646f818 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectContentsLocationArea.java
@@ -47,27 +47,27 @@
 /**
  * ProjectContentsLocationArea is a convenience class for area that handle entry
  * of locations using URIs.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class ProjectContentsLocationArea {
 	/**
 	 * IErrorMessageReporter is an interface for type that allow message
 	 * reporting.
-	 * 
+	 *
 	 */
 	public interface IErrorMessageReporter {
 		/**
 		 * Report the error message
-		 * 
+		 *
 		 * @param errorMessage
 		 *            String or <code>null</code>. If the errorMessage is
 		 *            null then clear any error state.
 		 * @param infoOnly
 		 *            the message is an informational message, but the dialog
 		 *            cannot continue
-		 * 
+		 *
 		 */
 		public void reportError(String errorMessage, boolean infoOnly);
 	}
@@ -100,7 +100,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param reporter
 	 * @param composite
 	 * @param startProject
@@ -126,7 +126,7 @@
 
 	/**
 	 * Create a new instance of a ProjectContentsLocationArea.
-	 * 
+	 *
 	 * @param reporter
 	 * @param composite
 	 */
@@ -140,7 +140,7 @@
 
 	/**
 	 * Create the contents of the receiver.
-	 * 
+	 *
 	 * @param composite
 	 * @param defaultEnabled
 	 */
@@ -189,7 +189,7 @@
 	/**
 	 * Return whether or not we are currently showing the default location for
 	 * the project.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	public boolean isDefault() {
@@ -198,7 +198,7 @@
 
 	/**
 	 * Create the area for user entry.
-	 * 
+	 *
 	 * @param composite
 	 * @param defaultEnabled
 	 */
@@ -249,7 +249,7 @@
 
 	/**
 	 * Create the file system selection area.
-	 * 
+	 *
 	 * @param composite
 	 */
 	private void createFileSystemSelection(Composite composite) {
@@ -268,7 +268,7 @@
 	/**
 	 * Return the path we are going to display. If it is a file URI then remove
 	 * the file prefix.
-	 * 
+	 *
 	 * @return String
 	 */
 	private String getDefaultPathDisplayString() {
@@ -288,7 +288,7 @@
 
 	/**
 	 * Set the enablement state of the receiver.
-	 * 
+	 *
 	 * @param enabled
 	 */
 	private void setUserAreaEnabled(boolean enabled) {
@@ -304,7 +304,7 @@
 	/**
 	 * Return the browse button. Usually referenced in order to set the layout
 	 * data for a dialog.
-	 * 
+	 *
 	 * @return Button
 	 */
 	public Button getBrowseButton() {
@@ -319,7 +319,7 @@
 		}
 		return result;
 	}
-	
+
 	/**
 	 * Open an appropriate directory browser
 	 */
@@ -369,7 +369,7 @@
 
 	/**
 	 * Update the location field based on the selected path.
-	 * 
+	 *
 	 * @param selectedPath
 	 */
 	private void updateLocationField(String selectedPath) {
@@ -378,7 +378,7 @@
 
 	/**
 	 * Return the path on the location field.
-	 * 
+	 *
 	 * @return the path or the field's text if the path is invalid
 	 */
 	private String getPathFromLocationField() {
@@ -395,7 +395,7 @@
 	/**
 	 * Check if the entry in the widget location is valid. If it is valid return
 	 * null. Otherwise return a string that indicates the problem.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String checkValidLocation() {
@@ -431,7 +431,7 @@
 
 	/**
 	 * Get the URI for the location field if possible.
-	 * 
+	 *
 	 * @return URI or <code>null</code> if it is not valid.
 	 */
 	public URI getProjectLocationURI() {
@@ -448,7 +448,7 @@
 
 	/**
 	 * Return the selected contributor
-	 * 
+	 *
 	 * @return FileSystemConfiguration or <code>null</code> if it cannot be
 	 *         determined.
 	 */
@@ -463,7 +463,7 @@
 
 	/**
 	 * Set the text to the default or clear it if not using the defaults.
-	 * 
+	 *
 	 * @param newName
 	 *            the name of the project to use. If <code>null</code> use the
 	 *            existing project name.
@@ -480,7 +480,7 @@
 	/**
 	 * Return the location for the project. If we are using defaults then return
 	 * the workspace root so that core creates it with default values.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getProjectLocation() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectLinkedResourcePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectLinkedResourcePage.java
index f01248d..3f28580 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectLinkedResourcePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectLinkedResourcePage.java
@@ -45,9 +45,9 @@
 
 	 private PathVariablesGroup pathVariablesGroup;
 	 private LinkedResourceEditor linkedResourceEditor;
-	 
+
 	 /**
-	 * 
+	 *
 	 */
 	public ProjectLinkedResourcePage() {
 		 pathVariablesGroup = new PathVariablesGroup(true, IResource.FILE | IResource.FOLDER);
@@ -89,7 +89,7 @@
         tabFolder.addSelectionListener(new SelectionListener() {
 			@Override
 			public void widgetDefaultSelected(SelectionEvent e) {
-				
+
 			}
 			@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -100,7 +100,7 @@
 					switchToPathVariables();
 			}
         });
-        
+
         pageComponent.setLayout(layout);
         data = new GridData();
         data.verticalAlignment = GridData.FILL;
@@ -111,7 +111,7 @@
         tabFolder.setFont(font);
 
         TabItem variableItem = new TabItem(tabFolder, SWT.BORDER);
-        
+
         Composite variableComposite = new Composite(tabFolder, 0);
         variableComposite.setLayout(new GridLayout());
         variableComposite.setFont(font);
@@ -181,8 +181,8 @@
 
     /**
      * Empty implementation. This page does not use the workbench.
-     * @param workbench 
-     * 
+     * @param workbench
+     *
      * @see IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench)
      */
     public void init(IWorkbench workbench) {
@@ -191,7 +191,7 @@
     /**
      * Commits the temporary state to the path variable manager in response to user
      * confirmation.
-     * 
+     *
      * @see PreferencePage#performOk()
      * @see PathVariablesGroup#performOk()
      */
@@ -202,7 +202,7 @@
 
     /**
      * Set the widget enabled state
-     * 
+     *
      * @param enableLinking the new widget enabled state
      */
     protected void updateWidgetState(boolean enableLinking) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectReferencePage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectReferencePage.java
index a452417..bd8fb32 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectReferencePage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ProjectReferencePage.java
@@ -63,16 +63,16 @@
 	protected Control createContents(Composite parent) {
     	PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
                 IIDEHelpContextIds.PROJECT_REFERENCE_PROPERTY_PAGE);
-    	
+
         Composite composite = new Composite(parent, SWT.NONE);
-        
+
         initialize();
 
         createDescriptionLabel(composite);
 
         listViewer = CheckboxTableViewer.newCheckList(composite, SWT.TOP
                 | SWT.BORDER);
-        
+
         if(!project.isOpen())
         	listViewer.getControl().setEnabled(false);
 
@@ -97,9 +97,9 @@
         });
 
         applyDialogFont(composite);
-        
+
         GridLayoutFactory.fillDefaults().generateLayout(composite);
-        
+
         return composite;
     }
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/RelativePathVariableGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/RelativePathVariableGroup.java
index cce82b6..6e38c7f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/RelativePathVariableGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/RelativePathVariableGroup.java
@@ -40,15 +40,15 @@
 public class RelativePathVariableGroup {
 
 	private Button variableCheckbox = null;
-	
+
 	private Combo variableCombo = null;
-	
+
 	private Shell shell;
-	
+
 	private IModel content;
-	
+
 	private String label;
-	
+
 	public interface IModel {
 		/**
 		 * @return
@@ -66,7 +66,7 @@
 		String getVariable();
 	}
 	/**
-	 * 
+	 *
 	 */
 	public RelativePathVariableGroup(IModel content) {
 		this.content = content;
@@ -78,7 +78,7 @@
 	}
 
 	/**
-	 * @param variableGroup 
+	 * @param variableGroup
 	 * @return the control
 	 */
 	public Control createContents(Composite variableGroup) {
@@ -112,7 +112,7 @@
 				setupVariableCheckboxToolTip();
 			}
 		});
-		
+
 		variableCombo = new Combo(variableGroup, SWT.DROP_DOWN | SWT.READ_ONLY);
 		gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING); // GridData.FILL_HORIZONTAL);
 		variableCombo.setLayoutData(gridData);
@@ -139,7 +139,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	public void setupVariableContent() {
 		IPathVariableManager pathVariableManager;
@@ -148,7 +148,7 @@
 		else
 			pathVariableManager = ResourcesPlugin.getWorkspace().getPathVariableManager();
 		String[] variables = pathVariableManager.getPathVariableNames();
-		
+
 		ArrayList items = new ArrayList();
 		for (int i = 0; i < variables.length; i++) {
 			if (variables[i].equals("PARENT")) //$NON-NLS-1$
@@ -232,13 +232,13 @@
 	 * A priority is given as to variables enclosing the root, as others
 	 * only being enclosed by the root.
 	 *
-	 * So if there's two variables, being 
+	 * So if there's two variables, being
 	 * 		FOO - c:\foo\
 	 * 		DIR1 - c:\foo\path\bar\dir1
 	 * And the common root is:
 	 * 		c:\foo\path\bar
-	 * FOO will be selected over DIR1, even through the distance between 
-	 * the common root and DIR1 is (1), and the distance between the 
+	 * FOO will be selected over DIR1, even through the distance between
+	 * the common root and DIR1 is (1), and the distance between the
 	 * common root and FOO is (2).  This is because selecting DIR1 would
 	 * cause the location to be relative to its parent.
 
@@ -264,14 +264,14 @@
 				}
 			}
 		}
-		
+
 		String mostAppropriate = null;
 		String mostAppropriateToParent = null;
 		int mostAppropriateCount = Integer.MAX_VALUE;
 		int mostAppropriateCountToParent = Integer.MAX_VALUE;
 		IPathVariableManager pathVariableManager = target.getPathVariableManager();
 		String [] variables = pathVariableManager.getPathVariableNames();
-		
+
 		for (int i = 0; i < variables.length; i++) {
 			if (isPreferred(variables[i])) {
 				URI rawValue = pathVariableManager.getURIValue(variables[i]);
@@ -300,7 +300,7 @@
 				}
 			}
 		}
-		
+
 		if (mostAppropriate == null) {
 			if (mostAppropriateToParent == null)
 				return "PROJECT_LOC"; //$NON-NLS-1$
@@ -308,7 +308,7 @@
 		}
 		return mostAppropriate;
 	}
-	
+
 	private static boolean isPreferred(String variableName) {
 		return !(variableName.equals("WORKSPACE_LOC") || //$NON-NLS-1$
 				variableName.equals("PARENT_LOC") || //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceComparator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceComparator.java
index 402b1ef..b2e0e8b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceComparator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceComparator.java
@@ -49,7 +49,7 @@
     /**
      * Creates a resource sorter that will use the given sort criteria.
      *
-     * @param criteria the sort criterion to use: one of <code>NAME</code> or 
+     * @param criteria the sort criterion to use: one of <code>NAME</code> or
      *   <code>TYPE</code>
      */
     public ResourceComparator(int criteria) {
@@ -58,7 +58,7 @@
     }
 
     /**
-     * Returns an integer value representing the relative sort priority of the 
+     * Returns an integer value representing the relative sort priority of the
      * given element based on its class.
      * <p>
      * <ul>
@@ -81,7 +81,7 @@
     @Override
 	public int compare(Viewer viewer, Object o1, Object o2) {
         //have to deal with non-resources in navigator
-        //if one or both objects are not resources, returned a comparison 
+        //if one or both objects are not resources, returned a comparison
         //based on class.
         if (!(o1 instanceof IResource && o2 instanceof IResource)) {
             return compareClass(o1, o2);
@@ -110,7 +110,7 @@
      *
      * @param element1 the first element to be ordered
      * @param element2 the second element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -125,7 +125,7 @@
      *
      * @param resource1 the first resource element to be ordered
      * @param resource2 the second resource element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -141,7 +141,7 @@
      *
      * @param resource1 the first resource element to be ordered
      * @param resource2 the second resource element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterEditDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterEditDialog.java
index 5bfcd8d..5f3c459 100755
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterEditDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterEditDialog.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:
  *     Serge Beauchamp (Freescale Semiconductor) - initial API and implementation
  *******************************************************************************/
@@ -32,7 +32,7 @@
 
 	/**
 	 * Creates a resource filter edit dialog.
-	 * 
+	 *
 	 * @param parentShell
 	 *            the parent shell
 	 */
@@ -45,7 +45,7 @@
 
 	/**
 	 * Set the container resource to be edited.
-	 * 
+	 *
 	 * @param container
 	 */
 	public void setContainer(IContainer container) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java
index 3e05002..10dd3b9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterGroup.java
@@ -209,7 +209,7 @@
 
 	/**
 	 * Set the IContainer resource to edit
-	 * 
+	 *
 	 * @param res
 	 *            the container resource
 	 */
@@ -357,7 +357,7 @@
 	static String excludeAllGroup = "EXCLUDE_ALL_GROUP";  //$NON-NLS-1$
 
 	class TreeContentProvider implements ITreeContentProvider {
-		
+
 		@Override
 		public Object[] getChildren(Object parentElement) {
 			if (parentElement == filters) {
@@ -485,14 +485,14 @@
 			}
 			else {
 				filter = (FilterCopy) element;
-	
+
 				if (column.equals(FilterTypeUtil.MODE)) {
 					StyledString styledString = getStyleColumnText(filter);
 					if (!isPartialFilter(filter)) {
 						Object isInheritable = FilterTypeUtil.getValue(filter, FilterTypeUtil.INHERITABLE);
 						if (((Boolean)isInheritable).booleanValue())
 							styledString.append("   " + IDEWorkbenchMessages.ResourceFilterPage_recursive); //$NON-NLS-1$
-						
+
 					}
 					cell.setText(styledString.toString());
 					cell.setStyleRanges(styledString.getStyleRanges());
@@ -508,7 +508,7 @@
 
 			super.update(cell);
 		}
-		
+
 		private StyledString getStyleColumnText(FilterCopy filter) {
 			if ((filter.getChildrenLimit() > 0)) {
 				String whiteSpace = " "; //$NON-NLS-1$;
@@ -554,7 +554,7 @@
 			return ""; //$NON-NLS-1$
 		}
 	}
-	
+
 	class CellModifier implements ICellModifier {
 		@Override
 		public boolean canModify(Object element, String property) {
@@ -582,7 +582,7 @@
 	/**
 	 * Creates the widget group. Callers must call <code>dispose</code> when the
 	 * group is no longer needed.
-	 * 
+	 *
 	 * @param parent
 	 *            the widget parent
 	 * @return container of the widgets
@@ -624,7 +624,7 @@
 		data.horizontalSpan = 2;
 		label.setLayoutData(data);
 		label.setFont(font);
-		
+
 		createViewerGroup(composite);
 		createButtonGroup(composite);
 
@@ -804,7 +804,7 @@
 	class AddSubFilterAction extends Action {
 
 		boolean createGroupOnly;
-		
+
 		public AddSubFilterAction(boolean createGroupOnly) {
 			this.createGroupOnly = createGroupOnly;
 			setText(NLS
@@ -845,7 +845,7 @@
 		}
 		handleAdd(selectedObject, createGroupOnly);
 	}
-	
+
 	private void handleAdd(Object selection, boolean createGroupOnly) {
 		if (selection == null) {
 			FilterCopy newFilter = new FilterCopy();
@@ -1013,7 +1013,7 @@
 				handleAdd(false);
 			}
 		});
-		
+
 		addGroupButton = new Button(composite, SWT.PUSH);
 		addGroupButton.setText(NLS.bind(
 				IDEWorkbenchMessages.ResourceFilterPage_addGroupButtonLabel, null));
@@ -1026,7 +1026,7 @@
 				handleAdd(true);
 			}
 		});
-		
+
 
 		editButton = new Button(composite, SWT.PUSH);
 		editButton.setText(NLS.bind(
@@ -1221,7 +1221,7 @@
 
 	/**
 	 * Apply the read only state and the encoding to the resource.
-	 * 
+	 *
 	 * @return true if the filters changed
 	 */
 	public boolean performOk() {
@@ -1846,8 +1846,8 @@
 
 	@Override
 	public FileInfoMatcherDescription getFileInfoMatcherDescription() {
-		
-		
+
+
 		Object arg = FilterCopy.this.getArguments();
 		if (arg instanceof FilterCopy []) {
 			FilterCopy [] filterCopies = (FilterCopy []) arg;
@@ -1856,7 +1856,7 @@
 				descriptions[i] = filterCopies[i].getFileInfoMatcherDescription();
 			arg = descriptions;
 		}
-		
+
 		FileInfoMatcherDescription desc = new FileInfoMatcherDescription(getId(), arg);
 		return desc;
 	}
@@ -1960,7 +1960,7 @@
 			createModeArea(font, topComposite);
 
 			createTargetArea(font, topComposite);
-			
+
 			createIdArea(font, topComposite);
 		}
 		else {
@@ -1989,7 +1989,7 @@
         	Control helpControl = createHelpControl(composite);
         	((GridData) helpControl.getLayoutData()).horizontalIndent = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
 		}
-       
+
         Control buttonSection = dialogCreateButtonBar(composite);
         ((GridData) buttonSection.getLayoutData()).grabExcessHorizontalSpace = true;
         return composite;
@@ -2011,7 +2011,7 @@
 				| GridData.VERTICAL_ALIGN_CENTER);
 		composite.setLayoutData(data);
 		composite.setFont(parent.getFont());
-		
+
 		// Add the buttons to the button bar.
 		createButtonsForButtonBar(composite);
 		return composite;
@@ -2038,7 +2038,7 @@
 		inherited = new Button(inheritableComposite, SWT.CHECK);
 		String label;
 		label = IDEWorkbenchMessages.ResourceFilterPage_applyRecursivelyToFolderStructure;
-		
+
 		inherited
 				.setText(NLS
 						.bind(
@@ -2159,7 +2159,7 @@
 		FilterTypeUtil.setValue(filter, FilterTypeUtil.ID, idCombo
 				.getItem(idCombo.getSelectionIndex()));
 	}
-	
+
 
 	ICustomFilterArgumentUI getUI(String descriptorID) {
 		ICustomFilterArgumentUI result = (ICustomFilterArgumentUI) customfilterArgumentMap.get(descriptorID);
@@ -2167,7 +2167,7 @@
 			return result = (ICustomFilterArgumentUI) customfilterArgumentMap.get(new String()); // default ui
 		return result;
 	}
-	
+
 	private void setupPatternLine() {
 		IFilterMatcherDescriptor descriptor;
 		if (createGroupOnly) {
@@ -2186,7 +2186,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	private void selectComboItem(String filterID) {
 		IFilterMatcherDescriptor descriptor = ResourcesPlugin.getWorkspace()
@@ -2239,7 +2239,7 @@
 		GridData data;
 		Composite targetComposite = createGroup(font, composite,
 				NLS.bind(IDEWorkbenchMessages.ResourceFilterPage_columnFilterTarget, null), false, true, 1);
-		
+
 		String[] targets = FilterTypeUtil.getTargets();
 		filesButton = new Button(targetComposite, SWT.RADIO);
 		filesButton.setText(targets[0]);
@@ -2387,12 +2387,12 @@
 
 	/**
 	 * @return null if there's no issue
-	 * 
+	 *
 	 */
 	String validate();
 
 	/**
-	 * 
+	 *
 	 */
 	void selectionChanged();
 
@@ -2403,10 +2403,10 @@
 	void create(Composite argumentComposite, Font font);
 
 	/**
-	 * 
+	 *
 	 */
 	void dispose();
-	
+
 }
 
 class MultiMatcherCustomFilterArgumentUI implements ICustomFilterArgumentUI {
@@ -2435,7 +2435,7 @@
 	protected FilterEditDialog dialog;
 	protected Label dummyLabel1;
 	protected Label dummyLabel2;
-	
+
 	/**
 	 * @param dialog
 	 * @param parentShell
@@ -2494,7 +2494,7 @@
 		GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
 		argumentComposite.setLayoutData(data);
 		argumentComposite.setFont(font);
-		
+
 		conditionComposite = new Composite(argumentComposite, SWT.NONE);
 		layout = new GridLayout();
 		layout.numColumns = 2;
@@ -2507,7 +2507,7 @@
 		conditionComposite.setLayoutData(data);
 
 		createCustomArgumentsArea(font, conditionComposite);
-		
+
 		descriptionComposite = new Composite(argumentComposite, SWT.NONE);
 		layout = new GridLayout();
 		layout.numColumns = 1;
@@ -2518,11 +2518,11 @@
 		descriptionComposite.setFont(font);
 		data = new GridData(SWT.FILL, SWT.FILL, true, true);
 		descriptionComposite.setLayoutData(data);
-		
+
 		createDescriptionArea(font, descriptionComposite);
 		initializationComplete = true;
 	}
-	
+
 	/**
 	 * @param font
 	 * @param composite
@@ -2574,7 +2574,7 @@
 			shell.layout(true, true);
 		}
 	}
-	
+
 	private void createCustomArgumentsArea(Font font, Composite composite) {
 		GridData data;
 
@@ -2589,7 +2589,7 @@
 		multiArgumentComposite.setFont(font);
 		data = new GridData(SWT.FILL, SWT.FILL, true, true);
 		multiArgumentComposite.setLayoutData(data);
-		
+
 		multiKey = new Combo(multiArgumentComposite, SWT.READ_ONLY);
 		multiKey.setItems(getMultiMatcherKeys());
 		data = new GridData(SWT.LEFT, SWT.TOP, false, false);
@@ -2602,7 +2602,7 @@
 				storeMultiSelection();
 			}
 		});
-		
+
 		// calculate max combo width
 		ArrayList allOperators = new ArrayList();
 		String[] keys = getMultiMatcherKeys();
@@ -2626,7 +2626,7 @@
 				storeMultiSelection();
 			}
 		});
-		
+
 		FileInfoAttributesMatcher.Argument argument = FileInfoAttributesMatcher.decodeArguments((String) filter.getArguments());
 		String local = MultiMatcherLocalization.getLocalMultiMatcherKey(argument.key);
 		int index = multiKey.indexOf(local);
@@ -2634,7 +2634,7 @@
 			multiKey.select(index);
 		else
 			multiKey.select(0);
-		
+
 		setupMultiOperatorAndField(true);
 	}
 
@@ -2653,9 +2653,9 @@
 				multiOperator.select(0);
 		}
 		String selectedOperator = MultiMatcherLocalization.getMultiMatcherKey(multiOperator.getText());
-		
+
 		Class selectedKeyOperatorType = FileInfoAttributesMatcher.getTypeForKey(selectedKey, selectedOperator);
-		
+
 		if (intiantiatedKeyOperatorType != null) {
 			if (arguments != null) {
 				arguments.dispose();
@@ -2703,7 +2703,7 @@
 		}
 
 		if (selectedKeyOperatorType.equals(String.class)) {
-	
+
 			arguments = new Text(multiArgumentComposite, SWT.SINGLE | SWT.BORDER);
 			GridData data= new GridData(SWT.FILL, SWT.FILL, true, false);
 			data.widthHint = 150;
@@ -2729,7 +2729,7 @@
 			dummyLabel2.setLayoutData(data);
 
 			stringArgumentComposite = new Composite(multiArgumentComposite, SWT.NONE);
-			
+
 			GridLayout layout = new GridLayout();
 			layout.numColumns = 2;
 			layout.marginWidth = 0;
@@ -2818,7 +2818,7 @@
 				else
 					arguments.setText(convertToEditableLength(argument.pattern));
 			}
-			
+
 			arguments.addModifyListener(new ModifyListener() {
 				@Override
 				public void modifyText(ModifyEvent e) {
@@ -2877,7 +2877,7 @@
 			}
 		}
 		intiantiatedKeyOperatorType = selectedKeyOperatorType;
-		
+
 		if (fContentAssistField != null)
 			fContentAssistField.setEnabled(isUsingRegularExpression);
 
@@ -2954,7 +2954,7 @@
 		}
 		return Long.toString(value) + lengthPrefixes[lengthPrefixes.length - 1];
 	}
-	
+
 	// converts "32k" to "32768"
 	private String convertFromEditableLength(String string) throws NumberFormatException {
 		if (string.length() == 0)
@@ -2969,16 +2969,16 @@
 		// seems equivalent to "return string", but it throws an exception if the string doesn't contain a valid number
 		return Long.toString(Long.parseLong(string));
 	}
-	
+
 	private void storeMultiSelection() {
 		if (intiantiatedKeyOperatorType != null) {
 			String selectedKey = MultiMatcherLocalization.getMultiMatcherKey(multiKey.getText());
 			String selectedOperator = MultiMatcherLocalization.getMultiMatcherKey(multiOperator.getText());
-	
+
 			FileInfoAttributesMatcher.Argument argument = new FileInfoAttributesMatcher.Argument();
 			argument.key = selectedKey;
 			argument.operator = selectedOperator;
-			
+
 			if (intiantiatedKeyOperatorType.equals(Date.class) && argumentsDate != null) {
 				Calendar calendar = Calendar.getInstance();
 				calendar.set(argumentsDate.getYear(), argumentsDate.getMonth(), argumentsDate.getDay());
@@ -3046,11 +3046,11 @@
 		if (intiantiatedKeyOperatorType != null) {
 			String selectedKey = MultiMatcherLocalization.getMultiMatcherKey(multiKey.getText());
 			String selectedOperator = MultiMatcherLocalization.getMultiMatcherKey(multiOperator.getText());
-	
+
 			FileInfoAttributesMatcher.Argument argument = new FileInfoAttributesMatcher.Argument();
 			argument.key = selectedKey;
 			argument.operator = selectedOperator;
-			
+
 			if (intiantiatedKeyOperatorType.equals(Date.class) && argumentsDate != null) {
 			}
 			if (intiantiatedKeyOperatorType.equals(String.class) && arguments != null) {
@@ -3092,7 +3092,7 @@
 				}
 			}
 			if (intiantiatedKeyOperatorType.equals(Boolean.class) && argumentsBoolean != null) {
-				
+
 			}
 		}
 		return message;
@@ -3107,7 +3107,7 @@
 	private String formatMultiMatcherArgument(FilterCopy filter) {
 		String argumentString = (String) filter.getArguments();
 		FileInfoAttributesMatcher.Argument argument = FileInfoAttributesMatcher.decodeArguments(argumentString);
-		
+
 		StringBuffer builder = new StringBuffer();
 		builder.append(MultiMatcherLocalization.getLocalMultiMatcherKey(argument.key));
 		builder.append(' ');
@@ -3126,7 +3126,7 @@
 		}
 		if (type.equals(Date.class))
 			builder.append(DateFormat.getDateInstance().format(new Date(Long.parseLong(argument.pattern))));
-		
+
 		return builder.toString();
 	}
 }
@@ -3192,7 +3192,7 @@
 			fContentAssistField.setEnabled(filter.getId().equals(REGEX_FILTER_ID));
 		argumentComposite.layout(true);
 	}
-	
+
 	private void createArgumentsArea(Font font, Composite composite) {
 		GridData data;
 		argumentsLabel = addLabel(composite, NLS.bind(
@@ -3288,7 +3288,7 @@
 }
 
 class MultiMatcherLocalization {
-	
+
 	static String[][] multiMatcherKey = {
 			{FileInfoAttributesMatcher.KEY_NAME, IDEWorkbenchMessages.ResourceFilterPage_multiKeyName},
 			{FileInfoAttributesMatcher.KEY_PROPJECT_RELATIVE_PATH, IDEWorkbenchMessages.ResourceFilterPage_multiKeyProjectRelativePath},
@@ -3308,7 +3308,7 @@
 			{Boolean.TRUE.toString(), IDEWorkbenchMessages.ResourceFilterPage_true},
 			{Boolean.FALSE.toString(), IDEWorkbenchMessages.ResourceFilterPage_false}
 	};
-	
+
 	static public String getLocalMultiMatcherKey(String key) {
 		for (int i = 0; i < multiMatcherKey.length; i++) {
 			if (multiMatcherKey[i][0].equals(key))
@@ -3316,7 +3316,7 @@
 		}
 		return null;
 	}
-	
+
 	static public String getMultiMatcherKey(String local) {
 		for (int i = 0; i < multiMatcherKey.length; i++) {
 			if (multiMatcherKey[i][1].equals(local))
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterPage.java
index d62736b..9308653 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceFilterPage.java
@@ -28,7 +28,7 @@
 	ResourceFilterGroup groupWidget;
 
 	/**
-	 * 
+	 *
 	 */
 	public ResourceFilterPage() {
 		groupWidget = new ResourceFilterGroup();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
index ba2378d..c6555c4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceInfoPage.java
@@ -154,7 +154,7 @@
 
 	/**
 	 * Create the group that shows the name, location, size and type.
-	 * 
+	 *
 	 * @param parent
 	 *            the composite the group will be created in
 	 * @param resource
@@ -163,7 +163,7 @@
 	 */
 	private Composite createBasicInfoGroup(Composite parent, IResource resource) {
 		initializeDialogUnits(parent);
-		
+
 		Composite basicInfoComposite = new Composite(parent, SWT.NULL);
 		GridLayout layout = new GridLayout();
 		layout.numColumns = 2;
@@ -397,13 +397,13 @@
 		// layout the page
 		IResource resource = (IResource) getElement().getAdapter(
 				IResource.class);
-		
+
 		if (resource == null) {
 			Label label = new Label(parent, SWT.NONE);
 			label.setText(IDEWorkbenchMessages.ResourceInfoPage_noResource);
 			return label;
 		}
-		
+
 		if (resource.getType() != IResource.PROJECT) {
 			ResourceAttributes attrs = resource.getResourceAttributes();
 			if (attrs != null) {
@@ -462,7 +462,7 @@
 				lineDelimiterEditor.doLoad();
 			}
 		}
-		
+
 		Dialog.applyDialogFont(composite);
 
 		return composite;
@@ -572,7 +572,7 @@
 
 	/**
 	 * Return the label for the encoding field editor for the resource.
-	 * 
+	 *
 	 * @param resource -
 	 *            the resource to edit.
 	 * @return String
@@ -588,7 +588,7 @@
 	 * Create the isEditable button and it's associated label as a child of
 	 * parent using the editableValue of the receiver. The Composite will be the
 	 * parent of the button.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the button
 	 */
@@ -604,7 +604,7 @@
 	 * Create the isExecutable button and it's associated label as a child of
 	 * parent using the editableValue of the receiver. The Composite will be the
 	 * parent of the button.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the button
 	 */
@@ -620,7 +620,7 @@
 	 * Create the isLocked button and it's associated label as a child of
 	 * parent using the editableValue of the receiver. The Composite will be the
 	 * parent of the button.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the button
 	 */
@@ -635,7 +635,7 @@
 	 * Create the isArchive button and it's associated label as a child of
 	 * parent using the editableValue of the receiver. The Composite will be the
 	 * parent of the button.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the button
 	 */
@@ -651,7 +651,7 @@
 	 * Create the derived button and it's associated label as a child of parent
 	 * using the derived of the receiver. The Composite will be the parent of
 	 * the button.
-	 * 
+	 *
 	 * @param composite
 	 *            the parent of the button
 	 * @param resource
@@ -670,7 +670,7 @@
 
 	/**
 	 * Create a separator that goes across the entire page
-	 * 
+	 *
 	 * @param composite
 	 *            The parent of the seperator
 	 */
@@ -685,7 +685,7 @@
 
 	/**
 	 * Create the group that shows the read only state and the timestamp.
-	 * 
+	 *
 	 * @param parent
 	 *            the composite the group will be created in
 	 * @param resource
@@ -859,7 +859,7 @@
 
 		IResource resource = (IResource) getElement().getAdapter(
 				IResource.class);
-		
+
 		if (resource == null)
 			return;
 
@@ -886,7 +886,7 @@
 		if (this.executableBox != null) {
 			this.executableBox.setSelection(false);
 		}
-		
+
 		// Nothing to update if we never made the box
 		if (this.archiveBox != null) {
 			this.archiveBox.setSelection(true);
@@ -1102,7 +1102,7 @@
 
 		IResource resource = (IResource) getElement().getAdapter(
 				IResource.class);
-		
+
 		if (resource == null)
 			return true;
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceWorkingSetPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceWorkingSetPage.java
index eaace40..58229d4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceWorkingSetPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/ResourceWorkingSetPage.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *      IBM Corporation - initial API and implementation 
+ *      IBM Corporation - initial API and implementation
  *  	Sebastian Davids <sdavids@gmx.de> - Fix for bug 19346 - Dialog font
  * 		should be activated and used by other components.
  *******************************************************************************/
@@ -63,12 +63,12 @@
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 
 /**
- * A resource working set page allows the user to edit an 
+ * A resource working set page allows the user to edit an
  * existing working set and create a new working set.
  * <p>
  * Working set elements are presented as a simple resource tree.
  * </p>
- * 
+ *
  * @since 2.0
  */
 public class ResourceWorkingSetPage extends WizardPage implements
@@ -90,7 +90,7 @@
      */
     public ResourceWorkingSetPage() {
         super(
-                "resourceWorkingSetPage", //$NON-NLS-1$ 
+                "resourceWorkingSetPage", //$NON-NLS-1$
                 IDEWorkbenchMessages.ResourceWorkingSetPage_title,
                 IDEInternalWorkbenchImages
                         .getImageDescriptor(IDEInternalWorkbenchImages.IMG_WIZBAN_RESOURCEWORKINGSET_WIZ));
@@ -100,7 +100,7 @@
     /**
      * Adds working set elements contained in the given container to the list
      * of checked resources.
-     * 
+     *
      * @param collectedResources list of collected resources
      * @param container container to collect working set elements for
      */
@@ -129,13 +129,13 @@
 
     /**
      * Overrides method in WizardPage.
-     * 
+     *
      * @see org.eclipse.jface.wizard.WizardPage#createControl(Composite)
      */
     @Override
 	public void createControl(Composite parent) {
     	initializeDialogUnits(parent);
-    	
+
         Composite composite = new Composite(parent, SWT.NULL);
         composite.setLayout(new GridLayout());
         composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
@@ -220,7 +220,7 @@
 		layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
 		buttonComposite.setLayout(layout);
 		buttonComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL));
-		
+
 		Button selectAllButton = new Button(buttonComposite, SWT.PUSH);
 		selectAllButton.setText(IDEWorkbenchMessages.ResourceWorkingSetPage_selectAll_label);
 		selectAllButton.setToolTipText(IDEWorkbenchMessages.ResourceWorkingSetPage_selectAll_toolTip);
@@ -260,19 +260,19 @@
 			}
 		});
 		setButtonLayoutData(deselectAllButton);
-		
+
 		initializeCheckedState();
         if (workingSet != null) {
             text.setText(workingSet.getName());
         }
         setPageComplete(false);
-        
+
         Dialog.applyDialogFont(composite);
     }
 
     /**
      * Collects all checked resources in the specified container.
-     * 
+     *
      * @param checkedResources the output, list of checked resources
      * @param container the container to collect checked resources in
      */
@@ -305,7 +305,7 @@
 
     /**
      * Implements IWorkingSetPage.
-     * 
+     *
      * @see org.eclipse.ui.dialogs.IWorkingSetPage#finish()
      */
     @Override
@@ -327,7 +327,7 @@
 
     /**
      * Implements IWorkingSetPage.
-     * 
+     *
      * @see org.eclipse.ui.dialogs.IWorkingSetPage#getSelection()
      */
     @Override
@@ -337,7 +337,7 @@
 
     /**
      * Returns the name entered in the working set name field.
-     * 
+     *
      * @return the name entered in the working set name field.
      */
     private String getWorkingSetName() {
@@ -346,7 +346,7 @@
 
     /**
      * Called when the checked state of a tree item changes.
-     * 
+     *
      * @param event the checked state change event.
      */
     private void handleCheckStateChange(final CheckStateChangedEvent event) {
@@ -368,8 +368,8 @@
 
     /**
      * Displays an error message when a CoreException occured.
-     * 
-     * @param exception the CoreException 
+     *
+     * @param exception the CoreException
      * @param shell parent shell for the message box
      * @param title the mesage box title
      * @param message additional error message
@@ -388,7 +388,7 @@
     }
 
     /**
-     * Sets the checked state of tree items based on the initial 
+     * Sets the checked state of tree items based on the initial
      * working set, if any.
      */
     private void initializeCheckedState() {
@@ -456,7 +456,7 @@
 
     /**
      * Implements IWorkingSetPage.
-     * 
+     *
      * @see org.eclipse.ui.dialogs.IWorkingSetPage#setSelection(IWorkingSet)
      */
     @Override
@@ -474,11 +474,11 @@
 
     /**
      * Sets the checked state of the container's members.
-     * 
+     *
      * @param container the container whose children should be checked/unchecked
-     * @param state true=check all members in the container. false=uncheck all 
+     * @param state true=check all members in the container. false=uncheck all
      * 	members in the container.
-     * @param checkExpandedState true=recurse into sub-containers and set the 
+     * @param checkExpandedState true=recurse into sub-containers and set the
      * 	checked state. false=only set checked state of members of this container
      */
     private void setSubtreeChecked(IContainer container, boolean state,
@@ -509,7 +509,7 @@
             } else {
                 tree.setGrayChecked(element, false);
             }
-            // unchecked state only needs to be set when the container is 
+            // unchecked state only needs to be set when the container is
             // checked or grayed
             if (element instanceof IContainer && (state || elementGrayChecked)) {
                 setSubtreeChecked((IContainer) element, state, true);
@@ -518,10 +518,10 @@
     }
 
     /**
-     * Check and gray the resource parent if all resources of the 
+     * Check and gray the resource parent if all resources of the
      * parent are checked.
-     * 
-     * @param child the resource whose parent checked state should 
+     *
+     * @param child the resource whose parent checked state should
      * 	be set.
      */
     private void updateParentState(IResource child) {
@@ -552,7 +552,7 @@
     }
 
     /**
-     * Validates the working set name and the checked state of the 
+     * Validates the working set name and the checked state of the
      * resource tree.
      */
     private void validateInput() {
@@ -561,7 +561,7 @@
         String newText = text.getText();
 
         if (newText.equals(newText.trim()) == false) {
-            errorMessage = IDEWorkbenchMessages.ResourceWorkingSetPage_warning_nameWhitespace; 
+            errorMessage = IDEWorkbenchMessages.ResourceWorkingSetPage_warning_nameWhitespace;
         } else if (firstCheck) {
             firstCheck = false;
             return;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditor.java
index cf7575d..47d0523 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditor.java
@@ -83,7 +83,7 @@
 
     private final static int VERT_SCROLL_INCREMENT = 20;
 
-    // width at which wrapping will stop and a horizontal scroll bar will be 
+    // width at which wrapping will stop and a horizontal scroll bar will be
     // introduced
     private final static int WRAP_MIN_WIDTH = 150;
 
@@ -139,7 +139,7 @@
     }
 
     /**
-     * Finds the next text 
+     * Finds the next text
      */
     private StyledText nextText(StyledText text) {
         int index = 0;
@@ -158,7 +158,7 @@
     }
 
     /**
-     * Finds the previous text 
+     * Finds the previous text
      */
     private StyledText previousText(StyledText text) {
         int index = 0;
@@ -184,7 +184,7 @@
     }
 
     /**
-     * Returns the copy action. 
+     * Returns the copy action.
      */
     protected WelcomeEditorCopyAction getCopyAction() {
         return copyAction;
@@ -441,7 +441,7 @@
                     return;
                 }
 
-                // When page down is pressed, move the cursor to the next item in the 
+                // When page down is pressed, move the cursor to the next item in the
                 // welcome page.   Note that this operation wraps (pages to the top item
                 // when the last item is reached).
                 if (event.keyCode == SWT.PAGE_DOWN) {
@@ -449,7 +449,7 @@
                     return;
                 }
 
-                // When page up is pressed, move the cursor to the previous item in the 
+                // When page up is pressed, move the cursor to the previous item in the
                 // welcome page.  Note that this operation wraps (pages to the bottom item
                 // when the first item is reached).
                 if (event.keyCode == SWT.PAGE_UP) {
@@ -485,7 +485,7 @@
         styledText.addSelectionListener(new SelectionAdapter() {
             @Override
 			public void widgetSelected(SelectionEvent e) {
-                // enable/disable copy action			
+                // enable/disable copy action
                 StyledText text = (StyledText) e.widget;
 				copyAction.setEnabled(text.isTextSelected());
             }
@@ -645,7 +645,7 @@
                         Point p = text.computeSize(extent, SWT.DEFAULT, false);
                         ((GridData) text.getLayoutData()).widthHint = p.x;
                     }
-                    // reset the scrolled composite height since the height of the 
+                    // reset the scrolled composite height since the height of the
                     // styled text widgets have changed
                     Point p = infoArea.computeSize(SWT.DEFAULT, SWT.DEFAULT,
                             true);
@@ -828,7 +828,7 @@
     }
 
     /**
-     * The <code>WorkbenchPart</code> implementation of this 
+     * The <code>WorkbenchPart</code> implementation of this
      * <code>IWorkbenchPart</code> method disposes the title image
      * loaded by <code>setInitializationData</code>. Subclasses may extend.
      */
@@ -872,7 +872,7 @@
      */
     @Override
 	public void doSaveAs() {
-        // do nothing	
+        // do nothing
     }
 
     /**
@@ -968,7 +968,7 @@
 
     /**
      * Read the contents of the welcome page
-     * 
+     *
      * @param is the <code>InputStream</code> to parse
      * @throws IOException if there is a problem parsing the stream.
      */
@@ -991,7 +991,7 @@
                 .getWelcomePageURL();
 
         if (url == null) {
-			// should not happen 
+			// should not happen
             return;
 		}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorActionContributor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorActionContributor.java
index aac66f9..877038a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorActionContributor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorActionContributor.java
@@ -17,13 +17,13 @@
 import org.eclipse.ui.part.EditorActionBarContributor;
 
 /**
- * Manages the installation and deinstallation of global actions for 
+ * Manages the installation and deinstallation of global actions for
  * the welcome editor.
  */
 public class WelcomeEditorActionContributor extends EditorActionBarContributor {
     /**
-     * The <code>WelcomeEditorActionContributor</code> implementation of this 
-     * <code>IEditorActionBarContributor</code> method installs the global 
+     * The <code>WelcomeEditorActionContributor</code> implementation of this
+     * <code>IEditorActionBarContributor</code> method installs the global
      * action handler for the given editor.
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorInputFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorInputFactory.java
index 2c503ff..9a52a30 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorInputFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeEditorInputFactory.java
@@ -27,8 +27,8 @@
     }
 
     /**
-     * Re-creates and returns an object from the state captured within the given 
-     * memento. 
+     * Re-creates and returns an object from the state captured within the given
+     * memento.
      * <p>
      * Under normal circumstances, the resulting object can be expected to be
      * persistable; that is,
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeParser.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeParser.java
index d1f0818..0085e52 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeParser.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/dialogs/WelcomeParser.java
@@ -35,27 +35,27 @@
  * A parser for the the welcome page
  */
 public class WelcomeParser extends DefaultHandler {
-    private static final String TAG_WELCOME_PAGE = "welcomePage"; //$NON-NLS-1$	
+    private static final String TAG_WELCOME_PAGE = "welcomePage"; //$NON-NLS-1$
 
-    private static final String TAG_INTRO = "intro"; //$NON-NLS-1$	
+    private static final String TAG_INTRO = "intro"; //$NON-NLS-1$
 
-    private static final String TAG_ITEM = "item"; //$NON-NLS-1$	
+    private static final String TAG_ITEM = "item"; //$NON-NLS-1$
 
-    private static final String TAG_BOLD = "b"; //$NON-NLS-1$	
+    private static final String TAG_BOLD = "b"; //$NON-NLS-1$
 
-    private static final String TAG_ACTION = "action"; //$NON-NLS-1$	
+    private static final String TAG_ACTION = "action"; //$NON-NLS-1$
 
-    private static final String TAG_PARAGRAPH = "p"; //$NON-NLS-1$	
+    private static final String TAG_PARAGRAPH = "p"; //$NON-NLS-1$
 
-    private static final String TAG_TOPIC = "topic"; //$NON-NLS-1$	
+    private static final String TAG_TOPIC = "topic"; //$NON-NLS-1$
 
-    private static final String ATT_TITLE = "title"; //$NON-NLS-1$	
+    private static final String ATT_TITLE = "title"; //$NON-NLS-1$
 
-    private static final String ATT_FORMAT = "format"; //$NON-NLS-1$	
+    private static final String ATT_FORMAT = "format"; //$NON-NLS-1$
 
-    private static final String ATT_PLUGIN_ID = "pluginId"; //$NON-NLS-1$	
+    private static final String ATT_PLUGIN_ID = "pluginId"; //$NON-NLS-1$
 
-    private static final String ATT_CLASS = "class"; //$NON-NLS-1$	
+    private static final String ATT_CLASS = "class"; //$NON-NLS-1$
 
     private static final String ATT_ID = "id"; //$NON-NLS-1$
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemConfiguration.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemConfiguration.java
index 57d6150..fad976b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemConfiguration.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemConfiguration.java
@@ -16,9 +16,9 @@
 /**
  * FileSystemContribution is the representation of the configuration element
  * defined by
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class FileSystemConfiguration {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemMessages.java
index 33ece12..f4705b1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemMessages.java
@@ -14,12 +14,12 @@
 import org.eclipse.osgi.util.NLS;
 
 /**
- * FileSystemMessages is the class that handles the messages for the 
+ * FileSystemMessages is the class that handles the messages for the
  * filesystem support.
  *
  */
 public class FileSystemMessages extends NLS{
-	
+
 	private static final String BUNDLE_NAME= "org.eclipse.ui.internal.ide.filesystem.messages"; //$NON-NLS-1$
 
 	static {
@@ -32,7 +32,7 @@
 	 * The name of the default file system.
 	 */
 	public static String DefaultFileSystem_name;
-	
+
 	/**
 	 * The label for file system selection.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemStructureProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemStructureProvider.java
index 978b764..2452cc9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemStructureProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemStructureProvider.java
@@ -26,7 +26,7 @@
 /**
  * This class provides information regarding the structure and
  * content of specified file system File objects.
- * 
+ *
  * class copied from org.eclipse.ui.wizards.datatransfer.FileSystemStructureProvider as its singleton
  */
 public class FileSystemStructureProvider implements IImportStructureProvider {
@@ -46,7 +46,7 @@
         		continue;
         	result.add(file);
 		}
-        
+
         return result;
     }
 
@@ -55,7 +55,7 @@
     		visitedDirs = new HashSet();
     	}
     }
-    
+
 	private boolean isRecursiveLink(File childFile) {
 
 		if (childFile.isDirectory()) {
@@ -101,7 +101,7 @@
 	public boolean isFolder(Object element) {
         return ((File) element).isDirectory();
     }
-    
+
     /**
      * Clears the visited dir information
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemSupportRegistry.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemSupportRegistry.java
index bfb3213..6a9be07 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemSupportRegistry.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/filesystem/FileSystemSupportRegistry.java
@@ -39,7 +39,7 @@
 
 /**
  * @since 3.2
- * 
+ *
  */
 public class FileSystemSupportRegistry implements IExtensionChangeHandler {
 
@@ -55,7 +55,7 @@
 
 	/**
 	 * Get the instance of the registry.
-	 * 
+	 *
 	 * @return MarkerSupportRegistry
 	 */
 	public static FileSystemSupportRegistry getInstance() {
@@ -136,7 +136,7 @@
 
 	/**
 	 * Process the extension and register the result with the tracker.
-	 * 
+	 *
 	 * @param tracker
 	 * @param extension
 	 */
@@ -155,7 +155,7 @@
 
 	/**
 	 * Return a new FileSystemContribution.
-	 * 
+	 *
 	 * @param element
 	 * @return FileSystemContribution or <code>null</code> if there is an
 	 *         exception.
@@ -198,7 +198,7 @@
 
 	/**
 	 * Return the FileSystemConfiguration defined in the receiver.
-	 * 
+	 *
 	 * @return FileSystemConfiguration[]
 	 */
 	public FileSystemConfiguration[] getConfigurations() {
@@ -220,7 +220,7 @@
 	/**
 	 * Return the default file system configuration (the local file system
 	 * extension in the ide plug-in).
-	 * 
+	 *
 	 * @return FileSystemConfiguration
 	 */
 	public FileSystemConfiguration getDefaultConfiguration() {
@@ -229,7 +229,7 @@
 
 	/**
 	 * Return whether or not there is only one file system registered.
-	 * 
+	 *
 	 * @return <code>true</code> if there is only one file system.
 	 */
 	public boolean hasOneFileSystem() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildAllProjectsHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildAllProjectsHandler.java
index 35221fa..98c86dd 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildAllProjectsHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildAllProjectsHandler.java
@@ -24,13 +24,13 @@
 
 /**
  * Default handler for 'Build All' command.
- * 
+ *
  * @since 3.6
  */
 public class BuildAllProjectsHandler extends AbstractHandler {
-	
+
 	/**
-	 * @throws ExecutionException  
+	 * @throws ExecutionException
 	 */
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
@@ -47,7 +47,7 @@
     	}
 		return null;
 	}
-	
+
 	/*
 	 * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildProjectHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildProjectHandler.java
index 2d5c8c7..ce1161c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildProjectHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/BuildProjectHandler.java
@@ -30,9 +30,9 @@
 
 /**
  * Default Handler for 'Build Project' command
- * 
+ *
  * @since 4.3
- * 
+ *
  */
 public class BuildProjectHandler extends AbstractHandler {
 
@@ -80,7 +80,7 @@
 		return new BuildAction(window,
 				IncrementalProjectBuilder.INCREMENTAL_BUILD);
 	}
-	
+
 	@Override
 	public void setEnabled(Object evaluationContext) {
 		boolean enabled = false;
@@ -94,5 +94,5 @@
 		}
 		setBaseEnabled(enabled);
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/OpenResourceHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/OpenResourceHandler.java
index 6bb2188..d2edc91 100755
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/OpenResourceHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/OpenResourceHandler.java
@@ -46,7 +46,7 @@
 /**
  * Implements the open resource action. Opens a dialog prompting for a file and
  * opens the selected file in an editor.
- * 
+ *
  * @since 2.1
  */
 public final class OpenResourceHandler extends Action implements IHandler,
@@ -146,7 +146,7 @@
 
 	/**
 	 * Query the user for the resources that should be opened
-	 * 
+	 *
 	 * @return the resource that should be opened.
 	 */
 	private final Object[] queryFileResource() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowInSystemExplorerHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowInSystemExplorerHandler.java
index eaaf710..352b129 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowInSystemExplorerHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowInSystemExplorerHandler.java
@@ -116,7 +116,7 @@
 		}
 		return resource;
 	}
-	
+
 	private IResource getSelectionResource(ExecutionEvent event) {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		if ((selection == null) || (selection.isEmpty())
@@ -145,7 +145,7 @@
 
 	/**
 	 * Prepare command for launching system explorer to show a path
-	 * 
+	 *
 	 * @param path
 	 *            the path to show
 	 * @return the command that shows the path
@@ -153,7 +153,7 @@
 	private String formShowInSytemExplorerCommand(File path) throws IOException {
 		String command = IDEWorkbenchPlugin.getDefault().getPreferenceStore()
 				.getString(IDEInternalPreferences.WORKBENCH_SYSTEM_EXPLORER);
-		
+
 		command = Util.replaceAll(command, VARIABLE_RESOURCE, quotePath(path.getCanonicalPath()));
 		command = Util.replaceAll(command, VARIABLE_RESOURCE_URI, path.getCanonicalFile().toURI().toString());
 		File parent = path.getParentFile();
@@ -175,7 +175,7 @@
 	/**
 	 * Returns the path used for a resource when showing it in the system
 	 * explorer
-	 * 
+	 *
 	 * @see File#getCanonicalPath()
 	 * @param resource
 	 *            the {@link IResource} object to be used
@@ -193,12 +193,12 @@
 
 	/**
 	 * The default command for launching the system explorer on this platform.
-	 * 
+	 *
 	 * @return The default command which launches the system explorer on this system, or an empty
 	 *         string if no default exists
 	 */
 	public static String getDefaultCommand() {
-		// See https://bugs.eclipse.org/419940 why it is implemented in IDEPreferenceInitializer 
+		// See https://bugs.eclipse.org/419940 why it is implemented in IDEPreferenceInitializer
 		return IDEPreferenceInitializer.getShowInSystemExplorerCommand();
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowResourceByPathHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowResourceByPathHandler.java
index af82b8b..c5460b9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowResourceByPathHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/handlers/ShowResourceByPathHandler.java
@@ -28,7 +28,7 @@
 /**
  * A command handler to show a resource in the Navigator view given the resource
  * path.
- * 
+ *
  * @since 3.2
  */
 public class ShowResourceByPathHandler extends AbstractHandler {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/CheckboxTreeAndListGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/CheckboxTreeAndListGroup.java
index 91535df..53cf241 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/CheckboxTreeAndListGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/CheckboxTreeAndListGroup.java
@@ -434,13 +434,13 @@
 
     /**
      *	Set the initial checked state of the passed list element to true.
-     *	
-     *	@param element the element in the list to select 
+     *
+     *	@param element the element in the list to select
      */
     public void initialCheckListItem(Object element) {
         Object parent = treeContentProvider.getParent(element);
         currentTreeSelection = parent;
-        //As this is not done from the UI then set the box for updating from the selection to false 
+        //As this is not done from the UI then set the box for updating from the selection to false
         listItemChecked(element, true, false);
         updateHierarchy(parent);
     }
@@ -448,7 +448,7 @@
     /**
      *	Set the initial checked state of the passed element to true,
      *	as well as to all of its children and associated list elements
-     *	
+     *
      *	@param element the element in the tree to select
      */
     public void initialCheckTreeItem(Object element) {
@@ -568,7 +568,7 @@
     /**
      * Select or deselect all of the elements in the tree depending on the value of the selection
      * boolean. Be sure to update the displayed files as well.
-     * 
+     *
      * @param selection boolean indicating whether or not to select all elements
      */
     public void setAllSelections(final boolean selection) {
@@ -608,7 +608,7 @@
     /**
      * Set the root of the widget to be new Root. Regenerate all of the tables and lists from this
      * value.
-     * @param newRoot 
+     * @param newRoot
      */
     public void setRoot(Object newRoot) {
         this.root = newRoot;
@@ -723,7 +723,7 @@
 			return;
 		}
 
-        // now update upwards in the tree hierarchy 
+        // now update upwards in the tree hierarchy
         if (state) {
 			grayCheckHierarchy(parent);
 		} else {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerContentProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerContentProvider.java
index fb82287..8b5a84f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerContentProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerContentProvider.java
@@ -116,9 +116,9 @@
     }
 
     /**
-     * Specify whether or not to show closed projects in the tree 
+     * Specify whether or not to show closed projects in the tree
      * viewer.  Default is to show closed projects.
-     * 
+     *
      * @param show boolean if false, do not show closed projects in the tree
      */
     public void showClosedProjects(boolean show) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerSelectionGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerSelectionGroup.java
index 6b6e10e..c91ab14 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerSelectionGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ContainerSelectionGroup.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Igor Fedorenko <igorfie@yahoo.com> - 
+ *     Igor Fedorenko <igorfie@yahoo.com> -
  *     		Fix for Bug 136921 [IDE] New File dialog locks for 20 seconds
  *******************************************************************************/
 package org.eclipse.ui.internal.ide.misc;
@@ -77,7 +77,7 @@
 
 	/**
 	 * Creates a new instance of the widget.
-	 * 
+	 *
 	 * @param parent
 	 *            The parent widget of the group.
 	 * @param listener
@@ -94,7 +94,7 @@
 
 	/**
 	 * Creates a new instance of the widget.
-	 * 
+	 *
 	 * @param parent
 	 *            The parent widget of the group.
 	 * @param listener
@@ -113,7 +113,7 @@
 
 	/**
 	 * Creates a new instance of the widget.
-	 * 
+	 *
 	 * @param parent
 	 *            The parent widget of the group.
 	 * @param listener
@@ -137,7 +137,7 @@
 
 	/**
 	 * Creates a new instance of the widget.
-	 * 
+	 *
 	 * @param parent
 	 *            The parent widget of the group.
 	 * @param listener
@@ -174,7 +174,7 @@
 	/**
 	 * The container selection has changed in the tree view. Update the
 	 * container name field value and notify all listeners.
-	 * 
+	 *
 	 * @param container
 	 *            The container that changed
 	 */
@@ -203,7 +203,7 @@
 
 	/**
 	 * Creates the contents of the composite.
-	 * 
+	 *
 	 * @param message
 	 */
 	public void createContents(String message) {
@@ -213,7 +213,7 @@
 
 	/**
 	 * Creates the contents of the composite.
-	 * 
+	 *
 	 * @param message
 	 * @param heightHint
 	 * @param widthHint
@@ -247,7 +247,7 @@
 
 	/**
 	 * Returns a new drill down viewer for this dialog.
-	 * 
+	 *
 	 * @param heightHint
 	 *            height hint for the drill down composite
 	 */
@@ -305,7 +305,7 @@
 	 * Returns the currently entered container name. Null if the field is empty.
 	 * Note that the container may not exist yet if the user entered a new
 	 * container name in the field.
-	 * 
+	 *
 	 * @return IPath
 	 */
 	public IPath getContainerFullPath() {
@@ -338,7 +338,7 @@
 
 	/**
 	 * Sets the selected existing container.
-	 * 
+	 *
 	 * @param container
 	 */
 	public void setSelectedContainer(IContainer container) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/DisjointSet.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/DisjointSet.java
index dbc6016..33fbca8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/DisjointSet.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/DisjointSet.java
@@ -15,7 +15,7 @@
 import java.util.List;
 
 /**
- * A disjoint set is a generic data structure that represents a collection of 
+ * A disjoint set is a generic data structure that represents a collection of
  * sets that are assumed to be disjoint (no object exists in more than
  * one set).
  * <p>
@@ -105,7 +105,7 @@
 	}
 
 	/**
-	 * Unions the set represented by token x with the set represented by 
+	 * Unions the set represented by token x with the set represented by
 	 * token y. Has no effect if either x or y is not in the disjoint set, or
 	 * if they already belong to the same set.
 	 * @param x The first set to union
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/FileInfoAttributesMatcher.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/FileInfoAttributesMatcher.java
index d3512bd..c8c02b9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/FileInfoAttributesMatcher.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/FileInfoAttributesMatcher.java
@@ -58,7 +58,7 @@
 	public static String OPERATOR_AFTER			= "after"; //$NON-NLS-1$
 	public static String OPERATOR_WITHIN		= "within"; //$NON-NLS-1$
 	public static String OPERATOR_MATCHES		= "matches"; //$NON-NLS-1$
-	
+
 
 	/**
 	 * @param key
@@ -73,10 +73,10 @@
 			return new String[] {OPERATOR_EQUALS, OPERATOR_BEFORE, OPERATOR_AFTER, OPERATOR_WITHIN};
 		if (key.equals(KEY_LENGTH))
 			return new String[] {OPERATOR_EQUALS, OPERATOR_LARGER_THAN, OPERATOR_SMALLER_THAN};
-		
+
 		return new String[] {OPERATOR_NONE};
 	}
-	
+
 	/**
 	 * @param key
 	 * @param operator
@@ -96,7 +96,7 @@
 			return Integer.class;
 		return String.class;
 	}
-	
+
 	/**
 	 * @return
 	 */
@@ -117,7 +117,7 @@
 		}
 		return false;
 	}
-	
+
 	/**
 	 * @since 3.6
 	 *
@@ -126,22 +126,22 @@
 		public String key = KEY_NAME;
 		public String pattern = new String();
 		public String operator = OPERATOR_EQUALS;
-		public boolean caseSensitive = false; 
+		public boolean caseSensitive = false;
 		public boolean regularExpression = false;
 	}
-	
+
 	/**
 	 * @param argument
 	 * @return
 	 */
 	public static String encodeArguments(Argument argument)  {
-		return VERSION_IMPLEMENTATION + DELIMITER + 
-				argument.key + DELIMITER + 
-				argument.operator + DELIMITER + 
-				Boolean.toString(argument.caseSensitive) + DELIMITER + 
-				Boolean.toString(argument.regularExpression) + DELIMITER + 
+		return VERSION_IMPLEMENTATION + DELIMITER +
+				argument.key + DELIMITER +
+				argument.operator + DELIMITER +
+				Boolean.toString(argument.caseSensitive) + DELIMITER +
+				Boolean.toString(argument.regularExpression) + DELIMITER +
 				argument.pattern;
-				
+
 	}
 
 	/**
@@ -152,17 +152,17 @@
 		Argument result = new Argument();
 		if (argument == null)
 			return result;
-		
+
 		int index = argument.indexOf(DELIMITER);
 		if (index == -1)
 			return result;
-		
+
 		String version = argument.substring(0, index);
 		argument = argument.substring(index + 1);
-		
+
 		if (!version.equals(VERSION_IMPLEMENTATION))
 			return result;
-		
+
 		index = argument.indexOf(DELIMITER);
 		if (index == -1)
 			return result;
@@ -183,7 +183,7 @@
 
 		result.caseSensitive = Boolean.valueOf(argument.substring(0, index)).booleanValue();
 		argument = argument.substring(index + 1);
-		
+
 		index = argument.indexOf(DELIMITER);
 		if (index == -1)
 			return result;
@@ -213,27 +213,27 @@
 			Class fileSystems = Class.forName("java.nio.file.FileSystems"); //$NON-NLS-1$
 			Method getDefault = fileSystems.getMethod("getDefault"); //$NON-NLS-1$
 			Object fs = getDefault.invoke(null);
-	
+
 			Class fileRef = Class.forName("java.nio.file.FileRef"); //$NON-NLS-1$
 
 			Class fileSystem = Class.forName("java.nio.file.FileSystem"); //$NON-NLS-1$
 			Method getPath = fileSystem.getMethod("getPath", new Class[] {String.class}); //$NON-NLS-1$
 			Object fileRefObj = getPath.invoke(fs, new Object[] {fullPath});
-			
+
 			Class attributes = Class.forName("java.nio.file.attribute.Attributes"); //$NON-NLS-1$
 			Class linkOptions = Class.forName("java.nio.file.LinkOption"); //$NON-NLS-1$
 			Object linkOptionsEmptyArray = Array.newInstance(linkOptions, 0);
 			Method readBasicFileAttributes = attributes.getMethod("readBasicFileAttributes", new Class[] {fileRef, linkOptionsEmptyArray.getClass()}); //$NON-NLS-1$
 			Object attributesObj = readBasicFileAttributes.invoke(null, new Object[] {fileRefObj, linkOptionsEmptyArray});
-	
+
 			Class basicAttributes = Class.forName("java.nio.file.attribute.BasicFileAttributes"); //$NON-NLS-1$
 			Method creationTime = basicAttributes.getMethod("creationTime"); //$NON-NLS-1$
 			Object time = creationTime.invoke(attributesObj);
-	
+
 			Class fileTime = Class.forName("java.nio.file.attribute.FileTime"); //$NON-NLS-1$
 			Method toMillis = fileTime.getMethod("toMillis"); //$NON-NLS-1$
 			Object result = toMillis.invoke(time);
-			
+
 			if (result instanceof Long)
 				return ((Long) result).longValue();
 		} catch (ClassNotFoundException e) {
@@ -248,10 +248,10 @@
 			e.printStackTrace();
 		} catch (NoSuchMethodException e) {
 			e.printStackTrace();
-		} 
+		}
 		return 0;
 	}
-	
+
 	MatcherCache matcher = null;
 	private boolean fSupportsCreatedKey;
 
@@ -266,7 +266,7 @@
 					regExPattern = Pattern.compile(argument.pattern, argument.caseSensitive ? 0:Pattern.CASE_INSENSITIVE);
 			}
 		}
-		
+
 
 		Argument argument;
 		Class type;
@@ -282,7 +282,7 @@
 					value = parent.getProjectRelativePath().append(fileInfo.getName()).toPortableString();
 				if (argument.key.equals(KEY_LOCATION))
 					value = parent.getLocation().append(fileInfo.getName()).toOSString();
-				
+
 				if (stringMatcher != null)
 					return stringMatcher.match(value);
 				if (regExPattern != null) {
@@ -347,7 +347,7 @@
 					Date when = new Date(parameter);
 					Date then = new Date(time);
 					if (argument.operator.equals(OPERATOR_EQUALS))
-						return roundToOneDay(time) == roundToOneDay(parameter); 
+						return roundToOneDay(time) == roundToOneDay(parameter);
 					if (argument.operator.equals(OPERATOR_BEFORE))
 						return then.before(when);
 					if (argument.operator.equals(OPERATOR_AFTER))
@@ -373,7 +373,7 @@
 		}
 
 		private long roundToOneDay(long parameter) {
-			return parameter / (1000 * 60 * 60 * 24); // 1000 ms in 1 sec, 60 sec in 1 min, 60 min in 1 hour, 24 hours in 1 day 
+			return parameter / (1000 * 60 * 60 * 24); // 1000 ms in 1 sec, 60 sec in 1 min, 60 min in 1 hour, 24 hours in 1 day
 		}
 
 		private IFileInfo fetchInfo(IContainer parent, IFileInfo fileInfo) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ResourceAndContainerGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ResourceAndContainerGroup.java
index f50f655..d420bbc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ResourceAndContainerGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/ResourceAndContainerGroup.java
@@ -43,7 +43,7 @@
  */
 public class ResourceAndContainerGroup implements Listener {
 	// problem identifiers
-	
+
 	/**
 	 * Constant for no problem.
 	 */
@@ -78,7 +78,7 @@
 	 */
 	public static final int PROBLEM_NAME_INVALID = 7;
 
-	
+
 	/**
 	 * Constant for path already occupied.
 	 */
@@ -108,7 +108,7 @@
 
 	/**
 	 * The resource extension for the resource name field.
-	 * 
+	 *
 	 * @see ResourceAndContainerGroup#setResourceExtension(String)
 	 * @since 3.3
 	 */
@@ -120,7 +120,7 @@
 	/**
 	 * Create an instance of the group to allow the user to enter/select a
 	 * container and specify a resource name.
-	 * 
+	 *
 	 * @param parent
 	 *            composite widget to parent the group
 	 * @param client
@@ -139,7 +139,7 @@
 	/**
 	 * Create an instance of the group to allow the user to enter/select a
 	 * container and specify a resource name.
-	 * 
+	 *
 	 * @param parent
 	 *            composite widget to parent the group
 	 * @param client
@@ -162,7 +162,7 @@
 	/**
 	 * Create an instance of the group to allow the user to enter/select a
 	 * container and specify a resource name.
-	 * 
+	 *
 	 * @param parent
 	 *            composite widget to parent the group
 	 * @param client
@@ -190,7 +190,7 @@
 	/**
 	 * Returns a boolean indicating whether all controls in this group contain
 	 * valid values.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	public boolean areAllValuesValid() {
@@ -199,7 +199,7 @@
 
 	/**
 	 * Creates this object's visual components.
-	 * 
+	 *
 	 * @param parent
 	 *            org.eclipse.swt.widgets.Composite
 	 * @param heightHint
@@ -264,7 +264,7 @@
 	 * Returns the path of the currently selected container or null if no
 	 * container has been selected. Note that the container may not exist yet if
 	 * the user entered a new container name in the field.
-	 * 
+	 *
 	 * @return The path of the container, or <code>null</code>
 	 */
 	public IPath getContainerFullPath() {
@@ -275,7 +275,7 @@
 	 * Returns an error message indicating the current problem with the value of
 	 * a control in the group, or an empty message if all controls in the group
 	 * contain valid values.
-	 * 
+	 *
 	 * @return java.lang.String
 	 */
 	public String getProblemMessage() {
@@ -284,7 +284,7 @@
 
 	/**
 	 * Returns the type of problem with the value of a control in the group.
-	 * 
+	 *
 	 * @return one of the PROBLEM_* constants
 	 */
 	public int getProblemType() {
@@ -297,9 +297,9 @@
 	 * <br>
 	 * The name will include the resource extension if the preconditions are
 	 * met.
-	 * 
+	 *
 	 * @see ResourceAndContainerGroup#setResourceExtension(String)
-	 * 
+	 *
 	 * @return The resource name
 	 * @since 3.3
 	 */
@@ -313,7 +313,7 @@
 
 	/**
 	 * Returns the resource extension.
-	 * 
+	 *
 	 * @return The resource extension or <code>null</code>.
 	 * @see ResourceAndContainerGroup#setResourceExtension(String)
 	 * @since 3.3
@@ -326,7 +326,7 @@
 	 * Determines whether the resource extension should be added to the resource
 	 * name field. <br>
 	 * <br>
-	 * 
+	 *
 	 * @see ResourceAndContainerGroup#setResourceExtension(String)
 	 * @return <code>true</code> if the preconditions are met; otherwise,
 	 *         <code>false</code>.
@@ -346,7 +346,7 @@
 	 * Handle the focus lost event from the resource name field. <br>
 	 * Adds the resource extension to the resource name field when it loses
 	 * focus (if the preconditions are met).
-	 * 
+	 *
 	 * @see ResourceAndContainerGroup#setResourceExtension(String)
 	 * @since 3.3
 	 */
@@ -358,7 +358,7 @@
 
 	/**
 	 * Handles events for all controls in the group.
-	 * 
+	 *
 	 * @param e
 	 *            org.eclipse.swt.widgets.Event
 	 */
@@ -380,7 +380,7 @@
 
 	/**
 	 * Sets the value of this page's container.
-	 * 
+	 *
 	 * @param path
 	 *            Full path to the container.
 	 */
@@ -407,7 +407,7 @@
 
 	/**
 	 * Sets the value of this page's resource name.
-	 * 
+	 *
 	 * @param value
 	 *            new value
 	 */
@@ -430,7 +430,7 @@
 	 * <br>
 	 * The resource extension will not be reflected in the actual resource name
 	 * field until the resource name field loses focus.
-	 * 
+	 *
 	 * @param value
 	 *            The resource extension without the '.' prefix (e.g. 'java',
 	 *            'xml')
@@ -446,7 +446,7 @@
 	 * represents a valid container resource in the workbench. An error message
 	 * is stored for future reference if the name does not represent a valid
 	 * container.
-	 * 
+	 *
 	 * @return <code>boolean</code> indicating validity of the container name
 	 */
 	protected boolean validateContainer() {
@@ -507,7 +507,7 @@
 	 * resource path represents a valid new resource in the workbench. An error
 	 * message is stored for future reference if the path does not represent a
 	 * valid new resource path.
-	 * 
+	 *
 	 * @param resourcePath
 	 *            the path to validate
 	 * @return <code>boolean</code> indicating validity of the resource path
@@ -540,7 +540,7 @@
 	 * rep- resents a valid resource name in the workbench. An error message is
 	 * stored for future reference if the name does not represent a valid
 	 * resource name.
-	 * 
+	 *
 	 * @return <code>boolean</code> indicating validity of the resource name
 	 */
 	protected boolean validateResourceName() {
@@ -565,7 +565,7 @@
 
 	/**
 	 * Returns the flag indicating whether existing resources are permitted.
-	 * 
+	 *
 	 * @return The allow existing resources flag.
 	 * @see ResourceAndContainerGroup#setAllowExistingResources(boolean)
 	 * @since 3.4
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/StringFileInfoMatcher.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/StringFileInfoMatcher.java
index 5645e75..8673ee1 100755
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/StringFileInfoMatcher.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/misc/StringFileInfoMatcher.java
@@ -26,7 +26,7 @@
 	/**
 	 */
 	public static String ID = "org.eclipse.ui.ide.patternFilterMatcher"; //$NON-NLS-1$
-	
+
 	StringMatcher matcher = null;
 	/**
 	 * Creates a new factory for this filter type.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/FileInputAdapterFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/FileInputAdapterFactory.java
index ac74052..616d71c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/FileInputAdapterFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/FileInputAdapterFactory.java
@@ -27,7 +27,7 @@
 public class FileInputAdapterFactory implements IAdapterFactory {
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
 	 *      java.lang.Class)
 	 */
@@ -42,7 +42,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/ResourceFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/ResourceFactory.java
index 773f9d5..548155e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/ResourceFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/ResourceFactory.java
@@ -51,8 +51,8 @@
     /**
      * Create a ResourceFactory.  This constructor is typically used
      * for our IPersistableElement side.
-     * 
-     * @param input the resource of this factory 
+     *
+     * @param input the resource of this factory
      */
     public ResourceFactory(IResource input) {
         res = input;
@@ -72,7 +72,7 @@
         IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
         String type = memento.getString(TAG_TYPE);
         if (type == null) {
-            // Old format memento. Create an IResource using findMember. 
+            // Old format memento. Create an IResource using findMember.
             // Will return null for resources in closed projects.
             res = root.findMember(new Path(fileName));
         } else {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterBuilder.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterBuilder.java
index 92f5b90..5c76d6e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterBuilder.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterBuilder.java
@@ -14,14 +14,14 @@
 
 /**
  * Registers the adapters on core constructs used in the workbench UI.
- * 
+ *
  * @deprecated advisors should call the org.eclipse.ui.ide.IDE method
  */
 @Deprecated
 public final class WorkbenchAdapterBuilder {
 	/**
 	 * Creates extenders and registers
-	 * 
+	 *
 	 * @deprecated advisors should call the org.eclipse.ui.ide.IDE method
 	 */
 	@Deprecated
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java
index 1b62053..498627a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchAdapterFactory.java
@@ -75,8 +75,8 @@
      * @param o the adaptable object being queried
      *   (usually an instance of <code>IAdaptable</code>)
      * @param adapterType the type of adapter to look up
-     * @return a object castable to the given adapter type, 
-     *    or <code>null</code> if this adapter provider 
+     * @return a object castable to the given adapter type,
+     *    or <code>null</code> if this adapter provider
      *    does not have an adapter of the given type for the
      *    given object
      */
@@ -181,7 +181,7 @@
         }
         return null;
     }
-    
+
     /**
      * Returns the IUndoContext for an object.
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchFile.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchFile.java
index 5a87070..b114db6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchFile.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchFile.java
@@ -31,11 +31,11 @@
 	 * to cache the result of doing a proper content type lookup. This will be
 	 * set by the ContentTypeDecorator (if enabled) and used instead of the
 	 * "guessed" content type in {@link #getBaseImage(IResource)}.
-	 * 
+	 *
 	 * @since 3.4
 	 */
 	public static QualifiedName IMAGE_CACHE_KEY = new QualifiedName(WorkbenchPlugin.PI_WORKBENCH, "WorkbenchFileImage"); //$NON-NLS-1$
-	
+
 	/**
      *	Answer the appropriate base image to use for the passed resource, optionally
      *	considering the passed open status as well iff appropriate for the type of
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchResource.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchResource.java
index 5d265e8..a05990f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchResource.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchResource.java
@@ -128,7 +128,7 @@
      * <code>contentTypeId</code>. It is possible that this method call could
      * cause the resource to be read. It is also possible (through poor plug-in
      * design) for this method to load plug-ins.
-     * 
+     *
      * @param resource
      *            The resource for which the content type should be determined;
      *            must not be <code>null</code>.
@@ -168,7 +168,7 @@
     /**
      * Tests whether a session or persistent property on the resource or its project
      * matches the given value.
-     * 
+     *
      * @param resource
      *            the resource to check
      * @param persistentFlag
@@ -215,16 +215,16 @@
                     return false;
                 }
                 return expectedVal == null || expectedVal.equals(actualVal);
-            } 
+            }
 
             Object actualVal = resToCheck.getSessionProperty(key);
              if (actualVal == null) {
 				return false;
 			}
-              
+
              return expectedVal == null
                         || expectedVal.equals(actualVal.toString());
-            
+
         } catch (CoreException e) {
             // ignore
         }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchStatus.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchStatus.java
index 6109a84..c1720bf 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchStatus.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkbenchStatus.java
@@ -26,7 +26,7 @@
 
     /**
      * Creates a workbench status for the given status.
-     * 
+     *
      * @param status the status
      */
     public WorkbenchStatus(IStatus status) {
@@ -71,7 +71,7 @@
 
     /**
      * Returns the wrapped status object.
-     * 
+     *
      * @return the wrapped status object
      */
     public IStatus getStatus() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetAdapterFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetAdapterFactory.java
index 4bfd9e6..14e10be 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetAdapterFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetAdapterFactory.java
@@ -108,7 +108,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
 	 *      java.lang.Class)
 	 */
@@ -142,7 +142,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetResourceMapping.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetResourceMapping.java
index f9bc218..7651963 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetResourceMapping.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/model/WorkingSetResourceMapping.java
@@ -35,7 +35,7 @@
 public class WorkingSetResourceMapping extends ResourceMapping {
 
 	private IWorkingSet set;
-	
+
 	/**
 	 * Create the resource mapping
 	 * @param workingSet the working set
@@ -118,7 +118,7 @@
 		}
 		return (ResourceMapping[]) result.toArray(new ResourceMapping[result.size()]);
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.core.resources.mapping.ResourceMapping#contains(org.eclipse.core.resources.mapping.ResourceMapping)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/IDERegistryReader.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/IDERegistryReader.java
index f4112cb..3e77888 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/IDERegistryReader.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/IDERegistryReader.java
@@ -130,7 +130,7 @@
      * Implement this method to read element's attributes.
      * If children should also be read, then implementor
      * is responsible for calling <code>readElementChildren</code>.
-     * Implementor is also responsible for logging missing 
+     * Implementor is also responsible for logging missing
      * attributes.
      *
      * @return true if element was recognized, false if not.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistry.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistry.java
index 93d355a..cfb3580 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistry.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistry.java
@@ -173,7 +173,7 @@
 	/**
 	 * Return whether or not this configuration element has a resolution for the
 	 * marker.
-	 * 
+	 *
 	 * @param marker
 	 * @param element
 	 * @return boolean <code>true</code> if there is a resolution.
@@ -271,7 +271,7 @@
 
 	/**
 	 * Adds a help query to the registry.
-	 * 
+	 *
 	 * @param query
 	 *            a marker query
 	 * @param result
@@ -287,7 +287,7 @@
 
 	/**
 	 * Adds a resolution query to the registry.
-	 * 
+	 *
 	 * @param query
 	 *            a marker query
 	 * @param result
@@ -303,7 +303,7 @@
 
 	/**
 	 * Adds a query to the given table.
-	 * 
+	 *
 	 * @param table
 	 *            the table to which the query is added
 	 * @param query
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistryReader.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistryReader.java
index ee35d48..4766341 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistryReader.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerHelpRegistryReader.java
@@ -18,7 +18,7 @@
 import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
 
 /**
- * This class is used to read marker help context ids and 
+ * This class is used to read marker help context ids and
  * resolutions from the platform registry.
  */
 public class MarkerHelpRegistryReader extends IDERegistryReader {
@@ -32,7 +32,7 @@
 
     private static final String TAG_RESOLUTION_GENERATOR = "markerResolutionGenerator";//$NON-NLS-1$
 
-    private static final String TAG_ATTRIBUTE = "attribute";//$NON-NLS-1$ 
+    private static final String TAG_ATTRIBUTE = "attribute";//$NON-NLS-1$
 
     private static final String ATT_TYPE = "markerType";//$NON-NLS-1$
 
@@ -45,8 +45,8 @@
      * and add it to the given marker help registry.
      * <p>
      * Warning:
-     * The marker help registry must be passed in because this 
-     * method is called during the process of setting up the 
+     * The marker help registry must be passed in because this
+     * method is called during the process of setting up the
      * marker help registry and at this time it has not been
      * safely setup with the plugin.
      * </p>
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQuery.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQuery.java
index 85aa0c2..dd43711 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQuery.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQuery.java
@@ -15,14 +15,14 @@
 import org.eclipse.ui.internal.ide.Policy;
 
 /**
- * Instances of this class hold a marker type id and/or 
- * a series of marker attributes. This information may be used 
+ * Instances of this class hold a marker type id and/or
+ * a series of marker attributes. This information may be used
  * to determine if a given marker is of the same marker
  * type and determine its values for the attributes.
  */
 public class MarkerQuery {
     /**
-     * The marker type targetted by this query. 
+     * The marker type targetted by this query.
      * May be <code>null</code>.
      */
     private String type;
@@ -43,10 +43,10 @@
      * Creates a new marker query with the given type
      * and attributes.
      * <p>
-     * The type may be <code>null</code>. The attributes may 
+     * The type may be <code>null</code>. The attributes may
      * be empty, but not <code>null</code>.
      * </p>
-     * 
+     *
      * @param markerType the targetted marker type
      * @param markerAttributes the targetted marker attributes
      */
@@ -67,7 +67,7 @@
      * is appropriate for this query (correct type and has
      * all of the query attributes), otherwise <code>null</code>
      * is returned.
-     * 
+     *
      * @param marker the marker to perform the query against
      * @return a marker query result or <code>null</code>
      */
@@ -156,9 +156,9 @@
     }
 
     /**
-     * Returns the targetted marker type. May be 
+     * Returns the targetted marker type. May be
      * <code>null</code>
-     * 
+     *
      * @return the targetted marker type
      */
     public String getType() {
@@ -168,7 +168,7 @@
     /**
      * Returns the targetted attributes.
      * The array may be empty.
-     * 
+     *
      * @return the targetted attributes
      */
     public String[] getAttributes() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQueryResult.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQueryResult.java
index 04e83ee..48c6b60 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQueryResult.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/registry/MarkerQueryResult.java
@@ -12,7 +12,7 @@
 
 /**
  * Instances of this class represent the result of a specific marker
- * query. Specifically they contain an ordered collection of marker 
+ * query. Specifically they contain an ordered collection of marker
  * attribute values.
  */
 
@@ -32,7 +32,7 @@
      * <p>
      * The values may not be empty.
      * </p>
-     * 
+     *
      * @param markerAttributeValues the target marker's attribute values
      */
     public MarkerQueryResult(String[] markerAttributeValues) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/AbstractResourceDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/AbstractResourceDescription.java
index 4e6909d..4085db1 100755
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/AbstractResourceDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/AbstractResourceDescription.java
@@ -24,11 +24,11 @@
 /**
  * Base implementation of ResourceDescription that describes the common
  * attributes of a resource to be created.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 abstract class AbstractResourceDescription extends ResourceDescription {
 	IContainer parent;
@@ -50,7 +50,7 @@
 
 	/**
 	 * Create a resource description from the specified resource.
-	 * 
+	 *
 	 * @param resource
 	 *            the resource to be described
 	 */
@@ -79,7 +79,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.ide.undo.ResourceDescription#createResource(org.eclipse
 	 * .core.runtime.IProgressMonitor)
@@ -95,7 +95,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.ide.undo.ResourceDescription#isValid()
 	 */
 	@Override
@@ -107,7 +107,7 @@
 	 * Restore any saved attributed of the specified resource. This method is
 	 * called after the existent resource represented by the receiver has been
 	 * created.
-	 * 
+	 *
 	 * @param resource
 	 *            the newly created resource
 	 * @throws CoreException
@@ -140,7 +140,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.ide.undo.ResourceDescription#verifyExistence(boolean)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ContainerDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ContainerDescription.java
index 20ab464..d85e6a6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ContainerDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ContainerDescription.java
@@ -31,11 +31,11 @@
 /**
  * ContainerDescription is a lightweight description that describes a container
  * to be created.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public abstract class ContainerDescription extends AbstractResourceDescription {
 
@@ -44,7 +44,7 @@
 	URI location;
 
 	UIResourceFilterDescription[] filters;
-	
+
 	String defaultCharSet;
 
 	AbstractResourceDescription[] members;
@@ -54,7 +54,7 @@
 	 * can be used to create the container. The returned ContainerDescription
 	 * should represent any non-existing parents in addition to the specified
 	 * container.
-	 * 
+	 *
 	 * @param container
 	 *            the handle of the container to be described
 	 * @return a container description describing the container and any
@@ -64,13 +64,13 @@
 	public static ContainerDescription fromContainer(IContainer container) {
 		return fromContainer(container, false);
 	}
-	
+
 	/**
 	 * Create a group container description from the specified container handle that
 	 * can be used to create the container. The returned ContainerDescription
 	 * should represent any non-existing parents in addition to the specified
 	 * container.
-	 * 
+	 *
 	 * @param container
 	 *            the handle of the container to be described
 	 * @return a container description describing the container and any
@@ -80,7 +80,7 @@
 	public static ContainerDescription fromVirtualFolderContainer(IContainer container) {
 		return fromContainer(container, true);
 	}
-	
+
 	protected static ContainerDescription fromContainer(IContainer container, boolean usingVirtualFolder) {
 		IPath fullPath = container.getFullPath();
 		ContainerDescription firstCreatedParent = null;
@@ -141,7 +141,7 @@
 	 * Typically used when the container handle represents a resource that
 	 * actually exists, although it will not fail if the resource is
 	 * non-existent.
-	 * 
+	 *
 	 * @param container
 	 *            the container to be described
 	 */
@@ -171,7 +171,7 @@
 
 	/**
 	 * Create any child resources known by this container description.
-	 * 
+	 *
 	 * @param parentHandle
 	 *            the handle of the created parent
 	 * @param monitor
@@ -195,7 +195,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#recordStateFromHistory(org.eclipse.core.resources.IResource,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
@@ -220,7 +220,7 @@
 							.getFolder(path);
 					members[i].recordStateFromHistory(folderHandle,
 							new SubProgressMonitor(monitor, 100 / members.length));
-				} 
+				}
 			}
 		}
 		monitor.done();
@@ -228,7 +228,7 @@
 
 	/**
 	 * Return the name of the container described by this ContainerDescription.
-	 * 
+	 *
 	 * @return the name of the container.
 	 */
 	@Override
@@ -238,7 +238,7 @@
 
 	/**
 	 * Return the first folder found that has no child folders.
-	 * 
+	 *
 	 * @return the container description for the first child in the receiver
 	 *         that is a leaf, or this container if there are no children.
 	 */
@@ -260,7 +260,7 @@
 	/**
 	 * Add the specified resource description as a member of this resource
 	 * description
-	 * 
+	 *
 	 * @param member
 	 *            the resource description considered a member of this
 	 *            container.
@@ -278,7 +278,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#restoreResourceAttributes(org.eclipse.core.resources.IResource)
 	 */
 	@Override
@@ -294,7 +294,7 @@
 
 	/**
 	 * Set the location to which this container is linked.
-	 * 
+	 *
 	 * @param location
 	 *            the location URI, or <code>null</code> if there is no link
 	 */
@@ -304,7 +304,7 @@
 
 	/**
 	 * Set the filters to which should be created on this container.
-	 * 
+	 *
 	 * @param filters
 	 *            the filters
 	 */
@@ -314,7 +314,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#verifyExistence(boolean)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FileDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FileDescription.java
index e554935..1f6a6c2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FileDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FileDescription.java
@@ -30,11 +30,11 @@
 /**
  * FileDescription is a lightweight description that describes a file to be
  * created.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class FileDescription extends AbstractResourceDescription {
 
@@ -50,7 +50,7 @@
 	 * Create a FileDescription that can be used to later restore the given
 	 * file. The file typically already exists, but this constructor will not
 	 * fail if the file does not exist.
-	 * 
+	 *
 	 * @param file
 	 *            the file to be restored.
 	 */
@@ -74,7 +74,7 @@
 	 * path is specified, this file should represent a link to another location.
 	 * The content description describes any state that should be used when the
 	 * file resource is created.
-	 * 
+	 *
 	 * @param file
 	 *            the file to be described
 	 * @param linkLocation
@@ -95,7 +95,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#recordStateFromHistory(org.eclipse.core.resources.IResource,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
@@ -114,7 +114,7 @@
 			this.fileContentDescription = new IFileContentDescription() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.ui.internal.ide.undo.IFileContentDescription#exists()
 				 */
 				@Override
@@ -124,7 +124,7 @@
 
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.ui.internal.ide.undo.IFileContentDescription#getContents()
 				 */
 				@Override
@@ -134,7 +134,7 @@
 
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.ui.internal.ide.undo.IFileContentDescription#getCharset()
 				 */
 				@Override
@@ -147,7 +147,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#createResourceHandle()
 	 */
 	@Override
@@ -159,7 +159,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#createExistentResourceFromHandle(org.eclipse.core.resources.IResource,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
@@ -214,7 +214,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#isValid()
 	 */
 	@Override
@@ -228,7 +228,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#getName()
 	 */
 	@Override
@@ -250,10 +250,10 @@
 		return states[0];
 
 	}
-	
+
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#restoreResourceAttributes(org.eclipse.core.resources.IResource)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FolderDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FolderDescription.java
index 0da092f..0fc6458 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FolderDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/FolderDescription.java
@@ -26,11 +26,11 @@
 /**
  * FolderDescription is a lightweight description that describes a folder to be
  * created.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class FolderDescription extends ContainerDescription {
 
@@ -39,7 +39,7 @@
 	 * Create a FolderDescription from the specified folder handle. Typically
 	 * used when the folder handle represents a resource that actually exists,
 	 * although it will not fail if the resource is non-existent.
-	 * 
+	 *
 	 * @param folder
 	 *            the folder to be described
 	 * @param virtual
@@ -54,7 +54,7 @@
 	 * Create a FolderDescription from the specified folder handle. If the
 	 * folder to be created should be linked to a different location, specify
 	 * the location.
-	 * 
+	 *
 	 * @param folder
 	 *            the folder to be described
 	 * @param linkLocation
@@ -69,7 +69,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ContainerDescription#createResourceHandle()
 	 */
 	@Override
@@ -81,7 +81,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#createExistentResourceFromHandle(org.eclipse.core.resources.IResource,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/IFileContentDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/IFileContentDescription.java
index 1b108fa..df6b8fc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/IFileContentDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/IFileContentDescription.java
@@ -16,17 +16,17 @@
 
 /**
  * IFileContentDescription is a description of a file's content.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public interface IFileContentDescription {
 	/**
 	 * Returns an open input stream on the contents of the file described. The
 	 * client is responsible for closing the stream when finished.
-	 * 
+	 *
 	 * @return an input stream containing the contents of the file
 	 * @throws CoreException
 	 *             any CoreException encountered retrieving the contents
@@ -36,7 +36,7 @@
 	/**
 	 * Returns whether this file content description still exists. If it does
 	 * not exist, it will be unable to produce the contents.
-	 * 
+	 *
 	 * @return <code>true</code> if this description exists, and
 	 *         <code>false</code> if it does not
 	 */
@@ -46,12 +46,12 @@
 	 * Returns the name of a charset encoding to be used when decoding the
 	 * contents into characters. Returns <code>null</code> if a charset
 	 * has not been explicitly specified.
-	 * 
+	 *
 	 * @return the name of a charset, or <code>null</code>
 	 * @throws CoreException
 	 *             any CoreException encountered while determining the character
 	 *             set
-	 * 
+	 *
 	 */
 	public String getCharset() throws CoreException;
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/MarkerDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/MarkerDescription.java
index cb45b59..5f4e77e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/MarkerDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/MarkerDescription.java
@@ -20,11 +20,11 @@
 /**
  * MarkerDescription is a lightweight description of a marker that can be used
  * to describe a marker to be created or updated.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class MarkerDescription {
 	String type;
@@ -34,9 +34,9 @@
 	IResource resource;
 
 	/**
-	 * 
+	 *
 	 * Create a marker description from the specified marker.
-	 * 
+	 *
 	 * @param marker
 	 *            the marker to be described
 	 * @throws CoreException
@@ -51,7 +51,7 @@
 	/**
 	 * Create a marker description from the specified marker type, attributes,
 	 * and resource.
-	 * 
+	 *
 	 * @param type
 	 *            the type of marker to be created.
 	 * @param attributes
@@ -67,7 +67,7 @@
 
 	/**
 	 * Create a marker from the marker description.
-	 * 
+	 *
 	 * @return the created marker
 	 * @throws CoreException
 	 */
@@ -79,7 +79,7 @@
 
 	/**
 	 * Update an existing marker using the attributes in the marker description.
-	 * 
+	 *
 	 * @param marker
 	 *            the marker to be updated
 	 * @throws CoreException
@@ -90,7 +90,7 @@
 
 	/**
 	 * Return the resource associated with this marker.
-	 * 
+	 *
 	 * @return the resource associated with this marker
 	 */
 	public IResource getResource() {
@@ -99,7 +99,7 @@
 
 	/**
 	 * Return the marker type associated with this marker.
-	 * 
+	 *
 	 * @return the string marker type of this marker
 	 */
 	public String getType() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ProjectDescription.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ProjectDescription.java
index 6114a37..bdb923b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ProjectDescription.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/ProjectDescription.java
@@ -24,11 +24,11 @@
 /**
  * ProjectDescription is a lightweight description that describes a project to
  * be created.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class ProjectDescription extends ContainerDescription {
 
@@ -37,7 +37,7 @@
 
 	/**
 	 * Create a project description from a specified project.
-	 * 
+	 *
 	 * @param project
 	 *            The project to be described. The project must exist.
 	 */
@@ -62,7 +62,7 @@
 	/**
 	 * Create a project description from a specified IProjectDescription. Used
 	 * when the project does not yet exist.
-	 * 
+	 *
 	 * @param projectDescription
 	 *            the project description for the future project
 	 */
@@ -73,7 +73,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ContainerDescription#createResourceHandle()
 	 */
 	@Override
@@ -83,7 +83,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#createExistentResourceFromHandle(org.eclipse.core.resources.IResource,
 	 *      org.eclipse.core.runtime.IProgressMonitor)
 	 */
@@ -116,7 +116,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ContainerDescription#getName()
 	 */
 	@Override
@@ -129,7 +129,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.ide.undo.ResourceDescription#verifyExistence(boolean)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/UndoMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/UndoMessages.java
index 49e77b3..bb44634 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/UndoMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/UndoMessages.java
@@ -16,7 +16,7 @@
 /**
  * UndoMessages is the class that handles the messages for performing workspace
  * undo and redo.
- * 
+ *
  * @since 3.3
  */
 public class UndoMessages extends NLS {
@@ -37,7 +37,7 @@
 	public static String AbstractWorkspaceOperation_RedoSideEffectsWarningMessage;
 	public static String AbstractWorkspaceOperation_ErrorInvalidMessage;
 	public static String AbstractWorkspaceOperation_GenericWarningMessage;
-	
+
 	public static String AbstractResourcesOperation_ResourcesDoNotExist;
 	public static String AbstractResourcesOperation_ResourcesAlreadyExist;
 	public static String AbstractResourcesOperation_NotEnoughInfo;
@@ -50,14 +50,14 @@
 	public static String AbstractResourcesOperation_outOfSyncQuestion;
 	public static String AbstractResourcesOperation_deletionMessageTitle;
 	public static String AbstractResourcesOperation_deletionExceptionMessage;
-	
+
 	public static String AbstractCopyOrMoveResourcesOperation_SameNameOrLocation;
 	public static String AbstractCopyOrMoveResourcesOperation_ResourceDoesNotExist;
 	public static String AbstractCopyOrMoveResourcesOperation_copyProjectProgress;
 	public static String AbstractCopyOrMoveResourcesOperation_moveProjectProgress;
-	
+
 	public static String CopyResourcesOperation_NotAllowedDueToDataLoss;
-	
+
 	public static String ProjectDescription_NewProjectProgress;
 	public static String FileDescription_NewFileProgress;
 	public static String GroupDescription_NewGroupProgress;
@@ -65,11 +65,11 @@
 	public static String FileDescription_ContentsCouldNotBeRestored;
 	public static String FolderDescription_NewFolderProgress;
 	public static String FolderDescription_SavingUndoInfoProgress;
-	
+
 
 	public static String MarkerOperation_ResourceDoesNotExist;
 	public static String MarkerOperation_MarkerDoesNotExist;
-	public static String MarkerOperation_NotEnoughInfo;	
+	public static String MarkerOperation_NotEnoughInfo;
 	public static String MarkerOperation_CreateProgress;
 	public static String MarkerOperation_DeleteProgress;
 	public static String MarkerOperation_UpdateProgress;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/WorkspaceUndoMonitor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/WorkspaceUndoMonitor.java
index 66e461ea..7c3c47a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/WorkspaceUndoMonitor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/ide/undo/WorkspaceUndoMonitor.java
@@ -30,11 +30,11 @@
 /**
  * WorkspaceUndoMonitor monitors the workspace for resource changes and
  * periodically checks the undo history to make sure it is valid.
- * 
+ *
  * This class is not intended to be instantiated or used by clients.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class WorkspaceUndoMonitor {
 
@@ -55,7 +55,7 @@
 
 	/**
 	 * Get the singleton instance of this class.
-	 * 
+	 *
 	 * @return the singleton instance of this class.
 	 */
 	public static WorkspaceUndoMonitor getInstance() {
@@ -107,14 +107,14 @@
 
 	/**
 	 * Get a change listener for listening to resource changes.
-	 * 
+	 *
 	 * @return the resource change listeners
 	 */
 	private IResourceChangeListener getResourceChangeListener() {
 		return new IResourceChangeListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
 			 */
 			@Override
@@ -139,7 +139,7 @@
 
 	/**
 	 * Get a change listener for listening to operation history changes.
-	 * 
+	 *
 	 * @return the resource change listeners
 	 */
 	private IOperationHistoryListener getOperationHistoryListener() {
@@ -147,7 +147,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.core.commands.operations.IOperationHistoryListener#historyNotification(org.eclipse.core.commands.operations.OperationHistoryEvent)
 			 */
 			@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/bookmarkexplorer/BookmarkMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/bookmarkexplorer/BookmarkMessages.java
index 5c9a1a2..d184d3f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/bookmarkexplorer/BookmarkMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/bookmarkexplorer/BookmarkMessages.java
@@ -53,7 +53,7 @@
 	public static String ColumnFolder_text;
 	public static String ColumnLocation_text;
 	public static String ColumnCreationTime_text;
-	
+
 	public static String Error_text;
 
 	public static String LineIndicator_text;
@@ -80,7 +80,7 @@
 	public static String CopyToClipboardProblemDialog_message;
 
 	public static String CreateBookmark_undoText;
-	public static String ModifyBookmark_undoText;	
+	public static String ModifyBookmark_undoText;
 
 	static {
 		// load message values from bundle file
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/framelist/FrameListMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/framelist/FrameListMessages.java
index a08606c..7f5dbe9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/framelist/FrameListMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/framelist/FrameListMessages.java
@@ -3,8 +3,8 @@
  * program and the accompanying materials 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: 
+ *
+ * Contributors:
  * IBM - Initial API and implementation
  **********************************************************************/
 package org.eclipse.ui.internal.views.framelist;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AddTaskHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AddTaskHandler.java
index c0cc957..e34e78e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AddTaskHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AddTaskHandler.java
@@ -17,15 +17,15 @@
 
 /**
  * AddTaskHandler is the handler for adding a new task to the task list.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class AddTaskHandler extends MarkerViewHandler {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllErrorsParameters.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllErrorsParameters.java
index 99a040d..16c581e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllErrorsParameters.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllErrorsParameters.java
@@ -18,9 +18,9 @@
 
 /**
  * AllErrorsParameters is the parameters for the error severity type.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class AllErrorsParameters extends FiltersContributionParameters {
 
@@ -40,7 +40,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FiltersContributionParameters#getParameterValues()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionConfigurationArea.java
index 30400a4..3b9dfea 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionConfigurationArea.java
@@ -24,9 +24,9 @@
 /**
  * {@link ProblemsSeverityAndDescriptionConfigurationArea} is the configuration
  * area for the all markers view.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class AllMarkersSeverityAndDescriptionConfigurationArea extends
 		SeverityAndDescriptionConfigurationArea {
@@ -36,7 +36,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.DescriptionConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -63,7 +63,7 @@
 		enablementButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -76,7 +76,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.SeverityAndDescriptionConfigurationArea#apply(org.eclipse.ui.views.markers.MarkerFieldFilter)
 	 */
 	@Override
@@ -88,13 +88,13 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.SeverityAndDescriptionConfigurationArea#initialize(org.eclipse.ui.views.markers.MarkerFieldFilter)
 	 */
 	@Override
 	public void initialize(MarkerFieldFilter filter) {
 		super.initialize(filter);
-		
+
 		setFilterOnSeverity(((AllMarkersSeverityAndDescriptionFieldFilter) filter)
 				.getFilterOnSeverity());
 	}
@@ -107,7 +107,7 @@
 		filterOnSeverity = filtering;
 		enablementButton.setSelection(filtering);
 		setSeverityButtonsEnabled(filterOnSeverity);
-		
+
 	}
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionFieldFilter.java
index dd5f59c..8046750 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/AllMarkersSeverityAndDescriptionFieldFilter.java
@@ -19,9 +19,9 @@
 /**
  * AllMarkersSeverityAndDescriptionFieldFilter is a
  * {@link SeverityAndDescriptionFieldFilter} that handles the no severity case.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class AllMarkersSeverityAndDescriptionFieldFilter extends
 		SeverityAndDescriptionFieldFilter {
@@ -38,7 +38,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.SeverityAndDescriptionFieldFilter#select(org.eclipse.ui.views.markers.MarkerItem)
 	 */
 	@Override
@@ -57,7 +57,7 @@
 
 	/**
 	 * Return whether or not we are filtering on severity.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	boolean getFilterOnSeverity() {
@@ -66,7 +66,7 @@
 
 	/**
 	 * Set the whether or not we are filtering on severity
-	 * 
+	 *
 	 * @param filter
 	 */
 	void setFilterOnSeverity(boolean filter) {
@@ -76,7 +76,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.SeverityAndDescriptionFieldFilter#loadSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -90,7 +90,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.SeverityAndDescriptionFieldFilter#saveSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -101,7 +101,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.SeverityAndDescriptionFieldFilter#populateWorkingCopy(org.eclipse.ui.views.markers.MarkerFieldFilter)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java
index 488c1d9..aa7e518 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/BookmarksView.java
@@ -31,7 +31,7 @@
 	 */
 	public BookmarksView() {
 		super(MarkerSupportRegistry.BOOKMARKS_GENERATOR);
-		
+
 	}
 
 	/*
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CachedMarkerBuilder.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CachedMarkerBuilder.java
index 0435cbb..7ade40c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CachedMarkerBuilder.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CachedMarkerBuilder.java
@@ -33,9 +33,9 @@
 /**
  * The CachedMarkerBuilder is the object that generates the list of markers from
  * a generator.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class CachedMarkerBuilder {
 
@@ -43,38 +43,38 @@
 	private static final String VALUE_NONE = "none"; //$NON-NLS-1$
 
 	// The MarkerContentGenerator we are using for building
-	private MarkerContentGenerator generator; 
+	private MarkerContentGenerator generator;
 	private MarkerUpdateJob updateJob;
 	private MarkersChangeListener markerListener;
 	private MarkerUpdateScheduler scheduler;
-	
+
 	private Markers markers;
 	private Markers markersClone;
-	
+
 	final Object MARKER_INCREMENTAL_UPDATE_FAMILY =new Object();
 	final Object CACHE_UPDATE_FAMILY = new Object();
 	final Object MARKERSVIEW_UPDATE_JOB_FAMILY;
-	
+
 	private IWorkbenchSiteProgressService progressService;
 
 	private MarkerGroup categoryGroup;
-	
+
 	private MarkerComparator comparator;
-	
+
 	private boolean[] changeFlags;
 
 	private IPropertyChangeListener workingSetListener;
 
 	private boolean active;
-	
+
 	private boolean building;
-	
+
 	private IMemento memento;
-	
+
 
 	/**
 	 * Create a new instance of the receiver. Update using the updateJob.
-	 * @param view 
+	 * @param view
 	 */
 	public CachedMarkerBuilder(ExtendedMarkersView view) {
 		active = false;
@@ -84,7 +84,7 @@
 		markerListener = new MarkersChangeListener(view, this);
 		scheduler = new MarkerUpdateScheduler(view, this);
 	}
-	
+
 	void restoreState(IMemento memento) {
 		if (memento == null)
 			setDefaultCategoryGroup(getGenerator());
@@ -109,14 +109,14 @@
 		this.memento=memento;
 	}
 	/**
-	 * 
+	 *
 	 */
 	void start() {
 		active = true;
 		registerTypesToListener();
 		PlatformUI.getWorkbench().getWorkingSetManager()
 				.addPropertyChangeListener(getWorkingSetListener());
-		
+
 		markerListener.start();
 		scheduleUpdate();
 	}
@@ -128,12 +128,12 @@
 		markerListener.stop();
 		active=false;
 		Job.getJobManager().cancel(MARKERSVIEW_UPDATE_JOB_FAMILY);
-		
+
 		if(workingSetListener!=null){
 			PlatformUI.getWorkbench().getWorkingSetManager()
 			.removePropertyChangeListener(getWorkingSetListener());
 		}
-		
+
 		if (isIncremental()) {
 			if(incrementJob!=null){
 				incrementJob.clearEntries();
@@ -143,7 +143,7 @@
 
 	/**
 	 * Return the group used to generate categories.
-	 * 
+	 *
 	 * @return MarkerGroup or <code>null</code>.
 	 */
 	MarkerGroup getCategoryGroup() {
@@ -152,7 +152,7 @@
 
 	/**
 	 * Return a new instance of the receiver with the field
-	 * 
+	 *
 	 * @return MarkerComparator
 	 */
 	MarkerComparator getComparator() {
@@ -170,7 +170,7 @@
 
 	/**
 	 * Return the generator for the receiver.
-	 * 
+	 *
 	 * @return MarkerContentGenerator
 	 */
 	MarkerContentGenerator getGenerator() {
@@ -179,7 +179,7 @@
 
 	/**
 	 * Return the primary sort field
-	 * 
+	 *
 	 * @return MarkerField
 	 */
 	MarkerField getPrimarySortField() {
@@ -188,7 +188,7 @@
 
 	/**
 	 * Get the sort direction of field
-	 * 
+	 *
 	 * @param field
 	 * @return int one of {@link MarkerComparator#ASCENDING} or
 	 *         {@link MarkerComparator#DESCENDING}
@@ -201,7 +201,7 @@
 
 	/**
 	 * Return the total number of markers.
-	 * 
+	 *
 	 * @return int
 	 */
 	int getTotalMarkerCount() {
@@ -210,7 +210,7 @@
 
 	/**
 	 * Return the total number of markers.
-	 * 
+	 *
 	 * @return int
 	 */
 	int getTotalMarkerCount(Markers markers) {
@@ -227,7 +227,7 @@
 
 	/**
 	 * Return whether or not the receiver is building.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	boolean isBuilding() {
@@ -240,10 +240,10 @@
 	void setBuilding(boolean building) {
 		this.building =building;
 	}
-	
+
 	/**
 	 * Return whether or not we are showing a hierarchy.
-	 * 
+	 *
 	 * @return <code>true</code> if a hierarchy is being shown.
 	 */
 	boolean isShowingHierarchy() {
@@ -252,7 +252,7 @@
 
 	/**
 	 * Refresh the sort order and categories of the receiver.
-	 * 
+	 *
 	 */
 	void refreshContents(IWorkbenchSiteProgressService service) {
 		try {
@@ -275,7 +275,7 @@
 	}
 	/**
 	 * Refresh the sort order and categories of the receiver.
-	 * 
+	 *
 	 */
 	void refreshContents() {
 		SortingJob job=new SortingJob(CachedMarkerBuilder.this);
@@ -287,11 +287,11 @@
 			job.schedule(MarkerUpdateScheduler.SHORT_DELAY);
 		}
 	}
-	
-	
+
+
 	/**
 	 * Save the state of the receiver to memento
-	 * 
+	 *
 	 * @param memento
 	 */
 	void saveState(IMemento memento) {
@@ -304,17 +304,17 @@
 
 	/**
 	 * Schedule an update of the markers with a delay.
-	 * 
+	 *
 	 */
 	void scheduleUpdate() {
 		if (active) {
 			scheduler.scheduleUpdate(MarkerUpdateScheduler.SHORT_DELAY,true);
 		}
 	}
-	
+
 	/**
 	 * Schedule an update of the markers with a delay.
-	 * 
+	 *
 	 */
 	void scheduleUpdate(long delay) {
 		if (active) {
@@ -334,17 +334,17 @@
 
 	/**
 	 * Schedule pending updates to happen quickly.
-	 * 
+	 *
 	 */
 	void speedUpPendingUpdates() {
 		if (active) {
 			scheduler.speedUpPendingUpdates();
 		}
 	}
-	
+
 	/**
 	 * Set the category group.
-	 * 
+	 *
 	 * @param group
 	 *            {@link MarkerGroup} or <code>null</code>.
 	 */
@@ -360,7 +360,7 @@
 
 	/**
 	 * Categorise by the default setting for contentGenerator.
-	 * 
+	 *
 	 * @param contentGenerator
 	 */
 	private void setDefaultCategoryGroup(MarkerContentGenerator contentGenerator) {
@@ -375,7 +375,7 @@
 
 	/**
 	 * Set the generator and update the contents.
-	 * 
+	 *
 	 * @param newGenerator
 	 */
 	void setGenerator(MarkerContentGenerator newGenerator) {
@@ -389,7 +389,7 @@
 
 	/**
 	 * Set the primary sort field for the receiver.
-	 * 
+	 *
 	 * @param field
 	 */
 	void setPrimarySortField(MarkerField field) {
@@ -403,7 +403,7 @@
 	}
 	/**
 	 * Set the progress service for the receiver.
-	 * 
+	 *
 	 * @param service
 	 */
 	void setProgressService(IWorkbenchSiteProgressService service) {
@@ -425,11 +425,11 @@
 	IWorkbenchSiteProgressService getProgressService() {
 		return progressService;
 	}
-	
+
 	/**
 	 * The method should not be called directly, see
 	 * {@link MarkerUpdateScheduler}
-	 * 
+	 *
 	 * schedules marker update job
 	 */
 	MarkerUpdateJob scheduleUpdateJob(long delay) {
@@ -439,7 +439,7 @@
 	/**
 	 * The method should not be called directly, see
 	 * {@link MarkerUpdateScheduler}
-	 * 
+	 *
 	 * schedules marker update job
 	 */
 	 MarkerUpdateJob scheduleUpdateJob(long delay, boolean clean) {
@@ -450,15 +450,15 @@
 	 /**
 	  * The method should not be called directly, see
 	 * {@link MarkerUpdateScheduler}
-	 * 
+	 *
 	 * schedules marker update job
 	 */
 	MarkerUpdateJob scheduleUpdateJob(long delay, boolean clean,
 			boolean[] changeFlags) {
-		
+
 		setBuilding(true);
 		updateChangeFlags(changeFlags);
-		
+
 		synchronized (getUpdateScheduler().getSchedulingLock()) {
 			if (generator == null || !active) {
 				return null;
@@ -486,11 +486,11 @@
 			return updateJob;
 		}
 	}
-	
+
 	/**
 	 * The method should not be called directly, see
 	 * {@link MarkerUpdateScheduler}
-	 * 
+	 *
 	 * Cancel a scheduled update
 	 */
 	void cancelUpdate() {
@@ -506,7 +506,7 @@
 	MarkersChangeListener getMarkerListener() {
 		return markerListener;
 	}
-	
+
 	/**
 	 * @param markerListener The {@link MarkersChangeListener} to set.
 	 */
@@ -519,13 +519,13 @@
 	 */
 	boolean includeMarkerSubTypes(){
 		/*
-		 * TODO: sub-types included (hard-code?): generator(actually 
-		 * {@link ContentGeneratorDescriptor#getMarkerTypes()}) would 
+		 * TODO: sub-types included (hard-code?): generator(actually
+		 * {@link ContentGeneratorDescriptor#getMarkerTypes()}) would
 		 * need changes if this is to become a variable.
 		 */
 		return true;
 	}
-	
+
 	/**
 	 * Lets reset the types for listen at every update, fetching them during
 	 * every delta is wasteful.
@@ -538,7 +538,7 @@
 		getMarkerListener().listenToTypes(generator.getTypes(),
 				includeMarkerSubTypes());
 	}
-	
+
 	/**
 	 * @return Returns the markers.
 	 */
@@ -547,7 +547,7 @@
 	}
 	/**
 	 * Create a listener for working set changes.
-	 * 
+	 *
 	 * @return IPropertyChangeListener
 	 */
 	private IPropertyChangeListener getWorkingSetListener() {
@@ -556,12 +556,12 @@
 		}
 		return workingSetListener;
 	}
-	
-	
-	
+
+
+
 	/**
 	 * Get the name for the preferences for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	static String getMementoPreferenceName(String viewId) {
@@ -577,7 +577,7 @@
 
 	/**
 	 * @return lastUpdateTime
-	 * 
+	 *
 	 */
 	long getLastUpdateTime() {
 		if (updateJob != null) {
@@ -612,24 +612,24 @@
 		markersClone =markers.getClone();
 		return markersClone;
 	}
-	 
+
 ///////	<Incremental update code>///////
 		private IncrementUpdateJob incrementJob;
 	/**
 	 * Checks whether the builder should perform incrementally Note : Incremental
 	 * updating method is NOT used and tested yet but left out for further
 	 * investigation(*).
-	 * 
+	 *
 	 * @return Returns true if we should collect markers incrementally.
 	 */
 	boolean isIncremental() {
 		/*
-		 * We do not update incrementally. We have 
+		 * We do not update incrementally. We have
 		 * code for further investigation(*) for this anyway.
 		 */
 		return false;
 	}
-	
+
 	/**
 	 * @return Returns the changeFlags {added,removed,changed}.
 	 */
@@ -644,7 +644,7 @@
 
 	/**
 	 * @param changeFlags
-	 * 
+	 *
 	 */
 	void updateChangeFlags(boolean[] changeFlags) {
 		for (int i = 0; i < changeFlags.length; i++) {
@@ -665,9 +665,9 @@
 		incrementJob.addUpdate(update);
 	}
 ///////	</Incremental update code>///////
-	
+
 ///helpers//
-	
+
 	/**
 	 * The WorkingSet listener, since marker filters can be scoped to
 	 * workingsets; listen for changes to them.
@@ -676,7 +676,7 @@
 	private class WorkingSetListener implements IPropertyChangeListener{
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see
 		 * org.eclipse.jface.util.IPropertyChangeListener#propertyChange
 		 * (org.eclipse.jface.util.PropertyChangeEvent)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompatibilityMarkerFieldFilterGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompatibilityMarkerFieldFilterGroup.java
index de8c89f..fdec921 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompatibilityMarkerFieldFilterGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompatibilityMarkerFieldFilterGroup.java
@@ -16,9 +16,9 @@
 /**
  * CompatibilityMarkerFieldFilterGroup is a filter group that uses a
  * {@link ProblemFilter}.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class CompatibilityMarkerFieldFilterGroup extends MarkerFieldFilterGroup {
 
@@ -26,7 +26,7 @@
 
 	/**
 	 * Create a new instance of the receiver based on the ProblemFilter.
-	 * 
+	 *
 	 * @param filter
 	 * @param cachedMarkerBuilder
 	 */
@@ -40,7 +40,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerFieldFilterGroup#getID()
 	 */
 	@Override
@@ -50,7 +50,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerFieldFilterGroup#getName()
 	 */
 	@Override
@@ -60,7 +60,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerFieldFilterGroup#isSystem()
 	 */
 	@Override
@@ -70,7 +70,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerFieldFilterGroup#makeWorkingCopy()
 	 */
 	@Override
@@ -86,7 +86,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerFieldFilterGroup#calculateFilters()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionConfigurationArea.java
index b73b7df..85d52ad 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionConfigurationArea.java
@@ -23,9 +23,9 @@
 /**
  * CompletionConfigurationField is the field for the configuration of filters
  * based on configurations.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class CompletionConfigurationArea extends FilterConfigurationArea {
 
@@ -51,7 +51,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -67,7 +67,7 @@
 		completeButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -83,7 +83,7 @@
 		incompleteButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -98,7 +98,7 @@
 	/**
 	 * Update the completion value based on the constant and the selection
 	 * value.
-	 * 
+	 *
 	 * @param constant
 	 * @param enabled
 	 */
@@ -113,7 +113,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#initialize(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -126,7 +126,7 @@
 				.setSelection((CompletionFieldFilter.NOT_COMPLETED & completionState) > 0);
 
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#getTitle()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionFieldFilter.java
index 66cd74d..072d793 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/CompletionFieldFilter.java
@@ -19,9 +19,9 @@
 
 /**
  * CompletionFieldFilter is the field filter for marker fields.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class CompletionFieldFilter extends CompatibilityFieldFilter {
 
@@ -49,7 +49,7 @@
 		completion = completionValue.intValue();
 
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.views.markers.CompatibilityFieldFilter#loadLegacySettings(org.eclipse.ui.IMemento, org.eclipse.ui.internal.views.markers.MarkerContentGenerator)
 	 */
@@ -61,19 +61,19 @@
 		if (setting != null) {
 			completion = Boolean.valueOf(setting).booleanValue() ? COMPLETED : NOT_COMPLETED;
 		}
-		
+
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.views.markers.CompatibilityFieldFilter#initialize(org.eclipse.ui.views.markers.internal.ProblemFilter)
 	 */
 	@Override
 	public void initialize(ProblemFilter problemFilter) {
 		//Problem filters have no completion value
-		
+
 	}
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.MarkerFieldFilter#saveSettings(org.eclipse.ui.IMemento)
 	 */
@@ -104,7 +104,7 @@
 
 	/**
 	 * Get the completion settings.
-	 * @return int 
+	 * @return int
 	 * @see #COMPLETED
 	 * @see #NOT_COMPLETED
 	 */
@@ -121,7 +121,7 @@
 	void setCompletion(int completion) {
 		this.completion = completion;
 	}
-	
+
 
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.MarkerFieldFilter#populateWorkingCopy(org.eclipse.ui.views.markers.MarkerFieldFilter)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java
index 67a3c69..f407add 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java
@@ -17,15 +17,15 @@
 /**
  * The ConfigureContentsDialogHandler is the handler for opening the contents
  * configuration dialog
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class ConfigureColumnsHandler extends MarkerViewHandler implements IHandler {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureContentsDialogHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureContentsDialogHandler.java
index d5a4a6e..05b631f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureContentsDialogHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureContentsDialogHandler.java
@@ -17,15 +17,15 @@
 /**
  * The ConfigureContentsDialogHandler is the handler for opening the contents
  * configuration dialog
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class ConfigureContentsDialogHandler extends MarkerViewHandler implements IHandler {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteCompletedHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteCompletedHandler.java
index 526c369..d5f48ad 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteCompletedHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteCompletedHandler.java
@@ -34,7 +34,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
@@ -73,14 +73,14 @@
 				MarkerMessages.deleteCompletedAction_title);
 		execute(op, MarkerMessages.deleteCompletedTasks_errorMessage, null,
 				WorkspaceUndoUtil.getUIInfoAdapter(view.getSite().getShell()));
-		
+
 		return this;
 
 	}
 
 	/**
 	 * Get the list of completed tasks from the view.
-	 * 
+	 *
 	 * @param view
 	 * @return List of {@link IMarker}
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java
index aab9c57..852a8fb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeleteHandler.java
@@ -28,15 +28,15 @@
 
 /**
  * DeleteHandler is the handler for the deletion of a marker.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class DeleteHandler extends MarkerViewHandler {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
@@ -47,7 +47,7 @@
 			return this;
 
 		final IMarker[] selected = getSelectedMarkers(event);
-		
+
 		// Verify.
 		MessageDialog dialog = new MessageDialog(
 				view.getSite().getShell(),
@@ -61,7 +61,7 @@
 		if (dialog.open() != 0) {
 			return view;
 		}
-		
+
 		WorkspaceJob deleteJob= new WorkspaceJob(IDEWorkbenchMessages.MarkerDeleteHandler_JobTitle) { //See Bug#250807
 			@Override
 			public IStatus runInWorkspace(IProgressMonitor monitor) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeltaMarkerEntry.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeltaMarkerEntry.java
index 9e5e34e..ed5dbcb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeltaMarkerEntry.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DeltaMarkerEntry.java
@@ -21,9 +21,9 @@
 /**
  * The DeltaMarkerEntry is the class that wraps an {@link IMarkerDelta} for testing.
 
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 class DeltaMarkerEntry extends MarkerEntry {
 
@@ -31,8 +31,8 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * @param markerDelta 
-	 * 
+	 * @param markerDelta
+	 *
 	 */
 	public DeltaMarkerEntry(IMarkerDelta markerDelta) {
 		super(markerDelta.getMarker());
@@ -55,7 +55,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getCreationTime()
 	 */
 	@Override
@@ -66,7 +66,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getID()
 	 */
 	@Override
@@ -76,7 +76,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getMarkerTypeName()
 	 */
 	@Override
@@ -87,7 +87,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerItem#getPath()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionConfigurationArea.java
index 07f3abb..0d10370 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionConfigurationArea.java
@@ -31,7 +31,7 @@
 /**
  * DescriptionConfigurationArea is the configuration area for description
  * configuration fields.
- * 
+ *
  */
 public class DescriptionConfigurationArea extends FilterConfigurationArea {
 
@@ -47,7 +47,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#apply(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -64,7 +64,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -74,7 +74,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#initialize(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -92,7 +92,7 @@
 
 	/**
 	 * Create the group for the description filter.
-	 * 
+	 *
 	 * @param parent
 	 */
 	private void createDescriptionGroup(Composite parent) {
@@ -134,7 +134,7 @@
 		descriptionText.setLayoutData(data);
 	}
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.FilterConfigurationArea#getTitle()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionFieldFilter.java
index d39dbf3..5427908 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/DescriptionFieldFilter.java
@@ -20,9 +20,9 @@
 
 /**
  * DescriptionFieldFilter is the filter for descriptions.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class DescriptionFieldFilter extends CompatibilityFieldFilter {
 
@@ -41,7 +41,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter#loadSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -78,7 +78,7 @@
 		}
 	}
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.MarkerFieldFilter#saveSettings(org.eclipse.ui.IMemento)
 	 */
@@ -104,7 +104,7 @@
 
 	}
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.MarkerFieldFilter#populateWorkingCopy(org.eclipse.ui.views.markers.MarkerFieldFilter)
 	 */
@@ -118,7 +118,7 @@
 
 	/**
 	 * Return the contains modifier.
-	 * 
+	 *
 	 * @return One of {@link MarkerSupportConstants#CONTAINS_KEY} or
 	 *         {@link MarkerSupportConstants#DOES_NOT_CONTAIN_KEY}
 	 */
@@ -128,7 +128,7 @@
 
 	/**
 	 * Set the contains modifier.
-	 * 
+	 *
 	 * @param containsString
 	 *            One of {@link MarkerSupportConstants#CONTAINS_KEY} or
 	 *            {@link MarkerSupportConstants#DOES_NOT_CONTAIN_KEY}
@@ -139,7 +139,7 @@
 
 	/**
 	 * Return the text to apply the containsModifier to.
-	 * 
+	 *
 	 * @return String
 	 */
 	String getContainsText() {
@@ -148,7 +148,7 @@
 
 	/**
 	 * Set the text to apply the containsModifier to.
-	 * 
+	 *
 	 * @param containsText
 	 *            String
 	 */
@@ -177,7 +177,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.CompatibilityFieldFilter#initialize(org.eclipse.ui.views.markers.internal.ProblemFilter)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/EditablePropertyTester.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/EditablePropertyTester.java
index f16f3b4..643e0cd 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/EditablePropertyTester.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/EditablePropertyTester.java
@@ -21,9 +21,9 @@
 /**
  * EditablePropertyTester is a property tester for the editable property of the
  * selected marker.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class EditablePropertyTester extends PropertyTester {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ErrorsWarningsParameters.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ErrorsWarningsParameters.java
index 1fd51ae..013fb35 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ErrorsWarningsParameters.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ErrorsWarningsParameters.java
@@ -19,9 +19,9 @@
 
 /**
  * ErrorsWarningsParameters is the parameters for errors and warnings.
- * 
+ *
  * @since 3.5
- * 
+ *
  */
 public class ErrorsWarningsParameters extends FiltersContributionParameters {
 
@@ -41,7 +41,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FiltersContributionParameters#getParameterValues()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java
index 8a50e1d..0149898 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java
@@ -1750,7 +1750,7 @@
 	 * <p>
 	 * See bug 401632 why we can't use {@link IWorkbenchPage#isPartVisible(IWorkbenchPart)}.
 	 * </p>
-	 * 
+	 *
 	 * @return <code>true</code> if this view is visible, <code>false</code> otherwise
 	 */
 	boolean isVisible() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FileMarkerPropertyTester.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FileMarkerPropertyTester.java
index 8563fac..47779d4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FileMarkerPropertyTester.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FileMarkerPropertyTester.java
@@ -17,9 +17,9 @@
 /**
  * FileMarkerPropertyTester is a property tester for a marker entry to see if it
  * is a marker that has a file behind it.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class FileMarkerPropertyTester extends PropertyTester {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
index 3a2bcb1..ab8527f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersConfigurationDialog.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Remy Chi Jian Suen <remy.suen@gmail.com> 
+ *     Remy Chi Jian Suen <remy.suen@gmail.com>
  * 			- Fix for Bug 214443 Problem view filter created even if I hit Cancel
  ******************************************************************************/
 
@@ -67,9 +67,9 @@
 
 /**
  * FiltersConfigurationDialog is the dialog for configuring the filters for the
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class FiltersConfigurationDialog extends ViewSettingsDialog {
 
@@ -88,7 +88,7 @@
 
 	private Button removeButton;
 	private Button renameButton;
-	
+
 	private Button allButton;
 	private Button andButton;
 	private Button orButton;
@@ -101,12 +101,12 @@
 
 	private Collection configAreas;
 	private Label limitsLabel;
-	
+
 	private Object[] previouslyChecked = new Object[0];
 
 	/**
 	 * Create a new instance of the receiver on builder.
-	 * 
+	 *
 	 * @param parentShell
 	 * @param generator
 	 */
@@ -120,7 +120,7 @@
 
 	/**
 	 * Return whether or not to AND the filters
-	 * 
+	 *
 	 * @return boolean
 	 */
 	boolean andFilters() {
@@ -129,7 +129,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
 	 * configureShell(org.eclipse.swt.widgets.Shell)
 	 */
@@ -141,7 +141,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#isResizable()
 	 */
 	@Override
@@ -151,7 +151,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
 	 * createDialogContentArea(org.eclipse.swt.widgets.Composite)
 	 */
@@ -162,7 +162,7 @@
 		container.setLayout(new GridLayout());
 		container.setLayoutData(new GridData(GridData.FILL_BOTH));
 		container.setFont(parent.getFont());
-		
+
 		Composite composite = new Composite(container, SWT.NONE);
 		GridLayout layout = new GridLayout();
 		layout.marginHeight = 0;
@@ -275,7 +275,7 @@
 				limitText.setEnabled(limitButton.getSelection());
 			}
 		});
-		
+
 		GridData limitData = new GridData();
 		limitData.verticalIndent = 5;
 		limitButton.setLayoutData(limitData);
@@ -449,7 +449,7 @@
 
 	/**
 	 * Create a field area in the form for the FilterConfigurationArea
-	 * 
+	 *
 	 * @param toolkit
 	 * @param form
 	 * @param area
@@ -520,7 +520,7 @@
 		});
 		removeButton.setEnabled(false);
 		setButtonLayoutData(removeButton);
-		
+
 		renameButton = new Button(buttons, SWT.PUSH);
 		renameButton.setText(MarkerMessages.MarkerFilter_renameName);
 		renameButton.addSelectionListener(new SelectionAdapter() {
@@ -535,26 +535,26 @@
 	}
 
 	private void renameFilter() {
-		
+
 		MarkerFieldFilterGroup filterGroup = getSelectionFromTable();
 
 		IInputValidator nameValidator = getNameValidator(filterGroup.getName(), getCurrentConfigurationNames());
-		
+
 		InputDialog inputDialog = new InputDialog(getShell(),
 				MarkerMessages.MarkerFilterDialog_title,
 				MarkerMessages.MarkerFilterDialog_message,
 				filterGroup.getName(), nameValidator);
-		
+
 		if(inputDialog.open() == Window.OK) {
 			filterGroup.setName(inputDialog.getValue());
 			configsTable.refresh(filterGroup);
 		}
-				
+
 	}
 
 	private IInputValidator getNameValidator(final String currentName, final Collection existingNames) {
 		return new IInputValidator() {
-			
+
 			@Override
 			public String isValid(String newText) {
 				newText = newText.trim();
@@ -607,7 +607,7 @@
 
 	/**
 	 * Get a collection of names of the filters currently in the list
-	 * 
+	 *
 	 * @return Collection
 	 */
 	private Collection getCurrentConfigurationNames() {
@@ -652,7 +652,7 @@
 
 	/**
 	 * Return the dialog settings for the receiver.
-	 * 
+	 *
 	 * @return IDialogSettings
 	 */
 	private IDialogSettings getDialogSettings() {
@@ -669,7 +669,7 @@
 
 	/**
 	 * Return the filter groups modified by the receiver.
-	 * 
+	 *
 	 * @return Collection of {@link MarkerFieldFilterGroup}
 	 */
 	Collection getFilters() {
@@ -725,7 +725,7 @@
 
 	/**
 	 * Make a working copy of the groups.
-	 * 
+	 *
 	 * @param groups
 	 * @return Collection of MarkerFieldFilterGroup
 	 */
@@ -744,7 +744,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
 	@Override
@@ -798,7 +798,7 @@
 
 	/**
 	 * Remove the filters in selection.
-	 * 
+	 *
 	 * @param selection
 	 */
 	private void removeFilters(ISelection selection) {
@@ -812,7 +812,7 @@
 	 * Save the dialog settings for the receiver.
 	 */
 	private void saveDialogSettings() {
-		
+
 		IDialogSettings settings = getDialogSettings();
 
 		if (selectedFilterGroup != null)
@@ -823,7 +823,7 @@
 			selectedNames[i] = ((MarkerFieldFilterGroup)previouslyChecked[i]).getName();
 		}
 		settings.put(PREV_SELECTED_ELEMENTS, selectedNames);
-		
+
 	}
 
 	private void updateButtonEnablement(MarkerFieldFilterGroup group) {
@@ -840,7 +840,7 @@
 
 	/**
 	 * Set the control and all of it's visibility state to visible.
-	 * 
+	 *
 	 * @param enabled
 	 * @param control
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java
index 871878f..a1eef9e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/FiltersContribution.java
@@ -26,15 +26,15 @@
 
 /**
  * FiltersContribution is the contribution for the filters menu.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class FiltersContribution extends MarkersContribution {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
 	 */
 	@Override
@@ -57,7 +57,7 @@
 
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
 				 *      int)
 				 */
@@ -75,7 +75,7 @@
 
 				/**
 				 * Return the menu item listener for selection of a filter.
-				 * 
+				 *
 				 * @param group
 				 * @param view
 				 * @return Listener
@@ -86,7 +86,7 @@
 					return new Listener() {
 						/*
 						 * (non-Javadoc)
-						 * 
+						 *
 						 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
 						 */
 						@Override
@@ -108,14 +108,14 @@
 
 	/**
 	 * Return the show all contribution.
-	 * 
+	 *
 	 * @return IContributionItem
 	 */
 	private IContributionItem getShowAllContribution() {
 		return new ContributionItem() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
 			 *      int)
 			 */
@@ -128,7 +128,7 @@
 				item.addListener(SWT.Selection, new Listener() {
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
 					 */
 					@Override
@@ -142,7 +142,7 @@
 
 			/**
 			 * Return whether or not any filters are selected.
-			 * 
+			 *
 			 * @return boolean <code>true</code> if none of the current
 			 *         filters are selected.
 			 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupFilterConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupFilterConfigurationArea.java
index eb5106f..87d5fdd 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupFilterConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupFilterConfigurationArea.java
@@ -20,13 +20,13 @@
  *
  */
 abstract class GroupFilterConfigurationArea extends FilterConfigurationArea {
-	
+
 	/**
 	 * Apply to the group
 	 * @param group
 	 */
 	public abstract void applyToGroup(MarkerFieldFilterGroup group);
-	
+
 	/**
 	 * Initialise from the group
 	 * @param group
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java
index 8297c2c..ad15841 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/GroupsContribution.java
@@ -25,9 +25,9 @@
 
 /**
  * GroupsContribution is the contribution for the marker groupings.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class GroupsContribution extends MarkersContribution {
 
@@ -40,7 +40,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
 	 */
 	@Override
@@ -69,7 +69,7 @@
 
 	/**
 	 * Return the IContributionItem for group.
-	 * 
+	 *
 	 * @param group
 	 * @return IContributionItem
 	 */
@@ -78,7 +78,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
 			 *      int)
 			 */
@@ -104,7 +104,7 @@
 
 			/**
 			 * Return the menu item listener for selection of a filter.
-			 * 
+			 *
 			 * @param group
 			 * @param view
 			 * @return Listener
@@ -114,7 +114,7 @@
 				return new Listener() {
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
 					 */
 					@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/IncrementUpdateJob.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/IncrementUpdateJob.java
index 90e5802..3116b15 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/IncrementUpdateJob.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/IncrementUpdateJob.java
@@ -25,9 +25,9 @@
  * schedules an UI update. If it'll be possible and beneficial switch to
  * incremental updatation, this has been left out for further investigation(*).
  * only, and not used currently.
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 class IncrementUpdateJob extends MarkerUpdateJob {
 
@@ -44,7 +44,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @seeorg.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.
 	 * IProgressMonitor)
 	 */
@@ -102,7 +102,7 @@
 
 	/**
 	 * Update the list
-	 * 
+	 *
 	 * @param markerEntries
 	 */
 	private boolean updateIncrementalList(Collection markerEntries) {
@@ -120,7 +120,7 @@
 
 	/**
 	 * Process the incremental updates
-	 * 
+	 *
 	 * @param monitor
 	 */
 	private boolean processUpdates(IProgressMonitor monitor) {
@@ -282,7 +282,7 @@
 
 	/**
 	 * Add update to the list
-	 * 
+	 *
 	 * @param update
 	 */
 	void addUpdate(MarkerUpdate update) {
@@ -294,7 +294,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkCompletedHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkCompletedHandler.java
index a3ed60c..e393ac6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkCompletedHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkCompletedHandler.java
@@ -31,15 +31,15 @@
 /**
  * MarkCompletedHandler is the handler for marking the current selection as
  * completed.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkCompletedHandler extends MarkerViewHandler {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
@@ -51,7 +51,7 @@
 					new IRunnableWithProgress() {
 						/*
 						 * (non-Javadoc)
-						 * 
+						 *
 						 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
 						 */
 						@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java
index 6486a05..423b316 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCategory.java
@@ -17,9 +17,9 @@
 import org.eclipse.ui.views.markers.internal.MarkerMessages;
 
 class MarkerCategory extends MarkerSupportItem {
-	
+
 	boolean refreshing;
-	
+
 	int start;
 
 	int end;
@@ -35,7 +35,7 @@
 	/**
 	 * Create a new instance of the receiver that has the markers between
 	 * startIndex and endIndex showing.
-	 * 
+	 *
 	 * @param markers
 	 * @param startIndex
 	 * @param endIndex
@@ -52,7 +52,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.internal.views.markers.MarkerSupportItem#getChildren()
 	 */
@@ -72,7 +72,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.internal.views.markers.MarkerSupportItem#getChildrenCount
 	 * ()
@@ -84,7 +84,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.internal.views.markers.MarkerSupportItem#getDescription()
 	 */
@@ -118,7 +118,7 @@
 
 	/**
 	 * Get the highest severity in the receiver.
-	 * 
+	 *
 	 * @return int
 	 */
 	int getHighestSeverity() {
@@ -141,7 +141,7 @@
 
 	/**
 	 * Return the name of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	String getName() {
@@ -150,7 +150,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getParent()
 	 */
 	@Override
@@ -160,7 +160,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#isConcrete()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerColumnLabelProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerColumnLabelProvider.java
index b8a7037..ca1558b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerColumnLabelProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerColumnLabelProvider.java
@@ -21,9 +21,9 @@
 
 /**
  * The MarkerColumnLabelProvider is a label provider for an individual column.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerColumnLabelProvider extends ColumnLabelProvider {
 
@@ -32,7 +32,7 @@
 
 	/**
 	 * Create a MarkerViewLabelProvider on a field.
-	 * 
+	 *
 	 * @param field
 	 */
 	MarkerColumnLabelProvider(MarkerField field) {
@@ -45,7 +45,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.BaseLabelProvider#dispose()
 	 */
 	@Override
@@ -56,7 +56,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ColumnLabelProvider#update(org.eclipse.jface.viewers.ViewerCell)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerComparator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerComparator.java
index a32957c..62c3851 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerComparator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerComparator.java
@@ -22,9 +22,9 @@
 /**
  * The MarkerComparator is the class that handles the comparison of markers for
  * a specific content provider.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 class MarkerComparator implements Comparator {
 
@@ -49,7 +49,7 @@
 
 	/**
 	 * Create a new instance of the receiver categorised by categoryField
-	 * 
+	 *
 	 * @param categoryField
 	 *            May be <code>null/<code>
 	 * @param mainFields in order of compare significance
@@ -61,7 +61,7 @@
 
 	/**
 	 * Compare the two objects to see if they have the same category value
-	 * 
+	 *
 	 * @param object1
 	 * @param object2
 	 * @return int
@@ -72,11 +72,11 @@
 			return 0;
 		return category.compare((MarkerItem) object1, (MarkerItem) object2);
 	}
-	
+
 	/**
 	 * Comparator to compare the two MarkerEntry(s) to see if they have the same
 	 * category value
-	 * 
+	 *
 	 * @return Comparator
 	 */
 	Comparator getCategoryComparator(){
@@ -84,13 +84,13 @@
 			@Override
 			public int compare(Object o1, Object o2) {
 				return compareCategory(o1, o2);
-			}			
+			}
 		};
 	}
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
 	 */
 	@Override
@@ -106,7 +106,7 @@
 
 	/**
 	 * Compare the two objects by various fields
-	 * 
+	 *
 	 * @param item0
 	 * @param item1
 	 * @return int
@@ -126,7 +126,7 @@
 	}
 	/**
 	 * Comparator to compare the two MarkerEntry(s) by various fields
-	 * 
+	 *
 	 * @return Comparator
 	 */
 	Comparator getFieldsComparator(){
@@ -134,14 +134,14 @@
 			@Override
 			public int compare(Object o1, Object o2) {
 				return compareFields(o1, o2);
-			}			
+			}
 		};
 	}
 
 	/**
 	 * Switch the priority of the field from ascending to descending or vice
 	 * versa.
-	 * 
+	 *
 	 * @param field
 	 */
 	public void reversePriority(MarkerField field) {
@@ -153,7 +153,7 @@
 
 	/**
 	 * Set field to be the first sort field.
-	 * 
+	 *
 	 * @param field
 	 */
 	void setPrimarySortField(MarkerField field) {
@@ -178,7 +178,7 @@
 
 	/**
 	 * Restore the receiver's state from memento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	void restore(IMemento memento) {
@@ -214,7 +214,7 @@
 
 	/**
 	 * Save the current sort field in the memento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	void saveState(IMemento memento) {
@@ -231,7 +231,7 @@
 
 	/**
 	 * Get the field that is the main sort field
-	 * 
+	 *
 	 * @return MarkerField
 	 */
 	MarkerField getPrimarySortField() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCompletionField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCompletionField.java
index f836009..2665b6e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCompletionField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCompletionField.java
@@ -27,9 +27,9 @@
 
 /**
  * MarkerCompletionField is the class that specifies the completion entry.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerCompletionField extends MarkerField {
 
@@ -39,7 +39,7 @@
 
 		/**
 		 * Create a new instance of the receiver.
-		 * 
+		 *
 		 * @param viewer
 		 */
 		public CompletionEditingSupport(ColumnViewer viewer) {
@@ -50,7 +50,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
 		 */
 		@Override
@@ -63,7 +63,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
 		 */
 		@Override
@@ -73,7 +73,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
 		 */
 		@Override
@@ -84,7 +84,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object,
 		 *      java.lang.Object)
 		 */
@@ -119,7 +119,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#compare(org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem,
 	 *      org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem)
 	 */
@@ -130,7 +130,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getColumnHeaderText()
 	 */
 	@Override
@@ -140,7 +140,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getColumnTooltipText()
 	 */
 	@Override
@@ -150,7 +150,7 @@
 
 	/**
 	 * Return the image for task completion.
-	 * 
+	 *
 	 * @return Image
 	 */
 	private Image getCompleteImage() {
@@ -160,7 +160,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getDefaultColumnWidth(org.eclipse.swt.widgets.Control)
 	 */
 	@Override
@@ -170,7 +170,7 @@
 
 	/**
 	 * Return the constant that indicates whether or not the receiver is done
-	 * 
+	 *
 	 * @param item
 	 * @return 1 if it is done, 0 if it not and -1 if it cannot be determined.
 	 */
@@ -190,7 +190,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getEditingSupport(org.eclipse.jface.viewers.ColumnViewer)
 	 */
 	@Override
@@ -201,7 +201,7 @@
 
 	/**
 	 * Get the image for item.
-	 * 
+	 *
 	 * @param element
 	 * @return Image
 	 */
@@ -220,7 +220,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
@@ -230,7 +230,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerField#update(org.eclipse.jface.viewers.ViewerCell)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
index 3a8339b..6abfc82 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerContentGenerator.java
@@ -53,9 +53,9 @@
 /**
  * MarkerContentGenerator is the representation of the markerContentGenerator
  * extension point.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerContentGenerator {
 
@@ -69,7 +69,7 @@
 	private static final String TAG_LEGACY_FILTER_ENTRY = "filter"; //$NON-NLS-1$
 	private static final String TAG_MARKER_LIMIT = "markerLimit"; //$NON-NLS-1$
 	private static final String TAG_MARKER_LIMIT_ENABLED = "markerLimitEnabled"; //$NON-NLS-1$
-	
+
 	/*Use this to indicate filter change rather than a null*/
 	private final Collection FILTERS_CHANGED = Collections.EMPTY_SET;
 
@@ -88,20 +88,20 @@
 
 	/**
 	 * focusResources
-	 * 
+	 *
 	 */
 	private IResource[] selectedResources = MarkerSupportInternalUtilities.EMPTY_RESOURCE_ARRAY;
-	
+
 	private Collection currentResources = Collections.EMPTY_SET;
 
 	private CachedMarkerBuilder builder;
 	private String viewId;
 
 	private IPropertyChangeListener filterPreferenceListener;
-	
+
 	/**
 	 * Create a new MarkerContentGenerator
-	 * 
+	 *
 	 * @param generatorDescriptor
 	 * @param builder
 	 * @param viewId
@@ -117,7 +117,7 @@
 
 	/**
 	 * Attach the generator to a builder
-	 * 
+	 *
 	 * @param builder
 	 */
 	void setBuilder(CachedMarkerBuilder builder) {
@@ -145,7 +145,7 @@
 	/**
 	 * Return whether or not all of {@link MarkerTypesModel} arein the
 	 * selectedTypes.
-	 * 
+	 *
 	 * @param selectedTypes
 	 * @return boolean
 	 */
@@ -155,7 +155,7 @@
 
 	/**
 	 * Get the all of the fields that this content generator is using.
-	 * 
+	 *
 	 * @return {@link MarkerField}[]
 	 */
 	MarkerField[] getAllFields() {
@@ -164,7 +164,7 @@
 
 	/**
 	 * Get the fields that this content generator is displaying.
-	 * 
+	 *
 	 * @return {@link MarkerField}[]
 	 */
 	MarkerField[] getVisibleFields() {
@@ -173,7 +173,7 @@
 
 	/**
 	 * Set the visible fields.
-	 * 
+	 *
 	 * @param visible
 	 */
 	void setVisibleFields(Collection visible) {
@@ -186,7 +186,7 @@
 
 	/**
 	 * Return the fields not being shown currently.
-	 * 
+	 *
 	 * @return Object[]
 	 */
 	Object[] getHiddenFields() {
@@ -219,7 +219,7 @@
 		if (memento == null) {
 			return;
 		}
-		
+
 		Integer limits = memento.getInteger(TAG_MARKER_LIMIT);
 		if (limits != null) {
 			markerLimits = limits.intValue();
@@ -229,34 +229,34 @@
 		if (limitsEnabled != null) {
 			markerLimitsEnabled = limitsEnabled.booleanValue();
 		}
-		
+
 		if (memento.getChildren(TAG_COLUMN_VISIBILITY).length != 0) {
 
 			IMemento[] visible = memento.getChildren(TAG_COLUMN_VISIBILITY);
 			Collection newVisible = new ArrayList();
-	
+
 			MarkerField[] all = getAllFields();
 			Hashtable allTable = new Hashtable();
-	
+
 			for (int i = 0; i < all.length; i++) {
 				allTable.put(all[i].getConfigurationElement().getAttribute(
 						MarkerSupportInternalUtilities.ATTRIBUTE_ID), all[i]);
 			}
-	
+
 			for (int i = 0; i < visible.length; i++) {
 				String key = visible[i].getID();
 				if (allTable.containsKey(key)) {
 					newVisible.add(allTable.get(key));
 				}
 			}
-	
+
 			visibleFields = new MarkerField[newVisible.size()];
 			newVisible.toArray(visibleFields);
 		}
 	}
 
 	private void initDefaults() {
-		
+
 		IPreferenceStore store = IDEWorkbenchPlugin.getDefault()
 				.getPreferenceStore();
 		markerLimitsEnabled = store
@@ -273,7 +273,7 @@
 
 	/**
 	 * Return a collection of all of the configuration fields for this generator
-	 * 
+	 *
 	 * @return Collection of {@link FilterConfigurationArea}
 	 */
 	Collection createFilterConfigurationFields() {
@@ -298,7 +298,7 @@
 
 	/**
 	 * Return all of the filters for the receiver.
-	 * 
+	 *
 	 * @return Collection of MarkerFieldFilterGroup
 	 */
 	Collection getAllFilters() {
@@ -313,7 +313,7 @@
 
 	/**
 	 * Return the currently enabled filters.
-	 * 
+	 *
 	 * @return Collection of MarkerFieldFilterGroup
 	 */
 	Collection getEnabledFilters() {
@@ -358,7 +358,7 @@
 
 	/**
 	 * Add group to the enabled filters.
-	 * 
+	 *
 	 * @param group
 	 */
 	void toggleFilter(MarkerFieldFilterGroup group) {
@@ -376,7 +376,7 @@
 
 	/**
 	 * Update the filters.
-	 * 
+	 *
 	 * @param filters
 	 * @param andFilters
 	 */
@@ -390,7 +390,7 @@
 
 	/**
 	 * Set whether the filters are being ANDed or ORed.
-	 * 
+	 *
 	 * @param and
 	 */
 	void setAndFilters(boolean and) {
@@ -399,34 +399,34 @@
 
 	/**
 	 * Return whether the filters are being ANDed or ORed.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	boolean andFilters() {
 		return andFilters;
 	}
-	
+
 	/**
 	 * @return Returns the markerLimits.
 	 */
 	public int getMarkerLimits() {
 		return markerLimits;
 	}
-	
+
 	/**
 	 * @param markerLimits The markerLimits to set.
 	 */
 	public void setMarkerLimits(int markerLimits) {
 		this.markerLimits = markerLimits;
 	}
-	
+
 	/**
 	 * @return Returns the markerLimitsEnabled.
 	 */
 	public boolean isMarkerLimitsEnabled() {
 		return markerLimitsEnabled;
 	}
-	
+
 	/**
 	 * @param markerLimitsEnabled The markerLimitsEnabled to set.
 	 */
@@ -457,7 +457,7 @@
 
 	/**
 	 * Get the name of the filters preference for the receiver,
-	 * 
+	 *
 	 * @return String
 	 */
 	private String getLegacyFiltersPreferenceName() {
@@ -470,7 +470,7 @@
 	}
 
 	private void loadLimitSettings(IMemento memento) {
-		
+
 		if (memento == null)
 			return;
 
@@ -483,12 +483,12 @@
 		if (limitsEnabled != null) {
 			markerLimitsEnabled = limitsEnabled.booleanValue();
 		}
-		
+
 	}
-	
+
 	/**
 	 * Load the settings from the memento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	private void loadFilterSettings(IMemento memento) {
@@ -516,7 +516,7 @@
 
 	/**
 	 * Load the filters defined in memento string.
-	 * 
+	 *
 	 * @param mementoString
 	 */
 	private void loadFiltersFrom(String mementoString) {
@@ -568,7 +568,7 @@
 	/**
 	 * Load the group with id from the child if there is a matching system group
 	 * registered.
-	 * 
+	 *
 	 * @param child
 	 * @param id
 	 * @return <code>true</code> if a matching group was found
@@ -589,7 +589,7 @@
 
 	/**
 	 * Load the legacy filter into the system.
-	 * 
+	 *
 	 * @param child
 	 */
 	private void loadLegacyFilter(IMemento child) {
@@ -601,7 +601,7 @@
 
 	/**
 	 * Load the pre-3.4 filters.
-	 * 
+	 *
 	 * @param mementoString
 	 */
 	private void loadLegacyFiltersFrom(String mementoString) {
@@ -622,7 +622,7 @@
 
 	/**
 	 * Load the user supplied filter
-	 * 
+	 *
 	 * @param child
 	 */
 	private void loadUserFilter(IMemento child) {
@@ -633,7 +633,7 @@
 
 	/**
 	 * Restore the pre-3.4 filters.
-	 * 
+	 *
 	 * @param memento
 	 */
 	private void restoreLegacyFilters(IMemento memento) {
@@ -653,7 +653,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	private void writeFiltersPreference() {
 		XMLMemento memento = XMLMemento.createWriteRoot(TAG_FILTERS_SECTION);
@@ -695,15 +695,15 @@
 	}
 
 	private void writeLimitSettings(XMLMemento memento) {
-		
+
 		memento.putInteger(TAG_MARKER_LIMIT, markerLimits);
 		memento.putBoolean(TAG_MARKER_LIMIT_ENABLED, markerLimitsEnabled);
 
 	}
-	
+
 	/**
 	 * Write the settings for the filters to the memento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	private void writeFiltersSettings(XMLMemento memento) {
@@ -723,7 +723,7 @@
 
 	/**
 	 * Return the id of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getId() {
@@ -747,7 +747,7 @@
 
 	/**
 	 * Get the list of initially visible fields
-	 * 
+	 *
 	 * @return {@link MarkerField}[]
 	 */
 	MarkerField[] getInitialVisible() {
@@ -756,7 +756,7 @@
 
 	/**
 	 * Get the group called groupName from the receiver
-	 * 
+	 *
 	 * @param groupName
 	 * @return MarkerGroup or <code>null</code>
 	 */
@@ -772,7 +772,7 @@
 
 	/**
 	 * Get the markerGroups associated with the receiver.
-	 * 
+	 *
 	 * @return Collection of {@link MarkerGroup}
 	 */
 	Collection getMarkerGroups() {
@@ -781,7 +781,7 @@
 
 	/**
 	 * Return the markerTypes for the receiver.
-	 * 
+	 *
 	 * @return Collection of {@link MarkerType}
 	 */
 	public Collection getMarkerTypes() {
@@ -790,7 +790,7 @@
 
 	/**
 	 * Return the markerTypes for the receiver.
-	 * 
+	 *
 	 * @return Array of type Ids
 	 */
 	public String[] getTypes() {
@@ -806,7 +806,7 @@
 
 	/**
 	 * Return the name for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	String getName() {
@@ -815,7 +815,7 @@
 
 	/**
 	 * Return the type for typeId.
-	 * 
+	 *
 	 * @param typeId
 	 * @return {@link MarkerType} or <code>null</code> if it is not found.
 	 */
@@ -868,7 +868,7 @@
 	 * Update the focus resources from list. If there is an update required
 	 * return <code>true</code>. This method assumes that there are filters on
 	 * resources enabled.
-	 * 
+	 *
 	 * @param elements
 	 */
 	void internalUpdateSelectedElements(Object[] elements) {
@@ -888,7 +888,7 @@
 
 	/**
 	 * Update the receiver for a change in selection.
-	 * 
+	 *
 	 * @param newElements
 	 * @param forceUpdate <code>true</code> if update must be done, <code>false</code> to only update when needed
 	 */
@@ -905,7 +905,7 @@
 	/**
 	 * Return whether or not the list contains a resource that will require
 	 * update.
-	 * 
+	 *
 	 * @return boolean <code>true</code> if update is required.
 	 */
 	boolean updateNeededForSelection(Object[] newElements) {
@@ -968,17 +968,17 @@
 	 * which happens real quickly.Also when filters are Anded we get a chance to
 	 * gather only on resources that actually matter.And we get a tool to check
 	 * at various places.
-	 * 
+	 *
 	 * @return list of resource we want to collect markers for taking various
 	 *         enabled filters into account.
-	 * 
+	 *
 	 */
 	Collection getResourcesForBuild() {
 		currentResources = MarkerResourceUtil.computeResources(
 				getSelectedResources(), getEnabledFilters(), andFilters());
 		return currentResources;
 	}
-	
+
 	/*
 	 * See Bug 296695: This method is trickier than it may seem/appears to be.If
 	 * it is ever desired to use this, it would need to be *RE-IMPLEMENTED* and
@@ -1039,7 +1039,7 @@
 
 	/**
 	 * Refresh gathered markers entries
-	 * 
+	 *
 	 * @param monitor
 	 */
 	Collection generateMarkerEntries(IProgressMonitor monitor) {
@@ -1111,7 +1111,7 @@
 	/**
 	 * A helper to the
 	 * {@link #gatherMarkers(String[], boolean, Collection, IProgressMonitor)}
-	 * 
+	 *
 	 * @param resources
 	 * @param typeId
 	 * @param includeSubTypes
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCopyHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCopyHandler.java
index 4ac8f78..37bc664 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCopyHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCopyHandler.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Benjamin Cabe <benjamin.cabe@anyware-tech.com> - 
+ *     Benjamin Cabe <benjamin.cabe@anyware-tech.com> -
  *     	Fix for Bug 222375 [Markers] copy markers from markers view should 'pretty print'
  *******************************************************************************/
 package org.eclipse.ui.internal.views.markers;
@@ -23,15 +23,15 @@
 /**
  * MarkerCopyHandler is the handler for the copy action when the markers view is
  * selected.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerCopyHandler extends MarkerViewHandler {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
@@ -46,7 +46,7 @@
 
 	/**
 	 * Set the workbench clipboard for the markers.
-	 * 
+	 *
 	 * @param view
 	 */
 	private void setClipboard(ExtendedMarkersView view) {
@@ -74,7 +74,7 @@
 	/**
 	 * Creates a plain-text report of the selected markers based on predefined
 	 * properties.
-	 * 
+	 *
 	 * @param view
 	 *            the view being copied
 	 * @param markers
@@ -84,7 +84,7 @@
 		StringBuffer report = new StringBuffer();
 
 		MarkerField[] fields = view.getVisibleFields();
-		
+
 		final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$
 		final char DELIMITER = '\t';
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCreationTimeField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCreationTimeField.java
index e2821ea..f750e87 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCreationTimeField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerCreationTimeField.java
@@ -21,16 +21,16 @@
 
 /**
  * MarkerCreationTimeField is the field that shows the creation time of a field.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerCreationTimeField extends MarkerField {
 
 	private DateFormat dateFormat=DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
@@ -44,7 +44,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#compare(org.eclipse.ui.internal.provisional.views.markers.MarkerItem,
 	 *      org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
@@ -56,7 +56,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#update(org.eclipse.jface.viewers.ViewerCell)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerDescriptionField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerDescriptionField.java
index 6c361d0..4ece7e7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerDescriptionField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerDescriptionField.java
@@ -26,9 +26,9 @@
 
 /**
  * MarkerDescriptionField is the field for showing the description of a marker.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerDescriptionField extends MarkerField {
 
@@ -38,7 +38,7 @@
 
 		/**
 		 * Create a new instance of the receiver.
-		 * 
+		 *
 		 * @param viewer
 		 */
 		public DescriptionEditingSupport(ColumnViewer viewer) {
@@ -48,7 +48,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
 		 */
 		@Override
@@ -72,7 +72,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
 		 */
 		@Override
@@ -82,7 +82,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
 		 */
 		@Override
@@ -93,7 +93,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object,
 		 *      java.lang.Object)
 		 */
@@ -119,7 +119,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#compare(org.eclipse.ui.internal.provisional.views.markers.MarkerItem,
 	 *      org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
@@ -130,7 +130,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getDefaultColumnWidth(org.eclipse.swt.widgets.Control)
 	 */
 	@Override
@@ -140,7 +140,7 @@
 
 	/**
 	 * Return the collation key for the description.
-	 * 
+	 *
 	 * @param element
 	 * @return CollationKey
 	 */
@@ -153,7 +153,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
@@ -164,7 +164,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getEditingSupport()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerEntry.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerEntry.java
index 6a0f3b5..e317d28 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerEntry.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerEntry.java
@@ -32,16 +32,16 @@
 /**
  * The MarkerEntry is the class that wrappers an {@link IMarker} for display in
  * an {@link ExtendedMarkersView}.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 class MarkerEntry extends MarkerSupportItem implements IAdaptable {
 	static {
 		Platform.getAdapterManager().registerAdapters(new IAdapterFactory() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see
 			 * org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang
 			 * .Object, java.lang.Class)
@@ -57,7 +57,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
 			 */
 			@Override
@@ -70,7 +70,7 @@
 	private static final Object LOCATION_STRING = "LOCATION_STRING"; //$NON-NLS-1$
 	private MarkerCategory category;
 	private Map cache = null;
-	
+
 	/**
 	 * Set the MarkerEntry to be stale, if discovered at any point of time
 	 * of its use.This will greatly speed up a lot of parts of the view.
@@ -86,7 +86,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param marker
 	 */
 	public MarkerEntry(IMarker marker) {
@@ -96,7 +96,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
 	 */
 	@Override
@@ -108,7 +108,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerItem#getAttributeValue(java.lang.String,
 	 *      boolean)
 	 */
@@ -122,7 +122,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerItem#getAttributeValue(java.lang.String,
 	 *      int)
 	 */
@@ -139,7 +139,7 @@
 	/**
 	 * Return the Object that is the marker value for attribute. Return null if
 	 * it is not found.
-	 * 
+	 *
 	 * @param attribute
 	 * @return Object or <code>null</code>
 	 */
@@ -164,7 +164,7 @@
 		return value;
 	}
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getAttributeValue(java.lang.String, java.lang.String)
 	 */
@@ -177,13 +177,13 @@
 		// The following toString() is a no-op for string attribute
 		// values (which we expect!), but safeguards against clients
 		// who used non-String objects (e.g. Integer) as attribute values,
-		// see bug 218249. 
+		// see bug 218249.
 		return value.toString();
 	}
 
 	/**
 	 * Get the category of the receiver.
-	 * 
+	 *
 	 * @return {@link MarkerCategory}
 	 */
 	MarkerCategory getCategory() {
@@ -192,7 +192,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getChildren()
 	 */
 	@Override
@@ -202,7 +202,7 @@
 
 	/**
 	 * Get the CollationKey for the string attribute.
-	 * 
+	 *
 	 * @param attribute
 	 * @param defaultValue
 	 *            the defaultValue if the value is not set
@@ -212,7 +212,7 @@
 		String attributeValue;
 		Object value = getCache().get(attribute);
 		if (value != null) {
-			// Only return a collation key otherwise 
+			// Only return a collation key otherwise
 			//use the value to generate it
 			if (value instanceof CollationKey)
 				return (CollationKey) value;
@@ -232,7 +232,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getCreationTime()
 	 */
 	@Override
@@ -251,7 +251,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getDescription()
 	 */
 	@Override
@@ -262,7 +262,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getID()
 	 */
 	@Override
@@ -272,7 +272,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerItem#getLocation()
 	 */
 	@Override
@@ -312,7 +312,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerItem#getMarker()
 	 */
 	@Override
@@ -322,7 +322,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getMarkerTypeName()
 	 */
 	@Override
@@ -358,7 +358,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#getParent()
 	 */
 	@Override
@@ -368,7 +368,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerItem#getPath()
 	 */
 	@Override
@@ -394,7 +394,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.MarkerSupportItem#isConcrete()
 	 */
 	@Override
@@ -404,7 +404,7 @@
 
 	/**
 	 * Set the category to markerCategory.
-	 * 
+	 *
 	 * @param markerCategory
 	 */
 	void setCategory(MarkerCategory markerCategory) {
@@ -414,7 +414,7 @@
 
 	/**
 	 * Set the marker for the receiver.
-	 * 
+	 *
 	 * @param marker
 	 *            The marker to set.
 	 */
@@ -427,7 +427,7 @@
 
 	/**
 	 * Get the cache for the receiver. Create if neccessary.
-	 * 
+	 *
 	 * @return {@link HashMap}
 	 */
 	Map getCache() {
@@ -441,7 +441,7 @@
 	 */
 	@Override
 	void clearCache() {
-		cache = null;		
+		cache = null;
 	}
 
 	/**
@@ -459,7 +459,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @return true if the {@link MarkerEntry} is stale,i.e. the marker does not
 	 *         exist. A false value can mean that marker's state of existence was
 	 *         never captured or that it exists.#checkIfMarkerExists() will
@@ -468,7 +468,7 @@
 	boolean getStaleState() {
 		return stale;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see java.lang.Object#hashCode()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java
index 034ca1d..22adbcb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerFieldFilterGroup.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Broadcom Corp. - James Blackburn -  Fix for Bug 305529 -  
+ *     Broadcom Corp. - James Blackburn -  Fix for Bug 305529 -
  *     					[Markers] NPE in MarkerFieldEditor if MarkerFieldConfiguration scope is unset
  *******************************************************************************/
 
@@ -48,9 +48,9 @@
 
 /**
  * MarkerFieldFilterGroup is the representation of a grouping of marker filters.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 class MarkerFieldFilterGroup {
 
@@ -60,7 +60,7 @@
 
 	/**
 	 * The attribute values for the scope
-	 * 
+	 *
 	 */
 
 	private static final String ATTRIBUTE_SCOPE = "scope"; //$NON-NLS-1$
@@ -90,7 +90,7 @@
 	 * Constant for on working set.
 	 */
 	static final int ON_WORKING_SET = 4;
-	
+
 	static final String TAG_ENABLED = "enabled"; //$NON-NLS-1$
 	private static final String TAG_SCOPE = "scope"; //$NON-NLS-1$
 	private static final String TAG_FIELD_FILTER_ENTRY = "fieldFilter"; //$NON-NLS-1$
@@ -108,7 +108,7 @@
 	protected MarkerFieldFilter[] fieldFilters;
 	private int scope;
 	private int limit;
-	
+
 	private String name;
 	private String id;
 
@@ -121,7 +121,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param configurationElement
 	 * @param markerBuilder
 	 */
@@ -148,7 +148,7 @@
 
 	/**
 	 * Get the root types for the receiver
-	 * 
+	 *
 	 * @return Collection of {@link MarkerType}
 	 */
 	Collection getAllTypes() {
@@ -157,7 +157,7 @@
 
 	/**
 	 * Get the filters registered on the receiver.
-	 * 
+	 *
 	 * @return MarkerFieldFilter[]
 	 */
 	private MarkerFieldFilter[] getFieldFilters() {
@@ -197,7 +197,7 @@
 	/**
 	 * Return the MarkerFieldFilter for field or <code>null</code> if there
 	 * isn't one.
-	 * 
+	 *
 	 * @param field
 	 * @return MarkerFieldFilter
 	 */
@@ -212,7 +212,7 @@
 
 	/**
 	 * Return the id of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getID() {
@@ -228,7 +228,7 @@
 
 	/**
 	 * Return the name of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getName() {
@@ -245,7 +245,7 @@
 	/**
 	 * Return the resources in the working set. If it is empty then return the
 	 * workspace root.
-	 * 
+	 *
 	 * @return IResource[]
 	 */
 	IResource[] getResourcesInWorkingSet() {
@@ -258,7 +258,7 @@
 			if(((AggregateWorkingSet) workingSet).getComponents().length==0)
 				return new IResource[] { ResourcesPlugin.getWorkspace().getRoot()};
 		}
-		
+
 		IAdaptable[] elements = workingSet.getElements();
 		List result = new ArrayList(elements.length);
 
@@ -276,7 +276,7 @@
 
 	/**
 	 * Return the value of the scope.
-	 * 
+	 *
 	 * @return int
 	 * @see #ON_ANY
 	 * @see #ON_ANY_IN_SAME_CONTAINER
@@ -290,7 +290,7 @@
 
 	/**
 	 * Get the values defined for the receiver.
-	 * 
+	 *
 	 * @return Map of values to apply to a {@link MarkerFieldFilter}
 	 */
 	private Map getValues() {
@@ -315,7 +315,7 @@
 
 	/**
 	 * Get the working set for the receiver.
-	 * 
+	 *
 	 * @return IWorkingSet
 	 */
 	IWorkingSet getWorkingSet() {
@@ -327,12 +327,12 @@
 	 */
 	private void computeWorkingSetResources() {
 		if(workingSet!=null){
-			 /* MarkerFieldFilterGroup will have to re-get the resources in 
+			 /* MarkerFieldFilterGroup will have to re-get the resources in
 			 * a working set for every marker it filters using the select method
-			 * Or we may do this once before the markers are filtered.		 
+			 * Or we may do this once before the markers are filtered.
 			 */
 			wSetResources=getResourcesInWorkingSet();
-		}else{			
+		}else{
 			wSetResources = new IResource[] { ResourcesPlugin.getWorkspace()
 					.getRoot() };
 		}
@@ -375,7 +375,7 @@
 
 	/**
 	 * Return whether or not the receiver is enabled.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	public boolean isEnabled() {
@@ -384,7 +384,7 @@
 
 	/**
 	 * Return whether or not this is a system or user group.
-	 * 
+	 *
 	 * @return boolean <code>true</code> if it is a system group.
 	 */
 	public boolean isSystem() {
@@ -393,7 +393,7 @@
 
 	/**
 	 * Load the settings from the legacy child.
-	 * 
+	 *
 	 * @param memento
 	 */
 	void legacyLoadSettings(IMemento memento) {
@@ -435,7 +435,7 @@
 
 	/**
 	 * Load the current settings from the child.
-	 * 
+	 *
 	 * @param memento -
 	 *            the memento to load from
 	 */
@@ -457,7 +457,7 @@
 		if (stringValue != null && stringValue.length() > 0) {
 			setLimit(Integer.parseInt(stringValue));
 		}
-		
+
 		Map filterMap = new HashMap();
 		MarkerFieldFilter[] filters = getFieldFilters();
 		for (int i = 0; i < filters.length; i++) {
@@ -497,7 +497,7 @@
 
 	/**
 	 * Make a working copy of the receiver.
-	 * 
+	 *
 	 * @return MarkerFieldFilterGroup or <code> null</code> if it failed.
 	 */
 	MarkerFieldFilterGroup makeWorkingCopy() {
@@ -511,7 +511,7 @@
 
 	/**
 	 * Populate the clone and return true if successful.
-	 * 
+	 *
 	 * @param clone
 	 */
 	protected boolean populateClone(MarkerFieldFilterGroup clone) {
@@ -545,7 +545,7 @@
 
 	/**
 	 * Process the scope attribute.
-	 * 
+	 *
 	 * @return int
 	 */
 	private int processScope() {
@@ -569,7 +569,7 @@
 
 	/**
 	 * Save the settings for the receiver in the memento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	void saveFilterSettings(IMemento memento) {
@@ -601,10 +601,10 @@
 
 	/**
 	 * Return whether or not this IMarker is being shown.
-	 * 
+	 *
 	 * @param marker
 	 * @return <code>true</code> if it is being shown
-	 */	
+	 */
 	public boolean select(IMarker marker) {
 		testEntry.setMarker(marker);
 		return select(testEntry);
@@ -612,10 +612,10 @@
 
 	/**
 	 * Return whether or not this MarkerEntry can be shown.
-	 * @param testEntry 
-	 * 
+	 * @param testEntry
+	 *
 	 * @return <code>true</code> if it can be shown
-	 */	
+	 */
 	public boolean select(MarkerEntry testEntry) {
 		MarkerFieldFilter[] filters = getFieldFilters();
 		if (scope == ON_WORKING_SET && workingSet != null) {
@@ -642,7 +642,7 @@
 
 	/**
 	 * Set whether or not the receiver is enabled.
-	 * 
+	 *
 	 * @param enabled
 	 *            The enabled to set.
 	 */
@@ -652,7 +652,7 @@
 
 	/**
 	 * Set the name of the receiver.
-	 * 
+	 *
 	 * @param newName
 	 */
 	public void setName(String newName) {
@@ -662,7 +662,7 @@
 
 	/**
 	 * Set the scope of the receiver.
-	 * 
+	 *
 	 * @param newScope
 	 */
 	public void setScope(int newScope) {
@@ -671,13 +671,13 @@
 
 	/**
 	 * Set the working set of the receiver.
-	 * 
+	 *
 	 * @param workingSet
 	 */
 	void setWorkingSet(IWorkingSet workingSet) {
 		this.workingSet = workingSet;
 	}
-	
+
 	/**
 	 * @return Returns -1 for no limit else the limit.
 	 */
@@ -695,17 +695,17 @@
 
 	/**
 	 * Refresh the MarkerFieldFilterGroup .
-	 */	
+	 */
 	void refresh() {
 		if (getScope() == ON_WORKING_SET) {
 			computeWorkingSetResources();
 		}
 	}
-	
+
 	public boolean selectByFilters(MarkerEntry entry) {
 		return select(entry);
 	}
-	
+
 	public boolean selectByScope(MarkerEntry entry, IResource[] resources) {
 		int scopeVal = getScope();
 		switch (scopeVal) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerGoToHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerGoToHandler.java
index 69e8f38..2dfbb41 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerGoToHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerGoToHandler.java
@@ -31,7 +31,7 @@
 		view.openSelectedMarkers();
 		return this;
 	}
-	
+
 
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerHelpAdapterFactory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerHelpAdapterFactory.java
index 14ca060..793e6d8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerHelpAdapterFactory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerHelpAdapterFactory.java
@@ -52,24 +52,24 @@
 				}
 
 				//TODO this needs to be migrated to the ide plug-in
-				if (contextId == null) 
+				if (contextId == null)
 					contextId = PlatformUI.PLUGIN_ID + ".problem_view_context";//$NON-NLS-1$
-				
+
 				return HelpSystem.getContext(contextId);
 			}
 
-			
+
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.help.IContextProvider#getSearchExpression(java.lang.Object)
 			 */
 			@Override
 			public String getSearchExpression(Object target) {
 				return null;
 			}
-		
+
 		};
 	}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerIDField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerIDField.java
index 211184c..0969f2a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerIDField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerIDField.java
@@ -17,13 +17,13 @@
 
 /**
  * @since 3.4
- * 
+ *
  */
 public class MarkerIDField extends MarkerField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
@@ -35,7 +35,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#compare(org.eclipse.ui.internal.provisional.views.markers.MarkerItem,
 	 *      org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java
index c2e5b6d..bd6196d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerLocationField.java
@@ -18,15 +18,15 @@
 
 /**
  * MarkerLocationField is the field for the location field.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerLocationField extends MarkerField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
@@ -36,7 +36,7 @@
 
 	/**
 	 * Get the number of characters that should be reserved for the receiver.
-	 * 
+	 *
 	 * @param control
 	 *            the control to scale from
 	 * @return int
@@ -48,7 +48,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerField#compare(org.eclipse.ui.views.markers.MarkerItem,
 	 *      org.eclipse.ui.views.markers.MarkerItem)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPathField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPathField.java
index 4df929f..decc85b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPathField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPathField.java
@@ -18,15 +18,15 @@
 
 /**
  * MarkerPathField is the field for the paths column.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerPathField extends MarkerField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.IMarkerField#compare(org.eclipse.ui.internal.provisional.views.markers.MarkerItem,
 	 *      org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
@@ -40,7 +40,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getDefaultColumnWidth(org.eclipse.swt.widgets.Control)
 	 */
 	@Override
@@ -50,7 +50,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.IMarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPriorityField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPriorityField.java
index b6d19ce..05213e6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPriorityField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPriorityField.java
@@ -29,9 +29,9 @@
 
 /**
  * MarkerPriorityField is the field for task priority.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerPriorityField extends MarkerField {
 
@@ -41,7 +41,7 @@
 
 		/**
 		 * Create a new instance of the receiver.
-		 * 
+		 *
 		 * @param viewer
 		 */
 		public PriorityEditingSupport(ColumnViewer viewer) {
@@ -52,7 +52,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#canEdit(java.lang.Object)
 		 */
 		@Override
@@ -65,7 +65,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#getCellEditor(java.lang.Object)
 		 */
 		@Override
@@ -75,7 +75,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#getValue(java.lang.Object)
 		 */
 		@Override
@@ -86,7 +86,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.EditingSupport#setValue(java.lang.Object,
 		 *      java.lang.Object)
 		 */
@@ -121,7 +121,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#compare(org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem,
 	 *      org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem)
 	 */
@@ -135,7 +135,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getColumnHeaderText()
 	 */
 	@Override
@@ -145,7 +145,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getColumnTooltipText()
 	 */
 	@Override
@@ -155,7 +155,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getDefaultColumnWidth(org.eclipse.swt.widgets.Control)
 	 */
 	@Override
@@ -165,7 +165,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getEditingSupport(org.eclipse.jface.viewers.ColumnViewer)
 	 */
 	@Override
@@ -175,7 +175,7 @@
 
 	/**
 	 * Get the image for high priority
-	 * 
+	 *
 	 * @return Image
 	 */
 	private Image getHighPriorityImage() {
@@ -185,7 +185,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
@@ -195,7 +195,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerField#update(org.eclipse.jface.viewers.ViewerCell)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerProblemSeverityAndMessageField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerProblemSeverityAndMessageField.java
index b33c46e..ea8d08f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerProblemSeverityAndMessageField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerProblemSeverityAndMessageField.java
@@ -20,16 +20,16 @@
 
 /**
  * MarkerSeverityAndMessageField is the field for severity and messages.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerProblemSeverityAndMessageField extends
 		MarkerDescriptionField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.provisional.views.markers.IMarkerField#compare(org.eclipse.ui.provisional.views.markers.MarkerItem,
 	 *      org.eclipse.ui.provisional.views.markers.MarkerItem)
 	 */
@@ -45,7 +45,7 @@
 
 	/**
 	 * Return the image for the receiver.
-	 * 
+	 *
 	 * @param item
 	 * @return Image or <code>null</code>
 	 */
@@ -77,7 +77,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerField#update(org.eclipse.jface.viewers.ViewerCell)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPropertyTester.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPropertyTester.java
index 79c8de5..131bcf5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPropertyTester.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerPropertyTester.java
@@ -19,17 +19,17 @@
 
 /**
  * The property tester used to test the attributes of the Marker
- * 
+ *
  * @since 3.5
  * @author Prakash G.R.
- * 
+ *
  */
 public class MarkerPropertyTester extends PropertyTester {
 
 	/**
 	 * An attribute indicating the marker priority (value
 	 * <code>"priority"</code>). The attribute value in xml must be one of
-	 * <code>IMarker.PRIORITY_LOW, 
+	 * <code>IMarker.PRIORITY_LOW,
 	 * IMarker.PRIORITY_NORMAL, or IMarker.PRIORITY_HIGH</code>
 	 */
 	public static final String PRIORITY = IMarker.PRIORITY;
@@ -37,7 +37,7 @@
 	/**
 	 * An attribute indicating the marker severity (value
 	 * <code>"severity"</code>). The attribute value in xml in xml must be one
-	 * of <code>IMarker.SEVERITY_ERROR, 
+	 * of <code>IMarker.SEVERITY_ERROR,
 	 * IMarker.SEVERITY_WARNING, or IMarker.SEVERITY_INFO</code>
 	 */
 	public static final String SEVERITY = IMarker.SEVERITY;
@@ -118,7 +118,7 @@
 
 	/**
 	 * Tests the attribute's value for the given marker
-	 * 
+	 *
 	 * @param marker
 	 *            - The marker
 	 * @param attributeName
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceField.java
index bc598dd..baefefb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceField.java
@@ -18,15 +18,15 @@
 
 /**
  * MarkerResourceField is the field that specifies the resource column.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerResourceField extends MarkerField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.provisional.views.markers.IMarkerField#getValue(org.eclipse.ui.provisional.views.markers.MarkerItem)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceUtil.java
index ac4cc37..b820890 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerResourceUtil.java
@@ -36,10 +36,10 @@
 
 /**
  * A Resource helper class for the markers view code.
- * 
+ *
  * @author hitesh soliwal
  * @since 3.6
- * 
+ *
  */
 class MarkerResourceUtil {
 
@@ -49,7 +49,7 @@
 	 * Optimally gets the resources applicable to the current state of filters,
 	 * the smaller the resources and more specific they are the less the
 	 * filtering we have to do during processing.
-	 * 
+	 *
 	 * @return collection of resource we want to collect markers for, taking
 	 *         various enabled filters into account.
 	 */
@@ -65,7 +65,7 @@
 		Set resourceSet = andFilters ? getResourcesFiltersAnded(enabledFilters,
 				selectedResources, root) : getResourcesFiltersOred(
 				enabledFilters, selectedResources, root);
-		
+
 		//remove duplicates
 		return trim2ParentResources(root, resourceSet);
 	}
@@ -74,7 +74,7 @@
 	 * (optimization as side-effect): Compute common parents, if any. Remove further
 	 * duplicates. We collect markers with a flag of DEPTH_INFINITE; so,
 	 * effectively the children of a resource are also its duplicates.
-	 * 
+	 *
 	 * @param root
 	 * @param resourceSet
 	 * @return set
@@ -116,7 +116,7 @@
 	 * computing markers on filters individually and then ORing the markers; we
 	 * would save a good amount of system-resources if we ORed them before
 	 * gathering phase,removing duplicates.
-	 * 
+	 *
 	 * @param enabledFilters
 	 * @param root
 	 * @return set
@@ -148,7 +148,7 @@
 	 * The method may look long and a little time-consuming, but it actually
 	 * performs a short-circuit AND operation on the resources, and therefore
 	 * quick.
-	 * 
+	 *
 	 * Note: This is an optimization; we could have ORed the resources instead.
 	 * Let us say, for example, we had a filter of workspace-scope(ANY), and
 	 * others of scope on Selected element and maybe others.Now, if we computed
@@ -158,7 +158,7 @@
 	 * we spend more system-resources in both gathering and filtering.If we
 	 * ANDed the scopes(resources) we'd, save a good amount of system-resources
 	 * in both phases.
-	 * 
+	 *
 	 * @param enabledFilters
 	 * @param selectedResources
 	 * @param root
@@ -172,7 +172,7 @@
 			return set;
 		}
 		Set resourceSet = new HashSet();
-		
+
 		Iterator filtersIterator = enabledFilters.iterator();
 		Set removeMain = new HashSet();
 		while (filtersIterator.hasNext()) {
@@ -239,7 +239,7 @@
 
 	/**
 	 * Get the resources indicated by the filter's scope.
-	 *  
+	 *
 	 * @param group
 	 * @param selectedResources
 	 * @param root
@@ -280,7 +280,7 @@
 
 	/**
 	 * Returns the set of projects that contain the given set of resources.
-	 * 
+	 *
 	 * @param resources
 	 * @return IProject[]
 	 */
@@ -295,7 +295,7 @@
 
 	/**
 	 * Return the projects for the elements.
-	 * 
+	 *
 	 * @param elements
 	 *            collection of IResource or IResourceMapping
 	 * @return Collection of IProject
@@ -321,7 +321,7 @@
 
 	/**
 	 * Add the resources in resourceMapping to the resourceCollection
-	 * 
+	 *
 	 * @param resourceCollection
 	 * @param resourceMapping
 	 */
@@ -343,7 +343,7 @@
 			Policy.handle(e);
 		}
 	}
-	
+
 	/**
 	 * Adapts an object to a resource or resource mapping;
 	 * If the object cannot be adapted,it return null.
@@ -354,7 +354,7 @@
 	 * 		Try to adapt to an IResource
 	 * 		Try to adapt to an IFile
 	 * 		Finally try adapting to a ResourceMapping
-	 * 
+	 *
 	 * @param object
 	 */
 	static Object adapt2ResourceElement(Object object) {
@@ -386,7 +386,7 @@
 
 	/**
 	 * Gets all sub-type id(s) including self, for the list of marker typeIds
-	 * 
+	 *
 	 * @param typeIds
 	 */
 	static String[] getAllSubTypesIds(String[] typeIds) {
@@ -397,7 +397,7 @@
 	/**
 	 * Gets all sub-types {@link MarkerType} including self for the list of
 	 * marker typeIds
-	 * 
+	 *
 	 * @param typeIds
 	 */
 	static HashSet getAllSubTypes(String[] typeIds) {
@@ -417,7 +417,7 @@
 	/**
 	 * Gets mutually exclusive super-types ids for the list of
 	 * marker typeIds
-	 * 
+	 *
 	 * @param typeIds
 	 */
 	static String[] getMutuallyExclusiveSupersIds(String[] typeIds) {
@@ -428,7 +428,7 @@
 	/**
 	 * Gets mutually exclusive super-types {@link MarkerType} for the list of
 	 * marker typeIds
-	 * 
+	 *
 	 * @param typeIds
 	 */
 	static HashSet getMutuallyExclusiveSupers(String[] typeIds) {
@@ -451,7 +451,7 @@
 	/**
 	 * Converts a collection of {@link MarkerType} into an array of marker
 	 * typeIds
-	 * 
+	 *
 	 * @param collection
 	 */
 	private static String[] toTypeStrings(Collection collection) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityAndDescriptionField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityAndDescriptionField.java
index bb2efb2..a88d29f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityAndDescriptionField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityAndDescriptionField.java
@@ -18,9 +18,9 @@
 
 /**
  * MarkerSeverityAndDescriptionField can handle severities for all markers.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerSeverityAndDescriptionField extends MarkerDescriptionField {
 
@@ -33,7 +33,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.provisional.views.markers.IMarkerField#compare(org.eclipse.ui.provisional.views.markers.MarkerItem,
 	 *      org.eclipse.ui.provisional.views.markers.MarkerItem)
 	 */
@@ -49,7 +49,7 @@
 
 	/**
 	 * Return the image for item.
-	 * 
+	 *
 	 * @param item
 	 * @return Image or <code>null</code>
 	 */
@@ -59,7 +59,7 @@
 		if (item.getMarker() == null)
 			severity = ((MarkerCategory) item).getHighestSeverity();
 		else
-			severity = MarkerSupportInternalUtilities.getSeverity(item);			
+			severity = MarkerSupportInternalUtilities.getSeverity(item);
 
 		if (severity >= IMarker.SEVERITY_WARNING)
 			return MarkerSupportInternalUtilities.getSeverityImage(severity);
@@ -69,7 +69,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerField#update(org.eclipse.jface.viewers.ViewerCell)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityField.java
index 3355a5a..1057378 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSeverityField.java
@@ -18,15 +18,15 @@
 
 /**
  * MarkerSeverityField is the field for showing severity categories.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerSeverityField extends MarkerField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
@@ -46,7 +46,7 @@
 
 	}
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.MarkerField#compare(org.eclipse.ui.views.markers.MarkerItem, org.eclipse.ui.views.markers.MarkerItem)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerShowInAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerShowInAdapter.java
index 84db390..7429ab5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerShowInAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerShowInAdapter.java
@@ -22,9 +22,9 @@
 /**
  * MarkerShowInAdapter is the adapter for ExtendedMarkersViews to get an
  * IShowInSource.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerShowInAdapter implements IAdapterFactory {
 
@@ -32,7 +32,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object,
 	 *      java.lang.Class)
 	 */
@@ -61,7 +61,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSortUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSortUtil.java
index 57cc09b..eedabd3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSortUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSortUtil.java
@@ -21,7 +21,7 @@
  * in supporting documentation.  Silicon Graphics makes no
  * representations about the suitability of this software for any
  * purpose.  It is provided "as is" without express or implied warranty.
- * 
+ *
  * Contributions:
  *              IBM - Ported the code to Java
  */
@@ -36,11 +36,11 @@
 
 /**
  * @since 3.5
- * 
+ *
  * @author Hitesh
  */
 public class MarkerSortUtil {
-	
+
 	/*
 	 * Note: partial quicksort or introsort would not be of much use here as the
 	 * sorting direction can be reversed easily from the UI. These would perform
@@ -57,9 +57,9 @@
 
 	/*
 	 * For n/k ratios less than this , we will use Arrays.Sort(). The heapsort
-	 * performs nearly as good as mergesort for small data.We can still benefit 
+	 * performs nearly as good as mergesort for small data.We can still benefit
 	 * from the mergesort - Arrays.Sort(). When the number of elements to be sorted,
-	 * are almost as much as the elements we have. 
+	 * are almost as much as the elements we have.
 	 */
 	private static float MERGE_OR_HEAP_SWITCH=1.5f;
 
@@ -68,7 +68,7 @@
 	 * modified heapsort, such that
 	 * array[first]<array[first+1]<...<array[middle] and
 	 * array[middle]<arra[middle+1||middle+2|| ....last]
-	 * 
+	 *
 	 * @param array
 	 * @param first
 	 * @param middle
@@ -80,13 +80,13 @@
 		heapify(array, first, middle, comparator);
 
 		adjustMaxElement(array, first, middle, last, comparator);
-		
+
 		heapToSortedArray(array, first, middle, comparator);
 	}
 
 	/**
 	 * Swap the max heap element with any greater elements in rest of the array
-	 * 
+	 *
 	 * @param heapArray
 	 * @param first
 	 * @param heapSize
@@ -116,10 +116,10 @@
 
 	/**
 	 *  Re-adjust the elements in the heap to maintain heap-property
-	 *  
+	 *
 	 *  Note: caches are not cleared in this method, as it would offset
 	 *  to a certain extent the benefit of caching in sorting.
-	 *  
+	 *
 	 * @param array
 	 * @param first
 	 * @param position
@@ -137,8 +137,8 @@
 
 	/**
 	 * Percolate down the Heap: adjust left ,right, self nodes for heap starting
-	 * from hole all the way down the heap 
-	 * 
+	 * from hole all the way down the heap
+	 *
 	 * @param array
 	 * @param first
 	 * @param position
@@ -151,7 +151,7 @@
 		int holeOffset = position - first;
 		int len = last - first;
 		int childOffset = 2 * holeOffset + 2;
-		// 
+		//
 		while (childOffset < len) {
 			if (comparator.compare(array[first + childOffset], array[first
 					+ (childOffset - 1)]) < 0)
@@ -170,7 +170,7 @@
 	/**
 	 * percolate up the Heap: add the hole element back to heap at the right
 	 * position, all the way up the heap between fromIndex and toIndex
-	 * 
+	 *
 	 * @param array
 	 * @param first
 	 * @param fromIndex
@@ -193,12 +193,12 @@
 			parent = (holeOffset - 1) / 2;
 		}
 
-		/* 
+		/*
 		 * Using Binary search to locate the parent to replace.
-		 * This is worse compared to linear search as most of the 
+		 * This is worse compared to linear search as most of the
 		 * holes would replace only a few parents above them.
 		 * This code has been left commented for future examination.
-		 * */		
+		 * */
 	    /*
 		int top = position - first;
 		int lowParent = 1;
@@ -245,7 +245,7 @@
 		return first + holeOffset;
 	}
 
-	
+
 
 	/**
 	 * Makes a heap in the array
@@ -271,12 +271,12 @@
 	 * @param first
 	 * @param last
 	 * @param comparator
-	 * 
+	 *
 	 */
 	private static void heapToSortedArray(MarkerEntry[] array, int first,
 			int last, Comparator comparator) {
 		//TODO:Use mergesort to convert the heap to sorted array?
-		
+
 		while (last - first > 1) {
 			// clear cache sorted and present at the end
 			array[last].clearCache();
@@ -296,16 +296,16 @@
 	 * modified heapsort, such that
 	 * array[from]<array[from+1]<...<array[from+k-1] and
 	 * array[from+k-1]<arra[from+k||from+k+1||from+k+2|| ....to]
-	 * 
+	 *
 	 * Note: if k is greater than a number,the sorting happens in batches of
 	 * that number, this for performance reasons.
-	 * 
+	 *
 	 * @param entries
 	 * @param comparator
 	 * @param from
 	 * @param to
 	 * @param k
-	 * @param monitor 
+	 * @param monitor
 	 */
 	public static void sortStartingKElement(MarkerEntry[] entries,
 			Comparator comparator, int from, int to, int k,IProgressMonitor monitor) {
@@ -316,7 +316,7 @@
 			return;
 		int n=to-from+1;
 		if (n <= BATCH_SIZE && (((float) n / k) <= MERGE_OR_HEAP_SWITCH)
-				/*|| ((float) n / k) <= MERGE_OR_HEAP_SWITCH*/) { 
+				/*|| ((float) n / k) <= MERGE_OR_HEAP_SWITCH*/) {
 			// use arrays sort
 			Arrays.sort(entries, from, to + 1, comparator);
 			// clear cache for first to middle since we are done with sort
@@ -325,13 +325,13 @@
 			}
 			return;
 		}
-		
+
 		// do it in blocks of BATCH_SIZE so we get a chance
 		// of clearing caches to keep memory usage to a minimum
 
-		//we choose k-1 so that last batch includes last element 
+		//we choose k-1 so that last batch includes last element
 		//in case k is a multiple of  BATCH_SIZE
-		int totalBatches = (k-1) / BATCH_SIZE; 
+		int totalBatches = (k-1) / BATCH_SIZE;
 		int batchCount = 0;
 		while (totalBatches > 0) {
 			if(monitor.isCanceled()){
@@ -367,21 +367,21 @@
 	 */
 	public static void sortStartingKElement(MockMarkerEntry[] fArray1,
 			Comparator comparator, int from, int k, int limit) {
-		sortStartingKElement(fArray1, comparator, from, k, limit,new NullProgressMonitor());		
+		sortStartingKElement(fArray1, comparator, from, k, limit,new NullProgressMonitor());
 	}
 	/**
 	 * Sorts [0,k-1] in the array of [0,entries.length-1] using a variant of
 	 * modified heapsort, such that
 	 * array[0]<array[1]<...<array[k-1] and
 	 * array[k-1]<arra[k||k+1||k+2|| ....entries.length-1]
-	 * 
+	 *
 	 * Note: if k is greater than a number,the sorting happens in batches of
 	 * that number, this for performance reasons.
-	 * 
+	 *
 	 * @param entries
 	 * @param comparator
 	 * @param k
-	 * @param monitor 
+	 * @param monitor
 	 */
 	public static void sortStartingKElement(MarkerEntry[] entries,
 			Comparator comparator, int k,IProgressMonitor monitor) {
@@ -389,12 +389,12 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * Sorts [from,first+k-1] in the array of [from,entries.length-1] using a variant of
 	 * modified heapsort, such that
 	 * array[from]<array[from+1]<...<array[from+k-1] and
 	 * array[from+k-1]<arra[from+k||from+k+1||from+k+2|| ....entries.length-1]
-	 * 
+	 *
 	 * Note: if k is greater than a number,the sorting happens in batches of
 	 * that number, this for performance reasons.
 	 *
@@ -402,11 +402,11 @@
 	 * @param comparator
 	 * @param from
 	 * @param k
-	 * @param monitor 
+	 * @param monitor
 	 */
 	public static void sortStartingKElement(MarkerEntry[] entries,
 			Comparator comparator, int from, int k, IProgressMonitor monitor) {
 		sortStartingKElement(entries, comparator, from, entries.length - 1, k,monitor);
 	}
-	
+
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java
index 6a5ea4d..7ea5ee4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java
@@ -51,9 +51,9 @@
 /**
  * MarkerSupportUtilities is the class that maintains constants and
  * functionality used by multiple classes.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerSupportInternalUtilities {
 
@@ -93,7 +93,7 @@
 	 * A reusable empty {@link String}
 	 */
 	public static final String EMPTY_STRING = ""; //$NON-NLS-1$
-	
+
 	public static final String UNKNOWN_ATRRIBTE_VALUE_STRING = MarkerMessages.Unknown;
 
 	/**
@@ -145,7 +145,7 @@
 
 	/**
 	 * Create the image at the supplied path.
-	 * 
+	 *
 	 * @param completeImagePath
 	 * @param manager the resource manager to allocate the image in
 	 * @return Image or <code>null</code>.
@@ -160,7 +160,7 @@
 
 	/**
 	 * Return a StatusAdapter for the error
-	 * 
+	 *
 	 * @param exception
 	 * @return StatusAdapter
 	 */
@@ -173,7 +173,7 @@
 
 	/**
 	 * Generate the filter for the receiver from the configurationElement.
-	 * 
+	 *
 	 * @param field
 	 *            the field being generated
 	 * @return MarkerFieldFilter or <code>null</code>.
@@ -199,7 +199,7 @@
 
 	/**
 	 * Create a FilterConfigurationArea for the receiver.
-	 * 
+	 *
 	 * @param field
 	 *            the field with the specified area
 	 * @return FilterConfigurationArea or <code>null</code>
@@ -226,7 +226,7 @@
 	/**
 	 * Return the children of the given marker item (may return an array of
 	 * length 0)
-	 * 
+	 *
 	 * @param markerItem
 	 * @return the children
 	 */
@@ -239,7 +239,7 @@
 
 	/**
 	 * Determine the average width of font used by the control.
-	 * 
+	 *
 	 * @param control
 	 * @return int
 	 */
@@ -252,7 +252,7 @@
 
 	/**
 	 * Return the group value of the item in group.
-	 * 
+	 *
 	 * @param group
 	 * @param item
 	 * @return String
@@ -273,7 +273,7 @@
 	/**
 	 * Returns the highest severity of the given marker item and all its
 	 * children.
-	 * 
+	 *
 	 * @param markerItem
 	 * @return the severity
 	 */
@@ -289,7 +289,7 @@
 
 	/**
 	 * Return the id for the field.
-	 * 
+	 *
 	 * @param field
 	 * @return String
 	 */
@@ -300,7 +300,7 @@
 
 	/**
 	 * Get the IDE image at path.
-	 * 
+	 *
 	 * @param constantName
 	 * @return Image
 	 */
@@ -315,7 +315,7 @@
 	/**
 	 * Return the severity value for item. A value of -1 indicates
 	 * that there is no severity value.
-	 * 
+	 *
 	 * @param item
 	 * @return int
 	 */
@@ -325,7 +325,7 @@
 
 	/**
 	 * Get the image for the supplied severity
-	 * 
+	 *
 	 * @param severity
 	 * @return {@link Image}
 	 */
@@ -347,7 +347,7 @@
 
 	/**
 	 * Create the MarkerItem that wraps marker.
-	 * 
+	 *
 	 * @param marker
 	 * @return {@link MarkerItem}
 	 */
@@ -357,7 +357,7 @@
 
 	/**
 	 * Show the marker in view if possible.
-	 * 
+	 *
 	 * @param view
 	 * @param marker
 	 * @return <code>true</code> if the marker is shown
@@ -375,7 +375,7 @@
 
 	/**
 	 * Log an exception from a markers view.
-	 * 
+	 *
 	 * @param exception
 	 */
 	public static void logViewError(Exception exception) {
@@ -384,7 +384,7 @@
 
 	/**
 	 * Show an exception from a markers view.
-	 * 
+	 *
 	 * @param exception
 	 */
 	public static void showViewError(Exception exception) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportItem.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportItem.java
index 3f999dd..b2eecc5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportItem.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportItem.java
@@ -23,7 +23,7 @@
 
 	/**
 	 * Get the String value of the attribute in the enclosed marker.
-	 * 
+	 *
 	 * @param attribute
 	 * @param defaultValue
 	 *            the defaultValue if the value is not set
@@ -40,7 +40,7 @@
 
 	/**
 	 * Get the children of the node.
-	 * 
+	 *
 	 * @return MarkerNode[]
 	 */
 	abstract MarkerSupportItem[] getChildren();
@@ -63,7 +63,7 @@
 
 	/**
 	 * Return the description of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	abstract String getDescription();
@@ -74,7 +74,7 @@
 	 */
 	long getID() {
 		return -1;
-		
+
 	}
 
 	/**
@@ -88,21 +88,21 @@
 	/**
 	 * Return the parent node or <code>null</code> if this is a top level
 	 * element.
-	 * 
+	 *
 	 * @return MarkerSupportItem
 	 */
 	abstract MarkerSupportItem getParent();
-	
+
 	/**
 	 * Return whether or not this is a concrete node
-	 * 
+	 *
 	 * @return boolean
 	 */
 	abstract boolean isConcrete();
-	
+
 	/**
 	 * Clear the cached values for performance reasons.
 	 */
 	abstract void clearCache();
-	
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeField.java
index 438ad36..fa1bceb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeField.java
@@ -17,15 +17,15 @@
 
 /**
  * MarkerTypeField is the field that defines the marker type.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class MarkerTypeField extends MarkerField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.MarkerItem)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeFieldFilter.java
index 22d0bf4..b16bf79 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerTypeFieldFilter.java
@@ -30,9 +30,9 @@
 
 /**
  * MarkerTypeFieldFilter is the field filter for filtering on types.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkerTypeFieldFilter extends CompatibilityFieldFilter {
 
@@ -43,7 +43,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter#select(org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem)
 	 */
 	@Override
@@ -64,7 +64,7 @@
 	/**
 	 * Set the selected types in the receiver based on the values in
 	 * contentGenerator.
-	 * 
+	 *
 	 * @param markerTypes
 	 *            Collection of MarkerType
 	 * @param generator
@@ -79,7 +79,7 @@
 
 	/**
 	 * Return the selectedTypes.
-	 * 
+	 *
 	 * @return Collection of MarkerType
 	 */
 	Collection getSelectedTypes() {
@@ -88,7 +88,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerFieldFilter#saveSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -111,7 +111,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerFieldFilter#loadSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -177,13 +177,13 @@
 			}
 		}
 
-	
-		
+
+
 	}
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.CompatibilityFieldFilter#initialize(org.eclipse.ui.views.markers.internal.ProblemFilter)
 	 */
 	@Override
@@ -195,7 +195,7 @@
 
 	/**
 	 * Set the content generator that is being configured.
-	 * 
+	 *
 	 * @param generator
 	 */
 	void setContentGenerator(MarkerContentGenerator generator) {
@@ -208,13 +208,13 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.MarkerFieldFilter#populateWorkingCopy(org.eclipse.ui.views.markers.MarkerFieldFilter)
 	 */
 	@Override
 	public void populateWorkingCopy(MarkerFieldFilter copy) {
 		super.populateWorkingCopy(copy);
-		
+
 		((MarkerTypeFieldFilter) copy).selectedTypes = new HashSet(
 				selectedTypes);
 		((MarkerTypeFieldFilter) copy).contentGenerator = contentGenerator;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerUpdateJob.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerUpdateJob.java
index 9d24ca7..5cf4bbf 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerUpdateJob.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerUpdateJob.java
@@ -27,9 +27,9 @@
  * The MarkerUpdateJob processes marker updates.
  * Once the processing is complete it schedules an UI
  * update.
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 class MarkerUpdateJob extends Job {
 
@@ -47,7 +47,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @seeorg.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.
 	 * IProgressMonitor)
 	 */
@@ -61,7 +61,7 @@
 
 	/**
 	 * gather all markers needed by the view.
-	 * 
+	 *
 	 * @param monitor
 	 */
 	void buildMarkers(IProgressMonitor monitor) {
@@ -81,7 +81,7 @@
 		}
 		// builder.getUpdateScheduler().indicateStatus(
 		// MarkerMessages.MarkerView_processUpdates, false);
-		
+
 		monitor.setTaskName(MarkerMessages.MarkerView_processUpdates);
 		if (!processMarkerEntries(markerEntries, monitor)) {
 			return;
@@ -107,7 +107,7 @@
 
 	/**
 	 * Collect the markers starting clean, all over again.
-	 * @param markerEntries 
+	 * @param markerEntries
 	 */
 	boolean clean(Collection markerEntries, IProgressMonitor monitor) {
 		MarkerContentGenerator generator = builder.getGenerator();
@@ -121,7 +121,7 @@
 	/**
 	 * Process,sort and group the new marker entries in markerEntryList and
 	 * update the Markers object
-	 * 
+	 *
 	 * @param markerEntries
 	 *            the collection of new MarkerEntry(s)
 	 */
@@ -136,7 +136,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.jobs.Job#shouldRun()
 	 */
 	@Override
@@ -151,7 +151,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object)
 	 */
 	@Override
@@ -190,9 +190,9 @@
 /**
  * The SortingJob is used to resort the existing markers. Once the sorting is
  * complete it schedules the an UI update
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 class SortingJob extends MarkerUpdateJob {
 	public SortingJob(CachedMarkerBuilder builder) {
@@ -202,7 +202,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.internal.views.markers.MarkerUpdateJob#run(org.eclipse
 	 * .core.runtime.IProgressMonitor)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java
index 7108521..37c0767 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerViewerContentProvider.java
@@ -16,9 +16,9 @@
 
 /**
  * The ContentProvider to the TreeViewer used in Markers View.
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 class MarkerViewerContentProvider implements ITreeContentProvider {
 
@@ -35,7 +35,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse
 	 * .jface.viewers.Viewer, java.lang.Object, java.lang.Object)
 	 */
@@ -47,7 +47,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 	 */
 	@Override
@@ -57,7 +57,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java
 	 * .lang.Object)
 	 */
@@ -71,30 +71,30 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements
 	 * (java.lang.Object)
 	 */
 	@Override
 	public Object[] getElements(Object inputElement) {
-		//use clone 
+		//use clone
 		return getLimitedChildren(((Markers) input).getElements());
 	}
 
 	/**
 	 * Get the children limited by the marker limits.
-	 * 
+	 *
 	 * @param children
 	 * @return Object[]
 	 */
 	private Object[] getLimitedChildren(Object[] children) {
-		
+
 		boolean limitsEnabled = markersView.getGenerator().isMarkerLimitsEnabled();
 		int limits = markersView.getGenerator().getMarkerLimits();
-		
+
 		if (!limitsEnabled || limits <= 0 || limits > children.length)
 			return children;
-		
+
 		Object[] newChildren = new Object[limits];
 		System.arraycopy(children, 0, newChildren, 0, limits);
 		return newChildren;
@@ -102,7 +102,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ILazyTreeContentProvider#getParent(
 	 * java.lang.Object)
 	 */
@@ -116,7 +116,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java
 	 * .lang.Object)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java
index 5c58369..c1a8890 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java
@@ -31,9 +31,9 @@
 /**
  * The Markers object contains the MarkerEntry(s) collected and updated by the
  * system, also maintains the categories that markers are grouped into.
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 class Markers {
 
@@ -61,7 +61,7 @@
 
 	/**
 	 * Update with newly collected markers
-	 * 
+	 *
 	 * @param markerEntries
 	 *            the new marker entries
 	 * @param sortAndGroup
@@ -108,7 +108,7 @@
 
 	/**
 	 * Sort the contained marker entries and build categories if required.
-	 * 
+	 *
 	 * @param monitor
 	 */
 	synchronized boolean sortAndMakeCategories(IProgressMonitor monitor) {
@@ -182,15 +182,15 @@
 
 	/**
 	 * get marker limit to show, if any.
-	 * 
+	 *
 	 * @param available
 	 */
 	private int getShowingLimit(int available) {
-		
+
 		boolean limitsEnabled = builder.getGenerator().isMarkerLimitsEnabled();
 		if(!limitsEnabled)
 			return available;
-		
+
 		int limit = builder.getGenerator().getMarkerLimits();
 		int effLimit = limit;
 		if (available < effLimit || limit <= 0) {
@@ -201,7 +201,7 @@
 
 	/**
 	 * Sort Markers according to groups, and Group them into categories
-	 * 
+	 *
 	 * @param monitor
 	 * @param newMarkers
 	 * @return MarkerCategory
@@ -232,12 +232,12 @@
 	 * indices in the map. The O(N) complexity requires the use of a few data
 	 * structures. But the speed benefit is tremendous at a very small price of
 	 * few extra references.
-	 * 
+	 *
 	 * @param entries
 	 * @param group
 	 * @param k
 	 * @return {@link Map}
-	 * 
+	 *
 	 */
 	private Map groupMarkerEntries(MarkerEntry[] entries, MarkerGroup group,
 			int k, IProgressMonitor monitor) {
@@ -286,7 +286,7 @@
 	/**
 	 * Returns an array of marker counts where getMarkerCounts()[severity] is
 	 * the number of markers in the list with the given severity.
-	 * 
+	 *
 	 * @return an array of {@link Integer} where index indicates
 	 *         [errors,warnings,infos,others]
 	 */
@@ -302,7 +302,7 @@
 	 * Returns an array of marker counts for the given MarkerEntry array , where
 	 * getMarkerCounts()[severity] is the number of markers in the list with the
 	 * given severity.
-	 * 
+	 *
 	 * @return an array of {@link Integer} where index indicates
 	 *         [errors,warnings,infos,others]
 	 */
@@ -333,7 +333,7 @@
 
 	/**
 	 * Return the {@link MarkerItem} that maps to marker.
-	 * 
+	 *
 	 * @param marker
 	 * @return {@link MarkerItem}
 	 */
@@ -405,7 +405,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see java.lang.Object#hashCode()
 	 */
 	@Override
@@ -418,7 +418,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see java.lang.Object#equals(java.lang.Object)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersChangeListener.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersChangeListener.java
index 25eda2d..5da726f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersChangeListener.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersChangeListener.java
@@ -26,7 +26,7 @@
  * The MarkersChangeListener is IResourceChangeListener that waits for any
  * change in the markers in workspace that are of the view's interest. Schedules
  * an update if we have a change that affects the view.
- * 
+ *
  * @since 3.6
  */
 class MarkersChangeListener implements IResourceChangeListener {
@@ -38,12 +38,12 @@
 	private boolean receiving;
 
 	//private static final int UPDATE_TEST_CHECK_LIMIT = 1500;
-	
+
 	// The time the build started. A -1 indicates no build in progress.
 	private long preBuildTime;
-	
+
 	/**
-	 * 
+	 *
 	 * @param view
 	 *            the marker view the listener is listening for
 	 * @param builder
@@ -78,16 +78,16 @@
 
 	/**
 	 * Checks if the workspace is building
-	 * 
+	 *
 	 */
 	boolean workspaceBuilding() {
 			return preBuildTime > 0;
 	}
-	
+
 	/**
 	 * Tells the listener to become responsive to changes for the specified
 	 * types of markers.
-	 * 
+	 *
 	 * @param typeIds
 	 *            the ids of the IMarker types
 	 * @param includeSubTypes
@@ -109,7 +109,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org
 	 * .eclipse.core.resources.IResourceChangeEvent)
@@ -138,7 +138,7 @@
 			// if (!needsUpdate(event)) {
 			// return;
 			// }
-			
+
 			if (!builder.isIncremental()) {
 				handleMarkerChange(event);
 				return;
@@ -171,7 +171,7 @@
 	private void handleMarkerChange(IResourceChangeEvent event) {
 		builder.getUpdateScheduler().scheduleUpdate();
 	}
-	
+
 	/**
 	 * Markers have not changed
 	 */
@@ -180,16 +180,16 @@
 	}
 
 	/**
-	 * Handle changes incrementally. 
+	 * Handle changes incrementally.
 	 * The following performs incremental updation
 	 * of the markers that were gathered initially, and keeps them synched at
 	 * any point with the markers of interest in Workspace. Unfortunately marker
 	 * operations cannot be locked so locking between gathering of markers and
 	 * marker deltas is not possible.
-	 * 
+	 *
 	 * Note : this method of updating is NOT used and tested yet and has holes
 	 * but left out SOLELY for further investigation(*).
-	 * 
+	 *
 	 * @param event
 	 */
 	private void handleIncrementalChange(IResourceChangeEvent event) {
@@ -260,7 +260,7 @@
 
 	/**
 	 * Helper to {@link #hasApplicableTypes(IResourceChangeEvent)}
-	 * 
+	 *
 	 * @param types
 	 * @param typeId
 	 */
@@ -272,7 +272,7 @@
 		}
 		return false;
 	}
-	
+
 //	/**
 //	 * Note: This has been left commented out for further
 //	 * investigation(*),instead we we use the above for just checking types.
@@ -280,7 +280,7 @@
 //	 * But again in such a case, the view would be a contributed as well.And, it
 //	 * is the responsibility of the field filter code to ensure the select
 //	 * method of filter remains fast.
-//	 * 
+//	 *
 //	 */
 //	private boolean needsUpdate(IResourceChangeEvent event) {
 //		IMarkerDelta[] markerDeltas = event.findMarkerDeltas(null, true);
@@ -321,15 +321,15 @@
 //	/**
 //	 * Check if a marker change, removal, or addition is of interest to the
 //	 * view.
-//	 * 
+//	 *
 //	 * <ul>
 //	 * <li>Set the MarkerEntry to be stale, if discovered at any point of time
 //	 * of its use.This will greatly speed up lot of parts of the view.</li>
 //	 * <li>Instead of testing all marker changes, test only upto a maximum limit
 //	 * beyond which we schedule an update anyway.</li>
-//	 * 
+//	 *
 //	 * </ul>
-//	 * 
+//	 *
 //	 * @param marker
 //	 * @param kind
 //	 */
@@ -354,7 +354,7 @@
 //	/**
 //	 * Returns whether or not the given marker addition is of interest to the
 //	 * view.
-//	 * 
+//	 *
 //	 * @param presentEntries
 //	 *            current marker entries
 //	 * @param marker
@@ -373,7 +373,7 @@
 //
 //	/**
 //	 * Returns whether or not markers were removed from the view.
-//	 * 
+//	 *
 //	 * @param presentEntriest
 //	 *            current marker entries
 //	 * @param marker
@@ -399,7 +399,7 @@
 //
 //	/**
 //	 * Returns whether or not markers were removed from the view.
-//	 * 
+//	 *
 //	 * @param presentEntriest
 //	 *            current marker entries
 //	 * @param marker
@@ -428,14 +428,14 @@
 	private void preBuild() {
 		preBuildTime = System.currentTimeMillis();
 	}
-	
+
 	/**
 	 * Post-build has happened.
 	 */
 	private void postBuild() {
 		preBuildTime = -1;
 	}
-	
+
 	/**
 	 * @return Returns the view.
 	 */
@@ -473,31 +473,31 @@
  * Manages scheduling of marker updates and the view ,also various other methods
  * related to scheduling updates.This class should be used for update
  * scheduling to avoid confusion.
- * 
+ *
  * Note: the reason for keeping this class is because the update scheduling is
  * so closely related to Marker change events.
- * 
+ *
  * @since 3.6
  */
 class MarkerUpdateScheduler {
-	
+
 	static final int SHORT_DELAY = 150;
 	static final int LONG_DELAY = 10000;
 	static final long TIME_OUT = 30000;
 
 	private CachedMarkerBuilder builder;
 	private ExtendedMarkersView view;
-	
+
 	private MarkerUpdateJob updateJob;
 	private UIUpdateJob uiUpdateJob;
-	
+
 	private final Object schedulingLock;
-	
+
 	private MarkerUpdateTimer updateTimer;
 
 	/**
-	 * @param view 
-	 * @param builder 
+	 * @param view
+	 * @param builder
 	 */
 	public MarkerUpdateScheduler(ExtendedMarkersView view,
 			CachedMarkerBuilder builder) {
@@ -506,7 +506,7 @@
 		schedulingLock = new Object();
 		updateTimer = new MarkerUpdateTimer();
 	}
-	
+
 	/**
 	 * Always use this to schedule update job
 	 * @return Returns the schedulingLock.
@@ -609,9 +609,9 @@
 
 	/**
 	 * Schedule only an UI update
-	 * 
+	 *
 	 * @param delay
-	 * 
+	 *
 	 */
 	void scheduleUIUpdate(long delay) {
 		uiUpdateJob = view.scheduleUpdate(delay);
@@ -619,7 +619,7 @@
 
 	/**
 	 * Cancel any marker update if pending.
-	 * 
+	 *
 	 */
 	void cancelUpdate() {
 		builder.cancelUpdate();
@@ -627,15 +627,15 @@
 
 	/**
 	 * Cancel any UI update if pending.
-	 * 
+	 *
 	 */
 	void cancelQueuedUIUpdates() {
 		view.cancelQueuedUpdates();
 	}
-	
+
 	///**
 	// * Indicate the status message on UI.
-	// * 
+	// *
 	// * @param messsage
 	// *            the status to display
 	// */
@@ -645,7 +645,7 @@
 	////See Bug 294303
 	///**
 	// * Indicate the status message on UI.
-	// * 
+	// *
 	// * @param messsage
 	// *            the status to display
 	// * @param updateUI
@@ -656,7 +656,7 @@
 	//	view.indicateUpdating(messsage != null ? messsage
 	//			: MarkerMessages.MarkerView_queueing_updates, updateUI);
 	//}
-	
+
 
 	/**
 	 * //Fix for Bug 294959.There is another patch(more exhaustive in terms
@@ -666,18 +666,18 @@
 	 * problems on a machine It would be worth looking at that.An
 	 * optimization to ensure we do not update too often, yet be responsive
 	 * and not miss any change.
-	 * 
+	 *
 	 * Note that we re-schedule the update every time.This is to ensure we
 	 * do not miss out an update even if another update was externally(UI)
 	 * scheduled, and finished much earlier(The changes before that have
 	 * been taken care of by the that update).Also we mandate updating once
 	 * in TIME-OUT.To change behaviour, changes in the DELAY parameters will
 	 * suffice. For example, setting TIME_OUT much larger value, and so on.
-	 * 
+	 *
 	 * @since 3.6
 	 */
 	class MarkerUpdateTimer {
-		
+
 		/**
 		 * This is to allow batching together any changes that may arrive in
 		 * after a post-build, in a short interval.This controls how we
@@ -689,7 +689,7 @@
 		//this to account for an ordinary change that may come in
 		//after post build
 		private static final long AFTER_MARGIN = 2;
-		
+
 		private long timeB4Update;
 
 		private long timerValidStart;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java
index 84c0b25..58af914 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersContribution.java
@@ -20,9 +20,9 @@
 /**
  * MarkersContribution is the abstract superclass of the compound contribution
  * items used in the Markers views.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 abstract class MarkersContribution extends CompoundContributionItem {
 
@@ -35,7 +35,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param id
 	 */
 	public MarkersContribution(String id) {
@@ -44,7 +44,7 @@
 
 	/**
 	 * Get the view this contribution is working on.
-	 * 
+	 *
 	 * @return ExtendedMarkersView or <code>null</code> if the active view isn't a marker view
 	 */
 	ExtendedMarkersView getView() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java
index a6eae4e..e33af2a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersPropertyPage.java
@@ -44,9 +44,9 @@
 
 /**
  * MarkersPropertyPage is the property page for a marker.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkersPropertyPage extends PropertyPage {
 
@@ -116,7 +116,7 @@
 
 	/**
 	 * Method createCreationTimeArea.
-	 * 
+	 *
 	 * @param parent
 	 */
 	private void createCreationTimeArea(Composite parent) {
@@ -150,7 +150,7 @@
 	/**
 	 * This method is intended to be overridden by subclasses. The attributes
 	 * area is created between the creation time area and the resource area.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -168,7 +168,7 @@
 
 	/**
 	 * Create the attributes area for editing a task
-	 * 
+	 *
 	 * @param parent
 	 */
 	private void createTaskAttributes(Composite parent) {
@@ -199,9 +199,9 @@
 		GridData gridData = new GridData();
 		gridData.horizontalIndent = convertHorizontalDLUsToPixels(20);
 		completedCheckbox.setLayoutData(gridData);
-		
+
 		completedCheckbox.setEnabled(Util.isEditable(marker));
-		
+
 		Object done;
 		try {
 			done = marker.getAttribute(IMarker.DONE);
@@ -216,7 +216,7 @@
 
 	/**
 	 * Create the attributes area for problems
-	 * 
+	 *
 	 * @param parent
 	 */
 	private void createProblemAttributes(Composite parent) {
@@ -293,7 +293,7 @@
 		}
 
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.preference.PreferencePage#performOk()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersTreeViewer.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersTreeViewer.java
index 13e5185..78e3d05 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersTreeViewer.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersTreeViewer.java
@@ -18,16 +18,16 @@
 
 /**
  * The MarkersTreeViewer is a viewer that optimizes the expandToLevel method.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 
 public class MarkersTreeViewer extends TreeViewer {
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param parent
 	 * @param style
 	 */
@@ -38,7 +38,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param parent
 	 */
 	public MarkersTreeViewer(Composite parent) {
@@ -47,7 +47,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param tree
 	 */
 	public MarkersTreeViewer(Tree tree) {
@@ -64,7 +64,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.jface.viewers.AbstractTreeViewer#doUpdateItem(org.eclipse
 	 * .swt.widgets.Item, java.lang.Object)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewColumnsDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewColumnsDialog.java
index 33b7b31..ed47f4e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewColumnsDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewColumnsDialog.java
@@ -26,11 +26,11 @@
 
 /**
  * MarkersViewSettingDialog is the dialog for showing marker preferences.
- * 
- * 
+ *
+ *
  * @since 3.7
  * @author Hitesh Soliwal
- * 
+ *
  */
 public class MarkersViewColumnsDialog extends ViewerColumnsDialog {
 
@@ -38,7 +38,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param view
 	 *            - the view this is being launched from
 	 */
@@ -50,7 +50,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
 	 * .Shell)
@@ -64,7 +64,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.window.Window#getShellStyle()
 	 */
 	@Override
@@ -74,7 +74,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
 	 * .Composite)
@@ -87,7 +87,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
 	@Override
@@ -122,7 +122,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
 	 */
 	@Override
@@ -182,7 +182,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getLabelProvider
 	 * ()
@@ -199,7 +199,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#
 	 * getColumnInfoProvider()
 	 */
@@ -241,7 +241,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getColumnUpdater
 	 * ()
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewPropertyTester.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewPropertyTester.java
index 6199d86..5ad06df 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewPropertyTester.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewPropertyTester.java
@@ -16,9 +16,9 @@
 /**
  * ContentGeneratorPropertyTester is the property tester for what content
  * generator is being shown.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class MarkersViewPropertyTester extends PropertyTester {
 
@@ -39,7 +39,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.expressions.IPropertyTester#test(java.lang.Object,
 	 *      java.lang.String, java.lang.Object[], java.lang.Object)
 	 */
@@ -64,7 +64,7 @@
 
 	/**
 	 * Test if the content generator in the args match the receiver.
-	 * 
+	 *
 	 * @param view
 	 * @param args
 	 * @return boolean
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MockMarkerEntry.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MockMarkerEntry.java
index 788b6b8..07451e1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MockMarkerEntry.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MockMarkerEntry.java
@@ -15,7 +15,7 @@
  */
 public class MockMarkerEntry extends MarkerEntry{
 	/**
-	 * 
+	 *
 	 */
 	public String name;
 	/**
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/OpenMarkersViewHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/OpenMarkersViewHandler.java
index 7421edf..f6eac3d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/OpenMarkersViewHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/OpenMarkersViewHandler.java
@@ -25,15 +25,15 @@
 
 /**
  * OpenMarkersViewHandler is used to open another markers view.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class OpenMarkersViewHandler extends MarkerViewHandler {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
@@ -72,14 +72,14 @@
 
 	/**
 	 * Get the input validator for the receiver.
-	 * 
+	 *
 	 * @return IInputValidator
 	 */
 	private IInputValidator getValidator() {
 		return new IInputValidator() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String)
 			 */
 			@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityConfigurationArea.java
index 71ca627..b3f5b35 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityConfigurationArea.java
@@ -23,9 +23,9 @@
 /**
  * The PriorityConfigurationArea is the configuration area for the task
  * priority.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class PriorityConfigurationArea extends FilterConfigurationArea {
 
@@ -43,7 +43,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#apply(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -54,12 +54,12 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
 	public void createContents(Composite parent) {
-		
+
 		parent.setLayout(new GridLayout(3,false));
 
 		highButton = new Button(parent, SWT.CHECK);
@@ -67,7 +67,7 @@
 		highButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -83,7 +83,7 @@
 		normalButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -98,7 +98,7 @@
 		lowButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -111,7 +111,7 @@
 
 	/**
 	 * Update he priorities set based on the constant and the selection value.
-	 * 
+	 *
 	 * @param constant
 	 * @param enabled
 	 */
@@ -139,7 +139,7 @@
 				.setSelection((PriorityMarkerFieldFilter.PRIORITY_HIGH & priorities) > 0);
 
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#getTitle()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityMarkerFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityMarkerFieldFilter.java
index 484ae4a..4a23d78 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityMarkerFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/PriorityMarkerFieldFilter.java
@@ -20,9 +20,9 @@
 
 /**
  * PriorityMarkerFieldFilter is the field filter for priority in markers
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class PriorityMarkerFieldFilter extends CompatibilityFieldFilter {
 
@@ -43,7 +43,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter#loadSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -53,7 +53,7 @@
 			return;
 		selectedPriorities = priority.intValue();
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.views.markers.CompatibilityFieldFilter#loadLegacySettings(org.eclipse.ui.IMemento, org.eclipse.ui.internal.views.markers.MarkerContentGenerator)
 	 */
@@ -68,9 +68,9 @@
 			} catch (NumberFormatException eNumberFormat) {
 			}
 		}
-		
-	
-		
+
+
+
 	}
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.views.markers.CompatibilityFieldFilter#initialize(org.eclipse.ui.views.markers.internal.ProblemFilter)
@@ -78,7 +78,7 @@
 	@Override
 	public void initialize(ProblemFilter problemFilter) {
 		//There is no problem filter support for priority
-		
+
 	}
 
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionConfigurationArea.java
index 3025ec2..0f0c574 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionConfigurationArea.java
@@ -27,10 +27,10 @@
 	 */
 	@Override
 	public void createContents(Composite parent) {
-	
+
 		super.createContents(parent);
 		createSeverityGroup(parent);
-	
+
 	}
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionFieldFilter.java
index 522bc17..98d41db 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsSeverityAndDescriptionFieldFilter.java
@@ -19,14 +19,14 @@
 /**
  * ProblemsSeverityAndDescriptionFieldFilter is the filter used by the problems
  * view.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class ProblemsSeverityAndDescriptionFieldFilter extends
 		SeverityAndDescriptionFieldFilter {
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.internal.views.markers.DescriptionFieldFilter#select(org.eclipse.ui.views.markers.MarkerItem)
 	 */
@@ -60,11 +60,11 @@
 			selectedSeverities = severitySetting.intValue();
 		}
 
-	
+
 	}
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.DescriptionFieldFilter#initialize(org.eclipse.ui.views.markers.internal.ProblemFilter)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java
index c8ffc42..8a23481 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ProblemsView.java
@@ -24,7 +24,7 @@
 
 /**
  * The Problems view is supplied by the IDE to show problems.
- * 
+ *
  * @since 3.4
  */
 public class ProblemsView extends MarkerSupportView {
@@ -34,7 +34,7 @@
 	 */
 	public ProblemsView() {
 		super(MarkerSupportRegistry.PROBLEMS_GENERATOR);
-		
+
 	}
 
 	@Override
@@ -52,7 +52,7 @@
 	protected IUndoContext getUndoContext() {
 		return WorkspaceUndoUtil.getProblemsUndoContext();
 	}
-	
+
 	@Override
 	protected String getDeleteOperationName(IMarker[] markers) {
 		Assert.isLegal(markers.length > 0);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
index 7423b64..80d911d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixHandler.java
@@ -41,9 +41,9 @@
 
 /**
  * QuickFixHandler is the command handler for the quick fix dialog.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class QuickFixHandler extends MarkerViewHandler {
 
@@ -56,14 +56,14 @@
 		public QuickFixWizardDialog(Shell parentShell, IWizard newWizard) {
 			super(parentShell, newWizard);
 			setShellStyle(SWT.CLOSE | SWT.MAX | SWT.TITLE | SWT.BORDER
-					| SWT.MODELESS | SWT.RESIZE | getDefaultOrientation());	
+					| SWT.MODELESS | SWT.RESIZE | getDefaultOrientation());
 		}
 
 	}
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
 	 */
 	@Override
@@ -151,7 +151,7 @@
 						view.getSite().getShell(),
 						MarkerMessages.resolveMarkerAction_dialogTitle,
 						MarkerMessages.MarkerResolutionDialog_NoResolutionsFoundForMultiSelection);
-				
+
 			}
 		} else {
 
@@ -172,7 +172,7 @@
 	/**
 	 * Checks whether the given extent contains all all but the first element from the given members
 	 * array.
-	 * 
+	 *
 	 * @param extent the array which should contain the elements
 	 * @param members the elements to check
 	 * @return <code>true</code> if all but the first element are inside the extent
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
index 6ef10f1..d740888 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPage.java
@@ -69,9 +69,9 @@
 
 /**
  * QuickFixPage is a page for the quick fixes of a marker.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class QuickFixPage extends WizardPage {
 
@@ -85,7 +85,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param problemDescription the description of the problem being fixed
 	 * @param selectedMarkers the selected markers
 	 * @param resolutions {@link Map} with key of {@link IMarkerResolution} and value of
@@ -168,13 +168,13 @@
 				.getElementAt(0)));
 
 		markersTable.setCheckedElements(selectedMarkers);
-		
+
 		setPageComplete(markersTable.getCheckedElements().length > 0);
 	}
 
 	/**
 	 * Create the table buttons for the receiver.
-	 * 
+	 *
 	 * @param control
 	 * @return {@link Composite}
 	 */
@@ -195,7 +195,7 @@
 		selectAll.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -213,7 +213,7 @@
 		deselectAll.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -235,7 +235,7 @@
 		resolutionsList.setContentProvider(new IStructuredContentProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 			 */
 			@Override
@@ -245,7 +245,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -255,7 +255,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -269,7 +269,7 @@
 		resolutionsList.setLabelProvider(new LabelProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 			 */
 			@Override
@@ -279,7 +279,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.LabelProvider#getImage(java.lang.Object)
 			 * @since 3.7
 			 */
@@ -294,7 +294,7 @@
 		resolutionsList.setComparator(new ViewerComparator() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -309,7 +309,7 @@
 				.addSelectionChangedListener(new ISelectionChangedListener() {
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
 					 */
 					@Override
@@ -322,7 +322,7 @@
 
 	/**
 	 * Create the table that shows the markers.
-	 * 
+	 *
 	 * @param control
 	 */
 	private void createMarkerTable(Composite control) {
@@ -334,7 +334,7 @@
 		markersTable.setContentProvider(new IStructuredContentProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -344,7 +344,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 			 */
 			@Override
@@ -362,7 +362,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -377,7 +377,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
 			 *      int)
 			 */
@@ -391,7 +391,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
 			 *      int)
 			 */
@@ -400,7 +400,7 @@
 				IMarker marker =(IMarker) element;
 				if (columnIndex == 0)
 					return Util.getResourceName(marker);
-				
+
 				// Is the location override set?
 				String locationString = marker.getAttribute(IMarker.LOCATION,
 						MarkerSupportInternalUtilities.EMPTY_STRING);
@@ -422,7 +422,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
 			 */
 			@Override
@@ -433,7 +433,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
 			 */
 			@Override
@@ -444,7 +444,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
 			 *      java.lang.String)
 			 */
@@ -455,7 +455,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
 			 */
 			@Override
@@ -468,7 +468,7 @@
 		markersTable.addCheckStateListener(new ICheckStateListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent)
 			 */
 			@Override
@@ -483,7 +483,7 @@
 		});
 
 		new OpenAndLinkWithEditorHelper(markersTable) {
-			
+
 			{ setLinkWithEditor(false); }
 
 			@Override
@@ -495,7 +495,7 @@
 			@Override
 			protected void linkToEditor(ISelection selection) {
 			}
-			
+
 			@Override
 			protected void open(ISelection selection, boolean activate) {
 				if (selection.isEmpty())
@@ -538,7 +538,7 @@
 
 	/**
 	 * Return the marker being edited.
-	 * 
+	 *
 	 * @return IMarker or <code>null</code>
 	 */
 	public IMarker getSelectedMarker() {
@@ -578,7 +578,7 @@
 						new IRunnableWithProgress() {
 							/*
 							 * (non-Javadoc)
-							 * 
+							 *
 							 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
 							 */
 							@Override
@@ -606,7 +606,7 @@
 						new IRunnableWithProgress() {
 							/*
 							 * (non-Javadoc)
-							 * 
+							 *
 							 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
 							 */
 							@Override
@@ -643,7 +643,7 @@
 
 	/**
 	 * Return the marker resolution that is currently selected/
-	 * 
+	 *
 	 * @return IMarkerResolution or <code>null</code> if there is no
 	 *         selection.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPropertyTester.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPropertyTester.java
index 33c1990..97d9204 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPropertyTester.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixPropertyTester.java
@@ -15,9 +15,9 @@
 
 /**
  * QuickFixPropertyTester is the property tester for the quick fix object.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class QuickFixPropertyTester extends PropertyTester {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
index 0a40830..81b2b0b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/QuickFixWizard.java
@@ -30,9 +30,9 @@
 
 /**
  * QuickFixWizard is the wizard for quick fixes.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 class QuickFixWizard extends Wizard {
 
@@ -43,7 +43,7 @@
 
 	/**
 	 * Create the wizard with the map of resolutions.
-	 * 
+	 *
 	 * @param description the description of the problem
 	 * @param selectedMarkers the markers that were selected
 	 * @param resolutions Map key {@link IMarkerResolution} value {@link IMarker} []
@@ -62,7 +62,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.wizard.Wizard#addPages()
 	 */
 	@Override
@@ -73,7 +73,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.wizard.Wizard#performFinish()
 	 */
 	@Override
@@ -81,7 +81,7 @@
 		IRunnableWithProgress finishRunnable = new IRunnableWithProgress() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
 			 */
 			@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ScopeArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ScopeArea.java
index d9f3775..fb4457c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ScopeArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ScopeArea.java
@@ -32,9 +32,9 @@
 /**
  * ScopeArea is the filter configuration area that handles the scope of the
  * filter.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 class ScopeArea extends GroupFilterConfigurationArea {
 
@@ -49,13 +49,13 @@
 
 		/**
 		 * Creates the working set filter selection widgets.
-		 * 
+		 *
 		 * @param parent
 		 *            the parent composite of the working set widgets
 		 */
 		WorkingSetArea(Composite parent) {
-			
-			
+
+
 			// radio button has to be part of main radio button group
 			button = createRadioButton(parent,
 					MarkerMessages.filtersDialog_noWorkingSet,
@@ -74,19 +74,19 @@
 			// composite.setLayout(layout);
 			selectButton = new Button(parent, SWT.PUSH);
 			selectButton.setText(MarkerMessages.filtersDialog_workingSetSelect);
-			
+
 			initializeFontMetrics(parent);
 			GridData layoutData = new GridData();
 			layoutData.horizontalIndent = 20;
 			int widthHint = Dialog.convertHorizontalDLUsToPixels(getFontMetrics(),IDialogConstants.BUTTON_WIDTH);
 			Point minSize = selectButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 			layoutData.widthHint = Math.max(widthHint, minSize.x);
-			
+
 			selectButton.setLayoutData(layoutData);
 			selectButton.addSelectionListener(new SelectionAdapter() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
 				@Override
@@ -115,14 +115,14 @@
 
 				}
 			});
-			
-			
+
+
 
 		}
 
 		/**
 		 * Returns wether or not a working set filter should be used
-		 * 
+		 *
 		 * @return true=a working set filter should be used false=a working set
 		 *         filter should not be used
 		 */
@@ -132,7 +132,7 @@
 
 		/**
 		 * Returns the selected working set filter or null if none is selected.
-		 * 
+		 *
 		 * @return the selected working set filter or null if none is selected.
 		 */
 		IWorkingSet getWorkingSet() {
@@ -141,7 +141,7 @@
 
 		/**
 		 * Sets the working set filter selection.
-		 * 
+		 *
 		 * @param selected
 		 *            true=a working set filter should be used false=no working
 		 *            set filter should be used
@@ -164,7 +164,7 @@
 
 		/**
 		 * Sets the specified working set.
-		 * 
+		 *
 		 * @param workingSet
 		 *            the working set
 		 */
@@ -198,19 +198,19 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#applyToGroup(org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilterGroup)
 	 */
 	@Override
 	public void applyToGroup(MarkerFieldFilterGroup group) {
 		group.setScope(scope);
 		group.setWorkingSet(workingSetArea.getWorkingSet());
-		
+
 	}
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -236,7 +236,7 @@
 
 	/**
 	 * Creates a radio button with the given parent and text.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 * @param text
@@ -252,7 +252,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -272,7 +272,7 @@
 	}
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#getTitle()
 	 */
 	@Override
@@ -282,7 +282,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#initializeFromGroup(org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilterGroup)
 	 */
 	@Override
@@ -295,7 +295,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#apply(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -306,7 +306,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#initialize(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SelectedWarningsParameters.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SelectedWarningsParameters.java
index 155fc04..c9869ce 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SelectedWarningsParameters.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SelectedWarningsParameters.java
@@ -19,9 +19,9 @@
 
 /**
  * SelectedWarningsParameters is the parameters for warnings.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class SelectedWarningsParameters extends FiltersContributionParameters {
 
@@ -41,7 +41,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FiltersContributionParameters#getParameterValues()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionConfigurationArea.java
index 27b40ab..f2d7c75 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionConfigurationArea.java
@@ -27,9 +27,9 @@
 /**
  * SeverityAndDescriptionConfigurationArea is the configuration area for the
  * severity and description field.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class SeverityAndDescriptionConfigurationArea extends
 		DescriptionConfigurationArea {
@@ -49,7 +49,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#apply(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -61,7 +61,7 @@
 
 	/**
 	 * Create a group for the severity selection.
-	 * 
+	 *
 	 * @param parent
 	 * @return {@link Composite}
 	 */
@@ -82,7 +82,7 @@
 		errorButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -101,7 +101,7 @@
 		warningButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -117,7 +117,7 @@
 		infoButton.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -132,7 +132,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#initialize(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -151,7 +151,7 @@
 
 	/**
 	 * Set or clear the flag for the constant based on the enablement.
-	 * 
+	 *
 	 * @param constant
 	 *            one of {@link IMarker#SEVERITY_ERROR},{@link IMarker#SEVERITY_WARNING},{@link IMarker#SEVERITY_INFO}
 	 * @param enabled
@@ -166,7 +166,7 @@
 
 	/**
 	 * Set the enabled state of the severity buttons.
-	 * 
+	 *
 	 * @param enabled
 	 */
 	void setSeverityButtonsEnabled(boolean enabled) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionFieldFilter.java
index 55102b0..f3a0f69 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SeverityAndDescriptionFieldFilter.java
@@ -19,9 +19,9 @@
 /**
  * SeverityAndDescriptionFieldFilter is the filter for the severity and
  * description field.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public abstract class SeverityAndDescriptionFieldFilter extends DescriptionFieldFilter {
 
@@ -40,7 +40,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilter#initialize(java.util.Map)
 	 */
 	@Override
@@ -63,7 +63,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilter#populateWorkingCopy(org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilter)
 	 */
 	@Override
@@ -75,7 +75,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilter#saveSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -87,7 +87,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilter#loadSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -100,13 +100,13 @@
 	/**
 	 * Compare the selected severity and the severity of the marker to see if
 	 * they match
-	 * 
+	 *
 	 * @param markerSeverity
 	 */
 	protected boolean checkSeverity(int markerSeverity) {
 		// Convert from the marker to the filter
 		return (1 << markerSeverity & selectedSeverities) > 0;
-	
+
 	}
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java
index cfec314..0861ceb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/SortFieldContribution.java
@@ -25,9 +25,9 @@
 /**
  * SortFieldContribution is the contribution that allows the user to choose
  * which field will become the primary sort field.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class SortFieldContribution extends MarkersContribution {
 
@@ -47,7 +47,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.CompoundContributionItem#getContributionItems()
 	 */
 	@Override
@@ -83,7 +83,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
 			 *      int)
 			 */
@@ -95,7 +95,7 @@
 				item.addListener(SWT.Selection, new Listener() {
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
 					 */
 					@Override
@@ -116,7 +116,7 @@
 
 	/**
 	 * Return the IContributionItem for field.
-	 * 
+	 *
 	 * @param field
 	 * @return IContributionItem
 	 */
@@ -125,7 +125,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.action.ContributionItem#fill(org.eclipse.swt.widgets.Menu,
 			 *      int)
 			 */
@@ -145,7 +145,7 @@
 
 			/**
 			 * Return the menu item listener for selection of a field.
-			 * 
+			 *
 			 * @param field
 			 * @param view
 			 * @return Listener
@@ -155,7 +155,7 @@
 				return new Listener() {
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
 					 */
 					@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java
index 47db6a1..26b886b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TasksView.java
@@ -31,9 +31,9 @@
 	 */
 	public TasksView() {
 		super(MarkerSupportRegistry.TASKS_GENERATOR);
-		
+
 	}
-	
+
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getUndoContext()
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TodoFiltersContributionParameters.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TodoFiltersContributionParameters.java
index dce502b..4be6bf1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TodoFiltersContributionParameters.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TodoFiltersContributionParameters.java
@@ -24,7 +24,7 @@
  */
 public class TodoFiltersContributionParameters extends
 		FiltersContributionParameters {
-	
+
 	private static Map todoMap;
 	static {
 		todoMap = new HashMap();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypeFieldGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypeFieldGroup.java
index 356965c..8a85f48 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypeFieldGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypeFieldGroup.java
@@ -23,15 +23,15 @@
 
 /**
  * TypeFieldGroup is the field used to group by type.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class TypeFieldGroup extends AbstractField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDescription()
 	 */
 	@Override
@@ -41,7 +41,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDescriptionImage()
 	 */
 	@Override
@@ -51,7 +51,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderText()
 	 */
 	@Override
@@ -61,7 +61,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderImage()
 	 */
 	@Override
@@ -71,7 +71,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getValue(java.lang.Object)
 	 */
 	@Override
@@ -91,7 +91,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getImage(java.lang.Object)
 	 */
 	@Override
@@ -101,7 +101,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#compare(java.lang.Object,
 	 *      java.lang.Object)
 	 */
@@ -112,7 +112,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDefaultDirection()
 	 */
 	@Override
@@ -122,7 +122,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java
index de1ff7a..7a99f3e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/TypesConfigurationArea.java
@@ -44,9 +44,9 @@
 /**
  * TypesConfigurationArea is the FilterConfigurationArea that handles type
  * selection for the filter.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class TypesConfigurationArea extends GroupFilterConfigurationArea {
 
@@ -57,7 +57,7 @@
 
 		/**
 		 * Create a new instance of the receiver.
-		 * 
+		 *
 		 * @param categoryName
 		 */
 		public CategoryEntry(String categoryName) {
@@ -66,7 +66,7 @@
 
 		/**
 		 * Add the node to the receiver.
-		 * 
+		 *
 		 * @param node
 		 */
 		public void add(MarkerTypeEntry node) {
@@ -77,7 +77,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#addElementsMatching(java.util.Collection,
 		 *      java.util.Collection)
 		 */
@@ -94,7 +94,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#getChildren()
 		 */
 		@Override
@@ -104,7 +104,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#getLabel()
 		 */
 		@Override
@@ -114,7 +114,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#getParent()
 		 */
 		@Override
@@ -124,7 +124,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#hasChildren()
 		 */
 		@Override
@@ -141,7 +141,7 @@
 
 		/**
 		 * Create an instance of the receiver.
-		 * 
+		 *
 		 * @param markerType
 		 */
 		public MarkerTypeEntry(MarkerType markerType) {
@@ -150,7 +150,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#addElementsMatching(java.util.Collection,
 		 *      java.util.Collection)
 		 */
@@ -164,7 +164,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#getChildren()
 		 */
 		@Override
@@ -174,7 +174,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#getLabel()
 		 */
 		@Override
@@ -184,7 +184,7 @@
 
 		/**
 		 * Return the marker type for the receiver.
-		 * 
+		 *
 		 * @return MarkerType
 		 */
 		public MarkerType getMarkerType() {
@@ -193,7 +193,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#getParent()
 		 */
 		@Override
@@ -203,7 +203,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.TypesConfigurationArea.TypesEntry#hasChildren()
 		 */
 		@Override
@@ -213,7 +213,7 @@
 
 		/**
 		 * Set the category of the receiver.
-		 * 
+		 *
 		 * @param categoryEntry
 		 */
 		public void setParent(CategoryEntry categoryEntry) {
@@ -227,7 +227,7 @@
 
 		/**
 		 * Add any elements that contain a type in selectedTypes tp entries.
-		 * 
+		 *
 		 * @param selectedTypes
 		 * @param entries
 		 */
@@ -236,28 +236,28 @@
 
 		/**
 		 * Return the children of the receiver.
-		 * 
+		 *
 		 * @return TypesEntry[]
 		 */
 		public abstract Collection getChildren();
 
 		/**
 		 * Return the label for the receiver.
-		 * 
+		 *
 		 * @return String
 		 */
 		public abstract String getLabel();
 
 		/**
 		 * Return the parent of the receiver.
-		 * 
+		 *
 		 * @return TypesEntry
 		 */
 		public abstract TypesEntry getParent();
 
 		/**
 		 * Return whether or not the receiver has children.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public abstract boolean hasChildren();
@@ -272,7 +272,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#apply(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -294,7 +294,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#applyToGroup(org.eclipse.ui.internal.provisional.views.markers.MarkerFieldFilterGroup)
 	 */
 	@Override
@@ -304,7 +304,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.FilterConfigurationArea#createContents(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -336,7 +336,7 @@
 		typesViewer.setLabelProvider(new LabelProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
 			 */
 			@Override
@@ -347,7 +347,7 @@
 		typesViewer.setComparator(new ViewerComparator() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -370,7 +370,7 @@
 			/**
 			 * Set the check state of the children of element to
 			 * <code>true</code>.
-			 * 
+			 *
 			 * @param element
 			 * @param checked
 			 */
@@ -387,7 +387,7 @@
 
 			/**
 			 * Update the parent check state based on the state of the element
-			 * 
+			 *
 			 * @param element
 			 * @param checked
 			 */
@@ -434,7 +434,7 @@
 				typesContentProvider, false));
 		setButtonLayoutData(deselectAllButton);
 	}
-	
+
 	/**
 	 * {@inheritDoc}
 	 */
@@ -445,7 +445,7 @@
 
 	/**
 	 * Get the listener for select all and deselect all.
-	 * 
+	 *
 	 * @param typesContentProvider
 	 * @param checked
 	 *            the check state to set
@@ -457,7 +457,7 @@
 		return new SelectionListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -467,7 +467,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -484,7 +484,7 @@
 
 	/**
 	 * Return the elements for MarkerFieldFilterGroup groip.
-	 * 
+	 *
 	 * @param group
 	 * @return List of TypesEntry
 	 */
@@ -524,7 +524,7 @@
 	/**
 	 * Find the type entries for group that correspond to it's current selection
 	 * and add them to the checked or grey checked lists as appropriate.
-	 * 
+	 *
 	 * @param group
 	 * @param entries
 	 * @param greyEntries
@@ -558,7 +558,7 @@
 
 	/**
 	 * Get the content provider for the types.
-	 * 
+	 *
 	 * @return ITreeContentProvider
 	 */
 	private ITreeContentProvider getTypesContentProvider() {
@@ -566,7 +566,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -575,7 +575,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
 			 */
 			@Override
@@ -585,7 +585,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 			 */
 			@Override
@@ -596,7 +596,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
 			 */
 			@Override
@@ -606,7 +606,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
 			 */
 			@Override
@@ -616,7 +616,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -629,7 +629,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.provisional.views.markers.api.FilterConfigurationArea#initialize(org.eclipse.ui.internal.provisional.views.markers.api.MarkerFieldFilter)
 	 */
 	@Override
@@ -640,7 +640,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.GroupFilterConfigurationArea#initializeFromGroup(org.eclipse.ui.internal.views.markers.MarkerFieldFilterGroup)
 	 */
 	@Override
@@ -657,7 +657,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.FilterConfigurationArea#getTitle()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/UIUpdateJob.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/UIUpdateJob.java
index 0f38779..588953b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/UIUpdateJob.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/UIUpdateJob.java
@@ -24,12 +24,12 @@
 /**
  * The UIUpdateJob runs in the UI thread and is responsible updating the Markers
  * view UI with newly updated markers.
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 class UIUpdateJob extends WorkbenchJob {
-	
+
 	private ExtendedMarkersView view;
 
 	private boolean updating;
@@ -49,7 +49,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.
 	 * IProgressMonitor)
@@ -63,7 +63,7 @@
 		if (viewer.getControl().isDisposed()) {
 			return Status.CANCEL_STATUS;
 		}
-		
+
 		Markers clone = view.getActiveViewerInputClone();
 		try {
 			updating = true;
@@ -73,7 +73,7 @@
 			if (monitor.isCanceled()) {
 				return Status.CANCEL_STATUS;
 			}
-			
+
 			//view.indicateUpdating(MarkerMessages.MarkerView_19,
 			//		true);
 
@@ -89,7 +89,7 @@
 
 			if (monitor.isCanceled())
 				return Status.CANCEL_STATUS;
-			/* 
+			/*
 			 * always use a clone for Thread safety. We avoid setting the clone
 			 * as new input as we would offset the benefits of optimization in
 			 * TreeViewer.
@@ -144,7 +144,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.jobs.Job#shouldRun()
 	 */
 	@Override
@@ -157,7 +157,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
index 5f6d574..1b1ac32 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
@@ -57,13 +57,13 @@
  * combine the columns and preference dialogs into one. It should be noted that
  * the class can be re-used or turned into a tool for column viewers in general,
  * but with some modifications. See example attached at the end of this class
- * 
+ *
  * @since 3.7
- * 
+ *
  * @author Hitesh Soliwal
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
- * 
+ *
  */
 abstract class ViewerColumnsDialog extends ViewerSettingsAndStatusDialog {
 
@@ -86,7 +86,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param parentShell
 	 */
 	ViewerColumnsDialog(Shell parentShell) {
@@ -95,7 +95,7 @@
 
 	/**
 	 * Initialize visible /non-visible columns.
-	 * 
+	 *
 	 * @param columnObjs
 	 */
 	void setColumnsObjs(Object[] columnObjs) {
@@ -122,7 +122,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.internal.views.markers.ViewerSettingsAndStatusDialog#
 	 * createDialogContentArea(org.eclipse.swt.widgets.Composite)
 	 */
@@ -148,7 +148,7 @@
 
 	/**
 	 * The Up and Down button to change column ordering.
-	 * 
+	 *
 	 * @param parent
 	 */
 	Control createUpDownBtt(Composite parent) {
@@ -158,7 +158,7 @@
 		compositeLayout.marginWidth = 0;
 		composite.setLayout(compositeLayout);
 		composite.setLayoutData(new GridData(SWT.NONE, SWT.FILL, false, true));
-		
+
 		Composite bttArea = new Composite(composite, SWT.NONE);
 		GridLayout layout = new GridLayout();
 		layout.marginHeight = 0;
@@ -192,7 +192,7 @@
 
 	/**
 	 * Create the controls responsible to display/edit column widths.
-	 * 
+	 *
 	 * @param parent
 	 * @return {@link Control}
 	 */
@@ -200,13 +200,13 @@
 
 		Label dummy = new Label(parent, SWT.NONE);
 		dummy.setLayoutData(new GridData(SWT.NONE, SWT.NONE, false, false, 2, 1));
-		
+
 		Composite widthComposite = new Composite(parent, SWT.NONE);
 		GridLayout gridLayout = new GridLayout(2, false);
 		gridLayout.marginHeight = 0;
 		widthComposite.setLayout(gridLayout);
 		widthComposite.setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false, 2, 1));
-		
+
 		widthLabel = new Label(widthComposite, SWT.NONE);
 		widthLabel.setText(MarkerMessages.MarkerPreferences_WidthOfShownColumn);
 		GridData gridData = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
@@ -246,7 +246,7 @@
 
 	/**
 	 * Creates the table that lists out visible columns in the viewer
-	 * 
+	 *
 	 * @param parent
 	 * @return {@link Control}
 	 */
@@ -299,7 +299,7 @@
 
 	/**
 	 * Creates the table that lists out non-visible columns in the viewer
-	 * 
+	 *
 	 * @param parent
 	 * @return {@link Control}
 	 */
@@ -356,7 +356,7 @@
 	/**
 	 * Creates buttons for moving columns from non-visible to visible and
 	 * vice-versa
-	 * 
+	 *
 	 * @param parent
 	 * @return {@link Control}
 	 */
@@ -404,7 +404,7 @@
 	/**
 	 * Handles a selection change in the viewer that lists out the non-visible
 	 * columns
-	 * 
+	 *
 	 * @param selection
 	 */
 	void handleNonVisibleSelection(ISelection selection) {
@@ -422,7 +422,7 @@
 	/**
 	 * Handles a selection change in the viewer that lists out the visible
 	 * columns. Takes care of various enablements.
-	 * 
+	 *
 	 * @param selection
 	 */
 	void handleVisibleSelection(ISelection selection) {
@@ -472,7 +472,7 @@
 	/**
 	 * Applies to visible columns, and handles the changes in the order of
 	 * columns
-	 * 
+	 *
 	 * @param e
 	 *            event from the button click
 	 */
@@ -496,7 +496,7 @@
 	/**
 	 * Applies to visible columns, and handles the changes in the order of
 	 * columns
-	 * 
+	 *
 	 * @param e
 	 *            event from the button click
 	 */
@@ -519,7 +519,7 @@
 
 	/**
 	 * Moves selected columns from non-visible to visible state
-	 * 
+	 *
 	 * @param e
 	 *            event from the button click
 	 */
@@ -547,7 +547,7 @@
 
 	/**
 	 * Moves selected columns from visible to non-visible state
-	 * 
+	 *
 	 * @param e
 	 *            event from the button click
 	 */
@@ -590,7 +590,7 @@
 			updater.setColumnVisible(iterator.next(), visibility);
 		}
 	}
-	
+
 	@Override
 	protected void performDefaults() {
 		refreshViewers();
@@ -631,7 +631,7 @@
 
 	/**
 	 * An adapter class to {@link ITableLabelProvider}
-	 * 
+	 *
 	 */
 	class TableLabelProvider extends LabelProvider implements
 			ITableLabelProvider {
@@ -688,7 +688,7 @@
 	protected abstract IColumnUpdater getColumnUpdater();
 
 	/**
-	 * 
+	 *
 	 */
 	private void updateWidth() {
 		try {
@@ -712,14 +712,14 @@
 
 		/**
 		 * Get corresponding index for the column
-		 * 
+		 *
 		 * @param columnObj
 		 */
 		public int getColumnIndex(Object columnObj);
 
 		/**
 		 * Get the width of the column
-		 * 
+		 *
 		 * @param columnObj
 		 */
 		public int getColumnWidth(Object columnObj);
@@ -727,7 +727,7 @@
 		/**
 		 * Returns true if the column represented by parameters is showing in
 		 * the viewer
-		 * 
+		 *
 		 * @param columnObj
 		 */
 		public boolean isColumnVisible(Object columnObj);
@@ -735,7 +735,7 @@
 		/**
 		 * Returns true if the column represented by parameters is configured as
 		 * movable
-		 * 
+		 *
 		 * @param columnObj
 		 */
 		public boolean isColumnMovable(Object columnObj);
@@ -743,7 +743,7 @@
 		/**
 		 * Returns true if the column represented by parameters is configured as
 		 * resizable
-		 * 
+		 *
 		 * @param columnObj
 		 */
 		public boolean isColumnResizable(Object columnObj);
@@ -758,7 +758,7 @@
 
 		/**
 		 * Set the column represented by parameters as visible
-		 * 
+		 *
 		 * @param columnObj
 		 * @param visible
 		 */
@@ -766,7 +766,7 @@
 
 		/**
 		 * Dummy method - more a result of symmetry
-		 * 
+		 *
 		 * @param columnObj
 		 * @param movable
 		 */
@@ -775,7 +775,7 @@
 		/**
 		 * Call back to notify change in the index of the column represented by
 		 * columnObj
-		 * 
+		 *
 		 * @param columnObj
 		 * @param index
 		 */
@@ -783,7 +783,7 @@
 
 		/**
 		 * Dummy method - more a result of symmetry
-		 * 
+		 *
 		 * @param columnObj
 		 * @param resizable
 		 */
@@ -792,7 +792,7 @@
 		/**
 		 * Call back to notify change in the width of the column represented by
 		 * columnObj
-		 * 
+		 *
 		 * @param columnObj
 		 * @param newWidth
 		 */
@@ -1002,7 +1002,7 @@
 
 		/**
 		 * Demo
-		 * 
+		 *
 		 * @param args
 		 */
 		public static void main(String[] args) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerSettingsAndStatusDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerSettingsAndStatusDialog.java
index 23589e8..3ddf5e7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerSettingsAndStatusDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerSettingsAndStatusDialog.java
@@ -49,7 +49,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
 	 * .Shell)
@@ -61,7 +61,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.window.Window#getShellStyle()
 	 */
 	@Override
@@ -71,7 +71,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#getInitialSize()
 	 */
 	@Override
@@ -109,7 +109,7 @@
 	protected abstract Control createDialogContentArea(Composite dialogArea);
 
 	/**
-	 * 
+	 *
 	 */
 	protected void initializeDialog() {
 		handleStatusUdpate(IStatus.INFO, getDefaultMessage());
@@ -117,7 +117,7 @@
 
 	/**
 	 * Create message area.
-	 * 
+	 *
 	 * @param parent
 	 */
 	Control createMessageArea(Composite parent) {
@@ -143,7 +143,7 @@
 
 	/**
 	 * Display the message and an appropriate icon.
-	 * 
+	 *
 	 * @param status
 	 */
 	protected void handleStatusUdpate(IStatus status) {
@@ -152,7 +152,7 @@
 
 	/**
 	 * Display the message and an appropriate icon.
-	 * 
+	 *
 	 * @param messgage
 	 * @param severity
 	 */
@@ -215,7 +215,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	protected Image getMessageImage() {
 		if (imageLabel != null) {
@@ -234,7 +234,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param visible
 	 */
 	protected void handleMessageAreaVisibility(boolean visible) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/properties/IDEPropertiesMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/properties/IDEPropertiesMessages.java
index 4c2bf37..3c629e7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/properties/IDEPropertiesMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/properties/IDEPropertiesMessages.java
@@ -3,8 +3,8 @@
  * program and the accompanying materials 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: 
+ *
+ * Contributors:
  * IBM - Initial API and implementation
  **********************************************************************/
 package org.eclipse.ui.internal.views.properties;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java
index 72b0d6f..8e592d4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileExportOperation.java
@@ -33,7 +33,7 @@
 /**
  *	Operation for exporting a resource and its children to a new .zip or
  *  .tar.gz file.
- *  
+ *
  *  @since 3.1
  */
 public class ArchiveFileExportOperation implements IRunnableWithProgress {
@@ -50,7 +50,7 @@
     private List errorTable = new ArrayList(1); //IStatus
 
     private boolean useCompression = true;
-    
+
     private boolean useTarFormat = false;
 
     private boolean createLeadupStructure = true;
@@ -162,7 +162,7 @@
             throws InterruptedException {
         exportResource(exportResource, 1);
     }
-    
+
     /**
      * Creates and returns the string that should be used as the name of the entry in the archive.
      * @param exportResource the resource to export
@@ -212,7 +212,7 @@
                 // this should never happen because an #isAccessible check is done before #members is invoked
                 addError(NLS.bind(DataTransferMessages.DataTransfer_errorExporting, exportResource.getFullPath()), e);
             }
-            
+
             if (children.length == 0) { // create an entry for empty containers, see bug 278402
             	String destinationName = createDestinationName(leadupDepth, exportResource);
                 try {
@@ -361,11 +361,11 @@
     public void setUseCompression(boolean value) {
         useCompression = value;
     }
-    
+
     /**
      * Set this boolean indicating whether the file should be output
      * in tar.gz format rather than .zip format.
-     * 
+     *
      * @param value boolean
      */
     public void setUseTarFormat(boolean value) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileManipulations.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileManipulations.java
index 1445043..f6dfeeb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileManipulations.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ArchiveFileManipulations.java
@@ -30,7 +30,7 @@
 	/**
 	 * Determine whether the file with the given filename is in .tar.gz or .tar
 	 * format.
-	 * 
+	 *
 	 * @param fileName
 	 *            file to test
 	 * @return true if the file is in tar format
@@ -63,7 +63,7 @@
 	/**
 	 * Determine whether the file with the given filename is in .zip or .jar
 	 * format.
-	 * 
+	 *
 	 * @param fileName
 	 *            file to test
 	 * @return true if the file is in tar format
@@ -93,9 +93,9 @@
 
 	/**
 	 * Closes the given structure provider.
-	 * 
+	 *
 	 * @param structureProvider
-	 *            The structure provider to be closed, can be <code>null</code>				 
+	 *            The structure provider to be closed, can be <code>null</code>
 	 * @param shell
 	 *            The shell to display any possible Dialogs in
 	 */
@@ -111,7 +111,7 @@
 	/**
 	 * Attempts to close the passed zip file, and answers a boolean indicating
 	 * success.
-	 * 
+	 *
 	 * @param file
 	 *            The zip file to attempt to close
 	 * @param shell
@@ -130,11 +130,11 @@
 
 		return true;
 	}
-	
+
 	/**
 	 * Attempts to close the passed tar file, and answers a boolean indicating
 	 * success.
-	 * 
+	 *
 	 * @param file
 	 *            The tar file to attempt to close
 	 * @param shell
@@ -151,13 +151,13 @@
 					shell);
 			return false;
 		}
-		
+
 		return true;
 	}
 
 	/**
 	 * Display an error dialog with the specified message.
-	 * 
+	 *
 	 * @param message
 	 *            the error message
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/FileSystemExporter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/FileSystemExporter.java
index a09666e..ba459cb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/FileSystemExporter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/FileSystemExporter.java
@@ -30,11 +30,11 @@
  */
 public class FileSystemExporter {
 	private static final int DEFAULT_BUFFER_SIZE = 16*1024;
-	
+
     /**
      *  Creates the specified file system directory at <code>destinationPath</code>.
      *  This creates a new file system directory.
-     *  
+     *
      *  @param destinationPath location to which files will be written
      */
     public void createFolder(IPath destinationPath) {
@@ -43,10 +43,10 @@
 
     /**
      *  Writes the passed resource to the specified location recursively.
-     *  
+     *
      *  @param resource the resource to write out to the file system
      *  @param destinationPath location where the resource will be written
-     *  @exception CoreException if the operation fails 
+     *  @exception CoreException if the operation fails
      *  @exception IOException if an I/O error occurs when writing files
      */
     public void write(IResource resource, IPath destinationPath)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IDataTransferHelpContextIds.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IDataTransferHelpContextIds.java
index 8f8ea38..e56b5d4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IDataTransferHelpContextIds.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IDataTransferHelpContextIds.java
@@ -18,7 +18,7 @@
  * This interface contains constants only; it is not intended to be implemented
  * or extended.
  * </p>
- * 
+ *
  */
 public interface IDataTransferHelpContextIds {
     public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IFileExporter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IFileExporter.java
index 6518587..fc2d148 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IFileExporter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/IFileExporter.java
@@ -19,7 +19,7 @@
 /**
  * Interface for file exporters of different file formats.  Used by the
  * zip and tar.gz exporters.
- * 
+ *
  * @since 3.1
  */
 public interface IFileExporter {
@@ -27,24 +27,24 @@
 	/**
 	 * Do all required cleanup now that we are finished with the
      * currently-open file.
-     * 
+     *
 	 * @throws IOException
 	 */
 	public void finished() throws IOException;
-	
+
 	/**
 	 * Write the entry for the folder's name into the current archive.
-	 * 
+	 *
 	 * @param container the container to write
 	 * @param destinationPath the path that will be used in the archive
 	 * @throws IOException if an IO error occurs while writing the folder entry
 	 */
     public void write(IContainer container, String destinationPath)
     	throws IOException;
-	
+
 	/**
 	 * Write the passed resource to the current archive
-	 * 
+	 *
 	 * @param resource
 	 * @param destinationPath
 	 * @throws IOException
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ILeveledImportStructureProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ILeveledImportStructureProvider.java
index 03b9f75..975b02a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ILeveledImportStructureProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ILeveledImportStructureProvider.java
@@ -16,16 +16,16 @@
 import org.eclipse.ui.wizards.datatransfer.IImportStructureProvider;
 
 /**
- * Interface which can provide structure and content information for an archive 
- * element. Used by the import wizards to abstract the commonalities between 
+ * Interface which can provide structure and content information for an archive
+ * element. Used by the import wizards to abstract the commonalities between
  * importing from the a zip file and importing from a tar file.
- * 
+ *
  * @since 3.1
  */
 public interface ILeveledImportStructureProvider extends IImportStructureProvider {
 	/**
 	 * Returns the entry that this importer uses as the root sentinel.
-	 * 
+	 *
 	 * @return root entry of the archive file
 	 */
 	public abstract Object getRoot();
@@ -33,7 +33,7 @@
 	/**
 	 * Tells the provider to strip N number of directories from the path of any
 	 * path or file name returned by the IImportStructureProvider (Default=0).
-	 * 
+	 *
 	 * @param level
 	 *            The number of directories to strip
 	 */
@@ -42,14 +42,14 @@
 	/**
 	 * Returns the number of directories that this IImportStructureProvider is
 	 * stripping from the file name
-	 * 
+	 *
 	 * @return int Number of entries
 	 */
 	public abstract int getStrip();
-	
+
 	/**
 	 * Close the archive file that was used to create this leveled structure provider.
-	 * 
+	 *
 	 * @return <code>true</code> if the archive was closed successfully
 	 */
 	public boolean closeArchive();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarEntry.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarEntry.java
index 009151a..c0d57fa 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarEntry.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarEntry.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
  *******************************************************************************/
@@ -12,11 +12,11 @@
 
 /**
  * Representation of a file in a tar archive.
- * 
+ *
  * @since 3.1
  */
 public class TarEntry implements Cloneable
-{	
+{
 	private String name;
 	private long mode, time, size;
 	private int type;
@@ -31,11 +31,11 @@
 	 * Entry type for directories.
 	 */
 	public static final int DIRECTORY = '5';
-	
+
 	/**
 	 * Create a new TarEntry for a file of the given name at the
 	 * given position in the file.
-	 * 
+	 *
 	 * @param name filename
 	 * @param pos position in the file in bytes
 	 */
@@ -49,7 +49,7 @@
 
 	/**
 	 * Create a new TarEntry for a file of the given name.
-	 * 
+	 *
 	 * @param name filename
 	 */
 	public TarEntry(String name) {
@@ -59,7 +59,7 @@
 	/**
 	 * Returns the type of this file, one of FILE, LINK, SYM_LINK,
 	 * CHAR_DEVICE, BLOCK_DEVICE, DIRECTORY or FIFO.
-	 * 
+	 *
 	 * @return file type
 	 */
 	public int getFileType() {
@@ -68,7 +68,7 @@
 
 	/**
 	 * Returns the mode of the file in UNIX permissions format.
-	 * 
+	 *
 	 * @return file mode
 	 */
 	public long getMode() {
@@ -77,7 +77,7 @@
 
 	/**
 	 * Returns the name of the file.
-	 * 
+	 *
 	 * @return filename
 	 */
 	public String getName() {
@@ -86,7 +86,7 @@
 
 	/**
 	 * Returns the size of the file in bytes.
-	 * 
+	 *
 	 * @return filesize
 	 */
 	public long getSize() {
@@ -96,7 +96,7 @@
 	/**
 	 * Returns the modification time of the file in seconds since January
 	 * 1st 1970.
-	 * 
+	 *
 	 * @return time
 	 */
 	public long getTime() {
@@ -106,7 +106,7 @@
 	/**
 	 * Sets the type of the file, one of FILE, LINK, SYMLINK, CHAR_DEVICE,
 	 * BLOCK_DEVICE, or DIRECTORY.
-	 * 
+	 *
 	 * @param type
 	 */
 	public void setFileType(int type) {
@@ -115,7 +115,7 @@
 
 	/**
 	 * Sets the mode of the file in UNIX permissions format.
-	 * 
+	 *
 	 * @param mode
 	 */
 	public void setMode(long mode) {
@@ -124,7 +124,7 @@
 
 	/**
 	 * Sets the size of the file in bytes.
-	 * 
+	 *
 	 * @param size
 	 */
 	public void setSize(long size) {
@@ -134,7 +134,7 @@
 	/**
 	 * Sets the modification time of the file in seconds since January
 	 * 1st 1970.
-	 * 
+	 *
 	 * @param time
 	 */
 	public void setTime(long time) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarException.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarException.java
index 22054de..fca38c6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarException.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarException.java
@@ -25,7 +25,7 @@
     public TarException() {
     	super();
     }
-	
+
 	/**
      * Constructs a TarException with the specified detail string.
      *
@@ -34,7 +34,7 @@
     public TarException(String s) {
     	super(s);
     }
-	
+
     /**
      * Constructs a TarException with the specified detail string.
      *
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFile.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFile.java
index 254db4f..f0a6285 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFile.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFile.java
@@ -23,7 +23,7 @@
  * Reads a .tar or .tar.gz archive file, providing an index enumeration
  * and allows for accessing an InputStream for arbitrary files in the
  * archive.
- * 
+ *
  * @since 3.1
  */
 public class TarFile {
@@ -33,10 +33,10 @@
 	private TarInputStream entryStream;
 
 	private InputStream internalEntryStream;
-	
+
 	/**
 	 * Create a new TarFile for the given file.
-	 * 
+	 *
 	 * @param file
 	 * @throws TarException
 	 * @throws IOException
@@ -62,10 +62,10 @@
 		}
 		curEntry = entryEnumerationStream.getNextEntry();
 	}
-	
+
 	/**
 	 * Close the tar file input stream.
-	 * 
+	 *
 	 * @throws IOException if the file cannot be successfully closed
 	 */
 	public void close() throws IOException {
@@ -77,7 +77,7 @@
 
 	/**
 	 * Create a new TarFile for the given path name.
-	 * 
+	 *
 	 * @param filename
 	 * @throws TarException
 	 * @throws IOException
@@ -88,7 +88,7 @@
 
 	/**
 	 * Returns an enumeration cataloguing the tar archive.
-	 * 
+	 *
 	 * @return enumeration of all files in the archive
 	 */
 	public Enumeration entries() {
@@ -97,7 +97,7 @@
 			public boolean hasMoreElements() {
 				return (curEntry != null);
 			}
-			
+
 			@Override
 			public Object nextElement() {
 				TarEntry oldEntry = curEntry;
@@ -115,7 +115,7 @@
 
 	/**
 	 * Returns a new InputStream for the given file in the tar archive.
-	 * 
+	 *
 	 * @param entry
 	 * @return an input stream for the given file
 	 * @throws TarException
@@ -148,7 +148,7 @@
 
 	/**
 	 * Returns the path name of the file this archive represents.
-	 * 
+	 *
 	 * @return path
 	 */
 	public String getName() {
@@ -157,7 +157,7 @@
 
 	/* (non-Javadoc)
 	 * @see java.util.zip.ZipFile#finalize()
-	 * 
+	 *
 	 */
 	@Override
 	protected void finalize() throws Throwable {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFileExporter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFileExporter.java
index db3db55..dfc5a80 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFileExporter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarFileExporter.java
@@ -33,7 +33,7 @@
 public class TarFileExporter implements IFileExporter {
     private TarOutputStream outputStream;
     private GZIPOutputStream gzipOutputStream;
-    
+
 
     /**
      *	Create an instance of this class.
@@ -78,7 +78,7 @@
 		if (location == null) {
 			throw new FileNotFoundException(contents.getFullPath().toOSString());
 		}
-    	
+
     	InputStream contentStream = contents.getContents(false);
     	entry.setSize(EFS.getStore(location).fetchInfo().getLength());
     	outputStream.putNextEntry(entry);
@@ -94,7 +94,7 @@
 			}
         }
 
-    	outputStream.closeEntry();    	
+    	outputStream.closeEntry();
     }
 
     @Override
@@ -114,7 +114,7 @@
         newEntry.setFileType(TarEntry.DIRECTORY);
         outputStream.putNextEntry(newEntry);
     }
-    
+
     /**
      *  Write the passed resource to the current archive.
      *
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarInputStream.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarInputStream.java
index f502fb9..66975fc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarInputStream.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarInputStream.java
@@ -18,7 +18,7 @@
  * Input stream for reading files in ustar format (tar) compatible
  * with the specification in IEEE Std 1003.1-2001.  Also supports
  * long filenames encoded using the GNU @LongLink extension.
- * 
+ *
  * @since 3.1
  */
 public class TarInputStream extends FilterInputStream
@@ -32,7 +32,7 @@
 
 	/**
 	 * Creates a new tar input stream on the given input stream.
-	 * 
+	 *
 	 * @param in input stream
 	 * @throws TarException
 	 * @throws IOException
@@ -48,7 +48,7 @@
 	/**
 	 * Create a new tar input stream, skipping ahead to the given entry
 	 * in the file.
-	 * 
+	 *
 	 * @param in input stream
 	 * @param entry skips to this entry in the file
 	 * @throws TarException
@@ -62,7 +62,7 @@
 	/**
 	 *  The checksum of a tar file header is simply the sum of the bytes in
 	 *  the header.
-	 * 
+	 *
 	 * @param header
 	 * @return checksum
 	 */
@@ -76,7 +76,7 @@
 
 	/**
 	 * Skips ahead to the position of the given entry in the file.
-	 * 
+	 *
 	 * @param entry
 	 * @returns false if the entry has already been passed
 	 * @throws TarException
@@ -105,14 +105,14 @@
 
 	/**
 	 * Returns true if the header checksum is correct.
-	 * 
+	 *
 	 * @param header
 	 * @return true if this header has a valid checksum
 	 */
 	private boolean isValidTarHeader(byte[] header) {
 		long fileChecksum, calculatedChecksum;
 		int pos, i;
-		
+
 		pos = 148;
 		StringBuffer checksumString = new StringBuffer();
 		for(i = 0; i < 8; i++) {
@@ -149,7 +149,7 @@
 	/**
 	 * Returns the next entry in the tar file.  Does not handle
 	 * GNU @LongLink extensions.
-	 * 
+	 *
 	 * @return the next entry in the tar file
 	 * @throws TarException
 	 * @throws IOException
@@ -190,11 +190,11 @@
 			if(filepos > 0) {
 				return null;
 			}
-			
+
 			// Invalid stream.
 			throw new TarException("not in tar format"); //$NON-NLS-1$
 		}
-		
+
 		// Validate checksum.
 		if(!isValidTarHeader(header)) {
 			throw new TarException("not in tar format"); //$NON-NLS-1$
@@ -213,7 +213,7 @@
 			String prefix = new String(header, 345, pos - 345, "UTF8"); //$NON-NLS-1$
 			name = prefix + "/" + name; //$NON-NLS-1$
 		}
-		
+
 		TarEntry entry;
 		if(longLinkName != null) {
 			entry = new TarEntry(longLinkName, filepos);
@@ -224,7 +224,7 @@
 		if(header[156] != 0) {
 			entry.setFileType(header[156]);
 		}
-		
+
 		pos = 100;
 		StringBuffer mode = new StringBuffer();
 		for(i = 0; i < 8; i++) {
@@ -245,7 +245,7 @@
 		} catch(NumberFormatException nfe) {
 			throw new TarException(DataTransferMessages.TarImport_invalid_tar_format, nfe);
 		}
-		
+
 		pos = 100 + 24;
 		StringBuffer size = new StringBuffer();
 		for(i = 0; i < 12; i++) {
@@ -281,7 +281,7 @@
 	/**
 	 * Moves ahead to the next file in the tar archive and returns
 	 * a TarEntry object describing it.
-	 * 
+	 *
 	 * @return the next entry in the tar file
 	 * @throws TarException
 	 * @throws IOException
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarLeveledStructureProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarLeveledStructureProvider.java
index 77a9b2e..d031bcf 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarLeveledStructureProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarLeveledStructureProvider.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Red Hat, Inc - Was TarFileStructureProvider, performed changes from 
+ *     Red Hat, Inc - Was TarFileStructureProvider, performed changes from
  *     IImportStructureProvider to ILeveledImportStructureProvider
  *******************************************************************************/
 package org.eclipse.ui.internal.wizards.datatransfer;
@@ -28,7 +28,7 @@
 /**
  * This class provides information regarding the context structure and content
  * of specified tar file entry objects.
- * 
+ *
  * @since 3.1
  */
 public class TarLeveledStructureProvider implements
@@ -46,7 +46,7 @@
 	/**
 	 * Creates a <code>TarFileStructureProvider</code>, which will operate on
 	 * the passed tar file.
-	 * 
+	 *
 	 * @param sourceFile
 	 *            the source TarFile
 	 */
@@ -57,7 +57,7 @@
 	}
 
 	/**
-	 * Creates a new container tar entry with the specified name, iff it has 
+	 * Creates a new container tar entry with the specified name, iff it has
 	 * not already been created. If the parent of the given element does not
 	 * already exist it will be recursively created as well.
 	 * @param pathname The path representing the container
@@ -133,7 +133,7 @@
 
 	/**
 	 * Returns the resource attributes for this file.
-	 * 
+	 *
 	 * @param element
 	 * @return the attributes of the file
 	 */
@@ -167,7 +167,7 @@
 
 	/**
 	 * Returns the entry that this importer uses as the root sentinel.
-	 * 
+	 *
 	 * @return TarEntry entry
 	 */
 	@Override
@@ -177,7 +177,7 @@
 
 	/**
 	 * Returns the tar file that this provider provides structure for.
-	 * 
+	 *
 	 * @return TarFile file
 	 */
 	public TarFile getTarFile() {
@@ -199,20 +199,20 @@
 		}
 		return true;
 	}
-	
+
 	/**
 	 * Initializes this object's children table based on the contents of the
 	 * specified source file.
 	 */
 	protected void initialize() {
 		children = new HashMap(1000);
-		
+
 		children.put(root, new ArrayList());
 		Enumeration entries = tarFile.entries();
 		while (entries.hasMoreElements()) {
 			TarEntry entry = (TarEntry) entries.nextElement();
 			IPath path = new Path(entry.getName()).addTrailingSeparator();
-			
+
 			if (entry.getFileType() == TarEntry.DIRECTORY) {
 				createContainer(path);
 			} else
@@ -227,7 +227,7 @@
 			}
 		}
 	}
-	
+
 	/*
 	 * (non-Javadoc) Method declared on IImportStructureProvider
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarOutputStream.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarOutputStream.java
index 6fa0735..92c7626 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarOutputStream.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/TarOutputStream.java
@@ -21,14 +21,14 @@
  * @since 3.1
  */
 public class TarOutputStream extends FilterOutputStream {
-	
+
 	private int byteswritten = 0;
 	private int datapos = 0;
 	private long cursize = 0;
 
 	/**
 	 * Creates a new tar output stream.
-	 * 
+	 *
 	 * @param out the stream to write to
 	 */
 	public TarOutputStream(OutputStream out) {
@@ -59,7 +59,7 @@
 	/**
 	 * Close the current entry in the tar file.  Must be called
 	 * after each entry is completed.
-	 * 
+	 *
 	 * @throws IOException
 	 */
 	public void closeEntry() throws IOException {
@@ -74,7 +74,7 @@
 	/**
 	 *  The checksum of a tar file header is simply the sum of the bytes in
 	 *  the header.
-	 * 
+	 *
 	 * @param header
 	 * @return checksum
 	 */
@@ -88,7 +88,7 @@
 
 	/**
 	 * Adds an entry for a new file in the tar archive.
-	 * 
+	 *
 	 * @param e TarEntry describing the file
 	 * @throws IOException
 	 */
@@ -97,7 +97,7 @@
 		String filename = e.getName();
 		String prefix = null;
 		int pos, i;
-		
+
 		/* Split filename into name and prefix if necessary. */
 		byte[] filenameBytes = filename.getBytes("UTF8"); //$NON-NLS-1$
 		if (filenameBytes.length > 99) {
@@ -112,12 +112,12 @@
 				throw new IOException("filename too long"); //$NON-NLS-1$
 			}
 		}
-		
+
 		/* Filename. */
 		pos = 0;
 		System.arraycopy(filenameBytes, 0, header, 0, filenameBytes.length);
 		pos += 100;
-		
+
 		/* File mode. */
 		StringBuffer mode = new StringBuffer(Long.toOctalString(e.getMode()));
 		while(mode.length() < 7) {
@@ -127,35 +127,35 @@
 			header[pos + i] = (byte) mode.charAt(i);
 		}
 		pos += 8;
-		
+
 		/* UID. */
 		header[pos] = '0';
 		pos += 8;
-		
+
 		/* GID. */
 		header[pos] = '0';
 		pos += 8;
-		
+
 		/* Length of the file. */
 		String length = Long.toOctalString(e.getSize());
 		for(i = 0; i < length.length(); i++) {
 			header[pos + i] = (byte) length.charAt(i);
 		}
 		pos += 12;
-		
+
 		/* mtime */
 		String mtime = Long.toOctalString(e.getTime());
 		for(i = 0; i < mtime.length(); i++) {
 			header[pos + i] = (byte) mtime.charAt(i);
 		}
 		pos += 12;
-		
+
 		/* "Blank" out the checksum. */
 		for(i = 0; i < 8; i++) {
 			header[pos + i] = ' ';
 		}
 		pos += 8;
-		
+
 		/* Link flag. */
 		header[pos] = (byte) e.getFileType();
 		pos += 1;
@@ -170,22 +170,22 @@
 		}
 		header[pos + 5] = 0;
 		pos += 8;
-		
+
 		/* Username. */
 		String uname = "nobody"; //$NON-NLS-1$
 		for(i = 0; i < uname.length(); i++) {
 			header[pos + i] = (byte) uname.charAt(i);
 		}
 		pos += 32;
-		
-		
+
+
 		/* Group name. */
 		String gname = "nobody"; //$NON-NLS-1$
 		for(i = 0; i < gname.length(); i++) {
 			header[pos + i] = (byte) gname.charAt(i);
 		}
 		pos += 32;
-		
+
 		/* Device major. */
 		pos += 8;
 
@@ -210,7 +210,7 @@
 
 		cursize = 512;
 		write(header, 0, 512);
-		
+
 		cursize = e.getSize();
 	}
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceExportPage1.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceExportPage1.java
index 23172ad..c0a064e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceExportPage1.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceExportPage1.java
@@ -38,7 +38,7 @@
 
     // widgets
     protected Button compressContentsCheckbox;
-    
+
     private Button zipFormatButton;
     private Button targzFormatButton;
 
@@ -50,7 +50,7 @@
     private final static String STORE_COMPRESS_CONTENTS_ID = "WizardZipFileResourceExportPage1.STORE_COMPRESS_CONTENTS_ID"; //$NON-NLS-1$
 
     /**
-     *	Create an instance of this class. 
+     *	Create an instance of this class.
      *
      *	@param name java.lang.String
      */
@@ -87,13 +87,13 @@
 	protected void createOptionsGroupButtons(Group optionsGroup) {
     	Font font = optionsGroup.getFont();
     	optionsGroup.setLayout(new GridLayout(2, true));
-    	
+
     	Composite left = new Composite(optionsGroup, SWT.NONE);
     	left.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, true, false));
     	left.setLayout(new GridLayout(1, true));
 
         createFileFormatOptions(left, font);
-        
+
         // compress... checkbox
         compressContentsCheckbox = new Button(left, SWT.CHECK
                 | SWT.LEFT);
@@ -130,8 +130,8 @@
         targzFormatButton.setText(DataTransferMessages.ArchiveExport_saveInTarFormat);
         targzFormatButton.setSelection(false);
         targzFormatButton.setFont(font);
-    }    
-    
+    }
+
     /**
      * Returns a boolean indicating whether the directory portion of the
      * passed pathname is valid and available for use.
@@ -231,7 +231,7 @@
     @Override
 	public boolean finish() {
     	List resourcesToExport = getWhiteCheckedResources();
-    	
+
         if (!ensureTargetIsValid()) {
 			return false;
 		}
@@ -262,9 +262,9 @@
         String idealSuffix = getOutputSuffix();
         String destinationText = super.getDestinationValue();
 
-        // only append a suffix if the destination doesn't already have a . in 
-        // its last path segment.  
-        // Also prevent the user from selecting a directory.  Allowing this will 
+        // only append a suffix if the destination doesn't already have a . in
+        // its last path segment.
+        // Also prevent the user from selecting a directory.  Allowing this will
         // create a ".zip" file in the directory
         if (destinationText.length() != 0
                 && !destinationText.endsWith(File.separator)) {
@@ -387,7 +387,7 @@
 	protected String destinationEmptyMessage() {
         return DataTransferMessages.ArchiveExport_destinationEmpty;
     }
-    
+
     /**
      *	Answer a boolean indicating whether the receivers destination specification
      *	widgets currently all contain valid values.
@@ -408,7 +408,7 @@
     		zipFormatButton.setSelection(true);
     		targzFormatButton.setSelection(false);
     	}
-    	
+
     	return super.validateDestinationGroup();
     }
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceImportPage1.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceImportPage1.java
index fc55bd1..c5b0b78 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceImportPage1.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardArchiveFileResourceImportPage1.java
@@ -57,7 +57,7 @@
     private final static String STORE_OVERWRITE_EXISTING_RESOURCES_ID = "WizardZipFileResourceImportPage1.STORE_OVERWRITE_EXISTING_RESOURCES_ID"; //$NON-NLS-1$
 
     private final static String STORE_SELECTED_TYPES_ID = "WizardZipFileResourceImportPage1.STORE_SELECTED_TYPES_ID"; //$NON-NLS-1$
-	
+
 	private final String[] fileImportMask;
 
     /**
@@ -69,7 +69,7 @@
             IStructuredSelection selection) {
         this(aWorkbench, selection, null);
     }
-	
+
 	/**
      *	Creates an instance of this class
      * @param aWorkbench IWorkbench
@@ -79,10 +79,10 @@
     public WizardArchiveFileResourceImportPage1(IWorkbench aWorkbench,
             IStructuredSelection selection, String[] fileImportMask) {
         super("zipFileImportPage1", aWorkbench, selection); //$NON-NLS-1$
-		
+
         setTitle(DataTransferMessages.ArchiveExport_exportTitle);
         setDescription(DataTransferMessages.ArchiveImport_description);
-		
+
 		if(fileImportMask == null)
 			this.fileImportMask = FILE_IMPORT_MASK;
 		else
@@ -175,7 +175,7 @@
     	}
     	return ensureZipSourceIsValid();
     }
-    
+
     /**
      * The Finish button was pressed.  Try to do the required work now and answer
      * a boolean indicating success.  If <code>false</code> is returned then the
@@ -196,7 +196,7 @@
     /**
      * Closes the structure provider and sets
      * the field to <code>null</code>.
-     * 
+     *
      * @since 3.4
      */
 	private void disposeStructureProvider() {
@@ -382,11 +382,11 @@
     		ZipFile zipFile = getSpecifiedZipSourceFile();
     		importStructureProvider = new ZipLeveledStructureProvider(zipFile);
     	}
-    	
+
     	if (importStructureProvider == null) {
     		return false;
     	}
-    	
+
 		ImportOperation operation = new ImportOperation(getContainerFullPath(),
 				importStructureProvider.getRoot(), importStructureProvider, this,
 				fileSystemObjects);
@@ -394,7 +394,7 @@
 		operation.setContext(getShell());
 		if (!executeImportOperation(operation))
 			return false;
-		
+
 		ArchiveFileManipulations.closeStructureProvider(importStructureProvider, getShell());
 		return true;
     }
@@ -513,7 +513,7 @@
         	setErrorMessage(DataTransferMessages.FileImport_noneSelected);
         	return false;
         }
-        
+
         enableButtonGroup(true);
         setErrorMessage(null);
         return true;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceExportPage1.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceExportPage1.java
index 8f708d3..0d2654f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceExportPage1.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceExportPage1.java
@@ -72,7 +72,7 @@
     private static final String SELECT_DESTINATION_MESSAGE = DataTransferMessages.FileExport_selectDestinationMessage;
 
     private static final String SELECT_DESTINATION_TITLE = DataTransferMessages.FileExport_selectDestinationTitle;
- 
+
 
     /**
      *	Create an instance of this class
@@ -449,7 +449,7 @@
 				setMessage(
 					NLS.bind(DataTransferMessages.FileExport_damageWarning, threatenedContainer),
 					WARNING);
-			
+
 		} else {
             setErrorMessage(NLS.bind(DataTransferMessages.FileExport_conflictingContainer, conflictingContainer));
             giveFocusToDestination();
@@ -487,7 +487,7 @@
     /**
      * Returns the name of a container with a location that encompasses targetDirectory.
      * Returns null if there is no conflict.
-     * 
+     *
      * @param targetDirectory the path of the directory to check.
      * @return the conflicting container name or <code>null</code>
      */
@@ -498,7 +498,7 @@
         // cannot export into workspace root
         if(testPath.equals(rootPath))
         	return rootPath.lastSegment();
-        
+
         //Are they the same?
         if(testPath.matchingFirstSegments(rootPath) == rootPath.segmentCount()){
         	String firstSegment = testPath.removeFirstSegments(rootPath.segmentCount()).segment(0);
@@ -509,11 +509,11 @@
         return null;
 
     }
-    
+
     /**
 	 * Returns the name of a {@link IProject} with a location that includes
 	 * targetDirectory. Returns null if there is no such {@link IProject}.
-	 * 
+	 *
 	 * @param targetDirectory
 	 *            the path of the directory to check.
 	 * @return the overlapping project name or <code>null</code>
@@ -527,6 +527,6 @@
     	}
     	return null;
     }
-    
+
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
index 8979683..bdf0fbb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardFileSystemResourceImportPage1.java
@@ -89,13 +89,13 @@
     protected Button createVirtualFoldersButton;
 
     protected Button createLinksInWorkspaceButton;
-    
+
 	protected Button advancedButton;
 
     protected RelativePathVariableGroup relativePathVariableGroup;
-    
+
     protected String pathVariable;
-    
+
     protected Button sourceBrowseButton;
 
     protected Button selectTypesButton;
@@ -106,7 +106,7 @@
 
     //A boolean to indicate if the user has typed anything
     private boolean entryChanged = false;
-    
+
     private FileSystemStructureProvider fileSystemStructureProvider = new FileSystemStructureProvider();
 
     // dialog store id constants
@@ -338,7 +338,7 @@
 		createLinksInWorkspaceButton.setFont(parent.getFont());
         createLinksInWorkspaceButton.setText(DataTransferMessages.FileImport_createLinksInWorkspace);
         createLinksInWorkspaceButton.setSelection(false);
-        
+
         createLinksInWorkspaceButton.addSelectionListener(new SelectionAdapter() {
         	@Override
 			public void widgetSelected(SelectionEvent e) {
@@ -349,7 +349,7 @@
 		Button tmp= new Button(linkedResourceComposite, SWT.CHECK);
         int indent = tmp.computeSize(SWT.DEFAULT, SWT.DEFAULT).x;
         tmp.dispose();
-        
+
         // create virtual folders check
 		createVirtualFoldersButton= new Button(linkedResourceComposite, SWT.CHECK);
 		createVirtualFoldersButton.setFont(parent.getFont());
@@ -405,8 +405,8 @@
         }, DataTransferMessages.FileImport_importElementsAs
         );
         relativePathVariableGroup.createContents(relativeGroup);
-        
-        
+
+
         updateWidgetEnablements();
 		relativePathVariableGroup.setSelection(true);
 
@@ -416,7 +416,7 @@
 
 	/**
 	 * Shows/hides the advanced option widgets.
-	 * 
+	 *
 	 * @since 3.6
 	 */
 	private void handleAdvancedButtonSelect() {
@@ -850,16 +850,16 @@
      */
     protected boolean importResources(List fileSystemObjects) {
         ImportOperation operation;
-        
+
         boolean shouldImportTopLevelFoldersRecursively = selectionGroup.isEveryItemChecked() &&
         											!createTopLevelFolderCheckbox.getSelection() &&
         											(createLinksInWorkspaceButton != null && createLinksInWorkspaceButton.getSelection()) &&
         											(createVirtualFoldersButton != null && createVirtualFoldersButton.getSelection() == false);
-		
+
 		File sourceDirectory = getSourceDirectory();
 		if (createTopLevelFolderCheckbox.getSelection() && sourceDirectory.getParentFile() != null)
         	sourceDirectory = sourceDirectory.getParentFile();
-        
+
         if (shouldImportTopLevelFoldersRecursively)
             operation = new ImportOperation(getContainerFullPath(),
                     sourceDirectory, fileSystemStructureProvider,
@@ -982,15 +982,15 @@
 	            boolean createVirtualFolders = settings
 	            		.getBoolean(STORE_CREATE_VIRTUAL_FOLDERS_ID);
 	            createVirtualFoldersButton.setSelection(createVirtualFolders);
-	
+
 	            boolean createLinkedResources = settings
 	    				.getBoolean(STORE_CREATE_LINKS_IN_WORKSPACE_ID);
 	            createLinksInWorkspaceButton.setSelection(createLinkedResources);
-	
+
 	            boolean pathVariableSelected = settings
 						.getBoolean(STORE_PATH_VARIABLE_SELECTED_ID);
 	            relativePathVariableGroup.setSelection(pathVariableSelected);
-	
+
 	            pathVariable = settings.get(STORE_PATH_VARIABLE_NAME_ID);
 	            if (pathVariable != null)
 	            	relativePathVariableGroup.selectVariable(pathVariable);
@@ -1026,13 +1026,13 @@
             if (createVirtualFoldersButton != null) {
 	            settings.put(STORE_CREATE_VIRTUAL_FOLDERS_ID,
 	            		createVirtualFoldersButton.getSelection());
-	
+
 	            settings.put(STORE_CREATE_LINKS_IN_WORKSPACE_ID,
 	            		createLinksInWorkspaceButton.getSelection());
-	
+
 	            settings.put(STORE_PATH_VARIABLE_SELECTED_ID,
 	            		relativePathVariableGroup.getSelection());
-	
+
 	            settings.put(STORE_PATH_VARIABLE_NAME_ID,
 	            		pathVariable);
             }
@@ -1232,7 +1232,7 @@
 	    	}
 			relativePathVariableGroup.setEnabled(createLinksInWorkspaceButton.getSelection());
 			createVirtualFoldersButton.setEnabled(createLinksInWorkspaceButton.getSelection());
-	
+
 			if (!selectionGroup.isEveryItemChecked() ||
 				(createTopLevelFolderCheckbox.getSelection())) {
 	        	createVirtualFoldersButton.setSelection(true);
@@ -1277,10 +1277,10 @@
 	        	setMessage(null);
 	        	setErrorMessage(DataTransferMessages.FileImport_haveToCreateLinksUnderAVirtualFolder);
 				return false;
-        		
+
         	}
 		}
-        
+
 		enableButtonGroup(true);
 		setErrorMessage(null);
         return true;
@@ -1290,7 +1290,7 @@
      * Returns whether the source location conflicts
      * with the destination resource. This will occur if
      * the source is already under the destination.
-     * 
+     *
      * @param sourcePath the path to check
      * @return <code>true</code> if there is a conflict, <code>false</code> if not
      */
@@ -1301,7 +1301,7 @@
         if (container == null) {
 			return false;
 		}
-        
+
         IPath destinationLocation = getSpecifiedContainer().getLocation();
         if (destinationLocation != null) {
             return destinationLocation.isPrefixOf(sourcePath);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java
index 9191a0c..d6af006 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/WizardProjectsImportPage.java
@@ -16,7 +16,7 @@
  *     		- Bug 210568 [Import/Export] Refresh button does not update list of projects
  *     Matt Hurne (matt@thehurnes.com)
  *     		- Bug 144610 [Import/Export] Import existing projects does not search subdirectories of found projects
- *     Christian Georgi (christian.georgi@sap.com) 
+ *     Christian Georgi (christian.georgi@sap.com)
  *     		- Bug 400399 [Import/Export] Project import wizard does not remember selected folder or archive
  *     Bob Meincke (bob.meincke@gmx.de)
  *      	- Bug 394900 - [Import/Export] Import existing projects broken by mal-formed .project file
@@ -112,17 +112,17 @@
 
 	/**
 	 * The import structure provider.
-	 * 
+	 *
 	 * @since 3.4
 	 */
 	private ILeveledImportStructureProvider structureProvider;
-	
+
 	/**
 	 * @since 3.5
 	 *
 	 */
 	private final class ProjectLabelProvider extends LabelProvider implements IColorProvider{
-		
+
 		@Override
 		public String getText(Object element) {
 			return ((ProjectRecord) element).getProjectLabel();
@@ -145,7 +145,7 @@
 
 	/**
 	 * Class declared public only for test suite.
-	 * 
+	 *
 	 */
 	public class ProjectRecord {
 		File projectSystemFile;
@@ -157,7 +157,7 @@
 		Object parent;
 
 		int level;
-		
+
 		boolean hasConflicts;
 
 		boolean isInvalid = false;
@@ -166,7 +166,7 @@
 
 		/**
 		 * Create a record for a project based on the info in the file.
-		 * 
+		 *
 		 * @param file
 		 */
 		ProjectRecord(File file) {
@@ -248,7 +248,7 @@
 		/**
 		 * Returns whether the given project description file path is in the
 		 * default location for a project
-		 * 
+		 *
 		 * @param path
 		 * 		The path to examine
 		 * @return Whether the given path is the default location for a project
@@ -265,7 +265,7 @@
 
 		/**
 		 * Get the name of the project
-		 * 
+		 *
 		 * @return String
 		 */
 		public String getProjectName() {
@@ -284,7 +284,7 @@
 		/**
 		 * Gets the label to be used when rendering this project record in the
 		 * UI.
-		 * 
+		 *
 		 * @return String the label
 		 * @since 3.4
 		 */
@@ -297,7 +297,7 @@
 					DataTransferMessages.WizardProjectsImportPage_projectLabel,
 					projectName, path);
 		}
-		
+
 		/**
 		 * @return Returns the hasConflicts.
 		 */
@@ -324,7 +324,7 @@
     private final static String STORE_ARCHIVES = "WizardProjectsImportPage.STORE_ARCHIVES";//$NON-NLS-1$
 
 	private final static String STORE_NESTED_PROJECTS = "WizardProjectsImportPage.STORE_NESTED_PROJECTS"; //$NON-NLS-1$
-	
+
 	private final static String STORE_COPY_PROJECT_ID = "WizardProjectsImportPage.STORE_COPY_PROJECT_ID"; //$NON-NLS-1$
 
 	private final static String STORE_ARCHIVE_SELECTED = "WizardProjectsImportPage.STORE_ARCHIVE_SELECTED"; //$NON-NLS-1$
@@ -334,15 +334,15 @@
 	private CheckboxTreeViewer projectsList;
 
 	private Button nestedProjectsCheckbox;
-	
+
 	private boolean nestedProjects = false;
-	
+
 	private boolean lastNestedProjects = false;
-	
+
 	private Button copyCheckbox;
 
 	private boolean copyFiles = false;
-	
+
 	private boolean lastCopyFiles = false;
 
 	private ProjectRecord[] selectedProjects = new ProjectRecord[0];
@@ -373,7 +373,7 @@
 
 	// The initial path to set
 	private String initialPath;
-	
+
 	// The last selected path to minimize searches
 	private String lastPath;
 	// The last time that the file or folder at the selected path was modified
@@ -390,7 +390,7 @@
 
 	/**
 	 * Creates a new project creation wizard page.
-	 * 
+	 *
 	 */
 	public WizardProjectsImportPage() {
 		this("wizardExternalProjectsPage", null, null); //$NON-NLS-1$
@@ -398,16 +398,16 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param pageName
 	 */
 	public WizardProjectsImportPage(String pageName) {
 		this(pageName,null, null);
 	}
-			
+
 	/**
 	 * More (many more) parameters.
-	 * 
+	 *
 	 * @param pageName
 	 * @param initialPath
 	 * @param currentSelection
@@ -470,7 +470,7 @@
 				}
 			}
 		});
-		
+
 		copyCheckbox = new Button(optionsGroup, SWT.CHECK);
 		copyCheckbox
 				.setText(DataTransferMessages.WizardProjectsImportPage_CopyProjectsIntoWorkspace);
@@ -505,7 +505,7 @@
 
 	/**
 	 * Create the checkbox list for the found projects.
-	 * 
+	 *
 	 * @param workArea
 	 */
 	private void createProjectsList(Composite workArea) {
@@ -583,7 +583,7 @@
 
 	/**
 	 * Create the selection buttons in the listComposite.
-	 * 
+	 *
 	 * @param listComposite
 	 */
 	private void createSelectionButtons(Composite listComposite) {
@@ -645,7 +645,7 @@
 
 	/**
 	 * Create the area where you select the root directory for the projects.
-	 * 
+	 *
 	 * @param workArea
 	 * 		Composite
 	 */
@@ -671,7 +671,7 @@
 		GridData directoryPathData = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
 		directoryPathData.widthHint = new PixelConverter(directoryPathField).convertWidthInCharsToPixels(25);
 		directoryPathField.setLayoutData(directoryPathData);
-		
+
 		// browse button
 		browseDirectoriesButton = new Button(projectGroup, SWT.PUSH);
 		browseDirectoriesButton
@@ -823,7 +823,7 @@
 	/**
 	 * Update the list of projects based on path. Method declared public only
 	 * for test suite.
-	 * 
+	 *
 	 * @param path
 	 */
 	public void updateProjectsList(final String path) {
@@ -864,7 +864,7 @@
 
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see
 				 * org.eclipse.jface.operation.IRunnableWithProgress#run(org
 				 * .eclipse.core.runtime.IProgressMonitor)
@@ -975,7 +975,7 @@
 				projectsList.setChecked(project, true);
 			}
 		}
-		
+
 		if (displayConflictWarning && displayInvalidWarning) {
 			setMessage(DataTransferMessages.WizardProjectsImportPage_projectsInWorkspaceAndInvalid, WARNING);
 		} else if (displayConflictWarning) {
@@ -1037,7 +1037,7 @@
 
 	/**
 	 * Collect the list of .project files that are under directory into files.
-	 * 
+	 *
 	 * @param files
 	 * @param directory
 	 * @param directoriesVisited
@@ -1111,7 +1111,7 @@
 
 	/**
 	 * Collect the list of .project files that are under directory into files.
-	 * 
+	 *
 	 * @param files
 	 * @param monitor
 	 * 		The monitor to report to
@@ -1215,13 +1215,13 @@
 
 	/**
 	 * Create the selected projects
-	 * 
+	 *
 	 * @return boolean <code>true</code> if all project creations were
 	 * 	successful.
 	 */
 	public boolean createProjects() {
 		saveWidgetValues();
-		
+
 		final Object[] selected = projectsList.getCheckedElements();
 		createdProjects = new ArrayList();
 		WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
@@ -1266,14 +1266,14 @@
 
 		// Adds the projects to the working sets
 		addToWorkingSets();
-		
+
 		return true;
 	}
 
 	List<IProject> createdProjects;
-	
+
 	private void addToWorkingSets() {
-		
+
 		IWorkingSet[] selectedWorkingSets = workingSetGroup.getSelectedWorkingSets();
 		if(selectedWorkingSets == null || selectedWorkingSets.length == 0)
 		 {
@@ -1295,7 +1295,7 @@
 
 	/**
 	 * Create the project described in record. If it is successful return true.
-	 * 
+	 *
 	 * @param record
 	 * @return boolean <code>true</code> if successful
 	 * @throws InterruptedException
@@ -1353,7 +1353,7 @@
 				if(!result.isOK()) {
 					throw new InvocationTargetException(new CoreException(result));
 				}
-				
+
 				importSource = new File(locationURI);
 				IProjectDescription desc = workspace
 						.newProjectDescription(projectName);
@@ -1407,7 +1407,7 @@
 
 	/**
 	 * Method used for test suite.
-	 * 
+	 *
 	 * @return Button the Import from Directory RadioButton
 	 */
 	public Button getProjectFromDirectoryRadio() {
@@ -1416,7 +1416,7 @@
 
 	/**
 	 * Method used for test suite.
-	 * 
+	 *
 	 * @return CheckboxTreeViewer the viewer containing all the projects found
 	 */
 	public CheckboxTreeViewer getProjectsList() {
@@ -1425,7 +1425,7 @@
 
 	/**
 	 * Retrieve all the projects in the current workspace.
-	 * 
+	 *
 	 * @return IProject[] array of IProject in the current workspace
 	 */
 	private IProject[] getProjectsInWorkspace() {
@@ -1441,9 +1441,9 @@
 	 * source workspace or archive, selected by the user. If a project with the
 	 * same name exists in both the source workspace and the current workspace,
 	 * then the hasConflicts flag would be set on that project record.
-	 * 
+	 *
 	 * Method declared public for test suite.
-	 * 
+	 *
 	 * @return ProjectRecord[] array of projects that can be imported into the
 	 * 	workspace
 	 */
@@ -1461,7 +1461,7 @@
 
 	/**
 	 * Determine if there is a directory with the project name in the workspace path.
-	 * 
+	 *
 	 * @param projectName the name of the project
 	 * @return true if there is a directory with the same name of the imported project
 	 */
@@ -1474,7 +1474,7 @@
 
 	/**
 	 * Determine if the project with the given name is in the current workspace.
-	 * 
+	 *
 	 * @param projectName
 	 * 		String the project name to check
 	 * @return boolean true if the project with the given name is in this
@@ -1497,12 +1497,12 @@
 	 * Use the dialog store to restore widget values to the values that they
 	 * held last time this wizard was used to completion, or alternatively,
 	 * if an initial path is specified, use it to select values.
-	 * 
+	 *
 	 * Method declared public only for use of tests.
 	 */
 	@Override
 	public void restoreWidgetValues() {
-				
+
 		// First, check to see if we have resore settings, and
 		// take care of the checkbox
 		IDialogSettings settings = getDialogSettings();
@@ -1514,17 +1514,17 @@
 			nestedProjects = settings.getBoolean(STORE_NESTED_PROJECTS);
 			nestedProjectsCheckbox.setSelection(nestedProjects);
 			lastNestedProjects = nestedProjects;
-			
+
 			// checkbox
 			copyFiles = settings.getBoolean(STORE_COPY_PROJECT_ID);
 			copyCheckbox.setSelection(copyFiles);
 			lastCopyFiles = copyFiles;
 		}
-				
-		// Second, check to see if we don't have an initial path, 
+
+		// Second, check to see if we don't have an initial path,
 		// and if we do have restore settings.  If so, set the
 		// radio selection properly to restore settings
-		
+
 		if (initialPath==null && settings!=null)
 		{
 			// radio selection
@@ -1537,7 +1537,7 @@
 			} else {
 				directoryRadioSelected();
 			}
-		}	
+		}
 		// Third, if we do have an initial path, set the proper
 		// path and radio buttons to the initial value. Move
 		// cursor to the end of the path so user can see the
@@ -1574,7 +1574,7 @@
 	/**
 	 * Since Finish was pressed, write widget values to the dialog store so that
 	 * they will persist into the next invocation of this wizard page.
-	 * 
+	 *
 	 * Method declared public only for use of tests.
 	 */
 	@Override
@@ -1585,7 +1585,7 @@
             saveInHistory(settings, STORE_ARCHIVES, archivePathField.getText());
 
             settings.put(STORE_NESTED_PROJECTS, nestedProjectsCheckbox.getSelection());
-			
+
 			settings.put(STORE_COPY_PROJECT_ID, copyCheckbox.getSelection());
 
 			settings.put(STORE_ARCHIVE_SELECTED, projectFromArchiveRadio
@@ -1604,16 +1604,16 @@
 
 	/**
 	 * Method used for test suite.
-	 * 
+	 *
 	 * @return Button copy checkbox
 	 */
 	public Button getCopyCheckbox() {
 		return copyCheckbox;
 	}
-	
+
 	/**
 	 * Method used for test suite.
-	 * 
+	 *
 	 * @return Button nested projects checkbox
 	 */
 	public Button getNestedProjectsCheckbox() {
@@ -1628,5 +1628,5 @@
 	protected boolean allowNewContainerName() {
 		return true;
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipFileExporter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipFileExporter.java
index 391bd9c..3542c4b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipFileExporter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipFileExporter.java
@@ -91,7 +91,7 @@
         long localTimeStamp = contents.getLocalTimeStamp();
         if(localTimeStamp != IResource.NULL_STAMP)
         	entry.setTime(localTimeStamp);
-        
+
         outputStream.putNextEntry(entry);
     	InputStream contentStream = contents.getContents(false);
         try {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipLeveledStructureProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipLeveledStructureProvider.java
index 464d13c..a981082 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipLeveledStructureProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/datatransfer/ZipLeveledStructureProvider.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Red Hat, Inc - Was ZipFileStructureProvider, performed changes from 
+ *     Red Hat, Inc - Was ZipFileStructureProvider, performed changes from
  *     IImportStructureProvider to ILeveledImportStructureProvider
  *******************************************************************************/
 package org.eclipse.ui.internal.wizards.datatransfer;
@@ -29,7 +29,7 @@
 /**
  * This class provides information regarding the context structure and content
  * of specified zip file entry objects.
- * 
+ *
  * @since 3.1
  */
 public class ZipLeveledStructureProvider implements
@@ -47,7 +47,7 @@
 	/**
 	 * Creates a <code>ZipFileStructureProvider</code>, which will operate on
 	 * the passed zip file.
-	 * 
+	 *
 	 * @param sourceFile
 	 *            The source file to create the ZipLeveledStructureProvider
 	 *            around
@@ -59,7 +59,7 @@
 	}
 
 	/**
-	 * Creates a new container zip entry with the specified name, iff it has 
+	 * Creates a new container zip entry with the specified name, iff it has
 	 * not already been created. If the parent of the given element does not
 	 * already exist it will be recursively created as well.
 	 * @param pathname The path representing the container
@@ -176,7 +176,7 @@
 
 	/**
 	 * Returns the entry that this importer uses as the root sentinel.
-	 * 
+	 *
 	 * @return java.util.zip.ZipEntry
 	 */
 	@Override
@@ -186,7 +186,7 @@
 
 	/**
 	 * Returns the zip file that this provider provides structure for.
-	 * 
+	 *
 	 * @return The zip file
 	 */
 	public ZipFile getZipFile() {
@@ -209,7 +209,7 @@
 		}
 		return true;
 	}
-	
+
 	/**
 	 * Initializes this object's children table based on the contents of the
 	 * specified source file.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/newresource/ResourceMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/newresource/ResourceMessages.java
index b6adf65..26502af 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/newresource/ResourceMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/internal/wizards/newresource/ResourceMessages.java
@@ -14,7 +14,7 @@
 
 public class ResourceMessages extends NLS {
 	private static final String BUNDLE_NAME = "org.eclipse.ui.internal.wizards.newresource.messages";//$NON-NLS-1$
-	
+
 	// ==============================================================================
 	// New Resource Wizards
 	// ==============================================================================
@@ -41,7 +41,7 @@
 	 */
 	public static String NewProject_perspSwitchMessage;
 	/**
-	 * Combines a perspective name and description with text for introducing 
+	 * Combines a perspective name and description with text for introducing
 	 * a perspective switch
 	 */
 	public static String NewProject_perspSwitchMessageWithDesc;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java
index 37c5fde..982c2a3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkAction.java
@@ -41,7 +41,7 @@
     public BookmarkNavigator getView() {
         return view;
     }
-    
+
 	/**
 	 * Execute the specified undoable operation
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkContentProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkContentProvider.java
index 7a572e6..acd7f77 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkContentProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkContentProvider.java
@@ -159,7 +159,7 @@
 	public void resourceChanged(final IResourceChangeEvent event) {
 
         // gather all marker changes from the delta.
-        // be sure to do this in the calling thread, 
+        // be sure to do this in the calling thread,
         // as the delta is destroyed when this method returns
         final List additions = new ArrayList();
         final List removals = new ArrayList();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkLabelProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkLabelProvider.java
index aa87c4b..038e136 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkLabelProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkLabelProvider.java
@@ -88,7 +88,7 @@
             return NLS.bind(BookmarkMessages.LineIndicator_text, String.valueOf(line));
         }
         }
-        return ""; //$NON-NLS-1$ 
+        return ""; //$NON-NLS-1$
     }
 
     @Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkMessages.java
index e96a939..1c3b81c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkMessages.java
@@ -26,7 +26,7 @@
 
     /**
      * Returns the formatted message for the given key in
-     * the resource bundle. 
+     * the resource bundle.
      *
      * @param key the resource name
      * @param args the message arguments
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkNavigator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkNavigator.java
index 2027a5f..41de06a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkNavigator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkNavigator.java
@@ -156,7 +156,7 @@
     private static final String TAG_VERTICAL_POSITION = "verticalPosition";//$NON-NLS-1$
 
     private static final String TAG_HORIZONTAL_POSITION = "horizontalPosition";//$NON-NLS-1$
-	
+
     class SortByAction extends Action {
 
         private int column;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkPropertiesDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkPropertiesDialog.java
index 53b421c..cedb0f0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkPropertiesDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/BookmarkPropertiesDialog.java
@@ -22,8 +22,8 @@
 /**
  * Shows the properties of a new or existing bookmark
  * This class was made public in 3.3.
- * 
- * @since 3.3 
+ *
+ * @since 3.3
  */
 public class BookmarkPropertiesDialog extends DialogMarkerProperties {
 
@@ -31,10 +31,10 @@
 
     /**
      * Creates the dialog.  By default this dialog creates a new bookmark.
-     * To set the resource and initial attributes for the new bookmark, 
+     * To set the resource and initial attributes for the new bookmark,
      * use <code>setResource</code> and <code>setInitialAttributes</code>.
      * To show or modify an existing bookmark, use <code>setMarker</code>.
-     * 
+     *
      * @param parentShell the parent shell
      */
     public BookmarkPropertiesDialog(Shell parentShell) {
@@ -43,10 +43,10 @@
 
     /**
      * Creates the dialog.  By default this dialog creates a new bookmark.
-     * To set the resource and initial attributes for the new bookmark, 
+     * To set the resource and initial attributes for the new bookmark,
      * use <code>setResource</code> and <code>setInitialAttributes</code>.
      * To show or modify an existing bookmark, use <code>setMarker</code>.
-     * 
+     *
      * @param parentShell the parent shell
      * @param title the title for the dialog
      */
@@ -54,10 +54,10 @@
         super(parentShell, title);
     	setType(IMarker.BOOKMARK);
     }
-    
+
     /**
      * Sets the marker to show or modify.
-     * 
+     *
      * @param marker the marker, or <code>null</code> to create a new marker
      */
     @Override
@@ -70,7 +70,7 @@
      * Returns the marker being created or modified.
      * For a new marker, this returns <code>null</code> until
      * the dialog returns, but is non-null after.
-     * 
+     *
      * @return the marker
      */
     @Override
@@ -82,7 +82,7 @@
     /**
      * Sets the resource to use when creating a new bookmark.
      * If not set, the new bookmark is created on the workspace root.
-     * 
+     *
      * @param resource the resource
      */
     @Override
@@ -95,7 +95,7 @@
      * Returns the resource to use when creating a new bookmark,
      * or <code>null</code> if none has been set.
      * If not set, the new bookmark is created on the workspace root.
-     * 
+     *
      * @return the resource
      */
     @Override
@@ -107,7 +107,7 @@
     /**
      * Sets initial attributes to use when creating a new bookmark.
      * If not set, the new bookmark is created with default attributes.
-     * 
+     *
      * @param initialAttributes the initial attributes
      */
     @Override
@@ -120,7 +120,7 @@
      * Returns the initial attributes to use when creating a new bookmark,
      * or <code>null</code> if not set.
      * If not set, the new bookmark is created with default attributes.
-     * 
+     *
      * @return the initial attributes
      */
     @Override
@@ -128,25 +128,25 @@
     	// Method is overridden because API is being inherited from an internal class.
         return super.getInitialAttributes();
     }
-    
+
 	/* (non-Javadoc)
      * @see org.eclipse.ui.views.markers.internal.DialogMarkerProperties.getModifyOperationTitle()
-     * 
+     *
      * @since 3.3
      */
 	@Override
 	protected String getModifyOperationTitle() {
 		return BookmarkMessages.ModifyBookmark_undoText;
 	}
-	
+
 	/* (non-Javadoc)
      * @see org.eclipse.ui.views.markers.internal.DialogMarkerProperties.getCreateOperationTitle()
-     * 
+     *
      * @since 3.3
      */
 	@Override
 	protected String getCreateOperationTitle() {
 		return BookmarkMessages.CreateBookmark_undoText;
-		
+
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/CopyBookmarkAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/CopyBookmarkAction.java
index d83f268..55ce22d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/CopyBookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/CopyBookmarkAction.java
@@ -33,7 +33,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param bookmarkNavigator the view
      */
     public CopyBookmarkAction(BookmarkNavigator bookmarkNavigator) {
@@ -63,7 +63,7 @@
         setClipboard(markers, createBookmarkReport(markers));
     }
 
-    /** 
+    /**
      * Updates enablement based on the current selection
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/EditBookmarkAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/EditBookmarkAction.java
index 9cf7bb7..206eb17 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/EditBookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/EditBookmarkAction.java
@@ -40,8 +40,8 @@
     }
 
     /**
-     * Sets marker to the current selection if the selection is an instance of 
-     * <code>org.eclipse.core.resources.IMarker<code> and the selected marker's 
+     * Sets marker to the current selection if the selection is an instance of
+     * <code>org.eclipse.core.resources.IMarker<code> and the selected marker's
      * resource is an instance of <code>org.eclipse.core.resources.IFile<code>.
      * Otherwise sets marker to null.
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/IBookmarkHelpContextIds.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/IBookmarkHelpContextIds.java
index af1328c..181decd 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/IBookmarkHelpContextIds.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/IBookmarkHelpContextIds.java
@@ -19,7 +19,7 @@
  * This interface contains constants only; it is not intended to be implemented
  * or extended.
  * </p>
- * 
+ *
  */
 interface IBookmarkHelpContextIds {
     public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/OpenBookmarkAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/OpenBookmarkAction.java
index 912dfdf..91c95a7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/OpenBookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/OpenBookmarkAction.java
@@ -33,7 +33,7 @@
 
     /**
      * Create a new instance of this class.
-     * 
+     *
      * @param view the view
      */
     public OpenBookmarkAction(BookmarkNavigator view) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/PasteBookmarkAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/PasteBookmarkAction.java
index 504b46b..71db9ef 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/PasteBookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/PasteBookmarkAction.java
@@ -37,7 +37,7 @@
 
     /**
      * The constructor.
-     * 
+     *
      * @param view the view
      */
     public PasteBookmarkAction(BookmarkNavigator view) {
@@ -63,7 +63,7 @@
 		}
         final ArrayList newMarkerAttributes = new ArrayList();
         final ArrayList newMarkerResources = new ArrayList();
-        try {   
+        try {
             ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
                 @Override
 				public void run(IProgressMonitor monitor) throws CoreException {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/RemoveBookmarkAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/RemoveBookmarkAction.java
index 943cebc..97707f4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/RemoveBookmarkAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/RemoveBookmarkAction.java
@@ -28,7 +28,7 @@
 
     /**
      * Create a new instance of this class.
-     * 
+     *
      * @param view the view
      */
     public RemoveBookmarkAction(BookmarkNavigator view) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/SelectAllAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/SelectAllAction.java
index fda6deb..92a86c0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/SelectAllAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/bookmarkexplorer/SelectAllAction.java
@@ -24,7 +24,7 @@
 
     /**
      * Create a new instance of this class.
-     * 
+     *
      * @param view the view
      */
     public SelectAllAction(BookmarkNavigator view) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/BackAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/BackAction.java
index af3cede..d8539ba 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/BackAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/BackAction.java
@@ -22,7 +22,7 @@
 
     /**
      * Constructs a new action for the specified frame list.
-     * 
+     *
      * @param frameList the frame list
      */
     public BackAction(FrameList frameList) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/ForwardAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/ForwardAction.java
index f7753be..ec0e6b9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/ForwardAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/ForwardAction.java
@@ -22,7 +22,7 @@
 
     /**
      * Constructs a new action for the specified frame list.
-     * 
+     *
      * @param frameList the frame list
      */
     public ForwardAction(FrameList frameList) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/Frame.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/Frame.java
index 380b74f..a57cebe 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/Frame.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/Frame.java
@@ -26,7 +26,7 @@
 
     /**
      * Constructs a new frame. <p>
-     * 
+     *
      * This implementation does nothing.
      */
     public Frame() {
@@ -35,7 +35,7 @@
     /**
      * Returns the index of the frame in the frame list.
      * Only valid once the frame has been added to the frame list.
-     * 
+     *
      * @return the index of the frame in the frame list.
      */
     public int getIndex() {
@@ -53,7 +53,7 @@
 
     /**
      * Returns the frame list.
-     * 
+     *
      * @return the frame list
      */
     public FrameList getParent() {
@@ -64,7 +64,7 @@
      * Returns the tool tip text to show for the frame.
      * This can form part of the tool tip for actions like the back and forward
      * actions.
-     * 
+     *
      * @return the tool tip text to show for the frame
      */
     public String getToolTipText() {
@@ -74,7 +74,7 @@
     /**
      * Sets the index of the frame in the frame list.
      * Should only be called by the frame list.
-     * 
+     *
      * @param index the index of the frame in the frame list
      */
     public void setIndex(int index) {
@@ -83,7 +83,7 @@
 
     /**
      * Sets the displayable name for the frame.
-     * 
+     *
      * @param name the displayable name
      */
     public void setName(String name) {
@@ -92,7 +92,7 @@
 
     /**
      * Sets the frame list.
-     * 
+     *
      * @param parent the frame list
      */
     public void setParent(FrameList parent) {
@@ -103,7 +103,7 @@
      * Sets the tool tip text to show for the frame.
      * This can form part of the tool tip for actions like the back and forward
      * actions.
-     * 
+     *
      * @param toolTipText the tool tip text to show for the frame.
      */
     public void setToolTipText(String toolTipText) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameAction.java
index 273fdeb..54c374c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameAction.java
@@ -21,7 +21,7 @@
  */
 public abstract class FrameAction extends Action {
     private FrameList frameList;
-	
+
     private IPropertyChangeListener propertyChangeListener = new IPropertyChangeListener() {
         @Override
 		public void propertyChange(PropertyChangeEvent event) {
@@ -32,7 +32,7 @@
     /**
      * Constructs a new action for the specified frame list.
      * and adds a property change listener on it.
-     * 
+     *
      * @param frameList the frame list
      */
     protected FrameAction(FrameList frameList) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameList.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameList.java
index a722e03..7ef7e72 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameList.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameList.java
@@ -20,7 +20,7 @@
 
 /**
  * Supports a web-browser style of navigation by maintaining a list
- * of frames.  Each frame holds a snapshot of a view at some point 
+ * of frames.  Each frame holds a snapshot of a view at some point
  * in time.
  * <p>
  * The frame list obtains a snapshot of the current frame from a frame source
@@ -209,7 +209,7 @@
     }
 
     /**
-     * Replaces the current frame in this list with the current frame 
+     * Replaces the current frame in this list with the current frame
      * from the frame source.  No event is fired.
      */
     public void updateCurrentFrame() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameListMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameListMessages.java
index 20129f5..2dade49 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameListMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/FrameListMessages.java
@@ -25,7 +25,7 @@
 
     /**
      * Returns the formatted message for the given key in
-     * the resource bundle. 
+     * the resource bundle.
      *
      * @param key the resource name
      * @param args the message arguments
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/GoIntoAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/GoIntoAction.java
index 5282d02..f94f10d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/GoIntoAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/GoIntoAction.java
@@ -14,13 +14,13 @@
 import org.eclipse.ui.internal.views.framelist.FrameListMessages;
 
 /**
- * Generic "Go Into" action which goes to the frame for the current selection. 
+ * Generic "Go Into" action which goes to the frame for the current selection.
  */
 public class GoIntoAction extends FrameAction {
 
     /**
      * Constructs a new action for the specified frame list.
-     * 
+     *
      * @param frameList the frame list
      */
     public GoIntoAction(FrameList frameList) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/IFrameListHelpContextIds.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/IFrameListHelpContextIds.java
index 3f78735..4781abf 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/IFrameListHelpContextIds.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/IFrameListHelpContextIds.java
@@ -18,7 +18,7 @@
  * This interface contains constants only; it is not intended to be implemented
  * or extended.
  * </p>
- * 
+ *
  */
 /*package*/interface IFrameListHelpContextIds {
     public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeFrame.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeFrame.java
index fefedfa..9a7ac88 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeFrame.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeFrame.java
@@ -50,7 +50,7 @@
     /**
      * Constructs a frame for the specified tree viewer.
      * The frame's input, name and tool tip text are not set.
-     * 
+     *
      * @param viewer the tree viewer
      */
     public TreeFrame(AbstractTreeViewer viewer) {
@@ -60,9 +60,9 @@
     /**
      * Constructs a frame for the specified tree viewer.
      * The frame's input element is set to the specified input element.
-     * The frame's name and tool tip text are set to the text for the input 
+     * The frame's name and tool tip text are set to the text for the input
      * element, as provided by the viewer's label provider.
-     * 
+     *
      * @param viewer the tree viewer
      * @param input the input element
      */
@@ -80,7 +80,7 @@
 
     /**
      * Returns the expanded elements.
-     * 
+     *
      * @return the expanded elements
      */
     public Object[] getExpandedElements() {
@@ -89,7 +89,7 @@
 
     /**
      * Returns the input element.
-     * 
+     *
      * @return the input element
      */
     public Object getInput() {
@@ -98,7 +98,7 @@
 
     /**
      * Returns the selection.
-     * 
+     *
      * @return the selection
      */
     public ISelection getSelection() {
@@ -107,7 +107,7 @@
 
     /**
      * Returns the tree viewer.
-     * 
+     *
      * @return the tree viewer
      */
     public AbstractTreeViewer getViewer() {
@@ -116,7 +116,7 @@
 
     /**
      * Restore IPersistableElements from the specified memento.
-     * 
+     *
      * @param memento memento to restore elements from
      * @return list of restored elements. May be empty.
      */
@@ -139,7 +139,7 @@
 
     /**
      * Restore the frame from the specified memento.
-     * 
+     *
      * @param memento memento to restore frame from
      */
     public void restoreState(IMemento memento) {
@@ -180,7 +180,7 @@
     /**
      * Save the specified elements to the given memento.
      * The elements have to be adaptable to IPersistableElement.
-     * 
+     *
      * @param elements elements to persist
      * @param memento memento to persist elements in
      */
@@ -201,7 +201,7 @@
 
     /**
      * Save the frame state in the given memento.
-     * 
+     *
      * @param memento memento to persist the frame state in.
      */
     public void saveState(IMemento memento) {
@@ -235,7 +235,7 @@
 
     /**
      * Sets the input element.
-     * 
+     *
      * @param input the input element
      */
     public void setInput(Object input) {
@@ -244,7 +244,7 @@
 
     /**
      * Sets the expanded elements.
-     * 
+     *
      * @param expandedElements the expanded elements
      */
     public void setExpandedElements(Object[] expandedElements) {
@@ -253,7 +253,7 @@
 
     /**
      * Sets the selection.
-     * 
+     *
      * @param selection the selection
      */
     public void setSelection(ISelection selection) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeViewerFrameSource.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeViewerFrameSource.java
index 770aa56..580a805 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeViewerFrameSource.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/TreeViewerFrameSource.java
@@ -16,10 +16,10 @@
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 
-/** 
+/**
  * Frame source for tree viewers, which uses <code>TreeFrame</code> to capture
  * the state of the tree viewer.
- * 
+ *
  * @see TreeFrame
  */
 public class TreeViewerFrameSource implements IFrameSource {
@@ -28,7 +28,7 @@
 
     /**
      * Constructs a new tree viewer frame source for the specified tree viewer.
-     * 
+     *
      * @param viewer the tree viewer
      */
     public TreeViewerFrameSource(AbstractTreeViewer viewer) {
@@ -50,7 +50,7 @@
 
     /**
      * Returns a new tree frame capturing the specified input element.
-     * 
+     *
      * @param input the input element
      * @return the tree frame
      */
@@ -60,7 +60,7 @@
 
     /**
      * Updates the viewer in response to the current frame changing.
-     * 
+     *
      * @param frame the new value for the current frame
      */
     protected void frameChanged(TreeFrame frame) {
@@ -73,7 +73,7 @@
 
     /**
      * Returns the current frame.
-     * 
+     *
      * @param flags a bit-wise OR of the frame source flag constants
      * @return the current frame
      */
@@ -106,7 +106,7 @@
 
     /**
      * Returns the parent frame, or <code>null</code> if there is no parent frame.
-     * 
+     *
      * @param flags a bit-wise OR of the frame source flag constants
      * @return the parent frame, or <code>null</code>
      */
@@ -135,7 +135,7 @@
     /**
      * Returns the frame for the selection, or <code>null</code> if there is no
      * frame for the selection.
-     * 
+     *
      * @param flags a bit-wise OR of the frame source flag constants
      * @return the selection frame, or <code>null</code>
      */
@@ -157,7 +157,7 @@
 
     /**
      * Returns the tree viewer.
-     * 
+     *
      * @return the tree viewer
      */
     public AbstractTreeViewer getViewer() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/UpAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/UpAction.java
index cfa2458..f4bb8c0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/UpAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/framelist/UpAction.java
@@ -22,7 +22,7 @@
 
     /**
      * Constructs a new action for the specified frame list.
-     * 
+     *
      * @param frameList the frame list
      */
     public UpAction(FrameList frameList) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FilterConfigurationArea.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FilterConfigurationArea.java
index 01a22d5..f384b80 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FilterConfigurationArea.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FilterConfigurationArea.java
@@ -25,9 +25,9 @@
 
 /**
  * FilterConfigurationArea is the area that the user can configure a filter in.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public abstract class FilterConfigurationArea {
 
@@ -37,14 +37,14 @@
 
 	/**
 	 * Apply the current settings to the filter.
-	 * 
+	 *
 	 * @param filter
 	 */
 	public abstract void apply(MarkerFieldFilter filter);
 
 	/**
 	 * Create the contents of the configuration area in the parent.
-	 * 
+	 *
 	 * @param parent
 	 */
 	public abstract void createContents(Composite parent);
@@ -61,7 +61,7 @@
 
 	/**
 	 * Get the title for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getTitle() {
@@ -70,7 +70,7 @@
 
 	/**
 	 * Initialise {@link FontMetrics} for the receiver.
-	 * 
+	 *
 	 * @param control
 	 */
 	protected void initializeFontMetrics(Control control) {
@@ -83,16 +83,16 @@
 
 	/**
 	 * Initialise the receiver using the filter.
-	 * 
+	 *
 	 * @param filter
 	 */
 	public abstract void initialize(MarkerFieldFilter filter);
-	
+
 	/**
 	 * Set the markerField for the receiver. This method intended to
 	 * be called by the marker support framework directly after
 	 * instantiation of the receiver.
-	 * 
+	 *
 	 * @param markerField
 	 */
 	public final void setField(MarkerField markerField) {
@@ -109,7 +109,7 @@
 		Point minSize = button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true);
 		data.widthHint = Math.max(widthHint, minSize.x);
 		button.setLayoutData(data);
-		
+
 	}
 
 	/**
@@ -122,9 +122,9 @@
 
 	/**
 	 * Returns whether the configuration area should grab remaining vertical space.
-	 * 
+	 *
 	 * The default implementation returns <code>false</code>. Subclasses can override.
-	 * 
+	 *
 	 * @return <code>true</code> iff the configuration area should grab remaining vertical space
 	 * @since 3.5
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FiltersContributionParameters.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FiltersContributionParameters.java
index 9bd3bc0..b3e0e2a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FiltersContributionParameters.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/FiltersContributionParameters.java
@@ -21,16 +21,16 @@
  *
  */
 public abstract class FiltersContributionParameters {
-	
+
 	/**
-	 * Returns a map keyed names for parameter values. The values should be 
+	 * Returns a map keyed names for parameter values. The values should be
 	 * actual values that will be interpreted by the {@link MarkerFieldFilter}
 	 * these parameters are designed for.
-	 * 
+	 *
 	 * Note that these parameters will be sent to the MarkerFieldFilter for
 	 * every visible {@link MarkerField} in a markers view.
-	 * 
-	 * 
+	 *
+	 *
 	 * @return A map of the name of the parameter value (<code>String</code>)
 	 *         to the actual value of the parameter (<code>String</code>).
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java
index b9bb730..4c91ff9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java
@@ -37,20 +37,20 @@
 /**
  * MarkerField is the abstract superclass of the definition of the content
  * providers for columns in a Markers View.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public abstract class MarkerField {
 
 	private IConfigurationElement configurationElement;
 	private ResourceManager imageManager;
 	private ImageRegistry imageRegistry;
-	
+
 	/**
 	 * Annotate the image with indicators for whether or not help or quick fix
 	 * are available.
-	 * 
+	 *
 	 * @param item
 	 *            the item being decorated
 	 * @param image
@@ -115,7 +115,7 @@
 	}
 	/**
 	 * Compare item1 and item2 for sorting purposes.
-	 * 
+	 *
 	 * @param item1
 	 * @param item2
 	 * @return Either:
@@ -149,17 +149,17 @@
 
 	/**
 	 * Return the text to be displayed in the column header for this field.
-	 * 
+	 *
 	 * @return String
 	 * @see #getColumnTooltipText() this is the default column tooltip text
 	 */
 	public String getColumnHeaderText() {
 		return getName();
 	}
-	
+
 	/**
 	 * Return the name of this field.
-	 * 
+	 *
 	 * @return String
 	 * @since 3.6
 	 */
@@ -170,7 +170,7 @@
 
 	/**
 	 * Return the text for the column tooltip.
-	 * 
+	 *
 	 * @return String
 	 * @see #getColumnHeaderText()
 	 */
@@ -181,7 +181,7 @@
 	/**
 	 * Get the configuration element for the receiver. This is used by the
 	 * markerSupport internals to retreive the values defined in the extenstion.
-	 * 
+	 *
 	 * @return IConfigurationElement
 	 */
 	public final IConfigurationElement getConfigurationElement() {
@@ -190,7 +190,7 @@
 
 	/**
 	 * Get the number of characters that should be reserved for the receiver.
-	 * 
+	 *
 	 * @param control
 	 *            the control to scale from
 	 * @return int
@@ -202,7 +202,7 @@
 	/**
 	 * Return the editing support for entries for this field. Return null if it
 	 * cannot be in-line edited.
-	 * 
+	 *
 	 * @param viewer
 	 *            the viewer this will be applied to
 	 * @return {@link EditingSupport} or <code>null</code>.
@@ -213,7 +213,7 @@
 
 	/**
 	 * Return the image manager used by the receiver.
-	 * 
+	 *
 	 * @return ResourceManager
 	 */
 	protected ResourceManager getImageManager() {
@@ -231,7 +231,7 @@
 
 	/**
 	 * Set the configuration element used by the receiver.
-	 * 
+	 *
 	 * @param element
 	 */
 	public final void setConfigurationElement(IConfigurationElement element) {
@@ -241,7 +241,7 @@
 	/**
 	 * Set the imageManager. This is not normally required to be send if using a
 	 * {@link MarkerSupportView} as this is done for you.
-	 * 
+	 *
 	 * @param manager
 	 */
 	public final void setImageManager(ResourceManager manager) {
@@ -250,7 +250,7 @@
 
 	/**
 	 * Update the contents of the cell.
-	 * 
+	 *
 	 * @param cell
 	 */
 	public void update(ViewerCell cell) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerFieldFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerFieldFilter.java
index b77cb4d..651977b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerFieldFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerFieldFilter.java
@@ -21,7 +21,7 @@
  *
  */
 public abstract class MarkerFieldFilter {
-	
+
 	private MarkerField field;
 
 	/**
@@ -30,7 +30,7 @@
 	 * @return boolean <code>true</code> if the marker should be shown.
 	 */
 	public abstract boolean select(MarkerItem item);
-	
+
 	/**
 	 * Initialise the receiver with the values in the values Map.
 	 * @param values
@@ -39,7 +39,7 @@
 	public void initialize(Map values){
 		//Do nothing by default
 	}
-	
+
 	/**
 	 * Populate the working copy with the copy of whatever fields are required.
 	 * @param copy
@@ -54,7 +54,7 @@
 	 */
 	public final void setField(MarkerField markerField) {
 		field = markerField;
-		
+
 	}
 
 	/**
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerItem.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerItem.java
index 84ff292..cf60d3a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerItem.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerItem.java
@@ -16,17 +16,17 @@
 import org.eclipse.ui.internal.views.markers.MarkerSupportInternalUtilities;
 
 /**
- * The MarkerItem class is the class that represents the objects displayed a 
+ * The MarkerItem class is the class that represents the objects displayed a
  * {@link MarkerSupportView}. This class is not intended to be sub-classed by clients,
  * @since 3.4
- * 
+ *
  */
 public abstract class MarkerItem {
 
 	/**
 	 * Return the boolean associated with attributeName or defaultValue if it is
 	 * not found.
-	 * 
+	 *
 	 * @param attribute
 	 * @param defaultValue
 	 * @return <code>boolean</code>
@@ -39,7 +39,7 @@
 
 	/**
 	 * Get the value of the attribute in the enclosed marker.
-	 * 
+	 *
 	 * @param attribute
 	 * @param defaultValue
 	 *            the defaultValue if the value is not set
@@ -53,7 +53,7 @@
 
 	/**
 	 * Get the String value of the attribute in the enclosed marker.
-	 * 
+	 *
 	 * @param attribute
 	 * @param defaultValue
 	 *            the defaultValue if the value is not set
@@ -69,7 +69,7 @@
 	 * convenience purposes as the location can be inferred from a line number
 	 * or location attribute if the {@link MarkerItem} has an associated
 	 * {@link IMarker}.
-	 * 
+	 *
 	 * @return String
 	 * @see IMarker#LOCATION
 	 * @see IMarker#LINE_NUMBER
@@ -83,7 +83,7 @@
 	 * convenience as a path can be inferred from the location of an
 	 * {@link IResource} or the path attribute if the {@link MarkerItem} has an
 	 * associated {@link IMarker}.
-	 * 
+	 *
 	 * @return String
 	 * @see MarkerViewUtil#PATH_ATTRIBUTE
 	 * @see IResource#getLocation()
@@ -95,7 +95,7 @@
 
 	/**
 	 * Return the marker for the receiver.
-	 * 
+	 *
 	 * @return IMarker
 	 */
 	public IMarker getMarker() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportConstants.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportConstants.java
index 6b05628..15788e2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportConstants.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportConstants.java
@@ -13,23 +13,23 @@
 
 /**
  * MarkerSupportConstants is a static class that supplies commonly used constants.
- * 
+ *
  * @since 3.4
  *
  */
 public class MarkerSupportConstants {
-	
+
 	/**
-	 * The constant used to specify the contains value on 
+	 * The constant used to specify the contains value on
 	 * a {@link FiltersContributionParameters}
 	 */
 	public static final String CONTAINS_KEY = "CONTAINS"; //$NON-NLS-1$
-	
+
 	/**
-	 * The constant used to specify the does not contain value on 
+	 * The constant used to specify the does not contain value on
 	 * a {@link FiltersContributionParameters}
 	 */
 	public static String DOES_NOT_CONTAIN_KEY = "DOES_NOT_CONTAIN"; //$NON-NLS-1$
-	
+
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportView.java
index 2f51355..71c3343 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerSupportView.java
@@ -21,7 +21,7 @@
  */
 public abstract class MarkerSupportView extends ExtendedMarkersView {
 
-	
+
 	/**
 	 * Create a new instance of the receiver on contentGeneratorId.
 	 * @param contentGeneratorId the id of a markerContentGenerator
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java
index abfa0a8..0ccaefa 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewHandler.java
@@ -30,9 +30,9 @@
 /**
  * MarkerViewHandler is the abstract class of the handlers for the
  * {@link MarkerSupportView}
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public abstract class MarkerViewHandler extends AbstractHandler {
 
@@ -40,7 +40,7 @@
 
 	/**
 	 * Get the view this event occurred on.
-	 * 
+	 *
 	 * @param event
 	 * @return {@link MarkerSupportView} or <code>null</code>
 	 */
@@ -53,7 +53,7 @@
 
 	/**
 	 * Execute the specified undoable operation
-	 * 
+	 *
 	 * @param operation
 	 * @param title
 	 * @param monitor
@@ -81,10 +81,10 @@
 	/**
 	 * Get the selected markers for the receiver in the view from event. If the
 	 * view cannot be found then return an empty array.
-	 * 
-	 * This is run using {@link Display#syncExec(Runnable)} so that it can be called 
+	 *
+	 * This is run using {@link Display#syncExec(Runnable)} so that it can be called
 	 * outside of the UI {@link Thread}.
-	 * 
+	 *
 	 * @param event
 	 * @return {@link IMarker}[]
 	 */
@@ -97,7 +97,7 @@
 		view.getSite().getShell().getDisplay().syncExec(new Runnable() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see java.lang.Runnable#run()
 			 */
 			@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewUtil.java
index d6d72ece..2a960f6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerViewUtil.java
@@ -30,7 +30,7 @@
 	 * The PATH_ATTRIBUTE is the tag for the attribute on a marker that can be
 	 * used to supply the String for the path rather than using the path of the
 	 * underlying resource.
-	 * 
+	 *
 	 * @see IMarker#getAttribute(java.lang.String)
 	 * @since 3.2
 	 */
@@ -40,7 +40,7 @@
 	 * The NAME_ATTRIBUTE is the tag for the attribute on a marker that can be
 	 * used to supply the String for the name rather than using the name of the
 	 * underlying resource.
-	 * 
+	 *
 	 * @see IMarker#getAttribute(java.lang.String)
 	 * @since 3.2
 	 */
@@ -49,7 +49,7 @@
 	/**
 	 * Returns the id of the view used to show markers of the same type as the
 	 * given marker.
-	 * 
+	 *
 	 * @param marker
 	 *            the marker
 	 * @return the view id or <code>null</code> if no appropriate view could
@@ -72,7 +72,7 @@
 	/**
 	 * Shows the given marker in the appropriate view in the given page. This
 	 * must be called from the UI thread.
-	 * 
+	 *
 	 * @param page
 	 *            the workbench page in which to show the marker
 	 * @param marker
@@ -126,7 +126,7 @@
 	/**
 	 * Returns the id of the view used to show markers of the same type as the
 	 * given marker using.legacy support
-	 * 
+	 *
 	 * @param marker
 	 *            the marker
 	 * @return the view id or <code>null</code> if no appropriate view could
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/WorkbenchMarkerResolution.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/WorkbenchMarkerResolution.java
index d71a350..7d0335a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/WorkbenchMarkerResolution.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/WorkbenchMarkerResolution.java
@@ -23,13 +23,13 @@
  *
  */
 public abstract class WorkbenchMarkerResolution implements IMarkerResolution2 {
-	
+
 	/**
 	 * Iterate through the list of supplied markers. Return any that can also have
 	 * the receiver applied to them.
 	 * @param markers
 	 * @return IMarker[]
-	 * 	 
+	 *
 	 * */
 	public abstract IMarker[] findOtherMarkers(IMarker[] markers);
 
@@ -37,12 +37,12 @@
      * Runs this resolution. Resolve all <code>markers</code>.
      * <code>markers</code> must be a subset of the markers returned
      * by <code>findOtherMarkers(IMarker[])</code>.
-	 * 
+	 *
 	 * @param markers The markers to resolve, not null
 	 * @param monitor The monitor to report progress
 	 */
 	public void run(IMarker[] markers, IProgressMonitor monitor) {
-		
+
 		for (int i = 0; i < markers.length; i++) {
 			monitor.subTask(Util.getProperty(IMarker.MESSAGE, markers[i]));
 			run(markers[i]);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AbstractField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AbstractField.java
index befae98..9cb1f61 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AbstractField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AbstractField.java
@@ -16,9 +16,9 @@
  *
  */
 public abstract class AbstractField implements IField {
-	
+
 	boolean visible = true;
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#isShowing()
 	 */
@@ -26,7 +26,7 @@
 	public boolean isShowing() {
 		return visible;
 	}
-	
+
 	/**
 	 * Set whether or not the receiver is showing.
 	 * @param showing
@@ -34,6 +34,6 @@
 	@Override
 	public void setShowing(boolean showing){
 		visible = showing;
-		
+
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionCopyMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionCopyMarker.java
index ee0a57f..3097469 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionCopyMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionCopyMarker.java
@@ -40,7 +40,7 @@
 
 	/**
 	 * Creates the action.
-	 * 
+	 *
 	 * @param part
 	 * @param provider
 	 */
@@ -54,7 +54,7 @@
 
 	/**
 	 * Sets the clipboard that the marker(s) will be copied to.
-	 * 
+	 *
 	 * @param clipboard
 	 *            the clipboard
 	 */
@@ -65,7 +65,7 @@
 	/**
 	 * Sets the properties to be added to the plain-text marker report that will
 	 * be copied to the clipboard.
-	 * 
+	 *
 	 * @param properties
 	 */
 	void setProperties(IField[] properties) {
@@ -85,7 +85,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
@@ -123,7 +123,7 @@
 	/**
 	 * Creates a plain-text report of the selected markers based on predefined
 	 * properties.
-	 * 
+	 *
 	 * @param rawMarkers
 	 * @return the marker report
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionDeleteCompleted.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionDeleteCompleted.java
index 6a94036..f368804 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionDeleteCompleted.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionDeleteCompleted.java
@@ -25,7 +25,7 @@
 
 /**
  * ActionDeleteCompleted is the action for deleting completed markers.
- * 
+ *
  */
 public class ActionDeleteCompleted extends MarkerSelectionProviderAction {
 
@@ -33,7 +33,7 @@
 
 	/**
 	 * Constructs an ActionDeleteCompleted instance
-	 * 
+	 *
 	 * @param part
 	 * @param provider
 	 */
@@ -45,7 +45,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	@Override
@@ -101,7 +101,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkCompleted.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkCompleted.java
index b63653c..969342c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkCompleted.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkCompleted.java
@@ -23,13 +23,13 @@
 
 /**
  * ActionMarkCompleted is the action for marking task completion.
- * 
+ *
  */
 public class ActionMarkCompleted extends MarkerSelectionProviderAction {
 
 	/**
 	 * Create a new instance of the reciever.
-	 * 
+	 *
 	 * @param provider
 	 */
 	public ActionMarkCompleted(ISelectionProvider provider) {
@@ -39,7 +39,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	@Override
@@ -55,7 +55,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkerProperties.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkerProperties.java
index 52eb70e..8f9b1f5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkerProperties.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionMarkerProperties.java
@@ -18,7 +18,7 @@
 
 /**
  * ActionMarkerProperties is the action for opening a properties dialog.
- * 
+ *
  */
 public class ActionMarkerProperties extends SelectionProviderAction {
 
@@ -28,7 +28,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param part
 	 * @param provider
 	 * @param markerName
@@ -44,7 +44,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	@Override
@@ -65,7 +65,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionOpenMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionOpenMarker.java
index 5470741..7880780 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionOpenMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionOpenMarker.java
@@ -62,7 +62,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	@Override
@@ -123,7 +123,7 @@
 
 	/**
 	 * Report an error message
-	 * 
+	 *
 	 * @param message
 	 */
 	private void reportError(String message) {
@@ -134,7 +134,7 @@
 
 	/**
 	 * Report the status
-	 * 
+	 *
 	 * @param status
 	 */
 	private void reportStatus(IStatus status) {
@@ -146,7 +146,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionPasteMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionPasteMarker.java
index 9383183..4cd682d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionPasteMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionPasteMarker.java
@@ -48,7 +48,7 @@
 
 	/**
 	 * Creates the action.
-	 * 
+	 *
 	 * @param part
 	 * @param provider
 	 * @param markerName
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionProblemProperties.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionProblemProperties.java
index 50ab2d9..56f4375 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionProblemProperties.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionProblemProperties.java
@@ -42,7 +42,7 @@
      */
     @Override
 	public void run() {
- 
+
     	IMarker marker = getSelectedMarker();
         DialogMarkerProperties dialog = new DialogProblemProperties(part
                 .getSite().getShell());
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRemoveMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRemoveMarker.java
index f4f9355..e8d30e4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRemoveMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRemoveMarker.java
@@ -28,12 +28,12 @@
 public class ActionRemoveMarker extends MarkerSelectionProviderAction {
 
 	private IWorkbenchPart part;
-	
+
 	private String markerName;
 
 	/**
 	 * Creates the action.
-	 * 
+	 *
 	 * @param part
 	 * @param provider
 	 * @param markerName
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionResolveMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionResolveMarker.java
index 3463450..26ac981 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionResolveMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionResolveMarker.java
@@ -33,7 +33,7 @@
 
 /**
  * This action displays a list of resolutions for the selected marker
- * 
+ *
  * @since 2.0
  */
 public class ActionResolveMarker extends MarkerSelectionProviderAction {
@@ -42,7 +42,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param markerView
 	 * @param provider
 	 */
@@ -119,7 +119,7 @@
 
 	/**
 	 * Handle the exception.
-	 * 
+	 *
 	 * @param exception
 	 */
 	private void handleException(Exception exception) {
@@ -132,7 +132,7 @@
 
 	/**
 	 * Return the description of the marker.
-	 * 
+	 *
 	 * @return String
 	 */
 	private String getMarkerDescription() {
@@ -141,7 +141,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRevealMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRevealMarker.java
index 96f50db..14229a8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRevealMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionRevealMarker.java
@@ -36,18 +36,18 @@
 	 * @param provider
 	 */
 	public ActionRevealMarker(IWorkbenchPart part, ISelectionProvider provider) {
-		super(provider, Util.EMPTY_STRING); 
+		super(provider, Util.EMPTY_STRING);
 		this.part = part;
 	}
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	@Override
 	public void run() {
-		
+
 		IEditorPart editor = part.getSite().getPage().getActiveEditor();
 		if (editor == null) {
 			return;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionSelectAll.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionSelectAll.java
index 02d81a9..8c0ad39 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionSelectAll.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionSelectAll.java
@@ -26,7 +26,7 @@
 
 /**
  * The ActionSelectAll is the action for selecting all of the entries.
- * 
+ *
  */
 public class ActionSelectAll extends MarkerSelectionProviderAction {
 
@@ -34,7 +34,7 @@
 
 	/**
 	 * Create a new instance of the receiver with the supplied
-	 * 
+	 *
 	 * @param markerView
 	 */
 	public ActionSelectAll(MarkerView markerView) {
@@ -45,7 +45,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	@Override
@@ -57,7 +57,7 @@
 		IRunnableWithProgress selectionRunnableWithProgress = new IRunnableWithProgress() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
 			 */
 			@Override
@@ -140,7 +140,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionTaskProperties.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionTaskProperties.java
index d6f2b29..00dfef1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionTaskProperties.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ActionTaskProperties.java
@@ -17,7 +17,7 @@
 
 /**
  * ActionTaskProperties is the action for setting a tasks properties.
- * 
+ *
  */
 public class ActionTaskProperties extends MarkerSelectionProviderAction {
 
@@ -25,7 +25,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param part
 	 * @param provider
 	 */
@@ -37,7 +37,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.action.Action#run()
 	 */
 	@Override
@@ -51,7 +51,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AttributeMarkerGrouping.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AttributeMarkerGrouping.java
index 20deb54..435bb34 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AttributeMarkerGrouping.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/AttributeMarkerGrouping.java
@@ -20,12 +20,12 @@
 /**
  * AttributeMarkerGrouping is the configuration element for the
  * markerAttributeGrouping extension.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class AttributeMarkerGrouping {
-	
+
 	private static final String DEFAULT_GROUPING_ENTRY = "defaultGroupingEntry";//$NON-NLS-1$
 
 	private static final String MARKER_TYPE = "markerType";//$NON-NLS-1$
@@ -57,7 +57,7 @@
 
 	/**
 	 * Return the id of the default grouping.
-	 * 
+	 *
 	 * @return String or <code>null</code> if it is not defined.
 	 */
 	public String getDefaultGroupingEntry() {
@@ -66,7 +66,7 @@
 
 	/**
 	 * Return the id of the marker type for this type.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getMarkerType() {
@@ -75,7 +75,7 @@
 
 	/**
 	 * Return the name of the attribute for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getAttribute() {
@@ -84,7 +84,7 @@
 
 	/**
 	 * Return the IConfigurationElement for the receiver.
-	 * 
+	 *
 	 * @return IConfigurationElement
 	 */
 	public IConfigurationElement getElement() {
@@ -93,7 +93,7 @@
 
 	/**
 	 * Add markerGroup to the list of referenced groups.
-	 * 
+	 *
 	 * @param markerGroup
 	 */
 	public void addGroup(MarkerGroup markerGroup) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkFilter.java
index 038eab9..672f8a3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkFilter.java
@@ -31,7 +31,7 @@
 
 	/**
 	 * Create a new instance of the recevier with the default name.
-	 * 
+	 *
 	 */
 	public BookmarkFilter() {
 		this(MarkerMessages.MarkerFilter_defaultFilterName);
@@ -39,7 +39,7 @@
 
 	/**
 	 * Create a new instance of the recevier with the filterName
-	 * 
+	 *
 	 * @param filterName
 	 */
 	public BookmarkFilter(String filterName) {
@@ -83,7 +83,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#resetState()
 	 */
 	@Override
@@ -95,7 +95,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#restoreFilterSettings(org.eclipse.jface.dialogs.IDialogSettings)
 	 */
 	@Override
@@ -140,7 +140,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#saveFilterSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java
index 7e1d8b0..70134e8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/BookmarkView.java
@@ -106,15 +106,15 @@
 						if (e.getCause() instanceof CoreException) {
 							ErrorDialog.openError(
 									getSite().getShell(),
-									MarkerMessages.errorModifyingBookmark, null, ((CoreException)e.getCause()).getStatus()); 
+									MarkerMessages.errorModifyingBookmark, null, ((CoreException)e.getCause()).getStatus());
 						} else {
 							// something rather unexpected occurred.
-							IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingBookmark, e); 
+							IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingBookmark, e);
 						}
 					} catch (CoreException e) {
 						ErrorDialog.openError(
 								getSite().getShell(),
-								MarkerMessages.errorModifyingBookmark, null, e.getStatus()); 
+								MarkerMessages.errorModifyingBookmark, null, e.getStatus());
 					}
 				}
 			}
@@ -179,13 +179,13 @@
 	@Override
 	protected IField[] getSortingFields() {
 		IField[] all = new IField[VISIBLE_FIELDS.length + HIDDEN_FIELDS.length];
-		
+
 		System.arraycopy(VISIBLE_FIELDS, 0, all, 0, VISIBLE_FIELDS.length);
 		System.arraycopy(HIDDEN_FIELDS, 0, all, VISIBLE_FIELDS.length, HIDDEN_FIELDS.length);
-		
+
 		return all;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getAllFields()
 	 */
@@ -210,7 +210,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerTypes()
 	 */
 	@Override
@@ -250,16 +250,16 @@
 	protected String getSectionTag() {
 		return TAG_DIALOG_SECTION;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#fillContextMenuAdditions(org.eclipse.jface.action.IMenuManager)
 	 */
 	@Override
 	void fillContextMenuAdditions(IMenuManager manager) {
 		//Do nothing in this view
-		
+
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerEnablementPreferenceName()
 	 */
@@ -267,7 +267,7 @@
 	String getMarkerEnablementPreferenceName() {
 		return IDEInternalPreferences.LIMIT_BOOKMARKS;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerLimitPreferenceName()
 	 */
@@ -275,7 +275,7 @@
 	String getMarkerLimitPreferenceName() {
 		return IDEInternalPreferences.BOOKMARKS_LIMIT;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getFiltersPreferenceName()
 	 */
@@ -283,17 +283,17 @@
 	String getFiltersPreferenceName() {
 		return IDEInternalPreferences.BOOKMARKS_FILTERS;
 	}
-	
+
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerName()
 	 */
 	@Override
 	protected String getMarkerName() {
 		return MarkerMessages.bookmark_title;
 	}
-	
+
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getUndoContext()
@@ -302,5 +302,5 @@
 	protected IUndoContext getUndoContext() {
 		return WorkspaceUndoUtil.getBookmarksUndoContext();
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/CategoryComparator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/CategoryComparator.java
index 895f876..3f792bc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/CategoryComparator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/CategoryComparator.java
@@ -19,7 +19,7 @@
 /**
  * CategorySorter is the sorter that takes categories and the viewer into
  * account.
- * 
+ *
  */
 public class CategoryComparator extends ViewerComparator implements Comparator {
 	TableComparator innerSorter;
@@ -30,7 +30,7 @@
 
 	/**
 	 * Create a new instance of the receiver wrapping a sorter.
-	 * 
+	 *
 	 * @param sorter
 	 */
 	CategoryComparator(TableComparator sorter) {
@@ -39,7 +39,7 @@
 
 	/**
 	 * Compare obj1 and obj starting with field depth.
-	 * 
+	 *
 	 * @param obj1
 	 * @param obj2
 	 * @param depth
@@ -74,7 +74,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ViewerSorter#compare(org.eclipse.jface.viewers.Viewer,
 	 *      java.lang.Object, java.lang.Object)
 	 */
@@ -85,7 +85,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
 	 */
 	@Override
@@ -95,7 +95,7 @@
 
 	/**
 	 * Get the category field.
-	 * 
+	 *
 	 * @return IField
 	 */
 	public IField getCategoryField() {
@@ -104,7 +104,7 @@
 
 	/**
 	 * Set the field that we are categorizing by.
-	 * 
+	 *
 	 * @param field
 	 */
 	public void setCategoryField(IField field) {
@@ -113,7 +113,7 @@
 
 	/**
 	 * Set the inner sorter to the new sorter.
-	 * 
+	 *
 	 * @param sorter2
 	 */
 	public void setTableSorter(TableComparator sorter2) {
@@ -123,7 +123,7 @@
 
 	/**
 	 * Save the state of the receiver.
-	 * 
+	 *
 	 * @param dialogSettings
 	 */
 	public void saveState(IDialogSettings dialogSettings) {
@@ -149,7 +149,7 @@
 
 	/**
 	 * Restore the state of the receiver from the dialog settings.
-	 * 
+	 *
 	 * @param dialogSettings
 	 * @param view
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ConcreteMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ConcreteMarker.java
index aab3d09..49dfab9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ConcreteMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ConcreteMarker.java
@@ -10,8 +10,8 @@
  *******************************************************************************/
 package org.eclipse.ui.views.markers.internal;
 
-import com.ibm.icu.text.CollationKey; 
-import com.ibm.icu.text.Collator; 
+import com.ibm.icu.text.CollationKey;
+import com.ibm.icu.text.Collator;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IResource;
@@ -37,7 +37,7 @@
     private CollationKey resourceNameKey;
 
     private int line;
-    
+
     private String locationString;
 
     private long creationTime;
@@ -54,7 +54,7 @@
 	private MarkerNode markerCategory;
 
 	private String shortFolder;
-	
+
 	private Object group;
 
 	public ConcreteMarker(IMarker toCopy) {
@@ -65,7 +65,7 @@
     /**
      * Clears any cached information. This frees up some memory, but will slow down
      * the next comparison operation. It is a good idea to call this on a set of markers
-     * after sorting them, in order to reduce their memory cost. 
+     * after sorting them, in order to reduce their memory cost.
      */
     public void clearCache() {
         resourceNameKey = null;
@@ -82,10 +82,10 @@
         resourceName = Util.getResourceName(marker);
         inFolder = Util.getContainerName(marker);
         shortFolder = null;
-        line = marker.getAttribute(IMarker.LINE_NUMBER, -1);  
+        line = marker.getAttribute(IMarker.LINE_NUMBER, -1);
         locationString = marker.getAttribute(IMarker.LOCATION,
 				Util.EMPTY_STRING);
-		
+
         try {
             creationTime = marker.getCreationTime();
         } catch (CoreException e) {
@@ -95,9 +95,9 @@
         try {
             type = marker.getType();
         } catch (CoreException e1) {
-            type = Util.EMPTY_STRING; 
+            type = Util.EMPTY_STRING;
         }
-        
+
         // store the marker ID locally
         id = marker.getId();
     }
@@ -150,7 +150,7 @@
     public long getCreationTime() {
         return creationTime;
     }
-    
+
     /**
      * The underlying marker ID value.
      * @return the marker's ID.
@@ -185,7 +185,7 @@
 	 */
 	public void setCategory(MarkerNode category) {
 		markerCategory = category;
-		
+
 	}
 
 	/* (non-Javadoc)
@@ -249,7 +249,7 @@
 	public void setGroup(Object group) {
 		this.group = group;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerNode#getConcreteRepresentative()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ContentGeneratorDescriptor.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ContentGeneratorDescriptor.java
index 48cf9cb..bd0fd04 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ContentGeneratorDescriptor.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ContentGeneratorDescriptor.java
@@ -26,9 +26,9 @@
 /**
  * ContentGeneratorDescriptor is the direct representation of the markerContentGenerator
  * extension point.
- * 
+ *
  * @since 3.6
- * 
+ *
  */
 public class ContentGeneratorDescriptor {
 
@@ -47,7 +47,7 @@
 
 	/**
 	 * Create a new ContentGeneratorDescriptor
-	 * 
+	 *
 	 * @param element
 	 */
 	public ContentGeneratorDescriptor(IConfigurationElement element) {
@@ -56,7 +56,7 @@
 
 	/**
 	 * Add the groups defined in the receiver to the collection of groups.
-	 * 
+	 *
 	 * @param groups
 	 */
 	private void addDefinedGroups(Collection groups) {
@@ -71,7 +71,7 @@
 
 	/**
 	 * Add the extensions to the receiver.
-	 * 
+	 *
 	 * @param extensions
 	 *            Collection of {@link IConfigurationElement}
 	 */
@@ -82,7 +82,7 @@
 
 	/**
 	 * Add all of the markerGroups defined in element.
-	 * 
+	 *
 	 * @param groups
 	 */
 	private void addGroupsFrom(IConfigurationElement element, Collection groups) {
@@ -98,7 +98,7 @@
 	/**
 	 * Return whether or not all of {@link MarkerTypesModel} arein the
 	 * selectedTypes.
-	 * 
+	 *
 	 * @param selectedTypes
 	 * @return boolean
 	 */
@@ -108,7 +108,7 @@
 
 	/**
 	 * Get the all of the fields that this content generator is using.
-	 * 
+	 *
 	 * @return {@link MarkerField}[]
 	 */
 	public MarkerField[] getAllFields() {
@@ -117,7 +117,7 @@
 
 	/**
 	 * Get the category name from the receiver.
-	 * 
+	 *
 	 * @return categoryName
 	 */
 	public String getCategoryName() {
@@ -128,7 +128,7 @@
 
 	/**
 	 * Return the configuration elements for the receiver.
-	 * 
+	 *
 	 * @return IConfigurationElement[]
 	 */
 	public IConfigurationElement[] getFilterReferences() {
@@ -165,7 +165,7 @@
 
 	/**
 	 * Return the id of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getId() {
@@ -175,7 +175,7 @@
 
 	/**
 	 * Get the list of initially visible fields
-	 * 
+	 *
 	 * @return {@link MarkerField}[]
 	 */
 	public MarkerField[] getInitialVisible() {
@@ -184,7 +184,7 @@
 
 	/**
 	 * Get the markerGroups associated with the receiver.
-	 * 
+	 *
 	 * @return Collection of {@link MarkerGroup}
 	 */
 	public Collection getMarkerGroups() {
@@ -207,7 +207,7 @@
 
 	/**
 	 * Return the markerTypes for the receiver.
-	 * 
+	 *
 	 * @return Collection of {@link MarkerType}
 	 */
 	public Collection getMarkerTypes() {
@@ -240,7 +240,7 @@
 
 	/**
 	 * Return the name for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getName() {
@@ -250,7 +250,7 @@
 
 	/**
 	 * Return the type for typeId.
-	 * 
+	 *
 	 * @param typeId
 	 * @return {@link MarkerType} or <code>null</code> if it is not found.
 	 */
@@ -263,7 +263,7 @@
 
 	/**
 	 * Get the table that maps type ids to markerTypes.
-	 * 
+	 *
 	 * @return Map of {@link String} to {@link MarkerType}
 	 */
 	public Map getTypesTable() {
@@ -282,7 +282,7 @@
 	/**
 	 * Initialise the receiver from the configuration element. This is done as a
 	 * post processing step.
-	 * 
+	 *
 	 * @param registry
 	 *            the MarkerSupportRegistry being used to initialise the
 	 *            receiver.
@@ -315,7 +315,7 @@
 
 	/**
 	 * Remove the element from the generator extensions
-	 * 
+	 *
 	 * @param element
 	 */
 	public void removeExtension(IConfigurationElement element) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogBookmarkFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogBookmarkFilter.java
index c2f48bd..1c6f71c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogBookmarkFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogBookmarkFilter.java
@@ -28,7 +28,7 @@
 
 /**
  * DialogBookmarkFilter is the filter dialog for bookmarks
- * 
+ *
  */
 public class DialogBookmarkFilter extends DialogMarkerFilter {
 
@@ -43,12 +43,12 @@
 
 		private String contains = MarkerMessages.filtersDialog_contains;
 
-		private String doesNotContain = 
+		private String doesNotContain =
 			MarkerMessages.filtersDialog_doesNotContain;
 
 		/**
 		 * Create a description group.
-		 * 
+		 *
 		 * @param parent
 		 */
 		public DescriptionGroup(Composite parent) {
@@ -109,7 +109,7 @@
 
 		public void setDescription(String text) {
 			if (text == null) {
-				description.setText(""); //$NON-NLS-1$ 
+				description.setText(""); //$NON-NLS-1$
 			} else {
 				description.setText(text);
 			}
@@ -140,7 +140,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#createAttributesArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -165,9 +165,9 @@
 		BookmarkFilter bookmark = (BookmarkFilter) filter;
 		bookmark.setContains(descriptionGroup.getContains());
 		bookmark.setDescription(descriptionGroup.getDescription().trim());
-	
+
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateUIWithFilter(org.eclipse.ui.views.markers.internal.MarkerFilter)
 	 */
@@ -187,11 +187,11 @@
 		super.updateEnabledState(enabled);
 		descriptionGroup.updateEnablement(enabled);
 	}
-	
+
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markerview.FiltersDialog#resetPressed()
 	 */
 	@Override
@@ -204,7 +204,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#newFilter(java.lang.String)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerFilter.java
index a06587a..8db28fb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerFilter.java
@@ -88,7 +88,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
 		 *      int)
 		 */
@@ -99,7 +99,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
 		 *      int)
 		 */
@@ -121,7 +121,7 @@
 
 		/**
 		 * Creates the working set filter selection widgets.
-		 * 
+		 *
 		 * @param parent
 		 *            the parent composite of the working set widgets
 		 */
@@ -146,7 +146,7 @@
 
 		/**
 		 * Returns wether or not a working set filter should be used
-		 * 
+		 *
 		 * @return true=a working set filter should be used false=a working set
 		 *         filter should not be used
 		 */
@@ -156,7 +156,7 @@
 
 		/**
 		 * Returns the selected working set filter or null if none is selected.
-		 * 
+		 *
 		 * @return the selected working set filter or null if none is selected.
 		 */
 		IWorkingSet getWorkingSet() {
@@ -165,7 +165,7 @@
 
 		/**
 		 * Sets the working set filter selection.
-		 * 
+		 *
 		 * @param selected
 		 *            true=a working set filter should be used false=no working
 		 *            set filter should be used
@@ -208,7 +208,7 @@
 
 		/**
 		 * Sets the specified working set.
-		 * 
+		 *
 		 * @param workingSet
 		 *            the working set
 		 */
@@ -232,41 +232,41 @@
 	/**
 	 * AbstractNode is the abstract superclass of the node elements for
 	 * MarkerTypes.
-	 * 
+	 *
 	 */
 	private abstract class AbstractNode {
 
 		/**
 		 * Get the parent element of the receiver.
-		 * 
+		 *
 		 * @return Object
 		 */
 		public abstract Object getParent();
 
 		/**
 		 * Get the name of the receiver.
-		 * 
+		 *
 		 * @return String
 		 */
 		public abstract String getName();
 
 		/**
 		 * Return whether or not the receiver has children.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public abstract boolean hasChildren();
 
 		/**
 		 * Get the children of the receiver.
-		 * 
+		 *
 		 * @return Object[]
 		 */
 		public abstract Object[] getChildren();
 
 		/**
 		 * Return whether or not this is a category node.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public abstract boolean isCategory();
@@ -275,7 +275,7 @@
 
 	/**
 	 * MarkerTypeNode is the wrapper for marker types.
-	 * 
+	 *
 	 */
 	private class MarkerTypeNode extends AbstractNode {
 
@@ -285,7 +285,7 @@
 
 		/**
 		 * Create an instance of the receiver wrapping markerType.
-		 * 
+		 *
 		 * @param markerType
 		 */
 		public MarkerTypeNode(MarkerType markerType) {
@@ -295,7 +295,7 @@
 
 		/**
 		 * Set the category of the receiver.
-		 * 
+		 *
 		 * @param category
 		 */
 		public void setCategory(MarkerCategory category) {
@@ -304,7 +304,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#getChildren()
 		 */
 		@Override
@@ -314,7 +314,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#getParent()
 		 */
 		@Override
@@ -324,7 +324,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#hasChildren()
 		 */
 		@Override
@@ -334,7 +334,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#getName()
 		 */
 		@Override
@@ -344,7 +344,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#isCategory()
 		 */
 		@Override
@@ -354,7 +354,7 @@
 
 		/**
 		 * Return the marker type this is wrapping
-		 * 
+		 *
 		 * @return Object
 		 */
 		public Object getMarkerType() {
@@ -365,7 +365,7 @@
 	/**
 	 * The MarkerCategory is a data type to represent the categories in the tree
 	 * view.
-	 * 
+	 *
 	 */
 	private class MarkerCategory extends AbstractNode {
 
@@ -375,7 +375,7 @@
 
 		/**
 		 * Create a new instance of the receiver with name categoryName.
-		 * 
+		 *
 		 * @param categoryName
 		 */
 		public MarkerCategory(String categoryName) {
@@ -384,7 +384,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#getName()
 		 */
 		@Override
@@ -394,7 +394,7 @@
 
 		/**
 		 * Add markerType to the list of types.
-		 * 
+		 *
 		 * @param markerType
 		 */
 		public void add(MarkerTypeNode markerType) {
@@ -404,7 +404,7 @@
 
 		/**
 		 * Return the marker types contained in the receiver.
-		 * 
+		 *
 		 * @return Object[]
 		 */
 		public Object[] getMarkerTypes() {
@@ -413,7 +413,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#getChildren()
 		 */
 		@Override
@@ -423,7 +423,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#getParent()
 		 */
 		@Override
@@ -433,7 +433,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#hasChildren()
 		 */
 		@Override
@@ -443,7 +443,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter.AbstractNode#isCategory()
 		 */
 		@Override
@@ -483,7 +483,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param parentShell
 	 * @param filtersList
 	 */
@@ -494,7 +494,7 @@
 
 	/**
 	 * Set the filters in the filtersList by copying them.
-	 * 
+	 *
 	 * @param initialFilters
 	 */
 	private void setFilters(MarkerFilter[] initialFilters) {
@@ -561,7 +561,7 @@
 			Object element = items[i].getData();
 			typesViewer.setSubtreeChecked(element, checked);
 		}
-		
+
 	}
 
 	/**
@@ -596,7 +596,7 @@
 
 	/**
 	 * Creates a check box button with the given parent and text.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 * @param text
@@ -626,7 +626,7 @@
 
 	/**
 	 * Creates a combo box with the given parent, items, and selection
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 * @param items
@@ -678,7 +678,7 @@
 
 	/**
 	 * Create the list in the receiver.
-	 * 
+	 *
 	 * @param dialogArea
 	 */
 	/**
@@ -696,7 +696,7 @@
 
 	/**
 	 * Create the area for the user to select thier filters.
-	 * 
+	 *
 	 * @param listArea
 	 */
 	void createUserFiltersArea(Composite listArea) {
@@ -717,7 +717,7 @@
 		filtersList.setContentProvider(new IStructuredContentProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 			 */
 			@Override
@@ -727,7 +727,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -737,7 +737,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -751,7 +751,7 @@
 		filtersList.setLabelProvider(new LabelProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 			 */
 			@Override
@@ -768,7 +768,7 @@
 
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
 					 */
 					@Override
@@ -808,7 +808,7 @@
 						new IInputValidator() {
 							/*
 							 * (non-Javadoc)
-							 * 
+							 *
 							 * @see org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String)
 							 */
 							@Override
@@ -848,7 +848,7 @@
 
 	/**
 	 * Set the selected filter from event.
-	 * 
+	 *
 	 * @param event
 	 */
 	protected void setSelectedFilter(SelectionChangedEvent event) {
@@ -869,7 +869,7 @@
 
 	/**
 	 * Remove the filters in selection.
-	 * 
+	 *
 	 * @param selection
 	 */
 	protected void removeFilters(ISelection selection) {
@@ -894,7 +894,7 @@
 
 	/**
 	 * Create a new filter called newName.
-	 * 
+	 *
 	 * @param newName
 	 */
 	private void createNewFilter(String newName) {
@@ -910,7 +910,7 @@
 
 	/**
 	 * Crate a newFilter called newName
-	 * 
+	 *
 	 * @param newName
 	 * @return MarkerFilter
 	 */
@@ -918,7 +918,7 @@
 
 	/**
 	 * Create the area for the selected filter.
-	 * 
+	 *
 	 * @param composite
 	 */
 	Composite createSelectedFilterArea(Composite composite) {
@@ -944,7 +944,7 @@
 
 	/**
 	 * Creates a separator line above the OK/Cancel buttons bar
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -958,7 +958,7 @@
 
 	/**
 	 * Creates a radio button with the given parent and text.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 * @param text
@@ -972,7 +972,7 @@
 		button.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -985,7 +985,7 @@
 
 	/**
 	 * Creates the area showing which resources should be considered.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -1009,7 +1009,7 @@
 
 	/**
 	 * Creates the area showing which marker types should be included.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -1066,7 +1066,7 @@
 
 	/**
 	 * Get the currently selected marker filter if there is only one selection.
-	 * 
+	 *
 	 * @return MarkerFilter or <code>null</code>.
 	 */
 	protected MarkerFilter getSelectedFilter() {
@@ -1079,14 +1079,14 @@
 
 	/**
 	 * Get the content provider for the receiver.
-	 * 
+	 *
 	 * @return ITreeContentProvider
 	 */
 	private ITreeContentProvider getTypesContentProvider() {
 		return new ITreeContentProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 			 */
 			@Override
@@ -1101,7 +1101,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -1110,7 +1110,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -1121,7 +1121,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
 			 */
 			@Override
@@ -1131,7 +1131,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
 			 */
 			@Override
@@ -1141,7 +1141,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
 			 */
 			@Override
@@ -1155,7 +1155,7 @@
 	 * This method is intended to be overridden by subclasses of FiltersDialog.
 	 * The attributes area will be created just above the Restore Defaults
 	 * button.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent Composite
 	 */
@@ -1167,7 +1167,7 @@
 
 	/**
 	 * Returns the selected marker types.
-	 * 
+	 *
 	 * @return List the selected marker types
 	 */
 	protected List getSelectedTypes() {
@@ -1185,14 +1185,14 @@
 
 	/**
 	 * Return the sorter for the receiver.
-	 * 
+	 *
 	 * @return ViewerSorter
 	 */
 	protected ViewerComparator getComparator() {
 		return new ViewerComparator() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -1206,7 +1206,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
 	@Override
@@ -1245,7 +1245,7 @@
 
 	/**
 	 * Sets the selected marker types.
-	 * 
+	 *
 	 * @param markerTypes
 	 */
 	void setSelectedTypes(List markerTypes) {
@@ -1300,7 +1300,7 @@
 
 	/**
 	 * Update the selected filter from the UI.
-	 * 
+	 *
 	 * @param filter
 	 */
 	protected void updateFilterFromUI(MarkerFilter filter) {
@@ -1339,7 +1339,7 @@
 
 	/**
 	 * Update the UI with the contents of filter.
-	 * 
+	 *
 	 * @param filter
 	 */
 	protected void updateUIWithFilter(MarkerFilter filter) {
@@ -1376,7 +1376,7 @@
 
 	/**
 	 * Set the marker filter.
-	 * 
+	 *
 	 * @param newFilter
 	 */
 	public void setFilter(MarkerFilter newFilter) {
@@ -1393,7 +1393,7 @@
 
 	/**
 	 * A selection has occured on one of the checkboxes or combos. Update.
-	 * 
+	 *
 	 */
 	protected void updateForSelection() {
 		updateEnabledState(true);
@@ -1402,7 +1402,7 @@
 
 	/**
 	 * Get all of the marker types avilable for the filter
-	 * 
+	 *
 	 * @param selected
 	 * @return Object[]
 	 */
@@ -1420,7 +1420,7 @@
 
 	/**
 	 * Build the list of types and categories from the supplied object
-	 * 
+	 *
 	 * @param elements
 	 * @param obj
 	 * @param categories
@@ -1457,7 +1457,7 @@
 
 	/**
 	 * Grey check the parent if required
-	 * 
+	 *
 	 * @param element
 	 * @param checked
 	 */
@@ -1496,7 +1496,7 @@
 
 	/**
 	 * Set the check state of the children of element to checked.
-	 * 
+	 *
 	 * @param element
 	 * @param checked
 	 */
@@ -1511,7 +1511,7 @@
 
 	/**
 	 * Create the buttons for selecting the filters.
-	 * 
+	 *
 	 * @param listArea
 	 */
 	protected void createFilterSelectButtons(Composite listArea) {
@@ -1525,7 +1525,7 @@
 		createButton(buttons, DESELECT_ALL_FILTERS_ID,
 				MarkerMessages.filtersDialog_deselectAll, false);
 	}
-	
+
     /*
      * (non-Javadoc)
      * @see org.eclipse.jface.dialogs.Dialog#isResizable()
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
index 46dbabb..a31d1d2 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogMarkerProperties.java
@@ -46,7 +46,7 @@
 
 /**
  * Shows the properties of a new or existing marker
- * 
+ *
  * In 3.3, this class was refactored to allow pre-existing public dialog classes
  * to share the implementation.  Note that certain methods are exposed as API
  * in public subclasses, so changes to the methods in this class should be
@@ -56,7 +56,7 @@
 public class DialogMarkerProperties extends TrayDialog {
 
 	private static final String DIALOG_SETTINGS_SECTION = "DialogMarkerPropertiesDialogSettings"; //$NON-NLS-1$
-	
+
 	/**
 	 * The marker being shown, or <code>null</code> for a new marker
 	 */
@@ -108,7 +108,7 @@
 	private boolean dirty;
 
 	private String title;
-	
+
 	/**
 	 * The name used to describe the specific kind of marker.  Used when
 	 * creating an undo command for the dialog, so that a specific name such
@@ -121,7 +121,7 @@
 	 * the resource and initial attributes for the new marker, use
 	 * <code>setResource</code> and <code>setInitialAttributes</code>. To
 	 * show or modify an existing marker, use <code>setMarker</code>.
-	 * 
+	 *
 	 * @param parentShell
 	 *            the parent shell
 	 */
@@ -134,7 +134,7 @@
 	 * the resource and initial attributes for the new marker, use
 	 * <code>setResource</code> and <code>setInitialAttributes</code>. To
 	 * show or modify an existing marker, use <code>setMarker</code>.
-	 * 
+	 *
 	 * @param parentShell
 	 *            the parent shell
 	 * @param title
@@ -144,20 +144,20 @@
 		super(parentShell);
 		this.title = title;
 	}
-	
+
 	/**
 	 * Creates the dialog. By default this dialog creates a new marker. To set
 	 * the resource and initial attributes for the new marker, use
 	 * <code>setResource</code> and <code>setInitialAttributes</code>. To
 	 * show or modify an existing marker, use <code>setMarker</code>.
-	 * 
+	 *
 	 * @param parentShell
 	 *            the parent shell
 	 * @param title
 	 *            the title of the dialog
 	 * @param markerName
 	 *            the name used to describe the specific kind of marker shown
-	 *            
+	 *
 	 * @since 3.3
 	 */
 	public DialogMarkerProperties(Shell parentShell, String title, String markerName) {
@@ -168,12 +168,12 @@
 
 	/**
      * Sets the marker to show or modify.
-     * <p>IMPORTANT:  Although this class is internal, there are public 
-     * subclasses that expose this method as API.  Changes in 
+     * <p>IMPORTANT:  Although this class is internal, there are public
+     * subclasses that expose this method as API.  Changes in
      * this implementation should be treated as API changes.
-     * 
+     *
      * @param marker the marker, or <code>null</code> to create a new marker
-     * 
+     *
      * @since 3.3
 	 */
 	public void setMarker(IMarker marker) {
@@ -190,12 +190,12 @@
      * Returns the marker being created or modified.
      * For a new marker, this returns <code>null</code> until
      * the dialog returns, but is non-null after.
-     * <p>IMPORTANT:  Although this method is protected and the class is 
+     * <p>IMPORTANT:  Although this method is protected and the class is
      * internal, there are public subclasses that expose this method as API.
      * Changes in this implementation should be treated as API changes.
-     * 
+     *
      * @return the marker
-     * 
+     *
      * @since 3.3
 	 */
 	protected IMarker getMarker() {
@@ -205,10 +205,10 @@
 	/**
      * Sets the resource to use when creating a new task.
      * If not set, the new task is created on the workspace root.
-     * <p>IMPORTANT:  Although this class is internal, there are public 
-     * subclasses that expose this method as API.  Changes in 
+     * <p>IMPORTANT:  Although this class is internal, there are public
+     * subclasses that expose this method as API.  Changes in
      * this implementation should be treated as API changes.
-     * 
+     *
      * @param resource the resource
 	 */
 	public void setResource(IResource resource) {
@@ -219,12 +219,12 @@
      * Returns the resource to use when creating a new task,
      * or <code>null</code> if none has been set.
      * If not set, the new task is created on the workspace root.
-     * <p>IMPORTANT:  Although this method is protected and the class is 
+     * <p>IMPORTANT:  Although this method is protected and the class is
      * internal, there are public subclasses that expose this method as API.
      * Changes in this implementation should be treated as API changes.
-     * 
+     *
      * @return the resource
-     * 
+     *
      * @since 3.3
 	 */
 	protected IResource getResource() {
@@ -234,12 +234,12 @@
 	/**
      * Sets initial attributes to use when creating a new task.
      * If not set, the new task is created with default attributes.
-     * <p>IMPORTANT:  Although this method is protected and the class is 
+     * <p>IMPORTANT:  Although this method is protected and the class is
      * internal, there are public subclasses that expose this method as API.
      * Changes in this implementation should be treated as API changes.
-     * 
+     *
      * @param initialAttributes the initial attributes
-     * 
+     *
      * @since 3.3
 	 */
 	protected void setInitialAttributes(Map initialAttributes) {
@@ -250,12 +250,12 @@
      * Returns the initial attributes to use when creating a new task,
      * or <code>null</code> if not set.
      * If not set, the new task is created with default attributes.
-     * <p>IMPORTANT:  Although this method is protected and the class is 
+     * <p>IMPORTANT:  Although this method is protected and the class is
      * internal, there are public subclasses that expose this method as API.
      * Changes in this implementation should be treated as API changes.
-     * 
+     *
      * @return the initial attributes
-     * 
+     *
      * @since 3.3
 	 */
 	protected Map getInitialAttributes() {
@@ -302,7 +302,7 @@
 		composite.setLayout(layout);
         GridData gridData = new GridData(GridData.FILL_HORIZONTAL);
         composite.setLayoutData(gridData);
-    
+
 		initializeDialogUnits(composite);
 		createDescriptionArea(composite);
 		if (marker != null) {
@@ -316,9 +316,9 @@
 		}
 		updateDialogFromMarker();
 		updateEnablement();
-        
+
         Dialog.applyDialogFont(composite);
-        
+
 		return composite;
 	}
 
@@ -331,7 +331,7 @@
 		gridData.horizontalSpan = 2;
 		seperator.setLayoutData(gridData);
 	}
-    
+
     /**
 	 * Method createCreationTimeArea.
 	 * @param parent
@@ -377,7 +377,7 @@
 	/**
 	 * This method is intended to be overridden by subclasses. The attributes
 	 * area is created between the creation time area and the resource area.
-	 * 
+	 *
 	 * @param parent
 	 *            the parent composite
 	 */
@@ -439,7 +439,7 @@
 
         descriptionText.selectAll();
     }
-    
+
     /**
      * Updates the dialog from the predefined attributes.
      */
@@ -483,7 +483,7 @@
 			}
         }
     }
-    
+
 	/**
 	 * Method declared on Dialog
 	 */
@@ -524,7 +524,7 @@
 			if (resource == null)
 				return;
 			op = new CreateMarkersOperation(type, attrs,
-					resource, getCreateOperationTitle()); 
+					resource, getCreateOperationTitle());
 		} else {
 			if (isDirty()) {
 				op = new UpdateMarkersOperation(marker, attrs,
@@ -557,7 +557,7 @@
 		attrs.put(IMarker.MESSAGE, descriptionText.getText());
 		return attrs;
 	}
-	
+
 	/**
 	 * Updates widget enablement for the dialog. Should be overridden by
 	 * subclasses.
@@ -583,19 +583,19 @@
 
 	/**
 	 * Sets the marker type when creating a new marker.
-	 * 
+	 *
 	 * @param type
 	 *            the marker type
-	 *            
+	 *
 	 * @since 3.3 this method is protected.
 	 */
 	protected void setType(String type) {
 		this.type = type;
 	}
-    
+
 	/* (non-Javadoc)
      * @see org.eclipse.jface.window.Dialog#getDialogBoundsSettings()
-     * 
+     *
      * @since 3.2
      */
 	@Override
@@ -607,26 +607,26 @@
         }
         return section;
 	}
-	
+
 	/**
 	 * Return the string that describes a modify marker operation.
 	 * Subclasses may override to more specifically describe the marker.
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	protected String getModifyOperationTitle() {
 		if (markerName == null) {
 			// we don't know what kind of marker is being modified
 			return MarkerMessages.DialogMarkerProperties_ModifyMarker;
-		} 
-		return NLS.bind(MarkerMessages.qualifiedMarkerCommand_title, 
+		}
+		return NLS.bind(MarkerMessages.qualifiedMarkerCommand_title,
 				MarkerMessages.DialogMarkerProperties_Modify, markerName);
 	}
-	
+
 	/**
 	 * Return the string that describes a create marker operation.
 	 * Subclasses may override to more specifically describe the marker.
-	 * 
+	 *
 	 * @since 3.3
 	 */
 	protected String getCreateOperationTitle() {
@@ -634,11 +634,11 @@
 			// we don't know what kind of marker is being created
 			return MarkerMessages.DialogMarkerProperties_CreateMarker;
 		}
-		return NLS.bind(MarkerMessages.qualifiedMarkerCommand_title, 
+		return NLS.bind(MarkerMessages.qualifiedMarkerCommand_title,
 				MarkerMessages.DialogMarkerProperties_Create, markerName);
-		
+
 	}
-	
+
     /*
      * (non-Javadoc)
      * @see org.eclipse.jface.dialogs.Dialog#isResizable()
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemFilter.java
index 7ea05d3..013526a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemFilter.java
@@ -46,9 +46,9 @@
 
 /**
  * DialogProblemFilter is the dialog class for problem filters.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class DialogProblemFilter extends DialogMarkerFilter {
 
@@ -75,7 +75,7 @@
 
 		/**
 		 * Create a descriptor group.
-		 * 
+		 *
 		 * @param parent
 		 */
 		public DescriptionGroup(Composite parent) {
@@ -97,7 +97,7 @@
 			combo.addSelectionListener(new SelectionAdapter() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
 				@Override
@@ -134,7 +134,7 @@
 
 		/**
 		 * Get the contains value.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public boolean getContains() {
@@ -143,7 +143,7 @@
 
 		/**
 		 * Return whether or not the contains value is of use.
-		 * 
+		 *
 		 * @param value
 		 */
 		public void setContains(boolean value) {
@@ -156,12 +156,12 @@
 
 		/**
 		 * Set the description field.
-		 * 
+		 *
 		 * @param text
 		 */
 		public void setDescription(String text) {
 			if (text == null) {
-				description.setText(""); //$NON-NLS-1$ 
+				description.setText(""); //$NON-NLS-1$
 			} else {
 				description.setText(text);
 			}
@@ -169,7 +169,7 @@
 
 		/**
 		 * Return the text for the description.
-		 * 
+		 *
 		 * @return String
 		 */
 		public String getDescription() {
@@ -179,7 +179,7 @@
 		/**
 		 * Update the enablement state based on whether or not the receiver is
 		 * enabled.
-		 * 
+		 *
 		 * @param enabled
 		 */
 		public void updateEnablement(boolean enabled) {
@@ -200,7 +200,7 @@
 
 		/**
 		 * Create a group for severity.
-		 * 
+		 *
 		 * @param parent
 		 */
 		public SeverityGroup(Composite parent) {
@@ -213,7 +213,7 @@
 			SelectionListener listener = new SelectionAdapter() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
 				@Override
@@ -238,7 +238,7 @@
 			errorButton.addSelectionListener(new SelectionAdapter() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
 				@Override
@@ -254,7 +254,7 @@
 			warningButton.addSelectionListener(new SelectionAdapter() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
 				@Override
@@ -270,7 +270,7 @@
 			infoButton.addSelectionListener(new SelectionAdapter() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
 				@Override
@@ -282,7 +282,7 @@
 
 		/**
 		 * Return whether or not sort by severity is selected.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public boolean isSeveritySelected() {
@@ -291,7 +291,7 @@
 
 		/**
 		 * Set whether or not the enabled button is selected.
-		 * 
+		 *
 		 * @param enabled
 		 */
 		public void setEnabled(boolean enabled) {
@@ -300,7 +300,7 @@
 
 		/**
 		 * Return whether or not the error button is selected.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public boolean isErrorSelected() {
@@ -309,7 +309,7 @@
 
 		/**
 		 * Set whether or not the error button is selected.
-		 * 
+		 *
 		 * @param selected
 		 */
 		public void setErrorSelected(boolean selected) {
@@ -318,7 +318,7 @@
 
 		/**
 		 * Return whether or not the warning button is selected.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public boolean isWarningSelected() {
@@ -327,7 +327,7 @@
 
 		/**
 		 * Set whether or not the warning button is selected.
-		 * 
+		 *
 		 * @param selected
 		 */
 		public void setWarningSelected(boolean selected) {
@@ -336,7 +336,7 @@
 
 		/**
 		 * Return whether or not the info button is selected.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public boolean isInfoSelected() {
@@ -345,7 +345,7 @@
 
 		/**
 		 * Set whether or not the erinforor button is selected.
-		 * 
+		 *
 		 * @param selected
 		 */
 		public void setInfoSelected(boolean selected) {
@@ -354,7 +354,7 @@
 
 		/**
 		 * Update enablement based on the enabled flag.
-		 * 
+		 *
 		 * @param enabled
 		 */
 		public void updateEnablement(boolean enabled) {
@@ -370,7 +370,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param parentShell
 	 * @param filters
 	 */
@@ -380,7 +380,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#createAttributesArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -397,7 +397,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateFilterFromUI(org.eclipse.ui.views.markers.internal.MarkerFilter)
 	 */
 	@Override
@@ -425,7 +425,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateUIWithFilter(org.eclipse.ui.views.markers.internal.MarkerFilter)
 	 */
 	@Override
@@ -451,7 +451,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateEnabledState(boolean)
 	 */
 	@Override
@@ -463,7 +463,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markerview.FiltersDialog#resetPressed()
 	 */
 	@Override
@@ -489,7 +489,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#createFiltersArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -535,7 +535,7 @@
 
 	/**
 	 * Create a composite for the registered filters.
-	 * 
+	 *
 	 * @param bottomComposite
 	 */
 	private void createRegisteredFilters(Composite bottomComposite) {
@@ -550,7 +550,7 @@
 		definedList.setContentProvider(new IStructuredContentProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 			 */
 			@Override
@@ -561,7 +561,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -571,7 +571,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -585,7 +585,7 @@
 		definedList.setLabelProvider(new LabelProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ILabelProvider#getText(java.lang.Object)
 			 */
 			@Override
@@ -599,7 +599,7 @@
 
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
 					 */
 					@Override
@@ -638,7 +638,7 @@
 
 	/**
 	 * Return the string with the details of filter.
-	 * 
+	 *
 	 * @param filter
 	 * @return String
 	 */
@@ -671,7 +671,7 @@
 
 	/**
 	 * Get the problem types String for filter.
-	 * 
+	 *
 	 * @param filter
 	 * @return String
 	 */
@@ -695,7 +695,7 @@
 	/**
 	 * Return the string for severity if there is one. Otherwise return
 	 * <code>null</code>.
-	 * 
+	 *
 	 * @param filter
 	 * @return String
 	 */
@@ -718,7 +718,7 @@
 	/**
 	 * Return the string for the description if there is one. If not return
 	 * <code>null</code>.
-	 * 
+	 *
 	 * @param filter
 	 * @return String or <code>null</code>.
 	 */
@@ -740,7 +740,7 @@
 
 	/**
 	 * Return the string that describes the scope.
-	 * 
+	 *
 	 * @param filter
 	 * @return String or <code>null</code> if the severity does not match.
 	 */
@@ -767,7 +767,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#setSelectedFilter(org.eclipse.jface.viewers.SelectionChangedEvent)
 	 */
 	@Override
@@ -778,7 +778,7 @@
 
 	/**
 	 * Show or hide the system label.
-	 * 
+	 *
 	 * @param systemLabelShowing
 	 */
 	protected void showSystemLabel(boolean systemLabelShowing) {
@@ -790,7 +790,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#createSelectedFilterArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -831,7 +831,7 @@
 
 	/**
 	 * Create the label for system filters.
-	 * 
+	 *
 	 * @param wrapper
 	 * @return Label
 	 */
@@ -842,7 +842,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#buttonPressed(int)
 	 */
 	@Override
@@ -860,7 +860,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#okPressed()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java
index ea5646c..2932130 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogProblemProperties.java
@@ -33,7 +33,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markerview.MarkerPropertiesDialog#createAttributesArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -57,7 +57,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markerview.MarkerPropertiesDialog#updateDialogFromMarker()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskFilter.java
index 39308f2..a8197d8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskFilter.java
@@ -50,7 +50,7 @@
 
 		/**
 		 * Create a new DescriptionGroup.
-		 * 
+		 *
 		 * @param parent
 		 */
 		public DescriptionGroup(Composite parent) {
@@ -111,7 +111,7 @@
 
 		public void setDescription(String text) {
 			if (text == null) {
-				description.setText(""); //$NON-NLS-1$ 
+				description.setText(""); //$NON-NLS-1$
 			} else {
 				description.setText(text);
 			}
@@ -143,14 +143,14 @@
 
 		/**
 		 * Create a new priority group.
-		 * 
+		 *
 		 * @param parent
 		 */
 		public PriorityGroup(Composite parent) {
 			SelectionListener listener = new SelectionAdapter() {
 				/*
 				 * (non-Javadoc)
-				 * 
+				 *
 				 * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 				 */
 				@Override
@@ -267,7 +267,7 @@
 
 		/**
 		 * Create a new StatusGroup.
-		 * 
+		 *
 		 * @param parent
 		 */
 		public StatusGroup(Composite parent) {
@@ -351,7 +351,7 @@
 
 	/**
 	 * Create a new instance of the receiver
-	 * 
+	 *
 	 * @param parentShell
 	 * @param filters
 	 */
@@ -361,7 +361,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#createAttributesArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -377,7 +377,7 @@
 		priorityGroup = new PriorityGroup(composite);
 		statusGroup = new StatusGroup(composite);
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateFilterFromUI(org.eclipse.ui.views.markers.internal.MarkerFilter)
 	 */
@@ -404,9 +404,9 @@
 
 		taskFilter.setSelectByDone(statusGroup.isStatusEnabled());
 		taskFilter.setDone(statusGroup.getDone());
-	
+
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#updateUIWithFilter(org.eclipse.ui.views.markers.internal.MarkerFilter)
 	 */
@@ -426,10 +426,10 @@
 
 		statusGroup.setEnabled(taskFilter.getSelectByDone());
 		statusGroup.setDone(taskFilter.getDone());
-		
+
 		super.updateUIWithFilter(filter);
 
-	
+
 	}
 
 	/* (non-Javadoc)
@@ -442,11 +442,11 @@
 		priorityGroup.updateEnablement(enabled);
 		statusGroup.updateEnablement(enabled);
 	}
-	
+
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markerview.FiltersDialog#resetPressed()
 	 */
 	@Override
@@ -470,7 +470,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.DialogMarkerFilter#newFilter(java.lang.String)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskProperties.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskProperties.java
index 5fd6546..f148c3b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskProperties.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/DialogTaskProperties.java
@@ -35,13 +35,13 @@
  */
 public class DialogTaskProperties extends DialogMarkerProperties {
 
-    private static final String PRIORITY_HIGH = 
+    private static final String PRIORITY_HIGH =
     	MarkerMessages.propertiesDialog_priorityHigh;
 
-    private static final String PRIORITY_NORMAL = 
+    private static final String PRIORITY_NORMAL =
     	MarkerMessages.propertiesDialog_priorityNormal;
 
-    private static final String PRIORITY_LOW = 
+    private static final String PRIORITY_LOW =
     	MarkerMessages.propertiesDialog_priorityLow;
 
     protected Combo priorityCombo;
@@ -75,14 +75,14 @@
 
         Label label = new Label(parent, SWT.NONE);
         label.setText(MarkerMessages.propertiesDialog_priority);
-        
+
         Composite composite = new Composite(parent, SWT.NONE);
         GridLayout layout = new GridLayout();
         layout.numColumns = 2;
         layout.marginWidth = 0;
         layout.marginHeight = 0;
         composite.setLayout(layout);
-        
+
         priorityCombo = new Combo(composite, SWT.READ_ONLY);
         priorityCombo.setItems(new String[] { PRIORITY_HIGH, PRIORITY_NORMAL,
                 PRIORITY_LOW });
@@ -234,26 +234,26 @@
         }
         return attrs;
     }
-    
+
 	/* (non-Javadoc)
      * @see org.eclipse.ui.views.markers.internal.DialogMarkerProperties.getModifyOperationTitle()
-     * 
+     *
      * @since 3.3
      */
 	@Override
 	protected String getModifyOperationTitle() {
 		return MarkerMessages.modifyTask_title;
 	}
-	
+
 	/* (non-Javadoc)
      * @see org.eclipse.ui.views.markers.internal.DialogMarkerProperties.getCreateOperationTitle()
-     * 
+     *
      * @since 3.3
      */
 	@Override
 	protected String getCreateOperationTitle() {
 		return MarkerMessages.DialogTaskProperties_CreateTask;
-		
+
 	}
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCategory.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCategory.java
index 012473e..10b76fb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCategory.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCategory.java
@@ -16,13 +16,13 @@
 
 /**
  * FieldCategory is the field for showing categories of markers.
- * 
+ *
  */
 public class FieldCategory extends AbstractField {
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDescription()
 	 */
 	@Override
@@ -32,7 +32,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDescriptionImage()
 	 */
 	@Override
@@ -42,7 +42,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderText()
 	 */
 	@Override
@@ -52,7 +52,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderImage()
 	 */
 	@Override
@@ -62,7 +62,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getValue(java.lang.Object)
 	 */
 	@Override
@@ -100,7 +100,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getImage(java.lang.Object)
 	 */
 	@Override
@@ -110,7 +110,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#compare(java.lang.Object,
 	 *      java.lang.Object)
 	 */
@@ -121,7 +121,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDefaultDirection()
 	 */
 	@Override
@@ -131,7 +131,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCreationTime.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCreationTime.java
index 12454ba..67ec224 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCreationTime.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldCreationTime.java
@@ -110,7 +110,7 @@
 			return 0;
 		}
     }
-    
+
     /* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDefaultDirection()
 	 */
@@ -118,7 +118,7 @@
 	public int getDefaultDirection() {
 		return TableComparator.ASCENDING;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldDone.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldDone.java
index 1aced17..01de218 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldDone.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldDone.java
@@ -50,7 +50,7 @@
 	public Image getDescriptionImage() {
 		return getImage(DESCRIPTION_IMAGE_PATH);
 	}
-	
+
 	/**
 	 * Get the image at path.
 	 * @param path
@@ -60,12 +60,12 @@
 		return JFaceResources.getResources().createImageWithDefault(
 				IDEWorkbenchPlugin
 						.getIDEImageDescriptor(path));
-		
+
 	}
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderText()
 	 */
 	@Override
@@ -75,7 +75,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderImage()
 	 */
 	@Override
@@ -85,7 +85,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getValue(java.lang.Object)
 	 */
 	@Override
@@ -95,7 +95,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getImage(java.lang.Object)
 	 */
 	@Override
@@ -116,7 +116,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#compare(java.lang.Object,
 	 *      java.lang.Object)
 	 */
@@ -132,7 +132,7 @@
 		int value2 = marker2.getDone();
 		return value1 - value2;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDefaultDirection()
 	 */
@@ -140,7 +140,7 @@
 	public int getDefaultDirection() {
 		return TableComparator.ASCENDING;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldFolder.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldFolder.java
index a04df0b..1c0bf2a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldFolder.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldFolder.java
@@ -106,7 +106,7 @@
 	public int getDefaultDirection() {
 		return TableComparator.ASCENDING;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldId.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldId.java
index 300f7b0..2743b3c 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldId.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldId.java
@@ -119,7 +119,7 @@
 	public int getPreferredWidth() {
 		return 0;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#isShowing()
 	 */
@@ -128,13 +128,13 @@
 		// Never show id
 		return false;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#setShowing(boolean)
 	 */
 	@Override
 	public void setShowing(boolean showing) {
 		// Ignore
-		
+
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldLineNumber.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldLineNumber.java
index 77579e5..ef01d7f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldLineNumber.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldLineNumber.java
@@ -86,7 +86,7 @@
 	    		if(concreteNode.getLocationString().length() == 0){
 	    			if (concreteNode.getLine() < 0) {
 						return MarkerMessages.Unknown;
-					}	    	   
+					}
 	    	        return NLS.bind(
 	    	        		MarkerMessages.label_lineNumber,
 	    	        		Integer.toString(concreteNode.getLine()));
@@ -95,17 +95,17 @@
 	    	}
 	    	return Util.EMPTY_STRING;
 		}
-		
+
 		if(obj instanceof IWorkbenchAdapter) {
 			return Util.EMPTY_STRING;//Don't show pending
 		}
-		
+
 		if(obj instanceof IMarker) {
 			return Util.getProperty(IMarker.LINE_NUMBER, (IMarker) obj);
-		} 
-		
+		}
+
 		return NLS.bind(MarkerMessages.FieldMessage_WrongType,obj.toString());
-        
+
     }
 
     /*
@@ -130,14 +130,14 @@
 
         ConcreteMarker marker1 = (ConcreteMarker) obj1;
         ConcreteMarker marker2 = (ConcreteMarker) obj2;
-        
+
         String location1 = marker1.getLocationString();
         String location2 = marker2.getLocationString();
-        
+
         if(location1.length() == 0 || location2.length() == 0) {
 			return marker1.getLine() - marker2.getLine();
 		}
-        
+
         return location1.compareTo(location2);
     }
 
@@ -148,7 +148,7 @@
 	public int getDefaultDirection() {
 		return TableComparator.ASCENDING;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldMessage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldMessage.java
index 53b50b0..a2360a7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldMessage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldMessage.java
@@ -16,9 +16,9 @@
 
 /**
  * The message field is the field for the description of the marker.
- * 
+ *
  * @since 3.1
- * 
+ *
  */
 public class FieldMessage extends AbstractField {
 
@@ -30,7 +30,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDescription()
 	 */
 	@Override
@@ -40,7 +40,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDescriptionImage()
 	 */
 	@Override
@@ -50,7 +50,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderText()
 	 */
 	@Override
@@ -60,7 +60,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderImage()
 	 */
 	@Override
@@ -70,7 +70,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getValue(java.lang.Object)
 	 */
 	@Override
@@ -87,7 +87,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getImage(java.lang.Object)
 	 */
 	@Override
@@ -97,7 +97,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#compare(java.lang.Object,
 	 *      java.lang.Object)
 	 */
@@ -117,7 +117,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDefaultDirection()
 	 */
 	@Override
@@ -127,7 +127,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldPriority.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldPriority.java
index 362b3df..7a40a19 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldPriority.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldPriority.java
@@ -47,7 +47,7 @@
 	public String getDescription() {
         return description;
     }
-    
+
     /**
 	 * Get the image at path.
 	 * @param path
@@ -57,7 +57,7 @@
 		return JFaceResources.getResources().createImageWithDefault(
 				IDEWorkbenchPlugin
 						.getIDEImageDescriptor(path));
-		
+
 	}
 
     /*
@@ -133,7 +133,7 @@
         int priority2 = ((TaskMarker) obj2).getPriority();
         return priority1 - priority2;
     }
-    
+
     /* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDefaultDirection()
 	 */
@@ -141,7 +141,7 @@
 	public int getDefaultDirection() {
 		return TableComparator.DESCENDING;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldResource.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldResource.java
index 586bf42..6df6c1a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldResource.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldResource.java
@@ -113,7 +113,7 @@
 	public int getDefaultDirection() {
 		return TableComparator.ASCENDING;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldSeverityAndMessage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldSeverityAndMessage.java
index 296d976..3f23ec3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldSeverityAndMessage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FieldSeverityAndMessage.java
@@ -19,7 +19,7 @@
 /**
  * The FieldSeverityAndMessage is the field that
  * displays severities and messages.
- * 
+ *
  */
 public class FieldSeverityAndMessage extends FieldMessage {
 
@@ -34,7 +34,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getDescription()
 	 */
 	@Override
@@ -44,7 +44,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getImage(java.lang.Object)
 	 */
 	@Override
@@ -74,7 +74,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#compare(java.lang.Object,
 	 *      java.lang.Object)
 	 */
@@ -84,7 +84,7 @@
 				|| !(obj2 instanceof ProblemMarker)) {
 			return 0;
 		}
-		
+
 		ProblemMarker marker1 = (ProblemMarker) obj1;
 		ProblemMarker marker2 = (ProblemMarker) obj2;
 
@@ -95,10 +95,10 @@
 					marker2.getDescriptionKey());
 		return severity2 - severity1;
 	}
-	
+
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderImage()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FilterEnablementAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FilterEnablementAction.java
index dcd578a..2adb0e7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FilterEnablementAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/FilterEnablementAction.java
@@ -14,7 +14,7 @@
 import org.eclipse.swt.SWT;
 
 /**
- * The FilterEnablementAction is an action for enabling 
+ * The FilterEnablementAction is an action for enabling
  * or disabling a filter.
  *
  */
@@ -33,9 +33,9 @@
 		setChecked(filter.isEnabled());
 		markerFilter = filter;
 		markerView = view;
-		
+
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.action.IAction#run()
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IField.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IField.java
index 97ff0be..9b32e01 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IField.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IField.java
@@ -41,7 +41,7 @@
 
     /**
      * @param obj
-     * @return The String value of the object for this particular field to be displayed to the user.  
+     * @return The String value of the object for this particular field to be displayed to the user.
      */
     String getValue(Object obj);
 
@@ -61,14 +61,14 @@
      *  <li>a positive number if the value of obj1 is greater than the value of obj2 for this field.
      */
     int compare(Object obj1, Object obj2);
-    
+
     /**
-     * Get the default direction for the receiver. Return either 
+     * Get the default direction for the receiver. Return either
      * {@link TableComparator#ASCENDING } or {@link TableComparator#DESCENDING }
      * @return int
      */
    int getDefaultDirection();
-   
+
    /**
     * Get the preferred width of the receiver.
     * @return int
@@ -80,12 +80,12 @@
     * @return boolean
     */
    boolean isShowing();
-   
+
    /**
     * Set whether or not the receiver is showing.
     * @param showing
     */
   void setShowing(boolean showing);
-   
- 
+
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IFilter.java
index a36b7de..e1f5612 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IFilter.java
@@ -18,7 +18,7 @@
 
     /**
      * Filters the list of elements. Removes the elements that need to filtered out from the list.
-     * 
+     *
      * @param elements
      */
     public Object[] filter(Object[] elements);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IMarkerResourceAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IMarkerResourceAdapter.java
index 8eff036..28a5cd1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IMarkerResourceAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/IMarkerResourceAdapter.java
@@ -18,7 +18,7 @@
  * <code>IMarkerResourceAdapter</code> is an adapter interface that
  * supplies the resource to query for markers to display in the marker view
  * or any of its subclasses.
- * 
+ *
  * Implementors of this interface are typically registered with an
  * IAdapterFactory for lookup via the getAdapter() mechanism.
  */
@@ -27,7 +27,7 @@
     /**
      * Returns the resource to query for the markers to display
      * for the given adaptable.
-     * 
+     *
      * @param adaptable the adaptable being queried.
      * @return the resource or <code>null</code> if there
      * 	is no adapted resource for this object.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ITableListener.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ITableListener.java
index d7f83843..f59efd3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ITableListener.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ITableListener.java
@@ -13,7 +13,7 @@
 import java.util.Collection;
 
 /**
- * 
+ *
  */
 public interface ITableListener {
     public void contentsFound(Collection contents);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerAdapter.java
index 2457aab..a845a27 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerAdapter.java
@@ -24,9 +24,9 @@
 
 /**
  * The MarkerAdapter is the adapter for the deferred update of markers.
- * 
+ *
  * @since 3.1
- * 
+ *
  */
 public class MarkerAdapter {
 
@@ -45,7 +45,7 @@
 		/**
 		 * Create a new instance of the receiver that has the markers between
 		 * startIndex and endIndex showing.
-		 * 
+		 *
 		 * @param adapter
 		 * @param startIndex
 		 * @param endIndex
@@ -60,7 +60,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.MarkerNode#getChildren()
 		 */
 		@Override
@@ -94,7 +94,7 @@
 
 		/**
 		 * Return the number of errors being displayed.
-		 * 
+		 *
 		 * @return int
 		 */
 		int getDisplayedSize() {
@@ -106,7 +106,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.MarkerNode#getParent()
 		 */
 		@Override
@@ -116,7 +116,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.MarkerNode#getDescription()
 		 */
 		@Override
@@ -140,7 +140,7 @@
 
 		/**
 		 * Get the total size of the receiver.
-		 * 
+		 *
 		 * @return int
 		 */
 		private int getTotalSize() {
@@ -149,7 +149,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.MarkerNode#isConcrete()
 		 */
 		@Override
@@ -159,7 +159,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.MarkerNode#getConcreteRepresentative()
 		 */
 		@Override
@@ -169,7 +169,7 @@
 
 		/**
 		 * Return the name of the receiver.
-		 * 
+		 *
 		 * @return String
 		 */
 		public String getName() {
@@ -189,7 +189,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param markerView
 	 */
 	MarkerAdapter(MarkerView markerView) {
@@ -199,7 +199,7 @@
 	/**
 	 * Return the category sorter for the receiver. This should only be called
 	 * in hierarchal mode or there will be a ClassCastException.
-	 * 
+	 *
 	 * @return CategorySorter
 	 */
 	public CategoryComparator getCategorySorter() {
@@ -208,7 +208,7 @@
 
 	/**
 	 * Build all of the markers in the receiver.
-	 * 
+	 *
 	 * @param collector
 	 * @param monitor
 	 */
@@ -262,9 +262,9 @@
 
 				newMarkers = SortUtil.getFirst(newMarkers, (Comparator) sorter,
 						markerLimit, mon);
-				if (monitor.isCanceled()) 
+				if (monitor.isCanceled())
 					return;
-				
+
 				sorter.sort(view.getViewer(), newMarkers.toArray());
 			}
 
@@ -298,7 +298,7 @@
 
 	/**
 	 * Return whether or not a hierarchy is showing.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	boolean isShowingHierarchy() {
@@ -312,7 +312,7 @@
 
 	/**
 	 * Break the marker up into categories
-	 * 
+	 *
 	 * @param markers
 	 * @param start
 	 *            the start index in the markers
@@ -371,7 +371,7 @@
 	/**
 	 * Get the name for the category from the marker at categoryStart in
 	 * markers.
-	 * 
+	 *
 	 * @param markers
 	 * @param categoryStart
 	 * @return String
@@ -383,7 +383,7 @@
 
 	/**
 	 * Return the current list of markers.
-	 * 
+	 *
 	 * @return MarkerList
 	 */
 	public MarkerList getCurrentMarkers() {
@@ -399,7 +399,7 @@
 
 	/**
 	 * Return the elements in the adapter.
-	 * 
+	 *
 	 * @param root
 	 * @return Object[]
 	 */
@@ -421,7 +421,7 @@
 	/**
 	 * Return whether or not the receiver has markers without scheduling
 	 * anything if it doesn't.
-	 * 
+	 *
 	 * @return boolean <code>true</code> if the markers have not been
 	 *         calculated.
 	 */
@@ -431,7 +431,7 @@
 
 	/**
 	 * Return the categories for the receiver.
-	 * 
+	 *
 	 * @return MarkerCategory[] or <code>null</code> if there are no
 	 *         categories.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerFilter.java
index 746243a..e039d04 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerFilter.java
@@ -44,7 +44,7 @@
 
 	static final String TAG_ENABLED = "enabled"; //$NON-NLS-1$
 
-	
+
 	/**
 	 * The tag for the scope.
 	 */
@@ -119,7 +119,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param filterName
 	 *            The human readable name for the filter
 	 * @param rootTypes
@@ -142,7 +142,7 @@
 
 	/**
 	 * List all types known to this MarkerFilter.
-	 * 
+	 *
 	 * @param types
 	 *            list to be filled in with types
 	 */
@@ -171,7 +171,7 @@
 
 	/**
 	 * Adds all markers in the given set of resources to the given list
-	 * 
+	 *
 	 * @param resultList
 	 * @param resources
 	 * @param markerTypeId
@@ -311,7 +311,7 @@
 	/**
 	 * Subclasses should override to determine if the given marker passes the
 	 * filter.
-	 * 
+	 *
 	 * @param marker
 	 * @return <code>true</code> if the marker passes the filter and
 	 *         <code>false</code> otherwise
@@ -322,7 +322,7 @@
 
 	/**
 	 * Searches the workspace for markers that pass this filter.
-	 * 
+	 *
 	 * @return Collection of markers.
 	 */
 	Collection findMarkers(IProgressMonitor mon, boolean ignoreExceptions)
@@ -377,7 +377,7 @@
 	/**
 	 * Return the resources in the working set. If it is empty then return the
 	 * workspace root.
-	 * 
+	 *
 	 * @return IResource[]
 	 */
 	IResource[] getResourcesInWorkingSet() {
@@ -408,7 +408,7 @@
 	 * Returns a set of strings representing the full pathnames to every
 	 * resource directly or indirectly contained in the working set. A resource
 	 * is in the working set iff its path name can be found in this set.
-	 * 
+	 *
 	 * @return Set
 	 */
 	private Set getWorkingSetAsSetOfPaths() {
@@ -448,7 +448,7 @@
 
 	/**
 	 * Returns the set of projects that contain the given set of resources.
-	 * 
+	 *
 	 * @param resources
 	 * @return IProject[]
 	 */
@@ -464,7 +464,7 @@
 
 	/**
 	 * Return the projects for the elements.
-	 * 
+	 *
 	 * @param elements
 	 *            collection of IResource or IResourceMapping
 	 * @return Collection of IProject
@@ -490,7 +490,7 @@
 
 	/**
 	 * Return whether or not the receiver would select the marker.
-	 * 
+	 *
 	 * @param marker
 	 * @return boolean
 	 */
@@ -510,7 +510,7 @@
 
 	/**
 	 * Returns whether the specified marker should be filter out or not.
-	 * 
+	 *
 	 * @param marker
 	 *            the marker to test
 	 * @return true=the marker should not be filtered out false=the marker
@@ -579,7 +579,7 @@
 	 * Previous versions of this method used IContainmentAdapter for containment
 	 * tests. For performance reasons, this is no longer possible. Code that
 	 * relies on this behavior should be updated appropriately.
-	 * 
+	 *
 	 * @param element
 	 *            resource to test for enclosure by a working set element
 	 * @return true if element is enclosed by a working set element and false
@@ -612,7 +612,7 @@
 	 * <li><code>MarkerFilter.ON_WORKING_SET</code> if showing items in some
 	 * working set.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @return int
 	 */
 	public int getOnResource() {
@@ -621,7 +621,7 @@
 
 	/**
 	 * Sets the type of filtering by selection.
-	 * 
+	 *
 	 * @param onResource
 	 *            must be one of:
 	 *            <ul>
@@ -647,7 +647,7 @@
 
 	/**
 	 * Sets the focused resources.
-	 * 
+	 *
 	 * @param resources
 	 */
 	public void setFocusResource(IResource[] resources) {
@@ -668,7 +668,7 @@
 	/**
 	 * <b>Warning:</b> for internal package use only. Return the root marker
 	 * types.
-	 * 
+	 *
 	 * @return the root marker types.
 	 */
 	public List getRootTypes() {
@@ -678,7 +678,7 @@
 	/**
 	 * <b>Warning:</b> for internal package use only. Return the selected
 	 * types.
-	 * 
+	 *
 	 * @return the selected marker types to be displayed.
 	 */
 	public List getSelectedTypes() {
@@ -687,7 +687,7 @@
 
 	/**
 	 * Find the typeModel entry that matches id.
-	 * 
+	 *
 	 * @param id
 	 *            the ID for a marker type
 	 * @return MarkerType or <code>null</code> if it is not found.
@@ -732,7 +732,7 @@
 
 	/**
 	 * Restore the state in the memento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	public final void restoreState(IMemento memento) {
@@ -744,7 +744,7 @@
 	/**
 	 * Restore the state of the receiver in the supplied settings. This is kept
 	 * for backwards compatibility with 3.1 dialog settings.
-	 * 
+	 *
 	 * @param settings
 	 */
 	public void restoreFilterSettings(IDialogSettings settings) {
@@ -827,7 +827,7 @@
 
 	/**
 	 * Set the selected types based on the value.
-	 * 
+	 *
 	 * @param selectedTypesValue
 	 */
 	void generateSelectedTypes(String selectedTypesValue) {
@@ -847,7 +847,7 @@
 
 	/**
 	 * Find the markerType matching typeName
-	 * 
+	 *
 	 * @param typeName
 	 * @return MarkerType
 	 */
@@ -857,7 +857,7 @@
 
 	/**
 	 * Restore the state of the receiver in the supplied settings.
-	 * 
+	 *
 	 * @param memento
 	 */
 	protected void restoreFilterSettings(IMemento memento) {
@@ -934,7 +934,7 @@
 
 	/**
 	 * Save the filter settings for the receiver.
-	 * 
+	 *
 	 * @param settings
 	 */
 	public void saveFilterSettings(IMemento settings) {
@@ -965,7 +965,7 @@
 
 	/**
 	 * Get the name of the receiver
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getName() {
@@ -974,7 +974,7 @@
 
 	/**
 	 * Make a clone of the receiver.
-	 * 
+	 *
 	 * @return MarkerFilter
 	 * @throws CloneNotSupportedException
 	 */
@@ -984,7 +984,7 @@
 
 	/**
 	 * Set the selected types.
-	 * 
+	 *
 	 * @param selectedTypes
 	 *            List of MarkerType.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroup.java
index 3a3c094..1a0d68d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroup.java
@@ -32,13 +32,13 @@
 
 /**
  * @since 3.2
- * 
+ *
  */
 public class MarkerGroup {
 
 	/**
 	 * Create a new MarkerGroup from element.
-	 * 
+	 *
 	 * @param element
 	 * @return MarkerGroup
 	 */
@@ -61,7 +61,7 @@
 		/**
 		 * Create a mapping for an attribute with name attributeName and value
 		 * value to the supplied entry.
-		 * 
+		 *
 		 * @param entry
 		 * @param attributeName
 		 * @param value
@@ -76,7 +76,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.FieldMarkerGroup.EntryMapping#hasAttributes()
 		 */
 		@Override
@@ -86,7 +86,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.FieldMarkerGroup.EntryMapping#testAttribute(org.eclipse.ui.views.markers.internal.ConcreteMarker)
 		 */
 		@Override
@@ -116,7 +116,7 @@
 
 		/**
 		 * Create an entry mapping for the receiver.
-		 * 
+		 *
 		 * @param entry
 		 */
 		EntryMapping(MarkerGroupingEntry entry) {
@@ -125,7 +125,7 @@
 
 		/**
 		 * Return whether or not the receiver tests attributes.
-		 * 
+		 *
 		 * @return boolean
 		 */
 		public boolean hasAttributes() {
@@ -134,7 +134,7 @@
 
 		/**
 		 * Test the attribute of the marker to find a grouping.
-		 * 
+		 *
 		 * @param marker
 		 * @return MarkerGroupingEntry or <code>null</code> if there is not
 		 *         entry.
@@ -156,7 +156,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#compare(java.lang.Object,
 		 *      java.lang.Object)
 		 */
@@ -173,7 +173,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderImage()
 		 */
 		@Override
@@ -183,7 +183,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getColumnHeaderText()
 		 */
 		@Override
@@ -193,7 +193,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getDefaultDirection()
 		 */
 		@Override
@@ -203,7 +203,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getDescription()
 		 */
 		@Override
@@ -213,7 +213,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getDescriptionImage()
 		 */
 		@Override
@@ -223,7 +223,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getImage(java.lang.Object)
 		 */
 		@Override
@@ -233,7 +233,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getPreferredWidth()
 		 */
 		@Override
@@ -243,7 +243,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#getValue(java.lang.Object)
 		 */
 		@Override
@@ -260,7 +260,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#isShowing()
 		 */
 		@Override
@@ -270,7 +270,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.views.markers.internal.IField#setShowing(boolean)
 		 */
 		@Override
@@ -283,9 +283,9 @@
 
 	/**
 	 * GroupMarkerField is the MarkerField used for MarkerGroupungs
-	 * 
+	 *
 	 * @since 3.4
-	 * 
+	 *
 	 */
 	class GroupMarkerField extends MarkerField {
 
@@ -294,7 +294,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem)
 		 */
 		@Override
@@ -306,7 +306,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#compare(org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem,
 		 *      org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem)
 		 */
@@ -338,7 +338,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getName()
 		 */
 		@Override
@@ -363,7 +363,7 @@
 
 	/**
 	 * Create a new instance of the receiver called name with id identifier.
-	 * 
+	 *
 	 * @param element
 	 */
 	protected MarkerGroup(IConfigurationElement element) {
@@ -378,10 +378,10 @@
 	 * Process the markerContentEntries for the reciever.
 	 */
 	private void processEntries() {
-		
+
 		if(configurationElement == null)
 			return;
-		
+
 		IConfigurationElement[] markerEntryElements = configurationElement
 				.getChildren(MarkerSupportRegistry.MARKER_GROUPING_ENTRY);
 
@@ -448,7 +448,7 @@
 
 	/**
 	 * Add the entry for the markerType.
-	 * 
+	 *
 	 * @param markerType
 	 * @param entry
 	 */
@@ -474,7 +474,7 @@
 	/**
 	 * Find the group value. If it cannot be found in an attribute mapping then
 	 * return null;
-	 * 
+	 *
 	 * @param concreteMarker
 	 * @return String or <code>null</code>
 	 */
@@ -489,7 +489,7 @@
 
 	/**
 	 * Find the group for the marker of the specified marker type.
-	 * 
+	 *
 	 * @param type
 	 * @param marker
 	 * @return MarkerGroupingEntry
@@ -522,7 +522,7 @@
 
 	/**
 	 * Return the field for the receiver.
-	 * 
+	 *
 	 * @return {@link IField}
 	 */
 	public IField getField() {
@@ -531,7 +531,7 @@
 
 	/**
 	 * Return the id of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getId() {
@@ -540,7 +540,7 @@
 
 	/**
 	 * Get the attribute mapping for the marker
-	 * 
+	 *
 	 * @param marker
 	 * @return MarkerGroupingEntry
 	 */
@@ -554,7 +554,7 @@
 
 	/**
 	 * Return the markerField for the receiver.
-	 * 
+	 *
 	 * @return MarkerField
 	 */
 	public MarkerField getMarkerField() {
@@ -563,7 +563,7 @@
 
 	/**
 	 * Return the marker types that match and are subtypes of markerType.
-	 * 
+	 *
 	 * @param markerType
 	 * @return MarkerType[]
 	 */
@@ -591,7 +591,7 @@
 
 	/**
 	 * Return the title for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getTitle() {
@@ -600,7 +600,7 @@
 
 	/**
 	 * Add an attributeMapping for the markerType.
-	 * 
+	 *
 	 * @param attributeGrouping
 	 * @param entry
 	 * @param attributeValue
@@ -616,7 +616,7 @@
 
 	/**
 	 * Remove the entry from all of the entries in the receiver.
-	 * 
+	 *
 	 * @param entry
 	 */
 	public void remove(MarkerGroupingEntry entry) {
@@ -640,7 +640,7 @@
 
 	/**
 	 * Set entry and the default entry for the supplied markerType.
-	 * 
+	 *
 	 * @param markerType
 	 * @param entry
 	 */
@@ -652,7 +652,7 @@
 
 	/**
 	 * Unmap the attributeMarkerGrouping from the receiver.
-	 * 
+	 *
 	 * @param attributeMarkerGrouping
 	 */
 	public void unmap(AttributeMarkerGrouping attributeMarkerGrouping) {
@@ -673,7 +673,7 @@
 
 	}
 	/**
-	 * Returns the comparator that can be used for 
+	 * Returns the comparator that can be used for
 	 * sorting the MarkerGroupingEntry(s) in the group.
 	 * @return Comparator
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroupingEntry.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroupingEntry.java
index 425f675..e3d8157 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroupingEntry.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerGroupingEntry.java
@@ -17,9 +17,9 @@
 /**
  * MarkerGroupingEntry is the configuration object for the markerGroupingEntry
  * extension.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class MarkerGroupingEntry {
 
@@ -52,7 +52,7 @@
 
 	/**
 	 * Set the receiver as the default grouping entry for type markerType.
-	 * 
+	 *
 	 * @param markerType
 	 *            String
 	 */
@@ -63,7 +63,7 @@
 
 	/**
 	 * Return the id for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getId() {
@@ -72,7 +72,7 @@
 
 	/**
 	 * Set the group for the receiver.
-	 * 
+	 *
 	 * @param group
 	 */
 	public void setGroup(MarkerGroup group) {
@@ -82,7 +82,7 @@
 
 	/**
 	 * Get the label of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getLabel() {
@@ -91,7 +91,7 @@
 
 	/**
 	 * Return the priority of the receiver.
-	 * 
+	 *
 	 * @return int
 	 */
 	public int getPriority() {
@@ -100,7 +100,7 @@
 
 	/**
 	 * Return the marker group for the receiver.
-	 * 
+	 *
 	 * @return FieldMarkerGroup
 	 */
 	public MarkerGroup getMarkerGroup() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerList.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerList.java
index 592cfb4..bf5702d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerList.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerList.java
@@ -29,7 +29,7 @@
  * Represents a list of ConcreteMarkers.
  */
 public class MarkerList {
-	
+
 	private int[] markerCounts = null;
 
 	private ConcreteMarker[] markers;
@@ -54,7 +54,7 @@
 
 	/**
 	 * Creates a list containing the given set of markers
-	 * 
+	 *
 	 * @param markers
 	 */
 	public MarkerList(ConcreteMarker[] markers) {
@@ -77,7 +77,7 @@
 
 	/**
 	 * Returns the marker table or lazily creates it if it doesn't exist yet
-	 * 
+	 *
 	 * @return a map of IMarker onto ConcreteMarker, containing all the
 	 *         ConcreteMarkers in the list
 	 */
@@ -97,7 +97,7 @@
 	/**
 	 * Returns an existing marker from the list that is associated with the
 	 * given IMarker
-	 * 
+	 *
 	 * @param toFind
 	 *            the IMarker to lookup in the list
 	 * @return the ConcreteMarker that corresponds to the given IMarker
@@ -105,7 +105,7 @@
 	public ConcreteMarker getMarker(IMarker toFind) {
 		return (ConcreteMarker) getMarkerMap().get(toFind);
 	}
-	
+
 	/**
 	 * Return the list of IMarkers contained in the receiver.
 	 * @return IMarker[]
@@ -113,7 +113,7 @@
 	public IMarker[] getIMarkers(){
 		IMarker[] iMarkers = new IMarker[markers.length];
 		for (int i = 0; i < markers.length; i++) {
-			iMarkers[i] = markers[i].getMarker();			
+			iMarkers[i] = markers[i].getMarker();
 		}
 		return iMarkers;
 	}
@@ -171,7 +171,7 @@
 
 	/**
 	 * Computes the set of markers that match the given filter
-	 * 
+	 *
 	 * @param filters
 	 *            the filters to apply
 	 * @param mon
@@ -196,7 +196,7 @@
 	/**
 	 * Returns a new MarkerList containing all markers in the workspace of the
 	 * specified types
-	 * 
+	 *
 	 * @param types
 	 * @return IMarker[]
 	 * @throws CoreException
@@ -217,7 +217,7 @@
 
 	/**
 	 * Returns the markers in the list. Read-only.
-	 * 
+	 *
 	 * @return an array of markers in the list
 	 */
 	public ConcreteMarker[] toArray() {
@@ -226,7 +226,7 @@
 
 	/**
 	 * Returns the markers in this list. Read-only.
-	 * 
+	 *
 	 * @return the markers in the list
 	 */
 	// public Collection getMarkers() {
@@ -234,7 +234,7 @@
 	// }
 	/**
 	 * Returns the number of items in the list
-	 * 
+	 *
 	 * @return the number of items
 	 */
 	public int getItemCount() {
@@ -243,7 +243,7 @@
 
 	/**
 	 * Returns the number of error markers in the list
-	 * 
+	 *
 	 * @return the number of errors
 	 */
 	public int getErrors() {
@@ -252,7 +252,7 @@
 
 	/**
 	 * Returns the number of info markers in the list
-	 * 
+	 *
 	 * @return the number of info markers
 	 */
 	public int getInfos() {
@@ -261,7 +261,7 @@
 
 	/**
 	 * Returns the number of warning markers in the list
-	 * 
+	 *
 	 * @return the number of warning markers
 	 */
 	public int getWarnings() {
@@ -271,7 +271,7 @@
 	/**
 	 * Returns an array of marker counts where getMarkerCounts()[severity] is
 	 * the number of markers in the list with the given severity.
-	 * 
+	 *
 	 * @return an array of marker counts
 	 */
 	private int[] getMarkerCounts() {
@@ -296,7 +296,7 @@
 	/**
 	 * Get the array that is the internal representation of the marker list
 	 * without making a copy.
-	 * 
+	 *
 	 * @return Object[]
 	 */
 	public Object[] getArray() {
@@ -305,7 +305,7 @@
 
 	/**
 	 * Get the size of the receiver.
-	 * 
+	 *
 	 * @return int
 	 */
 	public int getSize() {
@@ -314,7 +314,7 @@
 
 	/**
 	 * Return the markers at index
-	 * 
+	 *
 	 * @param index
 	 * @return ConcreteMarker
 	 */
@@ -329,19 +329,19 @@
 	 */
 	public void updateMarkers(Collection addedMarkers,Collection removedMarkers) {
 		List list = new ArrayList(asList());
-		list.addAll(addedMarkers);		
-		list.removeAll(removedMarkers);	
+		list.addAll(addedMarkers);
+		list.removeAll(removedMarkers);
 		markers = new ConcreteMarker[list.size()];
 		list.toArray(markers);
 	}
-	
+
 	/**
 	 * Refresh all of the markers in the receiver.
 	 */
 	public void refreshAll() {
 		for (int i = 0; i < markers.length; i++) {
 			markers[i].refresh();
-		}		
+		}
 	}
 
 	/**
@@ -351,6 +351,6 @@
 		for (int i = 0; i < markers.length; i++) {
 			markers[i].setGroup(null);
 		}
-		
+
 	}
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java
index 486b7f1..b378210 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java
@@ -15,7 +15,7 @@
 
 /**
  * MarkerMessages is the class that handles the messages for the markers.
- * 
+ *
  */
 public class MarkerMessages extends NLS {
 
@@ -69,14 +69,14 @@
 	public static String selectAllAction_calculating;
 	public static String selectAllAction_applying;
 	public static String propertiesAction_title;
-	
+
 	public static String deleteActionConfirmTitle;
 	public static String deleteActionConfirmMessage;
 
 	public static String filtersDialog_title;
 	public static String configureFiltersCommand_title;
 	public static String configureFiltersDialog_title;
-	
+
 	public static String configEditDialog_name;
 
 	public static String filtersDialog_showItemsOfType;
@@ -216,7 +216,7 @@
 	public static String MarkerFilter_renameName;
 	public static String MarkerFilter_showAllCommand_title;
 	public static String MarkerFilter_ConfigureContentsCommand_title;
-	
+
 	public static String MarkerFilterDialog_title;
 	public static String MarkerFilterDialog_message;
 	public static String MarkerFilterDialog_emptyMessage;
@@ -234,7 +234,7 @@
 	public static String MarkerPreferences_HiddenColumnsTitle;
 	public static String MarkerPreferences_AtLeastOneVisibleColumn;
 	public static String MarkerPreferences_WidthOfShownColumn;
-	
+
 	public static String ProblemFilterDialog_System_Filters_Title;
 	public static String ProblemFilterDialog_All_Problems;
 	public static String ProblemFilterDialog_Selected_Types;
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNode.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNode.java
index 408293a..502ecbb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNode.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNode.java
@@ -12,7 +12,7 @@
 package org.eclipse.ui.views.markers.internal;
 
 /**
- * The MarkerNode class is the class that handles category nodes and 
+ * The MarkerNode class is the class that handles category nodes and
  * concrete markers.
  *
  */
@@ -50,6 +50,6 @@
 	 * @return ConcreteMarker
 	 */
 	public abstract ConcreteMarker getConcreteRepresentative();
-	
+
 
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNodeRefreshRecord.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNodeRefreshRecord.java
index 1b6be7c..b51ec09 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNodeRefreshRecord.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerNodeRefreshRecord.java
@@ -18,7 +18,7 @@
 	Collection removedMarkers;
 	Collection addedMarkers;
 	Collection changedMarkers;
-	
+
 	/**
 	 * Create a new instance of the receiver with the supplied markers.
 	 * @param removed
@@ -37,15 +37,15 @@
 	 */
 	public void remove(MarkerNode node) {
 		removedMarkers.add(node);
-		
+
 	}
-	
+
 	/**
 	 * Add the node to the list of adds.
 	 * @param node
 	 */
 	public void add(MarkerNode node) {
 		addedMarkers.add(node);
-		
+
 	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerResolutionDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerResolutionDialog.java
index b3c8e5d..f36a31a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerResolutionDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerResolutionDialog.java
@@ -62,9 +62,9 @@
 
 /**
  * The MarkerResolutionDialog is the dialog used to select a marker resolution.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class MarkerResolutionDialog extends TitleAreaDialog {
 
@@ -92,7 +92,7 @@
 
 	/**
 	 * Create a new instance of the receiver with the given resolutions.
-	 * 
+	 *
 	 * @param shell
 	 * @param marker
 	 *            the marker to show
@@ -112,7 +112,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
 	@Override
@@ -123,7 +123,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -166,7 +166,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -176,7 +176,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -198,7 +198,7 @@
 				.addSelectionChangedListener(new ISelectionChangedListener() {
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
 					 */
 					@Override
@@ -283,7 +283,7 @@
 	/**
 	 * Choose a good whitespace position for a page break. Start in the middle
 	 * of the message.
-	 * 
+	 *
 	 * @param message
 	 * @return int -1 if there is no whitespace to choose.
 	 */
@@ -303,7 +303,7 @@
 		resolutionsComparator = new ViewerComparator() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ViewerComparator#compare(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -317,7 +317,7 @@
 
 	/**
 	 * Create the buttons for the table.
-	 * 
+	 *
 	 * @param control
 	 * @return Composite
 	 */
@@ -338,7 +338,7 @@
 		selectAll.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -356,7 +356,7 @@
 		deselectAll.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -374,7 +374,7 @@
 		addMatching.addSelectionListener(new SelectionAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
 			 */
 			@Override
@@ -396,7 +396,7 @@
 
 	/**
 	 * Return the single selected WorkbenchMarkerResolution if there is one.
-	 * 
+	 *
 	 * @return WorkbenchMarkerResolution or <code>null</code> if there is no
 	 *         selection or the selection is not a WorkbenchMarkerResolution.
 	 */
@@ -412,7 +412,7 @@
 
 	/**
 	 * Return the marker resolution that is currenly selected/
-	 * 
+	 *
 	 * @return IMarkerResolution or <code>null</code> if there is no
 	 *         selection.
 	 */
@@ -431,7 +431,7 @@
 	/**
 	 * Add all of the markers that have resolutions compatible with the
 	 * receiver.
-	 * 
+	 *
 	 * @return boolean <code>true</code> if the operation completed.
 	 */
 	protected boolean addMatchingMarkers(
@@ -454,7 +454,7 @@
 		BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see java.lang.Runnable#run()
 			 */
 			@Override
@@ -486,7 +486,7 @@
 	/**
 	 * Spin the event loop and see if the cancel button was pressed. If it was
 	 * then clear the flags and return <code>true</code>.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	private boolean progressCancelled() {
@@ -502,7 +502,7 @@
 
 	/**
 	 * Create the table for the markers/
-	 * 
+	 *
 	 * @param control
 	 */
 	private void createMarkerTable(Composite control) {
@@ -514,7 +514,7 @@
 		markersTable.setContentProvider(new IStructuredContentProvider() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 			 */
 			@Override
@@ -524,7 +524,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 			 */
 			@Override
@@ -542,7 +542,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 			 *      java.lang.Object, java.lang.Object)
 			 */
@@ -557,7 +557,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
 			 *      int)
 			 */
@@ -571,7 +571,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
 			 *      int)
 			 */
@@ -590,7 +590,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener)
 			 */
 			@Override
@@ -601,7 +601,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose()
 			 */
 			@Override
@@ -612,7 +612,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object,
 			 *      java.lang.String)
 			 */
@@ -623,7 +623,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener)
 			 */
 			@Override
@@ -636,7 +636,7 @@
 		markersTable.addCheckStateListener(new ICheckStateListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent)
 			 */
 			@Override
@@ -678,7 +678,7 @@
 
 	/**
 	 * Set the dialog to be complete.
-	 * 
+	 *
 	 * @param complete
 	 */
 	protected void setComplete(boolean complete) {
@@ -688,7 +688,7 @@
 
 	/**
 	 * Return all of the resolutions to choose from in the receiver.
-	 * 
+	 *
 	 * @return IMarkerResolution[]
 	 */
 	public IMarkerResolution[] getResolutions() {
@@ -697,7 +697,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#create()
 	 */
 	@Override
@@ -712,7 +712,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
 	@Override
@@ -760,7 +760,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#cancelPressed()
 	 */
 	@Override
@@ -772,7 +772,7 @@
 		}
 		super.cancelPressed();
 	}
-	
+
     /*
      * (non-Javadoc)
      * @see org.eclipse.jface.dialogs.Dialog#isResizable()
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java
index 33af605..3791734 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAction.java
@@ -29,14 +29,14 @@
 /**
  * MarkerSelectionProviderAction is the abstract super class of the selection
  * provider actions used by marker views.
- * 
+ *
  */
 public abstract class MarkerSelectionProviderAction extends
 		SelectionProviderAction {
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param provider
 	 * @param text
 	 */
@@ -48,7 +48,7 @@
 
 	/**
 	 * Get the selected markers in the receiver.
-	 * 
+	 *
 	 * @return IMarker[]
 	 */
 	IMarker[] getSelectedMarkers() {
@@ -58,7 +58,7 @@
 
 	/**
 	 * Return the selected markers for the structured selection.
-	 * 
+	 *
 	 * @param structured
 	 *            IStructuredSelection
 	 * @return IMarker[]
@@ -82,7 +82,7 @@
 
 	/**
 	 * Get the selected marker in the receiver.
-	 * 
+	 *
 	 * @return IMarker
 	 */
 	IMarker getSelectedMarker() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAdapter.java
index 47c64ae..26e2202 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSelectionProviderAdapter.java
@@ -51,7 +51,7 @@
         theSelection = selection;
         final SelectionChangedEvent e = new SelectionChangedEvent(this, selection);
         Object[] listenersArray = listeners.toArray();
-        
+
         for (int i = 0; i < listenersArray.length; i++) {
             final ISelectionChangedListener l = (ISelectionChangedListener) listenersArray[i];
             SafeRunner.run(new SafeRunnable() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSorter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSorter.java
index 6e174f3..a5d08c7 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSorter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerSorter.java
@@ -18,7 +18,7 @@
 
 	/**
 	 * Sort the array of markers in lastMarkers in place.
-	 * 
+	 *
 	 * @param viewer
 	 * @param markers
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTreeContentProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTreeContentProvider.java
index 1538bf3..225e633 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTreeContentProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTreeContentProvider.java
@@ -17,9 +17,9 @@
 
 /**
  * The MarkerTreeContentProvider is the content provider for the marker trees.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class MarkerTreeContentProvider implements ITreeContentProvider {
 
@@ -37,7 +37,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
 	 */
 	@Override
@@ -50,7 +50,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#getParent(java.lang.Object)
 	 */
 	@Override
@@ -63,7 +63,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ITreeContentProvider#hasChildren(java.lang.Object)
 	 */
 	@Override
@@ -76,7 +76,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
 	 */
 	@Override
@@ -86,7 +86,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
 	 */
 	@Override
@@ -96,7 +96,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
 	 *      java.lang.Object, java.lang.Object)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerType.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerType.java
index 800567a..cd22012 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerType.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerType.java
@@ -136,7 +136,7 @@
 
     /**
      * Returns whether this marker type is considered to be a subtype of
-     * the given marker type. 
+     * the given marker type.
      *
      * @return boolean <code>true</code>if this type is the same as (or a subtype of) the given type
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTypesModel.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTypesModel.java
index b6db5f3..37790f0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTypesModel.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerTypesModel.java
@@ -26,7 +26,7 @@
  * the list does not change frequently.
  */
 public class MarkerTypesModel {
-	
+
 	/**
 	 * Return the singleton implementation.
 	 * @return MarkerTypesModel
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerView.java
index b9bb447..a0fb7da 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerView.java
@@ -109,7 +109,7 @@
 
 /**
  * MarkerView is the abstract super class of the marker based views.
- * 
+ *
  */
 public abstract class MarkerView extends TableView {
 
@@ -146,7 +146,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 		 */
 		@Override
@@ -158,7 +158,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.progress.WorkbenchJob#shouldRun()
 		 */
 		@Override
@@ -169,7 +169,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object)
 		 */
 		@Override
@@ -219,7 +219,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.progress.UIJob#runInUIThread(org.eclipse.core.runtime.IProgressMonitor)
 		 */
 		@Override
@@ -307,7 +307,7 @@
 
 		/**
 		 * Add the category to the list of expanded categories.
-		 * 
+		 *
 		 * @param category
 		 */
 		public void addExpandedCategory(MarkerCategory category) {
@@ -317,7 +317,7 @@
 
 		/**
 		 * Remove the category from the list of expanded ones.
-		 * 
+		 *
 		 * @param category
 		 */
 		public void removeExpandedCategory(MarkerCategory category) {
@@ -327,7 +327,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object)
 		 */
 		@Override
@@ -337,7 +337,7 @@
 
 		/**
 		 * Preserve the selection for reselection after the next update.
-		 * 
+		 *
 		 * @param selection
 		 */
 		public void saveSelection(ISelection selection) {
@@ -358,7 +358,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.progress.WorkbenchJob#shouldRun()
 		 */
 		@Override
@@ -382,7 +382,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent)
 		 */
 		@Override
@@ -409,7 +409,7 @@
 		/**
 		 * Returns whether or not the given even contains marker deltas for this
 		 * view.
-		 * 
+		 *
 		 * @param event
 		 *            the resource change event
 		 * @return <code>true</code> if the event contains at least one
@@ -453,7 +453,7 @@
 		/**
 		 * Return the currently selected concrete marker or <code>null</code>
 		 * if there isn't one.
-		 * 
+		 *
 		 * @return ConcreteMarker
 		 */
 		private ConcreteMarker getSelectedConcreteMarker() {
@@ -470,7 +470,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.help.IContextProvider#getSearchExpression(java.lang.Object)
 		 */
 		@Override
@@ -531,7 +531,7 @@
 		preferenceListener = new IPropertyChangeListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
 			 */
 			@Override
@@ -549,7 +549,7 @@
 
 	/**
 	 * Get the current markers for the receiver.
-	 * 
+	 *
 	 * @return MarkerList
 	 */
 	public MarkerList getCurrentMarkers() {
@@ -558,7 +558,7 @@
 
 	/**
 	 * Get the marker adapter for the receiver.
-	 * 
+	 *
 	 * @return MarkerAdapter
 	 */
 	protected MarkerAdapter getMarkerAdapter() {
@@ -567,7 +567,7 @@
 
 	/**
 	 * Update for the change in the contents.
-	 * 
+	 *
 	 * @param monitor
 	 */
 	public void updateForContentsRefresh(IProgressMonitor monitor) {
@@ -578,7 +578,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.IViewPart#init(org.eclipse.ui.IViewSite,
 	 *      org.eclipse.ui.IMemento)
 	 */
@@ -647,7 +647,7 @@
 
 	/**
 	 * Write the filter settings to the memento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	protected void writeFiltersSettings(XMLMemento memento) {
@@ -661,14 +661,14 @@
 
 	/**
 	 * Get the name of the filters preference for instances of the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	abstract String getFiltersPreferenceName();
 
 	/**
 	 * Restore the filters from the mimento.
-	 * 
+	 *
 	 * @param memento
 	 */
 	void restoreFilters(IMemento memento) {
@@ -707,7 +707,7 @@
 
 	/**
 	 * Create a default filter for the receiver.
-	 * 
+	 *
 	 */
 	private void createDefaultFilter() {
 		MarkerFilter filter = createFilter(MarkerMessages.MarkerFilter_defaultFilterName);
@@ -716,7 +716,7 @@
 
 	/**
 	 * Create a filter called name.
-	 * 
+	 *
 	 * @param name
 	 * @return MarkerFilter
 	 */
@@ -724,14 +724,14 @@
 
 	/**
 	 * Return the memento tag for the receiver.
-	 * 
+	 *
 	 * @return String
 	 */
 	protected abstract String getSectionTag();
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -752,7 +752,7 @@
 		getViewer().getControl().addHelpListener(new HelpListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.HelpListener#helpRequested(org.eclipse.swt.events.HelpEvent)
 			 */
 			@Override
@@ -773,7 +773,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
 	 */
 	@Override
@@ -808,7 +808,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#viewerSelectionChanged(org.eclipse.jface.viewers.IStructuredSelection)
 	 */
 	@Override
@@ -831,7 +831,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#dispose()
 	 */
 	@Override
@@ -867,7 +867,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#createActions()
 	 */
 	@Override
@@ -897,7 +897,7 @@
 		setPreferencesAction(new ViewPreferencesAction() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.ui.preferences.ViewPreferencesAction#openViewPreferencesDialog()
 			 */
 			@Override
@@ -912,7 +912,7 @@
 
 	/**
 	 * Open a dialog to set the preferences.
-	 * 
+	 *
 	 * @param markerEnablementPreferenceName
 	 * @param markerLimitPreferenceName
 	 */
@@ -931,7 +931,7 @@
 
 	/**
 	 * Get the name of the marker enablement preference.
-	 * 
+	 *
 	 * @return String
 	 */
 	abstract String getMarkerLimitPreferenceName();
@@ -940,7 +940,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#initToolBar(org.eclipse.jface.action.IToolBarManager)
 	 */
 	@Override
@@ -952,7 +952,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#registerGlobalActions(org.eclipse.ui.IActionBars)
 	 */
 	@Override
@@ -964,7 +964,7 @@
 		propertiesAction.setActionDefinitionId(IWorkbenchCommandConstants.FILE_PROPERTIES);
 		undoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_UNDO);
 		redoAction.setActionDefinitionId(IWorkbenchCommandConstants.EDIT_REDO);
-		
+
 		actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(),
 				copyAction);
 		actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(),
@@ -1025,7 +1025,7 @@
 
 	/**
 	 * Get the array of selected markers.
-	 * 
+	 *
 	 * @return IMarker[]
 	 */
 	private IMarker[] getSelectedMarkers() {
@@ -1042,7 +1042,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#fillContextMenu(org.eclipse.jface.action.IMenuManager)
 	 */
 	@Override
@@ -1069,7 +1069,7 @@
 
 	/**
 	 * Return whether or not any of the types in the receiver can be editable.
-	 * 
+	 *
 	 * @return <code>true</code> if it is possible to have an editable marker
 	 *         in this view.
 	 */
@@ -1079,14 +1079,14 @@
 
 	/**
 	 * Fill the context menu for the receiver.
-	 * 
+	 *
 	 * @param manager
 	 */
 	abstract void fillContextMenuAdditions(IMenuManager manager);
 
 	/**
 	 * Get the filters for the receiver.
-	 * 
+	 *
 	 * @return MarkerFilter[]
 	 */
 	protected final MarkerFilter[] getUserFilters() {
@@ -1097,7 +1097,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#handleOpenEvent(org.eclipse.jface.viewers.OpenEvent)
 	 */
 	@Override
@@ -1109,7 +1109,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#saveSelection(org.eclipse.ui.IMemento)
 	 */
 	protected void saveSelection(IMemento memento) {
@@ -1192,7 +1192,7 @@
 
 	/**
 	 * Update the focus resources of the filters.
-	 * 
+	 *
 	 * @param elements
 	 */
 	protected final void updateFilterSelection(Object[] elements) {
@@ -1227,7 +1227,7 @@
 
 	/**
 	 * Add the resources for the mapping to resources.
-	 * 
+	 *
 	 * @param resources
 	 * @param mapping
 	 */
@@ -1254,7 +1254,7 @@
 
 	/**
 	 * Update the focus markers for the supplied elements.
-	 * 
+	 *
 	 * @param elements
 	 */
 	void updateFocusMarkers(Object[] elements) {
@@ -1365,7 +1365,7 @@
 	 * <p>
 	 * This method is called whenever a selection changes in this view.
 	 * </p>
-	 * 
+	 *
 	 * @param selection
 	 *            a valid selection or <code>null</code>
 	 */
@@ -1409,7 +1409,7 @@
 
 	/**
 	 * Open a dialog on the filters
-	 * 
+	 *
 	 */
 	public final void openFiltersDialog() {
 
@@ -1440,7 +1440,7 @@
 
 	/**
 	 * Set the filters to newFilters.
-	 * 
+	 *
 	 * @param newFilters
 	 */
 	void setFilters(MarkerFilter[] newFilters) {
@@ -1449,7 +1449,7 @@
 
 	/**
 	 * Clear the cache of enabled filters.
-	 * 
+	 *
 	 */
 	void clearEnabledFilters() {
 		enabledFilters = null;
@@ -1478,7 +1478,7 @@
 	/**
 	 * Given a selection of IMarker, reveals the corresponding elements in the
 	 * viewer
-	 * 
+	 *
 	 * @param structuredSelection
 	 * @param reveal
 	 */
@@ -1511,7 +1511,7 @@
 	/**
 	 * Returns the total number of markers. Should not be called while the
 	 * marker list is still updating.
-	 * 
+	 *
 	 * @return the total number of markers in the workspace (including
 	 *         everything that doesn't pass the filters)
 	 */
@@ -1529,7 +1529,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
 	 */
 	@Override
@@ -1548,7 +1548,7 @@
 
 	/**
 	 * Get the filters that are currently enabled.
-	 * 
+	 *
 	 * @return MarkerFilter[]
 	 */
 	MarkerFilter[] getEnabledFilters() {
@@ -1565,7 +1565,7 @@
 
 	/**
 	 * Find the filters enabled in the view.
-	 * 
+	 *
 	 * @return Collection of MarkerFilter
 	 */
 	protected Collection findEnabledFilters() {
@@ -1581,7 +1581,7 @@
 
 	/**
 	 * Get all of the filters applied to the receiver.
-	 * 
+	 *
 	 * @return MarkerFilter[]
 	 */
 	MarkerFilter[] getAllFilters() {
@@ -1590,7 +1590,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#addDropDownContributions(org.eclipse.jface.action.IMenuManager)
 	 */
 	@Override
@@ -1606,7 +1606,7 @@
 
 	/**
 	 * Create the show in menu if there is a single selection.
-	 * 
+	 *
 	 * @param menu
 	 */
 	void createShowInMenu(IMenuManager menu) {
@@ -1643,7 +1643,7 @@
 
 	/**
 	 * Refresh the marker counts
-	 * 
+	 *
 	 * @param monitor
 	 */
 	void refreshMarkerCounts(IProgressMonitor monitor) {
@@ -1659,7 +1659,7 @@
 
 	/**
 	 * Returns the marker limit or -1 if unlimited
-	 * 
+	 *
 	 * @return int
 	 */
 	int getMarkerLimit() {
@@ -1677,14 +1677,14 @@
 
 	/**
 	 * Get the name of the marker limit preference.
-	 * 
+	 *
 	 * @return String
 	 */
 	abstract String getMarkerEnablementPreferenceName();
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#createViewerInput()
 	 */
 	@Override
@@ -1695,7 +1695,7 @@
 
 	/**
 	 * Add a listener for the end of the update.
-	 * 
+	 *
 	 * @param listener
 	 */
 	public void addUpdateFinishListener(IJobChangeListener listener) {
@@ -1705,7 +1705,7 @@
 
 	/**
 	 * Remove a listener for the end of the update.
-	 * 
+	 *
 	 * @param listener
 	 */
 	public void removeUpdateFinishListener(IJobChangeListener listener) {
@@ -1715,14 +1715,14 @@
 
 	/**
 	 * Create a listener for working set changes.
-	 * 
+	 *
 	 * @return IPropertyChangeListener
 	 */
 	private IPropertyChangeListener getWorkingSetListener() {
 		workingSetListener = new IPropertyChangeListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
 			 */
 			@Override
@@ -1737,7 +1737,7 @@
 
 	/**
 	 * Schedule an update of the markers with a delay of time
-	 * 
+	 *
 	 * @param time
 	 */
 	void scheduleMarkerUpdate(int time) {
@@ -1755,7 +1755,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#createTree(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -1764,7 +1764,7 @@
 		tree.addTreeListener(new TreeAdapter() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.TreeAdapter#treeCollapsed(org.eclipse.swt.events.TreeEvent)
 			 */
 			@Override
@@ -1775,7 +1775,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.swt.events.TreeAdapter#treeExpanded(org.eclipse.swt.events.TreeEvent)
 			 */
 			@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewLabelProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewLabelProvider.java
index f9d9c7d..b549a48 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewLabelProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewLabelProvider.java
@@ -16,9 +16,9 @@
 
 /**
  * The MarkerViewLabelProvider is a label provider for an individual field.
- * 
+ *
  * @since 3.3
- * 
+ *
  */
 public class MarkerViewLabelProvider extends ColumnLabelProvider {
 
@@ -26,7 +26,7 @@
 
 	/**
 	 * Create a MarkerViewLabelProvider on a field
-	 * 
+	 *
 	 * @param field
 	 */
 	MarkerViewLabelProvider(IField field) {
@@ -36,7 +36,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ColumnLabelProvider#getText(java.lang.Object)
 	 */
 	@Override
@@ -46,7 +46,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ColumnLabelProvider#getImage(java.lang.Object)
 	 */
 	@Override
@@ -54,5 +54,5 @@
 		return field.getImage(element);
 	}
 
-	
+
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewPreferenceDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewPreferenceDialog.java
index b037143..0a5669f 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewPreferenceDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerViewPreferenceDialog.java
@@ -27,9 +27,9 @@
 /**
  * The MarkerViewPreferenceDialog is the dialog that is used for preference
  * settings in a markers view.
- * 
+ *
  * @since 3.1
- * 
+ *
  */
 public class MarkerViewPreferenceDialog extends ViewSettingsDialog {
 
@@ -47,7 +47,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param parentShell
 	 * @param enablementPreference
 	 *            The key for the enablement preference.
@@ -67,7 +67,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
 	 */
 	@Override
@@ -78,7 +78,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -137,7 +137,7 @@
 
 	/**
 	 * Enable the limitEditor based on checked.
-	 * 
+	 *
 	 * @param control
 	 *            The parent of the editor
 	 * @param checked
@@ -148,7 +148,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.dialogs.Dialog#okPressed()
 	 */
 	@Override
@@ -162,7 +162,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemFilter.java
index a30e928..28ba3b6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemFilter.java
@@ -26,7 +26,7 @@
 
 /**
  * ProblemFilters are the filters used in the problems view.
- * 
+ *
  */
 public class ProblemFilter extends MarkerFilter {
 
@@ -48,7 +48,7 @@
 
 	final static boolean DEFAULT_CONTAINS = true;
 
-	final static String DEFAULT_DESCRIPTION = ""; //$NON-NLS-1$	
+	final static String DEFAULT_DESCRIPTION = ""; //$NON-NLS-1$
 
 	final static boolean DEFAULT_SELECT_BY_SEVERITY = false;
 
@@ -83,7 +83,7 @@
 
 	/**
 	 * Create a new instance of the receiver with name filterName.
-	 * 
+	 *
 	 * @param filterName
 	 *            A human readable name for the filter.
 	 */
@@ -145,7 +145,7 @@
 
 	/**
 	 * Get the value for if there is a check for containing a phrase.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	public boolean getContains() {
@@ -154,7 +154,7 @@
 
 	/**
 	 * Get the value for the description.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	public String getDescription() {
@@ -163,7 +163,7 @@
 
 	/**
 	 * Get the value for if there is a check for severity.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	public boolean getSelectBySeverity() {
@@ -172,7 +172,7 @@
 
 	/**
 	 * Get the value for if there is a severity.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	public int getSeverity() {
@@ -181,7 +181,7 @@
 
 	/**
 	 * Set the value for if there is a check for containing a phrase.
-	 * 
+	 *
 	 * @param contains
 	 */
 	public void setContains(boolean contains) {
@@ -190,7 +190,7 @@
 
 	/**
 	 * Set the value for the description.
-	 * 
+	 *
 	 * @param description
 	 */
 	public void setDescription(String description) {
@@ -199,7 +199,7 @@
 
 	/**
 	 * Set the value for if there is a check for severity
-	 * 
+	 *
 	 * @param selectBySeverity
 	 */
 	public void setSelectBySeverity(boolean selectBySeverity) {
@@ -208,7 +208,7 @@
 
 	/**
 	 * Set the value for the severity to match against.
-	 * 
+	 *
 	 * @param severity
 	 */
 	public void setSeverity(int severity) {
@@ -217,7 +217,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#resetState()
 	 */
 	@Override
@@ -231,7 +231,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#restoreFilterSettings(org.eclipse.jface.dialogs.IDialogSettings)
 	 */
 	@Override
@@ -270,7 +270,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#restoreFilterSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -305,7 +305,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#saveFilterSettings(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -322,7 +322,7 @@
 	/**
 	 * Get the id of the filter. <code>null</code> if the filter is user
 	 * defined.
-	 * 
+	 *
 	 * @return String
 	 */
 	public String getId() {
@@ -338,7 +338,7 @@
 		contributionDescriptor = new IPluginContribution() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.ui.IPluginContribution#getLocalId()
 			 */
 			@Override
@@ -348,7 +348,7 @@
 
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.ui.IPluginContribution#getPluginId()
 			 */
 			@Override
@@ -361,7 +361,7 @@
 	/**
 	 * Return whether or not the receiver will be filtered out due to an
 	 * activity match.
-	 * 
+	 *
 	 * @return boolean <code>true</code> if it is filtered out.
 	 */
 	public boolean isFilteredOutByActivity() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemMarker.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemMarker.java
index 97408df..b358871 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemMarker.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemMarker.java
@@ -13,7 +13,7 @@
 import org.eclipse.core.resources.IMarker;
 
 /**
- * 
+ *
  */
 public class ProblemMarker extends ConcreteMarker {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemView.java
index 51f2e6c..d6b3fbf 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/ProblemView.java
@@ -52,7 +52,7 @@
 
 /**
  * The ProblemView is the view that displays problem markers.
- * 
+ *
  */
 public class ProblemView extends MarkerView {
 
@@ -92,7 +92,7 @@
 
 		/**
 		 * Create a new instance of the receiver.
-		 * 
+		 *
 		 * @param label
 		 * @param field
 		 * @param view
@@ -113,7 +113,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.jface.action.Action#run()
 		 */
 		@Override
@@ -124,7 +124,7 @@
 						MarkerMessages.ProblemView_UpdateCategoryJob) {
 					/*
 					 * (non-Javadoc)
-					 * 
+					 *
 					 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
 					 */
 					@Override
@@ -167,7 +167,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#dispose()
 	 */
 	@Override
@@ -186,7 +186,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getSortingFields()
 	 */
 	@Override
@@ -200,7 +200,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getDialogSettings()
 	 */
 	@Override
@@ -219,7 +219,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#createActions()
 	 */
 	@Override
@@ -231,7 +231,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.internal.tableview.TableView#registerGlobalActions(org.eclipse.ui.IActionBars)
 	 */
 	@Override
@@ -251,7 +251,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#fillContextMenuAdditions(org.eclipse.jface.action.IMenuManager)
 	 */
 	@Override
@@ -267,7 +267,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getAllFields()
 	 */
 	@Override
@@ -314,7 +314,7 @@
 	 * severity type) for the markers contained in the selection passed in. This
 	 * information is then massaged into a string which may be displayed by the
 	 * caller.
-	 * 
+	 *
 	 * @param selection
 	 *            a valid selection or <code>null</code>
 	 * @return a message ready for display
@@ -337,7 +337,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerTypes()
 	 */
 	@Override
@@ -352,7 +352,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#createFiltersDialog()
 	 */
 	@Override
@@ -366,7 +366,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#createFilter(java.lang.String)
 	 */
 	@Override
@@ -376,7 +376,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getSectionTag()
 	 */
 	@Override
@@ -386,7 +386,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerEnablementPreferenceName()
 	 */
 	@Override
@@ -396,7 +396,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerLimitPreferenceName()
 	 */
 	@Override
@@ -406,7 +406,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getFiltersPreferenceName()
 	 */
 	@Override
@@ -416,7 +416,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getAllFilters()
 	 */
 	@Override
@@ -441,7 +441,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#addDropDownContributions(org.eclipse.jface.action.IMenuManager)
 	 */
 	@Override
@@ -484,7 +484,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#setSorter(org.eclipse.ui.views.markers.internal.TableSorter)
 	 */
 	@Override
@@ -497,7 +497,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getTableSorter()
 	 */
 	@Override
@@ -507,7 +507,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -525,7 +525,7 @@
 		activityManagerListener = new IActivityManagerListener() {
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.ui.activities.IActivityManagerListener#activityManagerChanged(org.eclipse.ui.activities.ActivityManagerEvent)
 			 */
 			@Override
@@ -540,7 +540,7 @@
 
 	/**
 	 * Return the field whose description matches description.
-	 * 
+	 *
 	 * @param description
 	 * @return IField
 	 */
@@ -556,7 +556,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#buildComparator()
 	 */
 	@Override
@@ -570,7 +570,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#canBeEditable()
 	 */
 	@Override
@@ -580,7 +580,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#initToolBar(org.eclipse.jface.action.IToolBarManager)
 	 */
 	@Override
@@ -591,7 +591,7 @@
 
 	/**
 	 * Select the category for the receiver.
-	 * 
+	 *
 	 * @param description
 	 * @param sorter -
 	 *            the sorter to select for
@@ -616,7 +616,7 @@
 
 	/**
 	 * Select the field groupingField.
-	 * 
+	 *
 	 * @param groupingField
 	 * @param sorter
 	 */
@@ -632,7 +632,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#writeFiltersSettings(org.eclipse.ui.XMLMemento)
 	 */
 	@Override
@@ -655,7 +655,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#restoreFilters(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -689,7 +689,7 @@
 
 	/**
 	 * Set the enablement state of the filter called filterName to enabled.
-	 * 
+	 *
 	 * @param filterName
 	 * @param enabled
 	 * @param filters
@@ -707,7 +707,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerName()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/SortUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/SortUtil.java
index 155f099..bc1b9de 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/SortUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/SortUtil.java
@@ -20,7 +20,7 @@
 import org.eclipse.core.runtime.IProgressMonitor;
 
 /**
- * 
+ *
  */
 class SortUtil {
 
@@ -38,7 +38,7 @@
     	Collection start = elements.asList();
         Collection result = new ArrayList(start.size());
 
-        mon.beginTask(MarkerMessages.SortUtil_finding_first, 1000); 
+        mon.beginTask(MarkerMessages.SortUtil_finding_first, 1000);
 
         getFirst(result, start, c, k, mon, 1000);
 
@@ -140,10 +140,10 @@
     /**
      * Divides the items in the input collection into three sets based on whether they are less than,
      * equal to, or greater than the test item.
-     * 
+     *
      * If the given monitor is cancelled (possibly by another thread), the operation will
-     * be aborted. In this case, the insertions may only be partially complete. 
-     * 
+     * be aborted. In this case, the insertions may only be partially complete.
+     *
      * @param less
      * @param more
      * @param equal
@@ -157,7 +157,7 @@
             IProgressMonitor mon) {
         mon
                 .beginTask(
-                        MarkerMessages.SortUtil_partitioning, input.size()); 
+                        MarkerMessages.SortUtil_partitioning, input.size());
 
         if (toTest == null || c == null) {
             int counter = 0;
@@ -187,7 +187,7 @@
 
     /**
      * Removes and returns the first n items from the given collection.
-     * 
+     *
      * @param collection
      * @param numToRemove
      * @return List
@@ -211,7 +211,7 @@
     /**
      * Finds and returns the greatest element in the given collection, or null if the collection
      * is empty.
-     *  
+     *
      * @param toSearch collection to search
      * @param c comparator used to determine the greatest item
      * @return the greatest item in the collection
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableComparator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableComparator.java
index efd044e..a3ed10e 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableComparator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableComparator.java
@@ -39,7 +39,7 @@
 
 	public static final String TAG_DIALOG_SECTION = "sorter"; //$NON-NLS-1$
 
-	private static final String TAG_PRIORITY = "priority"; //$NON-NLS-1$ 
+	private static final String TAG_PRIORITY = "priority"; //$NON-NLS-1$
 
 	private static final String TAG_DIRECTION = "direction"; //$NON-NLS-1$
 
@@ -86,7 +86,7 @@
 
 	/**
 	 * Return a TableSorter based on the supplied fields.
-	 * 
+	 *
 	 * @param sortingFields
 	 */
 	static TableComparator createTableSorter(IField[] sortingFields) {
@@ -167,7 +167,7 @@
 
 	/**
 	 * Return the field at the top priority.
-	 * 
+	 *
 	 * @return IField
 	 */
 	public IField getTopField() {
@@ -206,7 +206,7 @@
 	/**
 	 * Compare obj1 and obj2 at depth. If continueSearching continue searching
 	 * below depth to continue the comparison.
-	 * 
+	 *
 	 * @param obj1
 	 * @param obj2
 	 * @param depth
@@ -263,7 +263,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
 	 */
 	@Override
@@ -310,14 +310,14 @@
 					resetState();
 					return;
 				}
-				
+
 				int fieldIndex = Integer.parseInt(priority);
-				
+
 				//Make sure it is not old data from a different sized array
 				if(fieldIndex < fields.length) {
 					priorities[i] = fieldIndex;
 				}
-				
+
 				String direction = settings.get(TAG_DIRECTION + i);
 				if (direction == null) {
 					resetState();
@@ -345,7 +345,7 @@
 
 	/**
 	 * Sort the array of markers in lastMarkers in place.
-	 * 
+	 *
 	 * @param viewer
 	 * @param lastMarkers
 	 */
@@ -357,7 +357,7 @@
 	/**
 	 * Sorts the given elements in-place, modifying the given array from index
 	 * start to index end. <
-	 * 
+	 *
 	 * @param viewer
 	 * @param elements
 	 * @param start
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableSortDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableSortDialog.java
index c60a484..7aa2d4d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableSortDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableSortDialog.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Sebastian Davids <sdavids@gmx.de>: 
+ *     Sebastian Davids <sdavids@gmx.de>:
  *         Fix for Bug 77336 [Markers] [Dialogs] TableSortDialog does not use dialog font
  *******************************************************************************/
 
@@ -102,11 +102,11 @@
 		}
 
         initializeDialogUnits(composite);
-        
+
         createPrioritiesArea(composite);
         createRestoreDefaultsButton(composite);
         createSeparatorLine(composite);
-        
+
         Dialog.applyDialogFont(composite);
 
         return composite;
@@ -119,7 +119,7 @@
     private void createPrioritiesArea(Composite parent) {
         Composite prioritiesArea = new Composite(parent, SWT.NULL);
         prioritiesArea.setLayout(new GridLayout(3, false));
-        
+
         int[] priorities = sorter.getPriorities();
 
         ascendingButtons = new Button[priorities.length];
@@ -129,7 +129,7 @@
         initPriotityText();
 
         Label sortByLabel = new Label(prioritiesArea, SWT.NULL);
-        sortByLabel.setText(MarkerMessages.sortDialog_label); 
+        sortByLabel.setText(MarkerMessages.sortDialog_label);
         GridData data = new GridData();
         data.horizontalSpan = 3;
         sortByLabel.setLayoutData(data);
@@ -139,7 +139,7 @@
             Label numberLabel = new Label(prioritiesArea, SWT.NULL);
             numberLabel
                     .setText(NLS
-                            .bind(MarkerMessages.sortDialog_columnLabel,new Integer(i + 1))); 
+                            .bind(MarkerMessages.sortDialog_columnLabel,new Integer(i + 1)));
 
             priorityCombos[i] = new Combo(prioritiesArea, SWT.READ_ONLY);
             priorityCombos[i].setLayoutData(new GridData(
@@ -147,7 +147,7 @@
 
             Composite directionGroup = new Composite(prioritiesArea, SWT.NONE);
             directionGroup.setLayout(new GridLayout(2, false));
-            
+
             ascendingButtons[i] = new Button(directionGroup, SWT.RADIO);
             ascendingButtons[i].setText(getAscendingText(i));
             ascendingButtons[i].addSelectionListener(new SelectionAdapter() {
@@ -267,7 +267,7 @@
 		default:
 			return MarkerMessages.sortDirectionDescending_text;
 	}
-	
+
 }
 
     /**
@@ -287,7 +287,7 @@
 			default:
 				return MarkerMessages.sortDirectionAscending_text;
 		}
-		
+
 	}
 
     /**
@@ -386,7 +386,7 @@
     }
 
     /**
-     * Set the layout data of the button to a GridData with 
+     * Set the layout data of the button to a GridData with
      * appropriate heights and widths.
      * @param button
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableView.java
index 8c21a9a..85712ae 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableView.java
@@ -60,7 +60,7 @@
 
 /**
  * The TableView is a view that generically implements views with tables.
- * 
+ *
  */
 public abstract class TableView extends ViewPart {
 
@@ -98,7 +98,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 */
 	// void haltTableUpdates() {
 	// content.cancelPendingChanges();
@@ -114,7 +114,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
 	 */
 	@Override
@@ -123,7 +123,7 @@
 
 		viewer = new TreeViewer(createTree(parent));
 		createColumns(viewer.getTree());
-		
+
 		viewer.setComparator(buildComparator());
 		setSortIndicators();
 
@@ -177,13 +177,13 @@
 				handleOpenEvent(event);
 			}
 		});
-		
+
 	}
 
 
 	/**
 	 * Create the viewer input for the receiver.
-	 * 
+	 *
 	 * @return Object
 	 */
 	abstract Object createViewerInput();
@@ -191,7 +191,7 @@
 	/**
 	 * Set the comparator to be the new comparator. This should only
 	 * be called if the viewer has been created.
-	 * 
+	 *
 	 * @param comparator
 	 */
 	void setComparator(TableComparator comparator) {
@@ -201,7 +201,7 @@
 
 	/**
 	 * Update the viewer for comparator updates
-	 * 
+	 *
 	 * @param comparator
 	 */
 	void updateForNewComparator(TableComparator comparator) {
@@ -212,7 +212,7 @@
 
 	/**
 	 * Create the main tree control
-	 * 
+	 *
 	 * @param parent
 	 * @return Tree
 	 */
@@ -225,7 +225,7 @@
 
 	/**
 	 * Get the pixel data for the columns.
-	 * 
+	 *
 	 * @return ColumnPixelData[]
 	 */
 	public ColumnPixelData[] getSavedColumnData() {
@@ -233,7 +233,7 @@
 
 		ColumnPixelData[] result = new ColumnPixelData[defaultData.length];
 		for (int i = 0; i < defaultData.length; i++) {
-			
+
 			ColumnPixelData defaultPixelData = defaultData[i];
 			boolean addTrim = defaultPixelData.addTrim;
 			int width = defaultPixelData.width;
@@ -262,7 +262,7 @@
 	 * initialized yet. (Note that TableLayout only initializes the column
 	 * widths after the first layout, so it is possible for the widget to exist
 	 * but have all its columns incorrectly set to zero width - see bug 86329)
-	 * 
+	 *
 	 * @return ColumnPixelData
 	 */
 	public ColumnPixelData[] getColumnData() {
@@ -301,7 +301,7 @@
 
 	/**
 	 * Create the columns in the tree.
-	 * 
+	 *
 	 * @param tree
 	 */
 	protected void createColumns(final Tree tree) {
@@ -358,7 +358,7 @@
 
 	/**
 	 * Init the menu for the receiver.
-	 * 
+	 *
 	 * @param menu
 	 */
 	protected void initMenu(IMenuManager menu) {
@@ -376,7 +376,7 @@
 
 	/**
 	 * Add any extra contributions to the drop down.
-	 * 
+	 *
 	 * @param menu
 	 */
 	void addDropDownContributions(IMenuManager menu) {
@@ -389,7 +389,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
 	 */
 	@Override
@@ -403,7 +403,7 @@
 
 	/**
 	 * Build a comparator from the default settings.
-	 * 
+	 *
 	 * @return ViewerComparator
 	 */
 	protected ViewerComparator buildComparator() {
@@ -413,7 +413,7 @@
 
 	/**
 	 * Create a TableComparator for the receiver.
-	 * 
+	 *
 	 * @return TableComparator
 	 */
 	TableComparator createTableComparator() {
@@ -433,7 +433,7 @@
 
 	/**
 	 * Return the viewer.
-	 * 
+	 *
 	 * @return TreeViewer
 	 */
 	protected TreeViewer getViewer() {
@@ -442,7 +442,7 @@
 
 	/**
 	 * Return the tree for the receiver.
-	 * 
+	 *
 	 * @return Tree
 	 */
 	protected Tree getTree() {
@@ -467,7 +467,7 @@
 								.getDisplay(), new Runnable() {
 							/*
 							 * (non-Javadoc)
-							 * 
+							 *
 							 * @see java.lang.Runnable#run()
 							 */
 							@Override
@@ -482,7 +482,7 @@
 								new IRunnableWithProgress() {
 									/*
 									 * (non-Javadoc)
-									 * 
+									 *
 									 * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
 									 */
 									@Override
@@ -501,7 +501,7 @@
 
 			/**
 			 * Resort the table based on field.
-			 * 
+			 *
 			 * @param column
 			 *            the column being updated
 			 * @param field
@@ -523,7 +523,7 @@
 						new Runnable() {
 							/*
 							 * (non-Javadoc)
-							 * 
+							 *
 							 * @see java.lang.Runnable#run()
 							 */
 							@Override
@@ -540,7 +540,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getDefaultColumnLayouts()
 	 */
 	protected ColumnPixelData[] getDefaultColumnLayouts() {
@@ -558,7 +558,7 @@
 
 	/**
 	 * Return the width of the field to display.
-	 * 
+	 *
 	 * @param field
 	 * @return int
 	 */
@@ -571,7 +571,7 @@
 
 	/**
 	 * Return a sort dialog for the receiver.
-	 * 
+	 *
 	 * @return TableSortDialog
 	 */
 	protected TableSortDialog getSortDialog() {
@@ -581,7 +581,7 @@
 
 	/**
 	 * Return the table sorter portion of the sorter.
-	 * 
+	 *
 	 * @return TableSorter
 	 */
 	TableComparator getTableSorter() {
@@ -593,7 +593,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.part.ViewPart#saveState(org.eclipse.ui.IMemento)
 	 */
 	@Override
@@ -664,7 +664,7 @@
 
 	/**
 	 * Get the IWorkbenchSiteProgressService for the receiver.
-	 * 
+	 *
 	 * @return IWorkbenchSiteProgressService or <code>null</code>.
 	 */
 	protected IWorkbenchSiteProgressService getProgressService() {
@@ -679,7 +679,7 @@
 
 	/**
 	 * Set the filters action.
-	 * 
+	 *
 	 * @param action
 	 */
 	void setFilterAction(FiltersAction action) {
@@ -689,7 +689,7 @@
 
 	/**
 	 * Return the filter action for the receiver.
-	 * 
+	 *
 	 * @return IAction
 	 */
 	IAction getFilterAction() {
@@ -698,7 +698,7 @@
 
 	/**
 	 * Return the preferences action.
-	 * 
+	 *
 	 * @return IAction
 	 */
 	IAction getPreferencesAction() {
@@ -707,7 +707,7 @@
 
 	/**
 	 * Set the preferences action.
-	 * 
+	 *
 	 * @param preferencesAction
 	 */
 	void setPreferencesAction(ViewPreferencesAction preferencesAction) {
@@ -716,7 +716,7 @@
 
 	/**
 	 * Get the content provider
-	 * 
+	 *
 	 * @return MarkerTreeContentProvider
 	 */
 	MarkerTreeContentProvider getContentProvider() {
@@ -725,7 +725,7 @@
 
 	/**
 	 * Return the input to the viewer.
-	 * 
+	 *
 	 * @return Object
 	 */
 	public Object getViewerInput() {
@@ -734,7 +734,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#setSortIndicators()
 	 */
 	void setSortIndicators() {
@@ -751,7 +751,7 @@
 
 	/**
 	 * Update the direction indicator as column is now the primary column.
-	 * 
+	 *
 	 * @param column
 	 */
 	void updateDirectionIndicator(TreeColumn column) {
@@ -764,7 +764,7 @@
 
 	/**
 	 * Set the selection of the receiver.
-	 * 
+	 *
 	 * @param selection
 	 */
 	protected void setSelection(IStructuredSelection selection) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableViewLabelProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableViewLabelProvider.java
index 16f4cff..b922e14 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableViewLabelProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TableViewLabelProvider.java
@@ -20,7 +20,7 @@
 
 /**
  * The TableViewLabelProvider is the content provider for marker views.
- * 
+ *
  */
 public class TableViewLabelProvider extends LabelProvider implements
 		ITableLabelProvider, IFontProvider {
@@ -29,7 +29,7 @@
 
 	/**
 	 * Create a neew instance of the receiver.
-	 * 
+	 *
 	 * @param fields
 	 */
 	public TableViewLabelProvider(IField[] fields) {
@@ -38,7 +38,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object,
 	 *      int)
 	 */
@@ -52,7 +52,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object,
 	 *      int)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskFilter.java
index 4fea11c..8ee4021 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskFilter.java
@@ -41,7 +41,7 @@
 
 	final static boolean DEFAULT_CONTAINS = true;
 
-	final static String DEFAULT_DESCRIPTION = ""; //$NON-NLS-1$	
+	final static String DEFAULT_DESCRIPTION = ""; //$NON-NLS-1$
 
 	final static boolean DEFAULT_DONE = false;
 
@@ -65,13 +65,13 @@
 
 	private int priority;
 
-	private boolean selectByPriority = false; 
+	private boolean selectByPriority = false;
 
 	private boolean selectByDone = false;
 
 	/**
 	 * Create a new instance of the receiver with the default name.
-	 * 
+	 *
 	 */
 	public TaskFilter() {
 		this(MarkerMessages.MarkerFilter_defaultFilterName);
@@ -79,7 +79,7 @@
 
 	/**
 	 * Create a new instance of the receiver with the supplied name.
-	 * 
+	 *
 	 * @param newName
 	 */
 	public TaskFilter(String newName) {
@@ -197,7 +197,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#restoreFilterSettings(org.eclipse.jface.dialogs.IDialogSettings)
 	 */
 	@Override
@@ -244,7 +244,7 @@
 		}
 
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#restoreFilterSettings(org.eclipse.ui.IMemento)
 	 */
@@ -290,7 +290,7 @@
 
 	}
 
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerFilter#saveFilterSettings(org.eclipse.ui.IMemento)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java
index 97dbbdc..0969bd6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TaskView.java
@@ -126,12 +126,12 @@
 						if (e.getCause() instanceof CoreException) {
 							ErrorDialog.openError(
 									getSite().getShell(),
-									MarkerMessages.errorModifyingTask, null, ((CoreException)e.getCause()).getStatus()); 
+									MarkerMessages.errorModifyingTask, null, ((CoreException)e.getCause()).getStatus());
 						} else {
 							// something rather unexpected occurred.
-							IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingTask, e); 
+							IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingTask, e);
 						}
-					}				
+					}
 				}
 			}
 		}
@@ -193,7 +193,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getDialogSettings()
 	 */
 	@Override
@@ -236,7 +236,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getSortingFields()
 	 */
 	@Override
@@ -252,7 +252,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.TableView#getAllFields()
 	 */
 	@Override
@@ -281,7 +281,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerTypes()
 	 */
 	@Override
@@ -296,7 +296,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#createFiltersDialog()
 	 */
 	@Override
@@ -310,7 +310,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#createFilter(java.lang.String)
 	 */
 	@Override
@@ -320,7 +320,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getSectionTag()
 	 */
 	@Override
@@ -330,7 +330,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerEnablementPreferenceName()
 	 */
 	@Override
@@ -340,7 +340,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerLimitPreferenceName()
 	 */
 	@Override
@@ -350,14 +350,14 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getFiltersPreferenceName()
 	 */
 	@Override
 	String getFiltersPreferenceName() {
 		return IDEInternalPreferences.TASKS_FILTERS;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.TableView#updateDirectionIndicator(org.eclipse.swt.widgets.TreeColumn)
 	 */
@@ -368,14 +368,14 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerName()
 	 */
 	@Override
 	protected String getMarkerName() {
 		return MarkerMessages.task_title;
 	}
-	
+
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerView#getUndoContext()
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TypeMarkerGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TypeMarkerGroup.java
index bb80abe..799f4fd 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TypeMarkerGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/TypeMarkerGroup.java
@@ -23,18 +23,18 @@
 /**
  * The TypeMarkerGroup is a MarkerGroup used for the sorting by type which
  * cannot be expressed currently using the markerSupport extension point.
- * 
+ *
  * @since 3.4
- * 
+ *
  */
 public class TypeMarkerGroup extends MarkerGroup {
 
 	private Map entries=new HashMap();
 	/**
 	 * TypeMarkerField is the MarkerField used for MarkerGroupungs
-	 * 
+	 *
 	 * @since 3.4
-	 * 
+	 *
 	 */
 	class TypeMarkerField extends GroupMarkerField {
 
@@ -48,7 +48,7 @@
 
 		/*
 		 * (non-Javadoc)
-		 * 
+		 *
 		 * @see org.eclipse.ui.internal.provisional.views.markers.api.MarkerField#getValue(org.eclipse.ui.internal.provisional.views.markers.api.MarkerItem)
 		 */
 		@Override
@@ -78,7 +78,7 @@
 
 			return Util.EMPTY_STRING;
 		}
-		
+
 		/* (non-Javadoc)
 		 * @see org.eclipse.ui.views.markers.internal.MarkerGroup.GroupMarkerField#compare(org.eclipse.ui.views.markers.MarkerItem, org.eclipse.ui.views.markers.MarkerItem)
 		 */
@@ -93,7 +93,7 @@
 
 	/**
 	 * Create a new instance of the receiver.
-	 * 
+	 *
 	 * @param name
 	 */
 	public TypeMarkerGroup(String name) {
@@ -109,10 +109,10 @@
 		field = new FieldCategory();
 		markerField = new TypeMarkerField();
 	}
-	
+
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see
 	 * org.eclipse.ui.views.markers.internal.MarkerGroup#findGroupValue(java
 	 * .lang.String, org.eclipse.core.resources.IMarker)
@@ -142,7 +142,7 @@
 	public String getId() {
 		return Util.TYPE_MARKER_GROUPING_ID;
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.ui.views.markers.internal.MarkerGroup#getTitle()
 	 */
@@ -165,7 +165,7 @@
 			}
 		};
 	}
-	
+
 	private class TypesMarkerGroupingEntry extends MarkerGroupingEntry {
 		public TypesMarkerGroupingEntry(String label) {
 			super(label);
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/Util.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/Util.java
index 917aa97..2f25187 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/Util.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/Util.java
@@ -31,7 +31,7 @@
 
 /**
  * The Util class is the class of general utilities used by the marker support.
- * 
+ *
  */
 public final class Util {
 
@@ -44,13 +44,13 @@
 	private static DateFormat format;
 
 	static final MarkerNode[] EMPTY_MARKER_ARRAY = new MarkerNode[0];
-	
+
 	static final String TYPE_MARKER_GROUPING_ID = "org.eclipse.ui.ide.type"; //$NON-NLS-1$
 
 	/**
 	 * Get the propery called property from the marker. If it is not found
 	 * return the empty string.
-	 * 
+	 *
 	 * @param property
 	 * @param marker
 	 * @return String
@@ -73,7 +73,7 @@
 
 	/**
 	 * Get the human readable creation time from the timestamp
-	 * 
+	 *
 	 * @param timestamp
 	 * @return String
 	 */
@@ -87,7 +87,7 @@
 
 	/**
 	 * Get the human readable creation time from the marker.
-	 * 
+	 *
 	 * @param marker
 	 * @return String
 	 */
@@ -104,7 +104,7 @@
 	 * Get the name of the container. If the marker has the
 	 * MarkerViewUtil#PATH_ATTRIBUTE set use that. Otherwise use the path of the
 	 * parent resource.
-	 * 
+	 *
 	 * @param marker
 	 * @return String
 	 */
@@ -153,7 +153,7 @@
 	 * Get the name of the element. If the marker has the
 	 * MarkerViewUtil#NAME_ATTRIBUTE set use that. Otherwise use the name of the
 	 * resource.
-	 * 
+	 *
 	 * @param marker
 	 * @return String
 	 */
@@ -178,7 +178,7 @@
 
 	/**
 	 * Return whether or not the marker is editable.
-	 * 
+	 *
 	 * @param marker
 	 * @return boolean <code>true</code> if it is editable
 	 */
@@ -197,7 +197,7 @@
 
 	/**
 	 * Return an error status for the given exception.
-	 * 
+	 *
 	 * @param exception
 	 * @return IStatus
 	 */
@@ -222,7 +222,7 @@
 
 	/**
 	 * Get the image for the severity if it can be identified.
-	 * 
+	 *
 	 * @param severity
 	 * @return Image or <code>null</code>
 	 */
@@ -243,7 +243,7 @@
 
 	/**
 	 * Get the IDE image at path.
-	 * 
+	 *
 	 * @param path
 	 * @return Image
 	 */
@@ -256,7 +256,7 @@
 
 	/**
 	 * Get the short name for the container
-	 * 
+	 *
 	 * @param marker
 	 * @return String
 	 */
@@ -299,7 +299,7 @@
 
 	/**
 	 * Return whether or not the selection has one element that is concrete.
-	 * 
+	 *
 	 * @param selection
 	 * @return <true>code</true> if the selection has one element that is
 	 *         concrete.
@@ -316,7 +316,7 @@
 
 	/**
 	 * Return whether or not all of the elements in the selection are concrete.
-	 * 
+	 *
 	 * @param selection
 	 * @return <true>code</true> if all of the elements are concrete.
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CollapseAllAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CollapseAllAction.java
index 8c6b761..bdea6fb 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CollapseAllAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CollapseAllAction.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *   IBM Corporation - initial API and implementation 
+ *   IBM Corporation - initial API and implementation
  *   Sebastian Davids <sdavids@gmx.de> - Collapse all action (25826)
  *******************************************************************************/
 package org.eclipse.ui.views.navigator;
@@ -23,7 +23,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param navigator the resource navigator
      * @param label the label for the action
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CopyAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CopyAction.java
index 77208ae..b8ac7d1 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CopyAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/CopyAction.java
@@ -36,7 +36,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  * @since 2.0
  */
@@ -87,7 +87,7 @@
      * @param shell the shell for any dialogs
      * @param clipboard a platform clipboard
      * @param pasteAction a paste action
-     * 
+     *
      * @since 2.0
      */
     public CopyAction(Shell shell, Clipboard clipboard, PasteAction pasteAction) {
@@ -95,15 +95,15 @@
         this.pasteAction = pasteAction;
     }
 
-   
+
     /* (non-Javadoc)
      * @see org.eclipse.jface.action.Action#run()
      */
     @Override
 	public void run() {
     	 /**
-         * The <code>CopyAction</code> implementation of this method defined 
-         * on <code>IAction</code> copies the selected resources to the 
+         * The <code>CopyAction</code> implementation of this method defined
+         * on <code>IAction</code> copies the selected resources to the
          * clipboard.
          */
         List selectedResources = getSelectedResources();
@@ -145,7 +145,7 @@
 
     /**
      * Set the clipboard contents. Prompt to retry if clipboard is busy.
-     * 
+     *
      * @param resources the resources to copy to the clipboard
      * @param fileNames file names of the resources to copy to the clipboard
      * @param names string representation of all names
@@ -178,19 +178,19 @@
         }
     }
 
-   
+
     /* (non-Javadoc)
      * @see org.eclipse.ui.actions.BaseSelectionListenerAction#updateSelection(org.eclipse.jface.viewers.IStructuredSelection)
      */
     @Override
 	protected boolean updateSelection(IStructuredSelection selection) {
-    	
+
     	 /**
          * The <code>CopyAction</code> implementation of this
-         * <code>SelectionListenerAction</code> method enables this action if 
+         * <code>SelectionListenerAction</code> method enables this action if
          * one or more resources of compatible types are selected.
          */
-    	
+
         if (!super.updateSelection(selection)) {
 			return false;
 		}
@@ -216,7 +216,7 @@
 			return false;
 		}
 
-        // must have a common parent	
+        // must have a common parent
         IContainer firstParent = ((IResource) selectedResources.get(0))
                 .getParent();
         if (firstParent == null) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FilterSelectionAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FilterSelectionAction.java
index 4805544..3ab7abe 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FilterSelectionAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FilterSelectionAction.java
@@ -32,7 +32,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param navigator the resource navigator
      * @param label the label for the action
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FiltersContentProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FiltersContentProvider.java
index ed0d1d4..022ee99 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FiltersContentProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/FiltersContentProvider.java
@@ -39,8 +39,8 @@
     /**
      * Create a FiltersContentProvider using the selections from the supplied
      * resource filter.
-     * 
-     * @param filter the resource pattern filter 
+     *
+     * @param filter the resource pattern filter
      */
     public FiltersContentProvider(ResourcePatternFilter filter) {
         this.resourceFilter = filter;
@@ -87,8 +87,8 @@
 
     /**
      * Return the initially selected elements.
-     * 
-     * @return an array with the initial selections 
+     *
+     * @return an array with the initial selections
      */
     public String[] getInitialSelections() {
         return this.resourceFilter.getPatterns();
@@ -102,13 +102,13 @@
     }
 
     /**
-     * Reads the filters currently defined for the workbench. 
+     * Reads the filters currently defined for the workbench.
      */
     private static void readFilters() {
 		definedFilters = new ArrayList();
 		defaultFilters = new ArrayList();
 		IExtensionPoint extension = Platform.getExtensionRegistry()
-				.getExtensionPoint(IDEWorkbenchPlugin.IDE_WORKBENCH + '.' 
+				.getExtensionPoint(IDEWorkbenchPlugin.IDE_WORKBENCH + '.'
 						+ ResourcePatternFilter.FILTERS_TAG);
 		if (extension != null) {
 			IExtension[] extensions = extension.getExtensions();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceAction.java
index 443d769..a410d29 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceAction.java
@@ -25,7 +25,7 @@
 public class GotoResourceAction extends ResourceNavigatorAction {
     /**
      * Creates a new instance of the class.
-     * 
+     *
      * @param navigator the navigator
      * @param label the label
      * @since 2.0
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceDialog.java
index b2c2793..627a313 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/GotoResourceDialog.java
@@ -19,7 +19,7 @@
 /**
  * Shows a list of resources to the user with a text entry field for a string
  * pattern used to filter the list of resources.
- * 
+ *
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
 @Deprecated
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/INavigatorHelpContextIds.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/INavigatorHelpContextIds.java
index 08d78a1..6c8c196 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/INavigatorHelpContextIds.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/INavigatorHelpContextIds.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *   IBM Corporation - initial API and implementation 
+ *   IBM Corporation - initial API and implementation
  *   Sebastian Davids <sdavids@gmx.de> - Collapse all action (25826)
  *******************************************************************************/
 package org.eclipse.ui.views.navigator;
@@ -21,7 +21,7 @@
  * </p>
  * @noextend This interface is not intended to be extended by clients.
  * @noimplement This interface is not intended to be implemented by clients.
- * 
+ *
  */
 /*package*/interface INavigatorHelpContextIds {
     public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/IResourceNavigator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/IResourceNavigator.java
index e5b0e2f..e7574a5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/IResourceNavigator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/IResourceNavigator.java
@@ -20,10 +20,10 @@
  * The action groups should restrict themselves to using this API.
  * <p>
  * This interface is not intended to be implemented by clients.
- * Subclass <code>org.eclipse.ui.views.ResourceNavigator</code> 
- * instead.   
+ * Subclass <code>org.eclipse.ui.views.ResourceNavigator</code>
+ * instead.
  * </p>
- * 
+ *
  * @since 2.0
  * @noimplement This interface is not intended to be implemented by clients.
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
@@ -49,7 +49,7 @@
     /**
      * Returns the current sorter.
      * @return the resource navigator's sorter
-     * 
+     *
      * @deprecated as of 3.3, use {@link IResourceNavigator#getComparator()} instead
      */
     @Deprecated
@@ -58,7 +58,7 @@
     /**
      * Sets the current sorter.
      * @param sorter the sorter to use
-     * 
+     *
      * @deprecated as of 3.3, use {@link IResourceNavigator#setComparator(ResourceComparator)} instead
      */
     @Deprecated
@@ -66,7 +66,7 @@
 
     /**
      * Returns the current comparator.
-     * 
+     *
      * @return the resource navigator's comparator
      * @since 3.3
      */
@@ -74,14 +74,14 @@
 
     /**
      * Sets the current comparator.
-     * 
+     *
      * @param comparator the comparator to use
      * @since 3.3
      */
     void setComparator(ResourceComparator comparator);
-    
+
     /**
-     * Sets the values of the filter preference to be the 
+     * Sets the values of the filter preference to be the
      * strings in preference values.
      * @param patterns filter patterns to use on contents of the resource navigator
      */
@@ -95,13 +95,13 @@
 
     /**
      * Returns the frame list for this navigator.
-     * @return the list of frames maintained by the resource navigator 
+     * @return the list of frames maintained by the resource navigator
      */
     FrameList getFrameList();
 
     /**
      * Returns whether this navigator's selection automatically tracks the active editor.
-     * 
+     *
      * @return <code>true</code> if linking is enabled, <code>false</code> if not
      * @since 2.1
      */
@@ -109,7 +109,7 @@
 
     /**
      * Sets the working set for this view, or <code>null</code> to clear it.
-     * 
+     *
      * @param workingSet the working set, or <code>null</code> to clear it
      * @since 2.0
      */
@@ -117,7 +117,7 @@
 
     /**
      * Sets whether this navigator's selection automatically tracks the active editor.
-     * 
+     *
      * @param enabled <code>true</code> to enable, <code>false</code> to disable
      * @since 2.1
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/LocalSelectionTransfer.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/LocalSelectionTransfer.java
index 8f0df34..f8229b9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/LocalSelectionTransfer.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/LocalSelectionTransfer.java
@@ -20,7 +20,7 @@
  * dropAccept does not contain the drop data. The selection may be used for
  * validation purposes so that the drop can be aborted if appropriate. This
  * class is not intended to be subclassed.
- * 
+ *
  * @since 2.1
  * @noextend This class is not intended to be subclassed by clients.
  * @deprecated as of 3.5, use {@link org.eclipse.jface.util.LocalSelectionTransfer} instead
@@ -49,7 +49,7 @@
 
 	/**
 	 * Returns the singleton.
-	 * 
+	 *
 	 * @return the singleton
 	 */
 	public static LocalSelectionTransfer getInstance() {
@@ -58,7 +58,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.util.LocalSelectionTransfer#getSelection()
 	 */
 	@Override
@@ -68,7 +68,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.util.LocalSelectionTransfer#getSelectionSetTime()
 	 */
 	@Override
@@ -78,7 +78,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.util.LocalSelectionTransfer#setSelection(org.eclipse.jface.viewers.ISelection)
 	 */
 	@Override
@@ -88,14 +88,14 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.util.LocalSelectionTransfer#setSelectionSetTime(long)
 	 */
 	@Override
 	public void setSelectionSetTime(long time) {
 		jfaceTransfer.setSelectionSetTime(time);
 	}
-	
+
 	/* (non-Javadoc)
 	 * @see org.eclipse.jface.util.LocalSelectionTransfer#javaToNative(java.lang.Object, org.eclipse.swt.dnd.TransferData)
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java
index 323e7ec..52cc541 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/MainActionGroup.java
@@ -63,7 +63,7 @@
     protected PropertyDialogAction propertyDialogAction;
 
     protected ImportResourcesAction importAction;
-    
+
     protected ExportResourcesAction exportAction;
 
     protected CollapseAllAction collapseAllAction;
@@ -79,7 +79,7 @@
     protected WorkingSetFilterActionGroup workingSetGroup;
 
     protected SortAndFilterActionGroup sortAndFilterGroup;
-    
+
     protected UndoRedoActionGroup undoRedoGroup;
 
     protected WorkspaceActionGroup workspaceGroup;
@@ -90,7 +90,7 @@
 
     /**
      * Constructs the main action group.
-     * 
+     *
      * @param navigator the navigator view
      */
     public MainActionGroup(IResourceNavigator navigator) {
@@ -167,14 +167,14 @@
         importAction
                 .setDisabledImageDescriptor(getImageDescriptor("dtool16/import_wiz.png")); //$NON-NLS-1$
         importAction
-                .setImageDescriptor(getImageDescriptor("etool16/import_wiz.png")); //$NON-NLS-1$		
+                .setImageDescriptor(getImageDescriptor("etool16/import_wiz.png")); //$NON-NLS-1$
 
         exportAction = new ExportResourcesAction(navigator.getSite()
                 .getWorkbenchWindow());
         exportAction
                 .setDisabledImageDescriptor(getImageDescriptor("dtool16/export_wiz.png")); //$NON-NLS-1$
         exportAction
-                .setImageDescriptor(getImageDescriptor("etool16/export_wiz.png")); //$NON-NLS-1$		
+                .setImageDescriptor(getImageDescriptor("etool16/export_wiz.png")); //$NON-NLS-1$
 
         collapseAllAction = new CollapseAllAction(navigator,
                 ResourceNavigatorMessages.CollapseAllAction_title);
@@ -225,7 +225,7 @@
 		undoRedoGroup= new UndoRedoActionGroup(getNavigator().getSite(), workspaceContext, true);
 
     }
-    
+
     /**
      * Extends the superclass implementation to set the context in the subgroups.
      */
@@ -243,7 +243,7 @@
     /**
      * Fills the context menu with the actions contained in this group
      * and its subgroups.
-     * 
+     *
      * @param menu the context menu
      */
     @Override
@@ -351,7 +351,7 @@
     }
 
     /**
-     * Extends the superclass implementation to dispose the 
+     * Extends the superclass implementation to dispose the
      * actions in this group and its subgroups.
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDragAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDragAdapter.java
index c727461..d27ae32 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDragAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDragAdapter.java
@@ -40,7 +40,7 @@
 /**
  * Implements drag behaviour when items are dragged out of the
  * resource navigator.
- * 
+ *
  * @since 2.0
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
@@ -77,7 +77,7 @@
 
         final int typeMask = IResource.FOLDER | IResource.FILE;
         if (event.detail == DND.DROP_MOVE) {
-            //never delete resources when dragging outside Eclipse. 
+            //never delete resources when dragging outside Eclipse.
             //workaround for bug 30543.
             if (lastDataType != null
                     && FileTransfer.getInstance().isSupportedType(lastDataType)) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java
index 75f209a..fcb9649 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorDropAdapter.java
@@ -50,7 +50,7 @@
 /**
  * Implements drop behaviour for drag and drop operations
  * that land on the resource navigator.
- * 
+ *
  * @since 2.0
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
@@ -69,7 +69,7 @@
 
     /**
      * Constructs a new drop adapter.
-     * 
+     *
      * @param viewer the navigator's viewer
      */
     public NavigatorDropAdapter(StructuredViewer viewer) {
@@ -144,7 +144,7 @@
 
     /**
      * Returns the resource selection from the LocalSelectionTransfer.
-     * 
+     *
      * @return the resource selection from the LocalSelectionTransfer
      */
     private IResource[] getSelectedResources() {
@@ -374,7 +374,7 @@
                 getCurrentTransfer()));
 
         IContainer target = getActualTarget((IResource) getCurrentTarget());
-        
+
         boolean shouldLinkAutomatically = false;
 		if (target.isVirtual()) {
 			shouldLinkAutomatically = true;
@@ -385,7 +385,7 @@
 				}
 			}
 		}
-		
+
 		if (shouldLinkAutomatically) {
 			CopyFilesAndFoldersOperation operation = new CopyFilesAndFoldersOperation(
 	                getShell());
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorFrameSource.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorFrameSource.java
index 09fe942..280c463 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorFrameSource.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/NavigatorFrameSource.java
@@ -29,7 +29,7 @@
 
     /**
      * Constructs a new frame source for the specified resource navigator.
-     * 
+     *
      * @param navigator the resource navigator
      */
     public NavigatorFrameSource(ResourceNavigator navigator) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/OpenActionGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/OpenActionGroup.java
index 50747ed..1f2f2e9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/OpenActionGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/OpenActionGroup.java
@@ -42,7 +42,7 @@
 
 	/**
 	 * Creates a new action group for open actions.
-	 * 
+	 *
 	 * @param navigator the resource navigator
 	 */
     public OpenActionGroup(IResourceNavigator navigator) {
@@ -79,7 +79,7 @@
 
     /**
      * Adds the OpenWith submenu to the context menu.
-     * 
+     *
      * @param menu the context menu
      * @param selection the current selection
      */
@@ -103,7 +103,7 @@
 
     /**
      * Adds the Open in New Window action to the context menu.
-     * 
+     *
      * @param menu the context menu
      * @param selection the current selection
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/PasteAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/PasteAction.java
index ac0c88b..7ffebc6 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/PasteAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/PasteAction.java
@@ -78,7 +78,7 @@
     /**
      * Returns the actual target of the paste action. Returns null
      * if no valid target is selected.
-     * 
+     *
      * @return the actual target of the paste action
      */
     private IResource getTarget() {
@@ -102,9 +102,9 @@
 
     /**
      * Returns whether any of the given resources are linked resources.
-     * 
+     *
      * @param resources resource to check for linked type. may be null
-     * @return true=one or more resources are linked. false=none of the 
+     * @return true=one or more resources are linked. false=none of the
      * 	resources are linked
      */
     private boolean isLinked(IResource[] resources) {
@@ -173,14 +173,14 @@
 
     /**
      * The <code>PasteAction</code> implementation of this
-     * <code>SelectionListenerAction</code> method enables this action if 
+     * <code>SelectionListenerAction</code> method enables this action if
      * a resource compatible with what is on the clipboard is selected.
-     * 
+     *
      * -Clipboard must have IResource or java.io.File
      * -Projects can always be pasted if they are open
      * -Workspace folder may not be copied into itself
-     * -Files and folders may be pasted to a single selected folder in open 
-     * 	project or multiple selected files in the same folder 
+     * -Files and folders may be pasted to a single selected folder in open
+     * 	project or multiple selected files in the same folder
      */
     @Override
 	protected boolean updateSelection(IStructuredSelection selection) {
@@ -219,13 +219,13 @@
 		}
 
         IResource targetResource = getTarget();
-        // targetResource is null if no valid target is selected (e.g., open project) 
-        // or selection is empty	
+        // targetResource is null if no valid target is selected (e.g., open project)
+        // or selection is empty
         if (targetResource == null) {
 			return false;
 		}
 
-        // can paste files and folders to a single selection (file, folder, 
+        // can paste files and folders to a single selection (file, folder,
         // open project) or multiple file selection with the same parent
         List selectedResources = getSelectedResources();
         if (selectedResources.size() > 1) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/RefactorActionGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/RefactorActionGroup.java
index 537debd..b97d9c0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/RefactorActionGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/RefactorActionGroup.java
@@ -29,7 +29,7 @@
 /**
  * This is the action group for refactor actions,
  * including global action handlers for copy, paste and delete.
- * 
+ *
  * @since 2.0
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceComparator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceComparator.java
index 9a59962..d58f9ff 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceComparator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceComparator.java
@@ -31,7 +31,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @since 3.3
  */
 public class ResourceComparator extends ViewerComparator {
@@ -51,7 +51,7 @@
     /**
      * Creates a resource sorter that will use the given sort criteria.
      *
-     * @param criteria the sort criterion to use: one of <code>NAME</code> or 
+     * @param criteria the sort criterion to use: one of <code>NAME</code> or
      *   <code>TYPE</code>
      */
     public ResourceComparator(int criteria) {
@@ -60,7 +60,7 @@
     }
 
     /**
-     * Returns an integer value representing the relative sort priority of the 
+     * Returns an integer value representing the relative sort priority of the
      * given element based on its class.
      * <p>
      * <ul>
@@ -86,7 +86,7 @@
     @Override
 	public int compare(Viewer viewer, Object o1, Object o2) {
         //have to deal with non-resources in navigator
-        //if one or both objects are not resources, returned a comparison 
+        //if one or both objects are not resources, returned a comparison
         //based on class.
         if (!(o1 instanceof IResource && o2 instanceof IResource)) {
             return compareClass(o1, o2);
@@ -115,7 +115,7 @@
      *
      * @param element1 the first element to be ordered
      * @param element2 the second element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -130,7 +130,7 @@
      *
      * @param resource1 the first resource element to be ordered
      * @param resource2 the second resource element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -146,7 +146,7 @@
      *
      * @param resource1 the first resource element to be ordered
      * @param resource2 the second resource element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -189,9 +189,9 @@
 
     /**
      * Sets the sort criteria of this sorter.
-     * 
-     * @param criteria the sort criterion: 
-     *	one of <code>ResourceSorter.NAME</code> or 
+     *
+     * @param criteria the sort criterion:
+     *	one of <code>ResourceSorter.NAME</code> or
      *	<code>ResourceSorter.TYPE</code>
      */
     public void setCriteria(int criteria) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java
index df2547a..faf9766 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigator.java
@@ -141,7 +141,7 @@
 	 * event we're effectively not using a working set.
 	 */
     private boolean emptyWorkingSet = false;
-    
+
     /**
 	 * Settings constant for section name (value <code>ResourceNavigator</code>).
 	 */
@@ -167,7 +167,7 @@
      * True iff we've already scheduled an asynchronous call to linkToEditor
      */
     private boolean linkScheduled = false;
-    
+
     // Persistance tags.
     private static final String TAG_SORTER = "sorter"; //$NON-NLS-1$
 
@@ -221,7 +221,7 @@
             String property = event.getProperty();
             Object newValue = event.getNewValue();
             Object oldValue = event.getOldValue();
-           
+
             if (IWorkingSetManager.CHANGE_WORKING_SET_REMOVE.equals(property)
                     && oldValue == workingSet) {
                 setWorkingSet(null);
@@ -252,10 +252,10 @@
     };
 
 	private CollapseAllHandler collapseAllHandler;
-	
+
 	/**
 	 * Helper to open and activate editors.
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	private OpenAndLinkWithEditorHelper openAndLinkWithEditorHelper;
@@ -354,7 +354,7 @@
 
     /**
      * Returns the help context id to use for this view.
-     * 
+     *
      * @since 2.0
      */
     protected String getHelpContextId() {
@@ -363,7 +363,7 @@
 
     /**
      * Initializes and registers the context menu.
-     * 
+     *
      * @since 2.0
      */
     protected void initContextMenu() {
@@ -383,7 +383,7 @@
 
     /**
      * Creates the viewer.
-     * 
+     *
      * @param parent the parent composite
      * @since 2.0
      */
@@ -401,7 +401,7 @@
 
     /**
      * Sets the content provider for the viewer.
-     * 
+     *
      * @param viewer the viewer
      * @since 2.0
      */
@@ -411,7 +411,7 @@
 
     /**
      * Sets the label provider for the viewer.
-     * 
+     *
      * @param viewer the viewer
      * @since 2.0
      */
@@ -423,7 +423,7 @@
 
     /**
      * Adds the filters to the viewer.
-     * 
+     *
      * @param viewer the viewer
      * @since 2.0
      */
@@ -451,7 +451,7 @@
 
     /**
      * Adds the listeners to the viewer.
-     * 
+     *
      * @param viewer the viewer
      * @since 2.0
      */
@@ -468,7 +468,7 @@
                 handleDoubleClick(event);
             }
         });
-        
+
 		openAndLinkWithEditorHelper = new OpenAndLinkWithEditorHelper(viewer) {
 			@Override
 			protected void activate(ISelection selection) {
@@ -481,7 +481,7 @@
 						page.activate(editor);
 					}
 				}
-				
+
 			}
 
 			@Override
@@ -517,7 +517,7 @@
 			}
 
 		};
-        
+
 
         viewer.getControl().addKeyListener(new KeyListener() {
             @Override
@@ -530,7 +530,7 @@
                 handleKeyReleased(event);
             }
         });
-        
+
         openAndLinkWithEditorHelper.setLinkWithEditor(linkingEnabled);
     }
 
@@ -548,7 +548,7 @@
         if (collapseAllHandler != null) {
 			collapseAllHandler.dispose();
 		}
-        
+
         if (getActionGroup() != null) {
             getActionGroup().dispose();
         }
@@ -557,14 +557,14 @@
                 && control.isDisposed() == false) {
             control.removeListener(SWT.DragDetect, dragDetectListener);
         }
-        
+
         super.dispose();
     }
 
     /**
      * An editor has been activated.  Sets the selection in this navigator
      * to be the editor's input, if linking is enabled.
-     * 
+     *
      * @param editor the active editor
      * @since 2.0
      */
@@ -611,7 +611,7 @@
      * If the resource is a container, it uses that.
      * If the resource is a file, it uses its parent folder.
      * If a resource could not be obtained, it uses the workspace root.
-     * 
+     *
      * @since 2.0
      */
     protected IAdaptable getInitialInput() {
@@ -674,7 +674,7 @@
 	 * Return the sorter. If a comparator was set using
 	 * {@link #setComparator(ResourceComparator)}, this method will return
 	 * <code>null</code>.
-	 * 
+	 *
 	 * @since 2.0
 	 * @deprecated as of 3.3, use {@link ResourceNavigator#getComparator()}
 	 */
@@ -692,7 +692,7 @@
      * Returns the comparator.  If a sorter was set using
 	 * {@link #setSorter(ResourceSorter)}, this method will return
 	 * <code>null</code>.
-     * 
+     *
      * @return the <code>ResourceComparator</code>
      * @since 3.3
      */
@@ -726,7 +726,7 @@
     /**
      * Returns the shell to use for opening dialogs.
      * Used in this class, and in the actions.
-     * 
+     *
      * @return the shell
      * @deprecated use getViewSite().getShell()
      */
@@ -784,7 +784,7 @@
 			}
             return path.makeRelative().toString();
         }
-        
+
         String text = ((ILabelProvider) getTreeViewer().getLabelProvider())
         	.getText(element);
         if(text == null) {
@@ -795,7 +795,7 @@
 
 	/**
 	 * Handles an open event from the viewer. Opens an editor on the selected file.
-	 * 
+	 *
 	 * @param event the open event
 	 * @since 2.0
 	 * @deprecated As of 3.5, replaced by {@link #handleOpen(ISelection)}
@@ -807,7 +807,7 @@
 
 	/**
 	 * Handles an open event from the viewer. Opens an editor on the selected file.
-	 * 
+	 *
 	 * @param selection the selection
 	 * @since 3.5
 	 */
@@ -820,7 +820,7 @@
     /**
      * Handles a double-click event from the viewer.
      * Expands or collapses a folder when double-clicked.
-     * 
+     *
      * @param event the double-click event
      * @since 2.0
      */
@@ -847,7 +847,7 @@
     /**
      * Handles a selection changed event from the viewer.
      * Updates the status line and the action bars, and links to editor (if option enabled).
-     * 
+     *
      * @param event the selection event
      * @since 2.0
      */
@@ -862,7 +862,7 @@
     /**
      * Handles a key press event from the viewer.
      * Delegates to the action group.
-     * 
+     *
      * @param event the key event
      * @since 2.0
      */
@@ -872,7 +872,7 @@
 
     /**
      * Handles a key release in the viewer.  Does nothing by default.
-     * 
+     *
      * @param event the key event
      * @since 2.0
      */
@@ -890,7 +890,7 @@
 
     /**
      * Adds drag and drop support to the navigator.
-     * 
+     *
      * @since 2.0
      */
     protected void initDragAndDrop() {
@@ -915,7 +915,7 @@
 
     /**
      * Creates the frame source and frame list, and connects them.
-     * 
+     *
      * @since 2.0
      */
     protected FrameList createFrameList() {
@@ -927,7 +927,7 @@
 
     /**
      * Initializes the sorter.
-     * 
+     *
      * @deprecated as of 3.3, use {@link ResourceNavigator#initResourceComparator()} instead
      */
     @Deprecated
@@ -951,7 +951,7 @@
         }
         setSorter(new ResourceSorter(sortType));
     }
-    
+
     /**
      * Initializes the comparator.
 	 * @since 3.3
@@ -984,7 +984,7 @@
         String workingSetName = settings.get(STORE_WORKING_SET);
 
         IWorkingSet workingSet = null;
-        
+
         if (workingSetName != null && workingSetName.equals("") == false) { //$NON-NLS-1$
 			IWorkingSetManager workingSetManager = getPlugin().getWorkbench()
 					.getWorkingSetManager();
@@ -1009,7 +1009,7 @@
     /**
 	 * Returns whether the navigator selection automatically tracks the active
 	 * editor.
-	 * 
+	 *
 	 * @return <code>true</code> if linking is enabled, <code>false</code>
 	 *         if not
 	 * @since 2.0 (this was protected in 2.0, but was made public in 2.1)
@@ -1021,7 +1021,7 @@
 
 	/**
 	 * Brings the corresponding editor to top if the selected resource is open.
-	 * 
+	 *
 	 * @since 2.0
 	 * @deprecated As of 3.5, replaced by {@link #linkToEditor(ISelection)}
 	 */
@@ -1032,14 +1032,14 @@
 
 	/**
 	 * Brings the corresponding editor to top if the selected resource is open.
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	protected void linkToEditor(ISelection selection) {
 
     	if (this != this.getSite().getPage().getActivePart())
     		return;
-    	
+
         Object obj = getSingleElement(selection);
 		if (obj instanceof IFile) {
             IFile file = (IFile) obj;
@@ -1058,7 +1058,7 @@
     protected void makeActions() {
     	MainActionGroup group = new MainActionGroup(this);
         setActionGroup(group);
-        
+
         IHandlerService service = getSite().getService(IHandlerService.class);
 		service.activateHandler(IWorkbenchCommandConstants.NAVIGATE_TOGGLE_LINK_WITH_EDITOR,
     			new ActionHandler(group.toggleLinkingAction));
@@ -1350,7 +1350,7 @@
 
     /**
      * Sets the resource sorter.
-     * 
+     *
      * @param sorter the resource sorter
      * @since 2.0
      * @deprecated as of 3.3, use {@link ResourceNavigator#setComparator(ResourceComparator)}
@@ -1373,10 +1373,10 @@
         // update the sort actions' checked state
         updateActionBars((IStructuredSelection) viewer.getSelection());
     }
-    
+
     /**
      * Sets the resource comparator
-     * 
+     *
      * @param comparator the resource comparator
      * @since 3.3
      */
@@ -1407,9 +1407,9 @@
         TreeViewer treeViewer = getTreeViewer();
         Object[] expanded = treeViewer.getExpandedElements();
         ISelection selection = treeViewer.getSelection();
-        
+
         boolean refreshNeeded = internalSetWorkingSet(workingSet);
-        
+
         workingSetFilter.setWorkingSet(emptyWorkingSet ? null : workingSet);
         if (workingSet != null) {
             settings.put(STORE_WORKING_SET, workingSet.getName());
@@ -1430,7 +1430,7 @@
 
 	/**
 	 * Set the internal working set fields specific to the navigator.
-	 * 
+	 *
 	 * @param workingSet
 	 *            the new working set
 	 * @since 3.2
@@ -1445,7 +1445,7 @@
 
     /**
      * Updates the action bar actions.
-     * 
+     *
      * @param selection the current selection
      * @since 2.0
      */
@@ -1471,7 +1471,7 @@
      * Updates the title text and title tool tip.
      * Called whenever the input of the viewer changes.
      * Called whenever the input of the viewer changes.
-     * 
+     *
      * @since 2.0
      */
     public void updateTitle() {
@@ -1505,7 +1505,7 @@
 
     /**
      * Returns the action group.
-     * 
+     *
      * @return the action group
      */
     protected ResourceNavigatorActionGroup getActionGroup() {
@@ -1514,7 +1514,7 @@
 
     /**
      * Sets the action group.
-     * 
+     *
      * @param actionGroup the action group
      */
     protected void setActionGroup(ResourceNavigatorActionGroup actionGroup) {
@@ -1603,10 +1603,10 @@
             }
         };
     }
-    
+
 	/**
 	 * Returns the selected element if the selection consists of a single element only.
-	 * 
+	 *
 	 * @param s the selection
 	 * @return the selected first element or null
 	 * @since 3.5
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorActionGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorActionGroup.java
index ec5167e..28a22f3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorActionGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorActionGroup.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *        IBM Corporation - initial API and implementation 
+ *        IBM Corporation - initial API and implementation
  *        Sebastian Davids <sdavids@gmx.de> - Images for menu items (27481)
  *******************************************************************************/
 package org.eclipse.ui.views.navigator;
@@ -20,13 +20,13 @@
 /**
  * This is the action group for all the resource navigator actions.
  * It delegates to several subgroups for most of the actions.
- * 
+ *
  * @see GotoActionGroup
  * @see OpenActionGroup
  * @see RefactorActionGroup
  * @see SortAndFilterActionGroup
  * @see WorkspaceActionGroup
- * 
+ *
  * @since 2.0
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
@@ -37,10 +37,10 @@
      * The resource navigator.
      */
     protected IResourceNavigator navigator;
-	
+
     /**
      * Constructs a new navigator action group and creates its actions.
-     * 
+     *
      * @param navigator the resource navigator
      */
     public ResourceNavigatorActionGroup(IResourceNavigator navigator) {
@@ -53,7 +53,7 @@
      */
     protected ImageDescriptor getImageDescriptor(String relativePath) {
        return IDEWorkbenchPlugin.getIDEImageDescriptor(relativePath);
-     
+
     }
 
     /**
@@ -78,7 +78,7 @@
     /**
      * Runs the default action in the group.
      * Does nothing by default.
-     * 
+     *
      * @param selection the current selection
      */
     public void runDefaultAction(IStructuredSelection selection) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMessages.java
index 11c6636..ff054c8 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMessages.java
@@ -17,18 +17,18 @@
  * @deprecated These messages are not API and should not be referenced
  * outside of this plug-in.
  * @noextend This class is not intended to be subclassed by clients.
- * @noinstantiate This class is not intended to be instantiated by clients. 
+ * @noinstantiate This class is not intended to be instantiated by clients.
  */
 @Deprecated
 public class ResourceNavigatorMessages {
-    
+
 	private ResourceNavigatorMessages() {
         // prevent instantiation of class
     }
 
     /**
      * Returns the formatted message for the given key in
-     * the resource bundle. 
+     * the resource bundle.
      *
      * @param key the resource name
      * @param args the message arguments
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMoveAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMoveAction.java
index 7fdef6a..19c0cf0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMoveAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceNavigatorMoveAction.java
@@ -30,7 +30,7 @@
  * The ResourceNavigatorMoveAction is a resource move that aso updates the navigator
  * to show the result of the move.
  * It also delegates to MoveProjectAction as needed.
- * 
+ *
  * @since 2.0
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourcePatternFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourcePatternFilter.java
index d35b8a8..b20db91 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourcePatternFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourcePatternFilter.java
@@ -24,7 +24,7 @@
 
 /**
  * Filter used to determine whether resources are to be shown or not.
- * 
+ *
  * @since 2.0
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSelectionUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSelectionUtil.java
index 49aa036..f490c22 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSelectionUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSelectionUtil.java
@@ -39,9 +39,9 @@
     }
 
     /**
-     * Returns whether the types of the resources in the given selection are among 
+     * Returns whether the types of the resources in the given selection are among
      * the specified resource types.
-     * 
+     *
      * @param selection the selection
      * @param resourceMask resource mask formed by bitwise OR of resource type
      *   constants (defined on <code>IResource</code>)
@@ -68,7 +68,7 @@
     /**
      * Returns the selection adapted to IResource. Returns null
      * if any of the entries are not adaptable.
-     * 
+     *
      * @param selection the selection
      * @param resourceMask resource mask formed by bitwise OR of resource type
      *   constants (defined on <code>IResource</code>)
@@ -98,13 +98,13 @@
     }
 
     /**
-     * Returns whether the type of the given resource is among the specified 
+     * Returns whether the type of the given resource is among the specified
      * resource types.
-     * 
+     *
      * @param resource the resource
      * @param resourceMask resource mask formed by bitwise OR of resource type
      *   constants (defined on <code>IResource</code>)
-     * @return <code>true</code> if the resources has a matching type, and 
+     * @return <code>true</code> if the resources has a matching type, and
      *   <code>false</code> otherwise
      * @see IResource#getType()
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSorter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSorter.java
index 1071918..2f6c4cc 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSorter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ResourceSorter.java
@@ -31,7 +31,7 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @deprecated as of 3.3, use {@link ResourceComparator} instead
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -53,7 +53,7 @@
     /**
      * Creates a resource sorter that will use the given sort criteria.
      *
-     * @param criteria the sort criterion to use: one of <code>NAME</code> or 
+     * @param criteria the sort criterion to use: one of <code>NAME</code> or
      *   <code>TYPE</code>
      */
     public ResourceSorter(int criteria) {
@@ -62,7 +62,7 @@
     }
 
     /**
-     * Returns an integer value representing the relative sort priority of the 
+     * Returns an integer value representing the relative sort priority of the
      * given element based on its class.
      * <p>
      * <ul>
@@ -88,7 +88,7 @@
     @Override
 	public int compare(Viewer viewer, Object o1, Object o2) {
         //have to deal with non-resources in navigator
-        //if one or both objects are not resources, returned a comparison 
+        //if one or both objects are not resources, returned a comparison
         //based on class.
         if (!(o1 instanceof IResource && o2 instanceof IResource)) {
             return compareClass(o1, o2);
@@ -117,7 +117,7 @@
      *
      * @param element1 the first element to be ordered
      * @param element2 the second element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -132,7 +132,7 @@
      *
      * @param resource1 the first resource element to be ordered
      * @param resource2 the second resource element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -148,7 +148,7 @@
      *
      * @param resource1 the first resource element to be ordered
      * @param resource2 the second resource element to be ordered
-     * @return a negative number if the first element is less  than the 
+     * @return a negative number if the first element is less  than the
      *  second element; the value <code>0</code> if the first element is
      *  equal to the second element; and a positive number if the first
      *  element is greater than the second element
@@ -191,9 +191,9 @@
 
     /**
      * Sets the sort criteria of this sorter.
-     * 
-     * @param criteria the sort criterion: 
-     *	one of <code>ResourceSorter.NAME</code> or 
+     *
+     * @param criteria the sort criterion:
+     *	one of <code>ResourceSorter.NAME</code> or
      *	<code>ResourceSorter.TYPE</code>
      */
     public void setCriteria(int criteria) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ShowInNavigatorAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ShowInNavigatorAction.java
index 1dfd407..4e6d297 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ShowInNavigatorAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ShowInNavigatorAction.java
@@ -44,7 +44,7 @@
 
     /**
      * Create a new instance of this class.
-     * 
+     *
      * @param page the page
      * @param viewer the viewer
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/SortAndFilterActionGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/SortAndFilterActionGroup.java
index 6b1add6..d337715 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/SortAndFilterActionGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/SortAndFilterActionGroup.java
@@ -31,8 +31,8 @@
     private FilterSelectionAction filterAction;
 
     /**
-     * Constructor. 
-     * 
+     * Constructor.
+     *
      * @param navigator
      */
     public SortAndFilterActionGroup(IResourceNavigator navigator) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/StringMatcher.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/StringMatcher.java
index 0d86a95..285b3b3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/StringMatcher.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/StringMatcher.java
@@ -14,7 +14,7 @@
 
 /**
  * A string pattern matcher, supporting ?*? and ??? wildcards.
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
@@ -58,14 +58,14 @@
     }
 
     /**
-     * StringMatcher constructor takes in a String object that is a simple 
+     * StringMatcher constructor takes in a String object that is a simple
      * pattern which may contain '*' for 0 and many characters and
-     * '?' for exactly one character.  
+     * '?' for exactly one character.
      *
-     * Literal '*' and '?' characters must be escaped in the pattern 
+     * Literal '*' and '?' characters must be escaped in the pattern
      * e.g., "\*" means literal "*", etc.
      *
-     * Escaping any other character (including the escape character itself), 
+     * Escaping any other character (including the escape character itself),
      * just results in that character in the pattern.
      * e.g., "\a" means "a" and "\\" means "\"
      *
@@ -95,13 +95,13 @@
     }
 
     /**
-     * Find the first occurrence of the pattern between <code>start</code)(inclusive) 
-     * and <code>end</code>(exclusive).  
-     * @param <code>text</code>, the String object to search in 
+     * Find the first occurrence of the pattern between <code>start</code)(inclusive)
+     * and <code>end</code>(exclusive).
+     * @param <code>text</code>, the String object to search in
      * @param <code>start</code>, the starting index of the search range, inclusive
      * @param <code>end</code>, the ending index of the search range, exclusive
-     * @return an <code>StringMatcher.Position</code> object that keeps the starting 
-     * (inclusive) and ending positions (exclusive) of the first occurrence of the 
+     * @return an <code>StringMatcher.Position</code> object that keeps the starting
+     * (inclusive) and ending positions (exclusive) of the first occurrence of the
      * pattern in the specified range of the text; return null if not found or subtext
      * is empty (start==end). A pair of zeros is returned if pattern is empty string
      * Note that for pattern like "*abc*" with leading and trailing stars, position of "abc"
@@ -159,21 +159,21 @@
     }
 
     /**
-     * match the given <code>text</code> with the pattern 
+     * match the given <code>text</code> with the pattern
      * @return true if matched eitherwise false
-     * @param <code>text</code>, a String object 
+     * @param <code>text</code>, a String object
      */
     public boolean match(String text) {
         return match(text, 0, text.length());
     }
 
     /**
-     * Given the starting (inclusive) and the ending (exclusive) poisitions in the   
-     * <code>text</code>, determine if the given substring matches with aPattern  
+     * Given the starting (inclusive) and the ending (exclusive) poisitions in the
+     * <code>text</code>, determine if the given substring matches with aPattern
      * @return true if the specified portion of the text matches the pattern
-     * @param String <code>text</code>, a String object that contains the substring to match 
+     * @param String <code>text</code>, a String object that contains the substring to match
      * @param int <code>start<code> marks the starting position (inclusive) of the substring
-     * @param int <code>end<code> marks the ending index (exclusive) of the substring 
+     * @param int <code>end<code> marks the ending index (exclusive) of the substring
      */
     public boolean match(String text, int start, int end) {
         if (null == text) {
@@ -332,11 +332,11 @@
         temp.copyInto(fSegments);
     }
 
-    /** 
+    /**
      * @param <code>text</code>, a string which contains no wildcard
      * @param <code>start</code>, the starting index in the text for search, inclusive
      * @param <code>end</code>, the stopping point of search, exclusive
-     * @return the starting index in the text of the pattern , or -1 if not found 
+     * @return the starting index in the text of the pattern , or -1 if not found
      */
     protected int posIn(String text, int start, int end) {//no wild card in pattern
         int max = end - fLength;
@@ -358,13 +358,13 @@
         return -1;
     }
 
-    /** 
+    /**
      * @param <code>text</code>, a simple regular expression that may only contain '?'(s)
      * @param <code>start</code>, the starting index in the text for search, inclusive
      * @param <code>end</code>, the stopping point of search, exclusive
      * @param <code>p</code>, a simple regular expression that may contains '?'
      * @param <code>caseIgnored</code>, wether the pattern is not casesensitive
-     * @return the starting index in the text of the pattern , or -1 if not found 
+     * @return the starting index in the text of the pattern , or -1 if not found
      */
     protected int regExpPosIn(String text, int start, int end, String p) {
         int plen = p.length();
@@ -379,7 +379,7 @@
     }
 
     /**
-     * 
+     *
      * @return boolean
      * @param <code>text</code>, a String to match
      * @param <code>start</code>, int that indicates the starting index of match, inclusive
@@ -420,13 +420,13 @@
         return true;
     }
 
-    /** 
+    /**
      * @param <code>text</code>, the string to match
      * @param <code>start</code>, the starting index in the text for search, inclusive
      * @param <code>end</code>, the stopping point of search, exclusive
      * @param code>p</code>, a string that has no wildcard
      * @param <code>ignoreCase</code>, boolean indicating wether code>p</code> is case sensitive
-     * @return the starting index in the text of the pattern , or -1 if not found 
+     * @return the starting index in the text of the pattern , or -1 if not found
      */
     protected int textPosIn(String text, int start, int end, String p) {
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ToggleLinkingAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ToggleLinkingAction.java
index 947afa8..56f76f9 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ToggleLinkingAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/ToggleLinkingAction.java
@@ -16,7 +16,7 @@
 /**
  * This action toggles whether this navigator links its selection to the active
  * editor.
- * 
+ *
  * @since 2.1
  * @deprecated as of 3.5, use the Common Navigator Framework classes instead
  */
@@ -26,7 +26,7 @@
 
 	/**
 	 * Constructs a new action.
-	 * 
+	 *
 	 * @param navigator the resource navigator
 	 * @param label the label
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/WorkspaceActionGroup.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/WorkspaceActionGroup.java
index 479bcba..9cbbaee 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/WorkspaceActionGroup.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/navigator/WorkspaceActionGroup.java
@@ -59,7 +59,7 @@
     private OpenResourceAction openProjectAction;
 
     private CloseResourceAction closeProjectAction;
-    
+
     private CloseUnrelatedProjectsAction closeUnrelatedProjectsAction;
 
     private RefreshAction refreshAction;
@@ -86,8 +86,8 @@
      * Adds the build, open project, close project and refresh resource
      * actions to the context menu.
      * <p>
-     * The following conditions apply: 
-     * 	build-only projects selected, auto build disabled, at least one 
+     * The following conditions apply:
+     * 	build-only projects selected, auto build disabled, at least one
      * 		builder present
      * 	open project-only projects selected, at least one closed project
      * 	close project-only projects selected, at least one open project
@@ -100,7 +100,7 @@
      * <p>
      * No disabled action should be on the context menu.
      * </p>
-     * 
+     *
      * @param menu context menu to add actions to
      */
     @Override
@@ -110,7 +110,7 @@
         boolean isProjectSelection = true;
         boolean hasOpenProjects = false;
         boolean hasClosedProjects = false;
-        boolean hasBuilder = true; // false if any project is closed or does not have builder 
+        boolean hasBuilder = true; // false if any project is closed or does not have builder
         Iterator resources = selection.iterator();
 
         while (resources.hasNext()
@@ -192,7 +192,7 @@
 				return true;
 			}
         } catch (CoreException e) {
-            // Cannot determine if project has builders. Project is closed 
+            // Cannot determine if project has builders. Project is closed
             // or does not exist. Fall through to return false.
         }
         return false;
@@ -244,7 +244,7 @@
         				}
         				return errorStatus[0];
         			}
-        			
+
         		};
         		ISchedulingRule rule = op.getRule();
         		if (rule != null) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IDEPropertiesMessages.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IDEPropertiesMessages.java
index bb1e980..5955195 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IDEPropertiesMessages.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IDEPropertiesMessages.java
@@ -25,7 +25,7 @@
 
     /**
      * Returns the formatted message for the given key in
-     * the resource bundle. 
+     * the resource bundle.
      *
      * @param key the resource name
      * @param args the message arguments
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IResourcePropertyConstants.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IResourcePropertyConstants.java
index 32408c9..330d925 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IResourcePropertyConstants.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/IResourcePropertyConstants.java
@@ -17,67 +17,67 @@
  * property source.
  */
 public interface IResourcePropertyConstants {
-    /** 
+    /**
      * The <code>IResource</code> property key for name.
      */
     public static final String P_LABEL_RES = IDEPropertiesMessages.IResourcePropertyConstants_name;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for path.
      */
     public static final String P_PATH_RES = "org.eclipse.ui.path"; //$NON-NLS-1$
 
-    /** 
+    /**
      * The <code>IResource</code> property key for display path.
      */
     public static final String P_DISPLAYPATH_RES = IDEPropertiesMessages.IResourcePropertyConstants_path;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for read-only.
      */
     public static final String P_EDITABLE_RES = "org.eclipse.ui.editable"; //$NON-NLS-1$
 
-    /** 
+    /**
      * The <code>IResource</code> property key for display read-only.
      */
     public static final String P_DISPLAYEDITABLE_RES = IDEPropertiesMessages.IResourcePropertyConstants_editable;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for read-only.
      */
     public static final String P_DERIVED_RES = "org.eclipse.ui.derived"; //$NON-NLS-1$
 
-    /** 
+    /**
      * The <code>IResource</code> property key for display read-only.
      */
     public static final String P_DISPLAYDERIVED_RES = IDEPropertiesMessages.IResourcePropertyConstants_derived;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for location.
      */
     public static final String P_LOCATION_RES = "org.eclipse.ui.location"; //$NON-NLS-1$
 
-    /** 
+    /**
      * The <code>IResource</code> property key for display location.
      */
     public static final String P_DISPLAYLOCATION_RES = IDEPropertiesMessages.IResourcePropertyConstants_location;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for resolved location.
      */
     public static final String P_RESOLVED_LOCATION_RES = "org.eclipse.ui.resolvedLocation"; //$NON-NLS-1$,
 
-    /** 
+    /**
      * The <code>IResource</code> property key for display resolved location.
      */
     public static final String P_DISPLAYRESOLVED_LOCATION_RES = IDEPropertiesMessages.IResourcePropertyConstants_resolvedLocation;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for linked.
      */
     public static final String P_LINKED_RES = "org.eclipse.ui.linked"; //$NON-NLS-1$,
 
-    /** 
+    /**
      * The <code>IResource</code> property key for display linked.
      */
     public static final String P_DISPLAYLINKED_RES = IDEPropertiesMessages.IResourcePropertyConstants_linked;
@@ -87,7 +87,7 @@
      */
     public static final String P_FILE_SYSTEM_CATEGORY = IDEPropertiesMessages.IResourcePropertyConstants_info;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for path.
      */
     public static final String P_SIZE_RES = "org.eclipse.ui.size"; //$NON-NLS-1$
@@ -97,7 +97,7 @@
      */
     public static final String P_DISPLAY_SIZE = IDEPropertiesMessages.IResourcePropertyConstants_size;
 
-    /** 
+    /**
      * The <code>IResource</code> property key for path.
      */
     public static final String P_LAST_MODIFIED_RES = "org.eclipse.ui.lastmodified"; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/ResourcePropertySource.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/ResourcePropertySource.java
index 2ba81d1..f4bc4ee 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/ResourcePropertySource.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/properties/ResourcePropertySource.java
@@ -172,7 +172,7 @@
             final ResourceAttributes attributes = element.getResourceAttributes();
 			if (attributes == null || attributes.isReadOnly()) {
 				return IDEPropertiesMessages.ResourceProperty_false;
-			} 
+			}
 			return IDEPropertiesMessages.ResourceProperty_true;
         }
         if (name.equals(IResourcePropertyConstants.P_DERIVED_RES)) {
@@ -195,14 +195,14 @@
     }
 
     /**
-     * Returns whether the given resource is a linked resource bound 
+     * Returns whether the given resource is a linked resource bound
      * to a path variable.
-     * 
+     *
      * @param resource resource to test
-     * @return boolean <code>true</code> the given resource is a linked 
-     * 	resource bound to a path variable. <code>false</code> the given 
+     * @return boolean <code>true</code> the given resource is a linked
+     * 	resource bound to a path variable. <code>false</code> the given
      * 	resource is either not a linked resource or it is not using a
-     * 	path variable.  
+     * 	path variable.
      */
     private boolean isPathVariable(IResource resource) {
         if (!resource.isLinked()) {
@@ -248,7 +248,7 @@
 	public void setPropertyValue(Object name, Object value) {
     }
 
-    /** 
+    /**
      * Get the java.io.File equivalent of the passed
      * IFile. If the location does not exist then return
      * <code>null</code>
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/CopyTaskAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/CopyTaskAction.java
index 27842d5..133a021 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/CopyTaskAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/CopyTaskAction.java
@@ -29,7 +29,7 @@
  * Copies a task to the clipboard.
  */
 class CopyTaskAction extends TaskAction {
- 
+
 	/**
      * Creates the action.
 	 * @param tasklist the task list
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/FiltersDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/FiltersDialog.java
index f54d7ef..b24f31d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/FiltersDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/FiltersDialog.java
@@ -212,7 +212,7 @@
 
         /**
          * Creates the working set filter selection widgets.
-         * 
+         *
          * @param parent the parent composite of the working set widgets
          */
         WorkingSetGroup(Composite parent) {
@@ -234,7 +234,7 @@
 
 		/**
 		 * Returns whether or not a working set filter should be used
-		 * 
+		 *
 		 * @return true=a working set filter should be used false=a working set filter should not be
 		 *         used
 		 */
@@ -245,7 +245,7 @@
         /**
          * Returns the selected working set filter or null if none
          * is selected.
-         * 
+         *
          * @return the selected working set filter or null if none
          * 	is selected.
          */
@@ -255,7 +255,7 @@
 
         /**
          * Sets the working set filter selection.
-         * 
+         *
          * @param selected true=a working set filter should be used
          * 	false=no working set filter should be used
          */
@@ -296,7 +296,7 @@
 
         /**
          * Sets the specified working set.
-         * 
+         *
          * @param workingSet the working set
          */
         void setWorkingSet(IWorkingSet workingSet) {
@@ -355,7 +355,7 @@
 
     /**
      * Creates a new filters dialog.
-     * 
+     *
      * @param parentShell the parent shell
      */
     public FiltersDialog(Shell parentShell) {
@@ -379,7 +379,7 @@
 
     /**
      * Check state change.
-     * 
+     *
      * @param event the event
      */
     public void checkStateChanged(CheckStateChangedEvent event) {
@@ -502,7 +502,7 @@
 
     /**
      * Creates a separator line above the OK/Cancel buttons bar
-     * 
+     *
      * @param parent the parent composite
      */
     void createSeparatorLine(Composite parent) {
@@ -964,7 +964,7 @@
 
 	/**
 	 * Handles selection on a check box or combo box.
-	 * 
+	 *
 	 * @param e the selection event
 	 */
     void widgetSelected(SelectionEvent e) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/GotoTaskAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/GotoTaskAction.java
index 03a3ec0..2728776 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/GotoTaskAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/GotoTaskAction.java
@@ -32,7 +32,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param tasklist the task list
      * @param id the id
      */
@@ -61,7 +61,7 @@
                 IDE.openEditor(page, marker, OpenStrategy.activateOnOpen());
             } catch (PartInitException e) {
                 DialogUtil.openError(page.getWorkbenchWindow().getShell(),
-                        TaskListMessages.GotoTask_errorMessage, 
+                        TaskListMessages.GotoTask_errorMessage,
                         e.getMessage(), e);
             }
         }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListHelpContextIds.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListHelpContextIds.java
index a277478..1a386e5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListHelpContextIds.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListHelpContextIds.java
@@ -19,7 +19,7 @@
  * This interface contains constants only; it is not intended to be implemented
  * or extended.
  * </p>
- * 
+ *
  */
 interface ITaskListHelpContextIds {
     public static final String PREFIX = PlatformUI.PLUGIN_ID + "."; //$NON-NLS-1$
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListResourceAdapter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListResourceAdapter.java
index bed98c0..42ba86d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListResourceAdapter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ITaskListResourceAdapter.java
@@ -21,7 +21,7 @@
  * The Tasks view checks for this adapter before the <code>IResource</code>
  * adapter, allowing the object to provide a resource to the Tasks view without
  * necessarily exposing it to other components that look for an <code>IResource</code>
- * adapter.     
+ * adapter.
  * </p>
  * <p>
  * Implementors of this interface are typically registered with an
@@ -33,7 +33,7 @@
     /**
      * Returns the resource to query for the markers to display
      * for the given adaptable.
-     * 
+     *
      * @param adaptable the adaptable being queried.
      * @return the resource or <code>null</code> if there
      * 	is no adapted resource for this object.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkCompletedAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkCompletedAction.java
index 0914728..756e38a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkCompletedAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkCompletedAction.java
@@ -54,17 +54,17 @@
             }
     		Map attrs = new HashMap();
     		attrs.put(IMarker.DONE, Boolean.TRUE);
-    		IUndoableOperation op = new UpdateMarkersOperation((IMarker [])markers.toArray(new IMarker [markers.size()]), 
+    		IUndoableOperation op = new UpdateMarkersOperation((IMarker [])markers.toArray(new IMarker [markers.size()]),
     				attrs, getText(), true);
     		execute(op, getText(), null, null);
 
         }
-        
+
     }
 
     /**
      * Returns whether this action should be enabled for the given selection.
-     * 
+     *
      * @param selection the selection
      * @return enablement
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerType.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerType.java
index 2eae71a..43c7c7b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerType.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerType.java
@@ -116,7 +116,7 @@
 
     /**
      * Returns whether this marker type is considered to be a subtype of
-     * the given marker type. 
+     * the given marker type.
      *
      * @return boolean <code>true</code>if this type is the same as (or a subtype of) the given type
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerUtil.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerUtil.java
index 9f84ff0..bc1d159 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerUtil.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/MarkerUtil.java
@@ -32,7 +32,7 @@
  * Utility class for accessing marker attributes.
  */
 class MarkerUtil implements IMarkerConstants {
-	
+
    private static Map imageDescriptors;
 
     private static ImageRegistry imageRegistry = new ImageRegistry();
@@ -40,7 +40,7 @@
     private static MessageFormat line = new MessageFormat(TaskListMessages.TaskList_line);
 
     private static MessageFormat lineAndLocation = new MessageFormat(
-            TaskListMessages.TaskList_lineAndLocation); 
+            TaskListMessages.TaskList_lineAndLocation);
 
     static {
         createImageDescriptors();
@@ -148,7 +148,7 @@
     }
 
     /**
-     * Returns the text to be used for the complete state of a task. 
+     * Returns the text to be used for the complete state of a task.
      * Returns the empty string for markers that are not tasks.
      */
     public static String getCompleteText(IMarker marker) {
@@ -167,15 +167,15 @@
      */
     public static String getKindText(IMarker marker) {
         if (isMarkerType(marker, IMarker.TASK)) {
-            return TaskListMessages.TaskList_task; 
+            return TaskListMessages.TaskList_task;
         }
         switch (getSeverity(marker)) {
         case IMarker.SEVERITY_ERROR:
-            return TaskListMessages.TaskList_error; 
+            return TaskListMessages.TaskList_error;
         case IMarker.SEVERITY_WARNING:
-            return TaskListMessages.TaskList_warning; 
+            return TaskListMessages.TaskList_warning;
         case IMarker.SEVERITY_INFO:
-            return TaskListMessages.TaskList_info; 
+            return TaskListMessages.TaskList_info;
         }
         return ""; //$NON-NLS-1$
     }
@@ -377,13 +377,13 @@
 
         switch (getPriority(marker)) {
         case IMarker.PRIORITY_HIGH:
-            return TaskListMessages.TaskList_high; 
+            return TaskListMessages.TaskList_high;
         case IMarker.PRIORITY_NORMAL:
             return TaskListMessages.TaskList_normal;
         case IMarker.PRIORITY_LOW:
             return TaskListMessages.TaskList_low;
         }
-        return ""; //$NON-NLS-1$		
+        return ""; //$NON-NLS-1$
     }
 
     /**
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/NewTaskAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/NewTaskAction.java
index ca03f94..0743950 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/NewTaskAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/NewTaskAction.java
@@ -38,7 +38,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param tasklist the task list
      * @param id the id
      */
@@ -81,8 +81,8 @@
                 }
             });
         } else {
-            MessageDialog.openInformation(getShell(), TaskListMessages.NewTask_notShownTitle, 
-                    TaskListMessages.NewTask_notShownMsg); 
+            MessageDialog.openInformation(getShell(), TaskListMessages.NewTask_notShownTitle,
+                    TaskListMessages.NewTask_notShownMsg);
         }
     }
 }
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PasteTaskAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PasteTaskAction.java
index 56ccc12..e95d171 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PasteTaskAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PasteTaskAction.java
@@ -32,14 +32,14 @@
  * <p>
  * This class may be instantiated; it is not intended to be subclassed.
  * </p>
- * 
+ *
  * @since 2.0
  */
 class PasteTaskAction extends TaskAction {
 
     /**
      * Creates a new action.
-     * 
+     *
      * @param tasklist the task list
      * @param id the id
      */
@@ -71,7 +71,7 @@
                 @Override
 				public void run(IProgressMonitor monitor) throws CoreException {
                     for (int i = 0; i < markerData.length; i++) {
-                        // Only paste tasks 
+                        // Only paste tasks
                         if (!markerData[i].getType().equals(IMarker.TASK)) {
 							continue;
 						}
@@ -81,11 +81,11 @@
                 }
             }, null);
         } catch (CoreException e) {
-            ErrorDialog.openError(getShell(), TaskListMessages.PasteTask_errorMessage, 
+            ErrorDialog.openError(getShell(), TaskListMessages.PasteTask_errorMessage,
                     null, e.getStatus());
             return;
         }
-        
+
 		final Map [] attrs = (Map []) newMarkerAttributes.toArray(new Map [newMarkerAttributes.size()]);
 		final IResource [] resources = (IResource []) newMarkerResources.toArray(new IResource [newMarkerResources.size()]);
 		final CreateMarkersOperation op = new CreateMarkersOperation(IMarker.TASK, attrs,
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PurgeCompletedAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PurgeCompletedAction.java
index 3aae80b..708a5ac 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PurgeCompletedAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/PurgeCompletedAction.java
@@ -34,7 +34,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param tasklist the task list
      * @param id the id
      */
@@ -57,7 +57,7 @@
         } catch (CoreException e) {
             ErrorDialog.openError(
                     getShell(),
-                    TaskListMessages.PurgeCompleted_errorMessage, null, e.getStatus()); 
+                    TaskListMessages.PurgeCompleted_errorMessage, null, e.getStatus());
 
         	return;
         }
@@ -70,8 +70,8 @@
         }
         // Check if there is anything to do
         if (completed.size() == 0) {
-            MessageDialog.openInformation(getShell(), TaskListMessages.PurgeCompleted_title, 
-                    TaskListMessages.PurgeCompleted_noneCompleted); 
+            MessageDialog.openInformation(getShell(), TaskListMessages.PurgeCompleted_title,
+                    TaskListMessages.PurgeCompleted_noneCompleted);
             return;
         }
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/RemoveTaskAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/RemoveTaskAction.java
index 468728c..3b8c651 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/RemoveTaskAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/RemoveTaskAction.java
@@ -32,7 +32,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param tasklist the task list
      * @param id the id
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ResolveMarkerAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ResolveMarkerAction.java
index fa556a8..cd1329a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ResolveMarkerAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/ResolveMarkerAction.java
@@ -23,7 +23,7 @@
 
 /**
  * This action displays a list of resolutions for the selected marker
- * 
+ *
  * @since 2.0
  */
 class ResolveMarkerAction extends TaskAction {
@@ -39,7 +39,7 @@
 
     /**
      * Returns whether this action should be enabled given the selection.
-     * 
+     *
      * @param selection the selection
      * @return enablement
      */
@@ -66,8 +66,8 @@
         getTaskList().cancelEditing();
         IMarkerResolution[] resolutions = getResolutions(marker);
         if (resolutions.length == 0) {
-            MessageDialog.openInformation(getShell(), TaskListMessages.Resolve_title, 
-                    TaskListMessages.Resolve_noResolutionsLabel); 
+            MessageDialog.openInformation(getShell(), TaskListMessages.Resolve_title,
+                    TaskListMessages.Resolve_noResolutionsLabel);
             return;
         }
         MarkerResolutionSelectionDialog d = new MarkerResolutionSelectionDialog(
@@ -85,7 +85,7 @@
      * Returns the resolutions for the given marker.
      *
      * @param marker the marker for which to obtain resolutions
-     * @return the resolutions for the selected marker	
+     * @return the resolutions for the selected marker
      */
     private IMarkerResolution[] getResolutions(IMarker marker) {
         return IDE.getMarkerHelpRegistry().getResolutions(marker);
@@ -93,7 +93,7 @@
 
     /**
      * Returns the selected marker (may be <code>null</code>).
-     * 
+     *
      * @return the selected marker
      */
     private IMarker getMarker() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskList.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskList.java
index e5323aa..14f10ae 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskList.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskList.java
@@ -116,7 +116,7 @@
 /**
  * Main class for the Task List view for displaying tasks and problem annotations
  * on resources, and for opening an editor on the resource when the user commands.
- * 
+ *
  * @deprecated This view is no longer in use as of Eclipse 3.4.
  * The view referenced by {@link IPageLayout#ID_TASK_LIST} is an {@link MarkerSupportView}.
  * </p>
@@ -303,11 +303,11 @@
 
     private String columnHeaders[] = {
             TaskListMessages.TaskList_headerIcon,
-            TaskListMessages.TaskList_headerCompleted, 
-            TaskListMessages.TaskList_headerPriority, 
-            TaskListMessages.TaskList_headerDescription, 
+            TaskListMessages.TaskList_headerCompleted,
+            TaskListMessages.TaskList_headerPriority,
+            TaskListMessages.TaskList_headerDescription,
             TaskListMessages.TaskList_headerResource,
-            TaskListMessages.TaskList_headerFolder, 
+            TaskListMessages.TaskList_headerFolder,
             TaskListMessages.TaskList_headerLocation
     };
 
@@ -504,17 +504,17 @@
         // Create the header
         buf.append(TaskListMessages.TaskList_reportKind);
         buf.append("\t"); //$NON-NLS-1$
-        buf.append(TaskListMessages.TaskList_reportStatus); 
+        buf.append(TaskListMessages.TaskList_reportStatus);
         buf.append("\t"); //$NON-NLS-1$
-        buf.append(TaskListMessages.TaskList_reportPriority); 
+        buf.append(TaskListMessages.TaskList_reportPriority);
         buf.append("\t"); //$NON-NLS-1$
         buf.append(TaskListMessages.TaskList_headerDescription);
         buf.append("\t"); //$NON-NLS-1$
-        buf.append(TaskListMessages.TaskList_headerResource); 
+        buf.append(TaskListMessages.TaskList_headerResource);
         buf.append("\t"); //$NON-NLS-1$
-        buf.append(TaskListMessages.TaskList_headerFolder); 
+        buf.append(TaskListMessages.TaskList_headerFolder);
         buf.append("\t"); //$NON-NLS-1$
-        buf.append(TaskListMessages.TaskList_headerLocation); 
+        buf.append(TaskListMessages.TaskList_headerLocation);
         buf.append(System.getProperty("line.separator")); //$NON-NLS-1$
 
         // Create the report for the markers
@@ -631,7 +631,7 @@
             }
         });
 
-        //Add in some accessibility support to supplement the description that we already 
+        //Add in some accessibility support to supplement the description that we already
         //get from the SWT table.
         viewer.getControl().getAccessible().addAccessibleControlListener(
                 new AccessibleControlAdapter() {
@@ -673,8 +673,8 @@
         CellEditor editors[] = new CellEditor[columnHeaders.length];
         editors[1] = new CheckboxCellEditor(table);
         String[] priorities = new String[] {
-                TaskListMessages.TaskList_high, 
-                TaskListMessages.TaskList_normal, 
+                TaskListMessages.TaskList_high,
+                TaskListMessages.TaskList_normal,
                 TaskListMessages.TaskList_low
         };
         editors[2] = new ComboBoxCellEditor(table, priorities, SWT.READ_ONLY);
@@ -784,7 +784,7 @@
 
     /**
      * Activates the editor on the given marker.
-     * 
+     *
      * @param marker the marker to edit
      */
     public void edit(IMarker marker) {
@@ -861,7 +861,7 @@
                     @Override
 					public void run() {
                         // Filter has already been updated by dialog; just refresh.
-                        // Don't need to update labels for existing elements 
+                        // Don't need to update labels for existing elements
                         // since changes to filter settings don't affect them.
                         viewer.getControl().setRedraw(false);
                         viewer.refresh(false);
@@ -949,7 +949,7 @@
 
     /**
      * Get the resources.
-     * 
+     *
      * @return the resources
      */
     public IResource[] getResources() {
@@ -1110,15 +1110,15 @@
 
         // goto
         gotoTaskAction = new GotoTaskAction(this, "gotoFile"); //$NON-NLS-1$
-        gotoTaskAction.setText(TaskListMessages.GotoTask_text); 
-        gotoTaskAction.setToolTipText(TaskListMessages.GotoTask_tooltip); 
+        gotoTaskAction.setText(TaskListMessages.GotoTask_text);
+        gotoTaskAction.setToolTipText(TaskListMessages.GotoTask_tooltip);
         gotoTaskAction.setImageDescriptor(MarkerUtil
                 .getImageDescriptor("gotoobj")); //$NON-NLS-1$
         gotoTaskAction.setEnabled(false);
 
         // new task
         newTaskAction = new NewTaskAction(this, "newTask"); //$NON-NLS-1$
-        newTaskAction.setText(TaskListMessages.NewTask_text); 
+        newTaskAction.setText(TaskListMessages.NewTask_text);
         newTaskAction.setToolTipText(TaskListMessages.NewTask_tooltip);
         newTaskAction.setImageDescriptor(MarkerUtil
                 .getImageDescriptor("addtsk")); //$NON-NLS-1$
@@ -1127,20 +1127,20 @@
 
         // copy task
         copyTaskAction = new CopyTaskAction(this, "copy"); //$NON-NLS-1$
-        copyTaskAction.setText(TaskListMessages.CopyTask_text); 
+        copyTaskAction.setText(TaskListMessages.CopyTask_text);
         copyTaskAction.setToolTipText(TaskListMessages.CopyTask_tooltip);
         copyTaskAction.setEnabled(false);
 
         // paste task
         pasteTaskAction = new PasteTaskAction(this, "paste"); //$NON-NLS-1$
-        pasteTaskAction.setText(TaskListMessages.PasteTask_text); 
+        pasteTaskAction.setText(TaskListMessages.PasteTask_text);
         pasteTaskAction.setToolTipText(TaskListMessages.PasteTask_tooltip);
         pasteTaskAction.setEnabled(false);
 
         // remove task
         removeTaskAction = new RemoveTaskAction(this, "delete"); //$NON-NLS-1$
         removeTaskAction.setText(TaskListMessages.RemoveTask_text);
-        removeTaskAction.setToolTipText(TaskListMessages.RemoveTask_tooltip); 
+        removeTaskAction.setToolTipText(TaskListMessages.RemoveTask_tooltip);
         removeTaskAction.setImageDescriptor(sharedImages
                 .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
         removeTaskAction.setDisabledImageDescriptor(sharedImages
@@ -1156,23 +1156,23 @@
         //delete completed task
         purgeCompletedAction = new PurgeCompletedAction(this, "deleteCompleted"); //$NON-NLS-1$
         purgeCompletedAction.setText(TaskListMessages.PurgeCompleted_text);
-        purgeCompletedAction.setToolTipText(TaskListMessages.PurgeCompleted_tooltip); 
+        purgeCompletedAction.setToolTipText(TaskListMessages.PurgeCompleted_tooltip);
         purgeCompletedAction.setImageDescriptor(sharedImages
                 .getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
         purgeCompletedAction.setEnabled(true);
 
         // select all
         selectAllAction = new SelectAllTasksAction(this, "selectAll"); //$NON-NLS-1$
-        selectAllAction.setText(TaskListMessages.SelectAll_text); 
+        selectAllAction.setText(TaskListMessages.SelectAll_text);
         selectAllAction.setToolTipText(TaskListMessages.SelectAll_tooltip);
 
         // resolutions
         resolveMarkerAction = new ResolveMarkerAction(this, "resolve"); //$NON-NLS-1$
-        resolveMarkerAction.setText(TaskListMessages.Resolve_text); 
+        resolveMarkerAction.setText(TaskListMessages.Resolve_text);
         resolveMarkerAction.setToolTipText(TaskListMessages.Resolve_tooltip);
         resolveMarkerAction.setEnabled(false);
 
-        // Sort by ->	
+        // Sort by ->
         sortByCategoryAction = new SortByAction(TaskSorter.TYPE);
         sortByCategoryAction.setText(TaskListMessages.SortByCategory_text);
         sortByCategoryAction.setToolTipText(TaskListMessages.SortByCategory_tooltip);
@@ -1181,19 +1181,19 @@
 
         sortByCompletedAction = new SortByAction(TaskSorter.COMPLETION);
         sortByCompletedAction.setText(TaskListMessages.SortByCompleted_text);
-        sortByCompletedAction.setToolTipText(TaskListMessages.SortByCompleted_tooltip); 
+        sortByCompletedAction.setToolTipText(TaskListMessages.SortByCompleted_tooltip);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(
 				sortByCompletedAction,
 				ITaskListHelpContextIds.TASK_SORT_COMPLETED_ACTION);
 
         sortByPriorityAction = new SortByAction(TaskSorter.PRIORITY);
-        sortByPriorityAction.setText(TaskListMessages.SortByPriority_text); 
-        sortByPriorityAction.setToolTipText(TaskListMessages.SortByPriority_tooltip); 
+        sortByPriorityAction.setText(TaskListMessages.SortByPriority_text);
+        sortByPriorityAction.setToolTipText(TaskListMessages.SortByPriority_tooltip);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(sortByPriorityAction,
 				ITaskListHelpContextIds.TASK_SORT_PRIORITY_ACTION);
 
         sortByDescriptionAction = new SortByAction(TaskSorter.DESCRIPTION);
-        sortByDescriptionAction.setText(TaskListMessages.SortByDescription_text); 
+        sortByDescriptionAction.setText(TaskListMessages.SortByDescription_text);
         sortByDescriptionAction.setToolTipText(TaskListMessages.SortByDescription_tooltip);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(
 				sortByDescriptionAction,
@@ -1201,26 +1201,26 @@
 
         sortByResourceAction = new SortByAction(TaskSorter.RESOURCE);
         sortByResourceAction.setText(TaskListMessages.SortByResource_text);
-        sortByResourceAction.setToolTipText(TaskListMessages.SortByResource_tooltip); 
+        sortByResourceAction.setToolTipText(TaskListMessages.SortByResource_tooltip);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(sortByResourceAction,
 				ITaskListHelpContextIds.TASK_SORT_RESOURCE_ACTION);
 
         sortByContainerAction = new SortByAction(TaskSorter.FOLDER);
-        sortByContainerAction.setText(TaskListMessages.SortByContainer_text); 
+        sortByContainerAction.setText(TaskListMessages.SortByContainer_text);
         sortByContainerAction.setToolTipText(TaskListMessages.SortByContainer_tooltip);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(
 				sortByContainerAction,
 				ITaskListHelpContextIds.TASK_SORT_FOLDER_ACTION);
 
         sortByLocationAction = new SortByAction(TaskSorter.LOCATION);
-        sortByLocationAction.setText(TaskListMessages.SortByLocation_text); 
-        sortByLocationAction.setToolTipText(TaskListMessages.SortByLocation_tooltip); 
+        sortByLocationAction.setText(TaskListMessages.SortByLocation_text);
+        sortByLocationAction.setToolTipText(TaskListMessages.SortByLocation_tooltip);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(sortByLocationAction,
 				ITaskListHelpContextIds.TASK_SORT_LOCATION_ACTION);
 
         sortByCreationTimeAction = new SortByAction(TaskSorter.CREATION_TIME);
         sortByCreationTimeAction.setText(TaskListMessages.SortByCreationTime_text);
-        sortByCreationTimeAction.setToolTipText(TaskListMessages.SortByCreationTime_tooltip); 
+        sortByCreationTimeAction.setToolTipText(TaskListMessages.SortByCreationTime_tooltip);
         PlatformUI.getWorkbench().getHelpSystem().setHelp(
 				sortByCreationTimeAction,
 				ITaskListHelpContextIds.TASK_SORT_CREATION_TIME_ACTION);
@@ -1239,14 +1239,14 @@
 
         // filters...
         filtersAction = new FiltersAction(this, "filter"); //$NON-NLS-1$
-        filtersAction.setText(TaskListMessages.Filters_text); 
+        filtersAction.setText(TaskListMessages.Filters_text);
         filtersAction.setToolTipText(TaskListMessages.Filters_tooltip);
         filtersAction.setImageDescriptor(MarkerUtil
                 .getImageDescriptor("filter")); //$NON-NLS-1$
 
         // properties
         propertiesAction = new TaskPropertiesAction(this, "properties"); //$NON-NLS-1$
-        propertiesAction.setText(TaskListMessages.Properties_text); 
+        propertiesAction.setText(TaskListMessages.Properties_text);
         propertiesAction.setToolTipText(TaskListMessages.Properties_tooltip);
         propertiesAction.setEnabled(false);
     }
@@ -1423,7 +1423,7 @@
 
         updatePasteEnablement();
 
-        // If selection is empty, then disable copy, remove and goto.	
+        // If selection is empty, then disable copy, remove and goto.
         if (selection.isEmpty()) {
             copyTaskAction.setEnabled(false);
             removeTaskAction.setEnabled(false);
@@ -1431,7 +1431,7 @@
             propertiesAction.setEnabled(false);
             return;
         }
-        
+
 
         // Can only open properties for a single task at a time
         propertiesAction.setEnabled(selection.size() == 1);
@@ -1502,7 +1502,7 @@
                 //			}
             }
         } catch (CoreException e) {
-            String msg = TaskListMessages.TaskList_errorModifyingTask; 
+            String msg = TaskListMessages.TaskList_errorModifyingTask;
             ErrorDialog.openError(getSite().getShell(), msg, null, e
                     .getStatus());
         }
@@ -1555,7 +1555,7 @@
         }
     }
 
-    // showOwnerProject() added by cagatayk@acm.org 
+    // showOwnerProject() added by cagatayk@acm.org
     boolean showOwnerProject() {
         return getFilter().onResource == TasksFilter.ON_ANY_RESOURCE_OF_SAME_PROJECT;
     }
@@ -1565,7 +1565,7 @@
      * If true, it will resync with the saved input element.
      * Otherwise, it will reconfigure to show all the
      * problems/tasks in the workbench.
-     * 
+     *
      * @param value the value
      */
     void toggleInputSelection(boolean value) {
@@ -1584,7 +1584,7 @@
      * If true, current input will be
      * remembered and further selections will be
      * ignored.
-     * 
+     *
      * @param value the value
      */
     void toggleLockInput(boolean value) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskListContentProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskListContentProvider.java
index 95f52eb..57d4668 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskListContentProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskListContentProvider.java
@@ -56,11 +56,11 @@
 
     private IResource input;
 
-    /* cached counts of tasks, errors, warnings and infos for the visible 
+    /* cached counts of tasks, errors, warnings and infos for the visible
      * markers, maintained incrementally */
     private int[] visibleMarkerCounts = null;
 
-    /* cached count of all markers in workspace matching supported root types 
+    /* cached count of all markers in workspace matching supported root types
      * (tasks & problems), maintained incrementally */
     private int totalMarkerCount = -1;
 
@@ -104,7 +104,7 @@
     /**
      * Returns a one-line string containing a summary of the number
      * of selected tasks and problems.
-     * 
+     *
      * @param selection the current selection
      */
     public String getStatusSummarySelected(IStructuredSelection selection) {
@@ -114,13 +114,13 @@
     }
 
     /**
-     * Returns a one-line string containing a summary of the number of 
+     * Returns a one-line string containing a summary of the number of
      * given tasks, errors, warnings, and infos.
      */
     private String getStatusSummaryBreakdown(int[] counts) {
         return NLS.bind(
-				TaskListMessages.TaskList_statusSummaryBreakdown, 
-				new Object []{ 
+				TaskListMessages.TaskList_statusSummaryBreakdown,
+				new Object []{
 						new Integer(counts[TASKS]),
 						new Integer(counts[ERRORS]),
 						new Integer(counts[WARNINGS]),
@@ -161,8 +161,8 @@
     }
 
     /**
-     * Returns the count of all markers in the workspace which can be shown in 
-     * the task list. This is computed once, then maintained incrementally by 
+     * Returns the count of all markers in the workspace which can be shown in
+     * the task list. This is computed once, then maintained incrementally by
      * the delta processing.
      */
     private int getTotalMarkerCount() {
@@ -333,12 +333,12 @@
     }
 
     /**
-     * Updates the viewer given the lists of added, removed, and changes 
+     * Updates the viewer given the lists of added, removed, and changes
      * markers. This is called inside an syncExec.
      */
     private void updateViewer(List additions, List removals, List changes) {
 
-        // The widget may have been destroyed by the time this is run.  
+        // The widget may have been destroyed by the time this is run.
         // Check for this and do nothing if so.
         Control ctrl = viewer.getControl();
 
@@ -347,11 +347,11 @@
         }
 
         //update the viewer based on the marker changes.
-        //process removals before additions, to avoid multiple equal elements in 
+        //process removals before additions, to avoid multiple equal elements in
         //the viewer
         if (removals.size() > 0) {
 
-            // Cancel any open cell editor.  We assume that the one being edited 
+            // Cancel any open cell editor.  We assume that the one being edited
             // is the one being removed.
             viewer.cancelEditing();
             viewer.remove(removals.toArray());
@@ -437,7 +437,7 @@
     }
 
     /**
-     * The workbench has changed.  Process the delta and issue updates to the 
+     * The workbench has changed.  Process the delta and issue updates to the
      * viewer, inside the UI thread.
      *
      * @see IResourceChangeListener#resourceChanged
@@ -445,7 +445,7 @@
     @Override
 	public void resourceChanged(final IResourceChangeEvent event) {
         /*
-         * gather all marker changes from the delta. be sure to do this in the 
+         * gather all marker changes from the delta. be sure to do this in the
          * calling thread, as the delta is destroyed when this method returns
          */
         IMarkerDelta[] markerDeltas = event.findMarkerDeltas(null, true);
@@ -471,9 +471,9 @@
             for (int j = 0; j < TasksFilter.ROOT_TYPES.length; j++) {
                 if (markerDelta.isSubtypeOf(TasksFilter.ROOT_TYPES[j])) {
 
-                    /* 
-                     * Updates the total count of markers given the applicable 
-                     * marker deltas. 
+                    /*
+                     * Updates the total count of markers given the applicable
+                     * marker deltas.
                      */
                     if (totalMarkerCount != -1) {
                         switch (iKind) {
@@ -487,12 +487,12 @@
                     }
 
                     /*
-                     * Partition the marker deltas into one of the three given 
+                     * Partition the marker deltas into one of the three given
                      * lists depending on
                      * the type of delta (add, remove, or change).
-                     * The resulting lists contain the corresponding markers, 
+                     * The resulting lists contain the corresponding markers,
                      * not the deltas.
-                     * Deltas which are not under the current focus resource are 
+                     * Deltas which are not under the current focus resource are
                      * discarded.
                      * This also updates the marker counts.
                      */
@@ -520,10 +520,10 @@
                             break;
                         case IResourceDelta.CHANGED:
                             changes.add(marker);
-                            /* 
-                             * Assume attribute changes don't affect marker 
-                             * counts. This is only true if problem severities 
-                             * can't change. 
+                            /*
+                             * Assume attribute changes don't affect marker
+                             * counts. This is only true if problem severities
+                             * can't change.
                              */
                             break;
                         }
@@ -541,8 +541,8 @@
         }
 
         /*
-         * do the required viewer updates in the UI thread need to use syncExec; 
-         * see 1G95PU8: ITPUI:WIN2000 - Changing task description flashes old 
+         * do the required viewer updates in the UI thread need to use syncExec;
+         * see 1G95PU8: ITPUI:WIN2000 - Changing task description flashes old
          * description
          */
         viewer.getControl().getDisplay().syncExec(new Runnable() {
@@ -562,10 +562,10 @@
                 }
 
                 /* Update the task list's status message.
-                 * XXX: Quick and dirty solution here.  
+                 * XXX: Quick and dirty solution here.
                  * Would be better to have a separate model for the tasks and
-                 * have both the content provider and the task list register for 
-                 * updates. XXX: Do this inside the syncExec, since we're 
+                 * have both the content provider and the task list register for
+                 * updates. XXX: Do this inside the syncExec, since we're
                  * talking to status line widget.
                  */
                 taskList.markersChanged();
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesAction.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesAction.java
index 7ebde3c..9377e6d 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesAction.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesAction.java
@@ -22,7 +22,7 @@
 
     /**
      * Creates the action.
-     * 
+     *
      * @param tasklist the task list
      * @param id the id
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesDialog.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesDialog.java
index 8647c83..00c6eb4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesDialog.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskPropertiesDialog.java
@@ -35,7 +35,7 @@
 	 * resource and initial attributes for the new task, use
 	 * <code>setResource</code> and <code>setInitialAttributes</code>. To
 	 * show or modify an existing task, use <code>setMarker</code>.
-	 * 
+	 *
 	 * @param parentShell
 	 *            the parent shell
 	 */
@@ -45,9 +45,9 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.jface.window.Dialog#getDialogBoundsSettings()
-	 * 
+	 *
 	 * @since 3.2
 	 */
 	@Override
@@ -60,10 +60,10 @@
 		}
 		return section;
 	}
-	
+
     /**
      * Sets the marker to show or modify.
-     * 
+     *
      * @param marker the marker, or <code>null</code> to create a new marker
      */
     @Override
@@ -76,7 +76,7 @@
      * Returns the marker being created or modified.
      * For a new marker, this returns <code>null</code> until
      * the dialog returns, but is non-null after.
-     * 
+     *
      * @return the marker
      */
     @Override
@@ -88,7 +88,7 @@
     /**
      * Sets the resource to use when creating a new task.
      * If not set, the new task is created on the workspace root.
-     * 
+     *
      * @param resource the resource
      */
     @Override
@@ -101,7 +101,7 @@
      * Returns the resource to use when creating a new task,
      * or <code>null</code> if none has been set.
      * If not set, the new task is created on the workspace root.
-     * 
+     *
      * @return the resource
      */
     @Override
@@ -113,7 +113,7 @@
     /**
      * Sets initial attributes to use when creating a new task.
      * If not set, the new task is created with default attributes.
-     * 
+     *
      * @param initialAttributes the initial attributes
      */
     @Override
@@ -126,7 +126,7 @@
      * Returns the initial attributes to use when creating a new task,
      * or <code>null</code> if not set.
      * If not set, the new task is created with default attributes.
-     * 
+     *
      * @return the initial attributes
      */
     @Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskSorter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskSorter.java
index 6b58a61..5d0fcb3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskSorter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TaskSorter.java
@@ -250,7 +250,7 @@
 
     /**
      * Compares the line number and location of the two markers.
-     * If line number is specified for both, this sorts first by line number (numerically), 
+     * If line number is specified for both, this sorts first by line number (numerically),
      * then by start offset (numerically), then by location (textually).
      * If line number is not specified for either, this sorts by location.
      * Otherwise, if only one has a line number, this sorts by the combined text for line number and location.
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TasksFilter.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TasksFilter.java
index 93d32a3..35e3daf 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TasksFilter.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/views/tasklist/TasksFilter.java
@@ -6,7 +6,7 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *      IBM Corporation - initial API and implementation 
+ *      IBM Corporation - initial API and implementation
  * 		Cagatay Kavukcuoglu <cagatayk@acm.org> - Filter for markers in same project
  *******************************************************************************/
 
@@ -89,7 +89,7 @@
 
     private static final String TAG_ON_RESOURCE = "onResource"; //$NON-NLS-1$
 
-    private static final String TAG_WORKING_SET = "workingSet"; //$NON-NLS-1$	
+    private static final String TAG_WORKING_SET = "workingSet"; //$NON-NLS-1$
 
     private static final String TAG_FILTER_ON_DESCRIPTION = "filterOnDescription"; //$NON-NLS-1$
 
@@ -109,7 +109,7 @@
 
     private static final String TAG_COMPLETION_FILTER = "completionFilter"; //$NON-NLS-1$
 
-    private static final String TAG_FILTER_ON_MARKER_LIMIT = "filterOnMarkerLimit"; //$NON-NLS-1$ 
+    private static final String TAG_FILTER_ON_MARKER_LIMIT = "filterOnMarkerLimit"; //$NON-NLS-1$
 
     private static final String TAG_MARKER_LIMIT = "markerLimit"; //$NON-NLS-1$
 
@@ -138,7 +138,7 @@
         //	markerLimit = TasksFilter.MINIMUM_MARKER_LIMIT;
         //} else if (markerLimit > TasksFilter.MAXIMUM_MARKER_LIMIT) {
         //	markerLimit = TasksFilter.MAXIMUM_MARKER_LIMIT;
-        //} 
+        //}
 
         this.markerLimit = markerLimit;
     }
@@ -175,13 +175,13 @@
     /**
      * Returns if the given resource is enclosed by a working set element.
      * The IContainmentAdapter of each working set element is used for the
-     * containment test. If there is no IContainmentAdapter for a working 
-     * set element, a simple resource based test is used. 
-     * 
+     * containment test. If there is no IContainmentAdapter for a working
+     * set element, a simple resource based test is used.
+     *
      * @param element resource to test for enclosure by a working set
-     * 	element 
-     * @return true if element is enclosed by a working set element and 
-     * 	false otherwise. 
+     * 	element
+     * @return true if element is enclosed by a working set element and
+     * 	false otherwise.
      */
     private boolean isEnclosed(IResource element) {
         IPath elementPath = element.getFullPath();
@@ -195,9 +195,9 @@
             IContainmentAdapter containmentAdapter = (IContainmentAdapter) workingSetElement
                     .getAdapter(IContainmentAdapter.class);
 
-            // if there is no IContainmentAdapter defined for the working  
-            // set element type fall back to using resource based  
-            // containment check 
+            // if there is no IContainmentAdapter defined for the working
+            // set element type fall back to using resource based
+            // containment check
             if (containmentAdapter != null) {
                 if (containmentAdapter.contains(workingSetElement, element,
                         IContainmentAdapter.CHECK_CONTEXT
@@ -215,17 +215,17 @@
 
     /**
      * Returns if the given resource is enclosed by a working set element.
-     * A resource is enclosed if it is either a parent of a working set 
+     * A resource is enclosed if it is either a parent of a working set
      * element, a child of a working set element or a working set element
      * itself.
      * Simple path comparison is used. This is only guaranteed to return
-     * correct results for resource working set elements. 
-     * 
+     * correct results for resource working set elements.
+     *
      * @param element resource to test for enclosure by a working set
      * 	element
-     * @param elementPath full, absolute path of the element to test 
-     * @return true if element is enclosed by a working set element and 
-     * 	false otherwise. 
+     * @param elementPath full, absolute path of the element to test
+     * @return true if element is enclosed by a working set element and
+     * 	false otherwise.
      */
     private boolean isEnclosedResource(IResource element, IPath elementPath,
             IAdaptable workingSetElement) {
@@ -305,7 +305,7 @@
 
     /**
      * Restores the saved working set, if any.
-     * 
+     *
      * @param the saved working set name or null
      */
     private void restoreWorkingSet(String workingSetName) {
@@ -388,9 +388,9 @@
 
     /**
      * Returns whether the specified marker should be filter out or not.
-     * 
+     *
      * @param marker the marker to test
-     * @return 
+     * @return
      * 	true=the marker should not be filtered out
      * 	false=the marker should be filtered out
      */
@@ -406,11 +406,11 @@
     }
 
     /**
-     * Returns whether the specified marker delta should be filter out 
+     * Returns whether the specified marker delta should be filter out
      * or not.
-     * 
+     *
      * @param markerDelta the marker delta to test
-     * @return 
+     * @return
      * 	true=the marker delta should not be filtered out
      * 	false=the marker delta should be filtered out
      */
@@ -425,7 +425,7 @@
         return false;
     }
 
-    /* 
+    /*
      * WARNING: selectByAttributes(IMarker) and selectByAttributes(IMarkerDelta) must correspond.
      */
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ExternalProjectImportWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ExternalProjectImportWizard.java
index 1cdd4d4..001340b 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ExternalProjectImportWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ExternalProjectImportWizard.java
@@ -47,7 +47,7 @@
 	private WizardProjectsImportPage mainPage;
 	private IStructuredSelection currentSelection = null;
 	private String initialPath = null;
-	
+
     /**
      * Constructor for ExternalProjectImportWizard.
      */
@@ -57,7 +57,7 @@
 
     /**
      * Constructor for ExternalProjectImportWizard.
-     * 
+     *
      * @param initialPath Default path for wizard to import
      * @since 3.5
      */
@@ -68,14 +68,14 @@
         setNeedsProgressMonitor(true);
         IDialogSettings workbenchSettings = IDEWorkbenchPlugin.getDefault()
         		.getDialogSettings();
-        
+
 		IDialogSettings wizardSettings = workbenchSettings
 		        .getSection(EXTERNAL_PROJECT_SECTION);
 		if (wizardSettings == null) {
 			wizardSettings = workbenchSettings
 		            .addNewSection(EXTERNAL_PROJECT_SECTION);
 		}
-		setDialogSettings(wizardSettings);        
+		setDialogSettings(wizardSettings);
     }
 
     /* (non-Javadoc)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileStoreStructureProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileStoreStructureProvider.java
index c91cbf1..59ec4f4 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileStoreStructureProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileStoreStructureProvider.java
@@ -24,9 +24,9 @@
 /**
  * FileStoreStructureProvider is the structure provider for {@link IFileStore}
  * based file structures.
- * 
+ *
  * @since 3.2
- * 
+ *
  */
 public class FileStoreStructureProvider implements IImportStructureProvider {
 
@@ -37,7 +37,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.wizards.datatransfer.IImportStructureProvider#getChildren(java.lang.Object)
 	 */
 	@Override
@@ -53,7 +53,7 @@
 
 	/**
 	 * Log the exception.
-	 * 
+	 *
 	 * @param exception
 	 */
 	private void logException(CoreException exception) {
@@ -63,7 +63,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.wizards.datatransfer.IImportStructureProvider#getContents(java.lang.Object)
 	 */
 	@Override
@@ -79,7 +79,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.wizards.datatransfer.IImportStructureProvider#getFullPath(java.lang.Object)
 	 */
 	@Override
@@ -89,7 +89,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.wizards.datatransfer.IImportStructureProvider#getLabel(java.lang.Object)
 	 */
 	@Override
@@ -99,7 +99,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see org.eclipse.ui.wizards.datatransfer.IImportStructureProvider#isFolder(java.lang.Object)
 	 */
 	@Override
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileSystemExportWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileSystemExportWizard.java
index 101707c..d0a0160 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileSystemExportWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/FileSystemExportWizard.java
@@ -43,7 +43,7 @@
  * dialog.open();
  * </pre>
  * During the call to <code>open</code>, the wizard dialog is presented to the
- * user. When the user hits Finish, the user-selected workspace resources 
+ * user. When the user hits Finish, the user-selected workspace resources
  * are exported to the user-specified location in the local file system,
  * the dialog closes, and the call to <code>open</code> returns.
  * </p>
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/IImportStructureProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/IImportStructureProvider.java
index 4b51378..1595fd0 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/IImportStructureProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/IImportStructureProvider.java
@@ -14,7 +14,7 @@
 import java.util.List;
 
 /**
- * Interface which can provide structure and content information 
+ * Interface which can provide structure and content information
  * for an element (for example, a file system element).
  * Used by the import wizards to abstract the commonalities
  * between importing from the file system and importing from an archive.
@@ -22,9 +22,9 @@
 public interface IImportStructureProvider {
     /**
      * Returns a collection with the children of the specified structured element.
-     * 
+     *
      * @param element the element for which to compute the children
-     * @return the list of child elements 
+     * @return the list of child elements
      */
     List getChildren(Object element);
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ImportOperation.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ImportOperation.java
index 09ff3bb..ade169a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ImportOperation.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ImportOperation.java
@@ -7,7 +7,7 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Red Hat, Inc - changed TarFileStructureProvider to TarLeveledStructureProvider 
+ *     Red Hat, Inc - changed TarFileStructureProvider to TarLeveledStructureProvider
  *******************************************************************************/
 package org.eclipse.ui.wizards.datatransfer;
 
@@ -88,7 +88,7 @@
     private boolean createVirtualFolder = false;
 
     private boolean createLinks = false;
-    
+
     private boolean createLinkFilesOnly = false;
 
     private String relativeVariable = null;
@@ -110,7 +110,7 @@
      * Creates a new operation that recursively imports the entire contents of the
      * specified root file system object.
      * <p>
-     * The <code>source</code> parameter represents the root file system object to 
+     * The <code>source</code> parameter represents the root file system object to
      * import. All contents of this object are imported. Valid types for this parameter
      * are determined by the supplied <code>IImportStructureProvider</code>.
      * </p>
@@ -121,11 +121,11 @@
      * </p>
      *  <p>
      * The default import behavior is to recreate the complete container structure
-     * for the contents of the root file system object in their destination. 
-     * If <code>setCreateContainerStructure</code> is set to false then the container 
+     * for the contents of the root file system object in their destination.
+     * If <code>setCreateContainerStructure</code> is set to false then the container
      * structure created is relative to the root file system object.
      * </p>
-     * 
+     *
      * @param containerPath the full path of the destination container within the
      *   workspace
      * @param source the root file system object to import
@@ -148,8 +148,8 @@
      * operation solely to determine the destination container structure of the file system
      * objects being imported.
      * <p>
-     * The <code>source</code> parameter represents the root file system object to 
-     * import. Valid types for this parameter are determined by the supplied 
+     * The <code>source</code> parameter represents the root file system object to
+     * import. Valid types for this parameter are determined by the supplied
      * <code>IImportStructureProvider</code>. The contents of the source which
      * are to be imported are specified in the <code>filesToImport</code>
      * parameter.
@@ -166,7 +166,7 @@
      * <p>
      * The default import behavior is to recreate the complete container structure
      * for the file system objects in their destination. If <code>setCreateContainerStructure</code>
-     * is set to <code>false</code>, then the container structure created for each of 
+     * is set to <code>false</code>, then the container structure created for each of
      * the file system objects is relative to the supplied root file system object.
      * </p>
      *
@@ -193,13 +193,13 @@
      * and the provider in turn calls specific methods on the source object.
      * </p>
      * <p>
-     * The <code>filesToImport</code> parameter specifies what file system objects 
+     * The <code>filesToImport</code> parameter specifies what file system objects
      * are to be imported.
      * </p>
      * <p>
      * The default import behavior is to recreate the complete container structure
      * for the file system objects in their destination. If <code>setCreateContainerStructure</code>
-     * is set to <code>false</code>, then no container structure is created for each of 
+     * is set to <code>false</code>, then no container structure is created for each of
      * the file system objects.
      * </p>
      *
@@ -221,7 +221,7 @@
      * Prompts if existing resources should be overwritten. Recursively collects
      * existing read-only files to overwrite and resources that should not be
      * overwritten.
-     * 
+     *
      * @param sourceStart destination path to check for existing files
      * @param sources file system objects that may exist in the destination
      * @param noOverwrite files that were selected to be skipped (don't overwrite).
@@ -343,7 +343,7 @@
 
         int segmentCount = path.segmentCount();
 
-        //Assume the project exists 
+        //Assume the project exists
         IContainer currentFolder = ((IWorkspaceRoot) destinationContainer)
                 .getProject(path.segment(0));
 
@@ -439,15 +439,15 @@
         IPath relativePath = destContainerPath.removeFirstSegments(
                 sourcePath.segmentCount()).setDevice(null);
         return createContainersFor(relativePath);
-        
+
     }
 
     /**
-     * Returns the resource either casted to or adapted to an IFile. 
-     * 
+     * Returns the resource either casted to or adapted to an IFile.
+     *
      * @param resource resource to cast/adapt
      * @return the resource either casted to or adapted to an IFile.
-     * 	<code>null</code> if the resource does not adapt to IFile 
+     * 	<code>null</code> if the resource does not adapt to IFile
      */
     IFile getFile(IResource resource) {
         if (resource instanceof IFile) {
@@ -458,15 +458,15 @@
 			return null;
 		}
         return (IFile) adapted;
-      
+
     }
 
     /**
-     * Returns the resource either casted to or adapted to an IFolder. 
-     * 
+     * Returns the resource either casted to or adapted to an IFolder.
+     *
      * @param resource resource to cast/adapt
      * @return the resource either casted to or adapted to an IFolder.
-     * 	<code>null</code> if the resource does not adapt to IFolder 
+     * 	<code>null</code> if the resource does not adapt to IFolder
      */
     IFolder getFolder(IResource resource) {
         if (resource instanceof IFolder) {
@@ -481,7 +481,7 @@
 
     /**
      * Returns the rejected files based on the given multi status.
-     *  
+     *
      * @param multiStatus multi status to use to determine file rejection
      * @param files source files
      * @return list of rejected files as absolute paths. Object type IPath.
@@ -620,7 +620,7 @@
      * @param fileObject
      */
     private void setResourceAttributes(IFile targetResource, Object fileObject) {
-    	
+
     	long timeStamp = 0;
     	if(fileObject instanceof File) {
 			try {
@@ -641,7 +641,7 @@
 			if(zipTimeStamp != -1)
 				timeStamp = zipTimeStamp;
         }
-		
+
     	if(timeStamp!= 0) {
     		try {
 				targetResource.setLocalTimeStamp(timeStamp);
@@ -658,7 +658,7 @@
      *
      * @param filesToImport the list of file system objects to import
      *   (element type: <code>Object</code>)
-	 * @throws CoreException 
+	 * @throws CoreException
      * @exception OperationCanceledException if canceled
      */
     void importFileSystemObjects(List filesToImport) throws CoreException {
@@ -692,7 +692,7 @@
      * @param folderObject the file system container object to be imported
      * @param policy determines how the folder object and children are imported
      * @return the policy to use to import the folder's children
-     * @throws CoreException 
+     * @throws CoreException
      */
     int importFolder(Object folderObject, int policy) throws CoreException {
         IContainer containerResource;
@@ -754,9 +754,9 @@
      * Transform an absolute path URI to a relative path one (i.e. from
      * "C:\foo\bar\file.txt" to "VAR\file.txt" granted that the relativeVariable
      * is "VAR" and points to "C:\foo\bar\").
-     * 
+     *
      * @param location
-     * @param resource 
+     * @param resource
      * @return an URI that was made relative to a variable
      */
     private IPath createRelativePath(IPath location, IResource resource) {
@@ -779,7 +779,7 @@
      *
      * @param fileSystemObject the file system object to be imported
      * @param policy determines how the file system object and children are imported
-	 * @throws CoreException 
+	 * @throws CoreException
      * @exception OperationCanceledException if canceled
      */
     void importRecursivelyFrom(Object fileSystemObject, int policy) throws CoreException {
@@ -805,7 +805,7 @@
     /**
      * Queries the user whether the resource with the specified path should be
      * overwritten by a file system object that is being imported.
-     * 
+     *
      * @param resourcePath the workspace path of the resource that needs to be overwritten
      * @return <code>true</code> to overwrite, <code>false</code> to not overwrite
      * @exception OperationCanceledException if canceled
@@ -838,8 +838,8 @@
     /**
      * Returns whether the given file should be overwritten.
      *
-     * @param targetFile the file to ask to overwrite 
-     * @param policy determines if the user is queried for overwrite 
+     * @param targetFile the file to ask to overwrite
+     * @param policy determines if the user is queried for overwrite
      * @return <code>true</code> if the file should be overwritten, and
      * 	<code>false</code> if not.
      */
@@ -860,7 +860,7 @@
     /**
      * Sets the context for use by the VCM provider to prompt the user
      * for check-out of files.
-     * 
+     *
      * @param shell context for use by the VCM provider to prompt user
      * 	for check-out. The user will not be prompted if set to <code>null</code>.
      * @see IWorkspace#validateEdit(org.eclipse.core.resources.IFile[], java.lang.Object)
@@ -895,7 +895,7 @@
      * Sets whether imported file system objects should automatically overwrite
      * existing workbench resources when a conflict occurs.
      *
-     * @param value <code>true</code> to automatically overwrite, and 
+     * @param value <code>true</code> to automatically overwrite, and
      *   <code>false</code> otherwise
      */
     public void setOverwriteResources(boolean value) {
@@ -905,14 +905,14 @@
     }
 
     /**
-     * Validates that the given source resources can be copied to the 
+     * Validates that the given source resources can be copied to the
      * destination as decided by the VCM provider.
-     * 
+     *
      * @param existingFiles existing files to validate
      * @return list of rejected files as absolute paths. Object type IPath.
      */
     ArrayList validateEdit(List existingFiles) {
-       
+
         if (existingFiles.size() > 0) {
             IFile[] files = (IFile[]) existingFiles
                     .toArray(new IFile[existingFiles.size()]);
@@ -923,7 +923,7 @@
             if (status.isMultiStatus()) {
 				return getRejectedFiles(status, files);
 			}
-            
+
            if(!status.isOK()){
            		//If just a single status reject them all
            		errorTable.add(status);
@@ -934,7 +934,7 @@
            		}
            		return filteredFiles;
            }
-            
+
         }
         return new ArrayList();
     }
@@ -943,7 +943,7 @@
      * Validates the given file system objects.
      * The user is prompted to overwrite existing files.
      * Existing read-only files are validated with the VCM provider.
-     * 
+     *
      * @param sourceFiles files to validate
      */
     void validateFiles(List sourceFiles) {
@@ -958,7 +958,7 @@
 
     /**
      * Set Whether groups and links will be created instead of files and folders
-     * 
+     *
      * @param virtualFolders
      * @since 3.6
      */
@@ -968,7 +968,7 @@
 
     /**
      * Set Whether links will be created instead of files and folders
-     * 
+     *
      * @param links
      * @since 3.6
      */
@@ -978,7 +978,7 @@
 
     /**
      * Set a variable relative to which the links are created
-     * 
+     *
      * @param variable
      * @since 3.6
      */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/WizardExternalProjectImportPage.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/WizardExternalProjectImportPage.java
index c90a738..151f8e3 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/WizardExternalProjectImportPage.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/WizardExternalProjectImportPage.java
@@ -225,7 +225,7 @@
     }
 
     /**
-     * Returns the current project location path as entered by 
+     * Returns the current project location path as entered by
      * the user, or its anticipated initial value.
      *
      * @return the project location path, its anticipated initial value, or <code>null</code>
@@ -264,7 +264,7 @@
     /**
      * Returns the value of the project name field
      * with leading and trailing spaces removed.
-     * 
+     *
      * @return the project name in the field
      */
     private String getProjectNameFieldValue() {
@@ -278,7 +278,7 @@
     /**
      * Returns the value of the project location field
      * with leading and trailing spaces removed.
-     * 
+     *
      * @return the project location directory in the field
      */
     private String getProjectLocationFieldValue() {
@@ -317,7 +317,7 @@
     }
 
     /**
-     * Returns whether this page's controls currently all contain valid 
+     * Returns whether this page's controls currently all contain valid
      * values.
      *
      * @return <code>true</code> if all controls are valid, and
@@ -371,7 +371,7 @@
 
     /**
      * Set the project name using either the name of the
-     * parent of the file or the name entry in the xml for 
+     * parent of the file or the name entry in the xml for
      * the file
      */
     private void setProjectName(File projectFile) {
@@ -469,7 +469,7 @@
         } catch (InterruptedException e) {
             return null;
         } catch (InvocationTargetException e) {
-            // ie.- one of the steps resulted in a core exception	
+            // ie.- one of the steps resulted in a core exception
             Throwable t = e.getTargetException();
             if (t instanceof CoreException) {
                 if (((CoreException) t).getStatus().getCode() == IResourceStatus.CASE_VARIANT_EXISTS) {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileExportWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileExportWizard.java
index 92d8f2c..adce5c5 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileExportWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileExportWizard.java
@@ -40,7 +40,7 @@
  * dialog.open();
  * </pre>
  * During the call to <code>open</code>, the wizard dialog is presented to the
- * user. When the user hits Finish, the user-selected workspace resources 
+ * user. When the user hits Finish, the user-selected workspace resources
  * are exported to the user-specified zip file, the dialog closes, and the call
  * to <code>open</code> returns.
  * </p>
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileImportWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileImportWizard.java
index 90c58b8..abd2a73 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileImportWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileImportWizard.java
@@ -36,14 +36,14 @@
  * </p>
  * <p>
  * Example:
- * 
+ *
  * <pre>
  * IWizard wizard = new ZipFileImportWizard();
  * wizard.init(workbench, selection);
  * WizardDialog dialog = new WizardDialog(shell, wizard);
  * dialog.open();
  * </pre>
- * 
+ *
  * During the call to <code>open</code>, the wizard dialog is presented to
  * the user. When the user hits Finish, the user-selected zip file is imported
  * into the workspace, the dialog closes, and the call to <code>open</code>
@@ -87,7 +87,7 @@
 	/**
 	 * Get the file import mask used by the receiver. By default use null so
 	 * that there is no mask.
-	 * 
+	 *
 	 * @return String[] or <code>null</code>
 	 * @since 3.4
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileStructureProvider.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileStructureProvider.java
index 623a369..17dbc61 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileStructureProvider.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/datatransfer/ZipFileStructureProvider.java
@@ -40,7 +40,7 @@
     /**
      * Creates a <code>ZipFileStructureProvider</code>, which will operate
      * on the passed zip file.
-     * 
+     *
      * @param sourceFile the zip file used to create this structure provider
      */
     public ZipFileStructureProvider(ZipFile sourceFile) {
@@ -155,7 +155,7 @@
 
     /**
      * Returns the zip file that this provider provides structure for.
-     * 
+     *
      * @return the zip file this provider provides structure for
      */
     public ZipFile getZipFile() {
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFileResourceWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFileResourceWizard.java
index bb994a8..bdb3803 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFileResourceWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFileResourceWizard.java
@@ -53,7 +53,7 @@
 	 * @since 3.4
 	 */
 	public static final String WIZARD_ID = "org.eclipse.ui.wizards.new.file"; //$NON-NLS-1$
-	
+
     private WizardNewFileCreationPage mainPage;
 
     /**
@@ -71,7 +71,7 @@
         super.addPages();
         mainPage = new WizardNewFileCreationPage("newFilePage1", getSelection());//$NON-NLS-1$
         mainPage.setTitle(ResourceMessages.FileResource_pageTitle);
-        mainPage.setDescription(ResourceMessages.FileResource_description); 
+        mainPage.setDescription(ResourceMessages.FileResource_description);
         addPage(mainPage);
     }
 
@@ -116,7 +116,7 @@
                 }
             }
         } catch (PartInitException e) {
-            DialogUtil.openError(dw.getShell(), ResourceMessages.FileResource_errorMessage, 
+            DialogUtil.openError(dw.getShell(), ResourceMessages.FileResource_errorMessage,
                     e.getMessage(), e);
         }
 
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFolderResourceWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFolderResourceWizard.java
index 6f1a3f6..5f1473a 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFolderResourceWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewFolderResourceWizard.java
@@ -48,7 +48,7 @@
 	 * @since 3.4
 	 */
 	public static final String WIZARD_ID = "org.eclipse.ui.wizards.new.folder"; //$NON-NLS-1$
-	
+
     private WizardNewFolderMainPage mainPage;
 
     /**
@@ -64,7 +64,7 @@
     @Override
 	public void addPages() {
         super.addPages();
-        mainPage = new WizardNewFolderMainPage(ResourceMessages.NewFolder_text, getSelection()); 
+        mainPage = new WizardNewFolderMainPage(ResourceMessages.NewFolder_text, getSelection());
         addPage(mainPage);
     }
 
@@ -85,7 +85,7 @@
 	protected void initializeDefaultPageImageDescriptor() {
       ImageDescriptor desc = IDEWorkbenchPlugin.getIDEImageDescriptor("wizban/newfolder_wiz.png");//$NON-NLS-1$
       setDefaultPageImageDescriptor(desc);
-       
+
     }
 
     /* (non-Javadoc)
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewProjectResourceWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewProjectResourceWizard.java
index 954b849..80d2efa 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewProjectResourceWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewProjectResourceWizard.java
@@ -83,14 +83,14 @@
  * </p>
  * <p>
  * Example:
- * 
+ *
  * <pre>
  * IWorkbenchWizard wizard = new BasicNewProjectResourceWizard();
  * wizard.init(workbench, selection);
  * WizardDialog dialog = new WizardDialog(shell, wizard);
  * dialog.open();
  * </pre>
- * 
+ *
  * During the call to <code>open</code>, the wizard dialog is presented to
  * the user. When the user hits Finish, a project resource with the
  * user-specified name is created, the dialog closes, and the call to
@@ -100,13 +100,13 @@
  */
 public class BasicNewProjectResourceWizard extends BasicNewResourceWizard
 		implements IExecutableExtension {
-	
+
 	/**
 	 * The wizard id for creating new projects in the workspace.
 	 * @since 3.4
 	 */
 	public static final String WIZARD_ID = "org.eclipse.ui.wizards.new.project"; //$NON-NLS-1$
-	
+
 	private WizardNewProjectCreationPage mainPage;
 
 	private WizardNewProjectReferencePage referencePage;
@@ -156,7 +156,7 @@
 		mainPage = new WizardNewProjectCreationPage("basicNewProjectPage") { //$NON-NLS-1$
 			/*
 			 * (non-Javadoc)
-			 * 
+			 *
 			 * @see org.eclipse.ui.dialogs.WizardNewProjectCreationPage#createControl(org.eclipse.swt.widgets.Composite)
 			 */
 			@Override
@@ -168,7 +168,7 @@
 						new String[] { "org.eclipse.ui.resourceWorkingSetPage" }); //$NON-NLS-1$
 				Dialog.applyDialogFont(getControl());
 			}
-		}; 
+		};
 		mainPage.setTitle(ResourceMessages.NewProject_title);
 		mainPage.setDescription(ResourceMessages.NewProject_description);
 		this.addPage(mainPage);
@@ -196,7 +196,7 @@
 	 * successfully created; subsequent invocations of this method will answer
 	 * the same project resource without attempting to create it again.
 	 * </p>
-	 * 
+	 *
 	 * @return the created project resource, or <code>null</code> if the
 	 *         project was not created
 	 */
@@ -237,7 +237,7 @@
 				try {
 					// see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=219901
 					// directly execute the operation so that the undo state is
-					// not preserved.  Making this undoable resulted in too many 
+					// not preserved.  Making this undoable resulted in too many
 					// accidental file deletions.
 					op.execute(monitor, WorkspaceUndoUtil
 						.getUIInfoAdapter(getShell()));
@@ -297,7 +297,7 @@
 
 	/**
 	 * Returns the newly created project.
-	 * 
+	 *
 	 * @return the created project, or <code>null</code> if project not
 	 *         created
 	 */
@@ -354,11 +354,11 @@
 		if (newProject == null) {
 			return false;
 		}
-		
+
 		IWorkingSet[] workingSets = mainPage.getSelectedWorkingSets();
 		getWorkbench().getWorkingSetManager().addToWorkingSets(newProject,
 				workingSets);
-        
+
 		updatePerspective();
 		selectAndReveal(newProject);
 
@@ -405,7 +405,7 @@
 	/**
 	 * Updates the perspective based on the current settings in the
 	 * Workbench/Perspectives preference page.
-	 * 
+	 *
 	 * Use the setting for the new perspective opening if we are set to open in
 	 * a new perspective.
 	 * <p>
@@ -414,10 +414,10 @@
 	 * wizard's <code>IConfigurationElement</code>. That is the configuration
 	 * element to pass into this method.
 	 * </p>
-	 * 
+	 *
 	 * @param configElement -
 	 *            the element we are updating with
-	 * 
+	 *
 	 * @see IPreferenceConstants#OPM_NEW_WINDOW
 	 * @see IPreferenceConstants#OPM_ACTIVE_PAGE
 	 * @see IWorkbenchPreferenceConstants#NO_NEW_PERSPECTIVE
@@ -538,7 +538,7 @@
 	/**
 	 * Adds to the list all perspective IDs in the Workbench who's original ID
 	 * matches the given ID.
-	 * 
+	 *
 	 * @param perspectiveIds
 	 *            the list of perspective IDs to supplement.
 	 * @param id
@@ -562,13 +562,13 @@
 
 	/**
 	 * Prompts the user for whether to switch perspectives.
-	 * 
+	 *
 	 * @param window
 	 *            The workbench window in which to switch perspectives; must not
 	 *            be <code>null</code>
 	 * @param finalPersp
 	 *            The perspective to switch to; must not be <code>null</code>.
-	 * 
+	 *
 	 * @return <code>true</code> if it's OK to switch, <code>false</code>
 	 *         otherwise
 	 */
diff --git a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewResourceWizard.java b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewResourceWizard.java
index d6d0c09..008b501 100644
--- a/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewResourceWizard.java
+++ b/bundles/org.eclipse.ui.ide/src/org/eclipse/ui/wizards/newresource/BasicNewResourceWizard.java
@@ -76,7 +76,7 @@
     }
 
     /**
-     * The <code>BasicNewResourceWizard</code> implementation of this 
+     * The <code>BasicNewResourceWizard</code> implementation of this
      * <code>IWorkbenchWizard</code> method records the given workbench and
      * selection, and initializes the default banner image for the pages
      * by calling <code>initializeDefaultPageImageDescriptor</code>.
@@ -124,7 +124,7 @@
      *
      * @param resource the resource to be selected and revealed
      * @param window the workbench window to select and reveal the resource
-     * 
+     *
      * @see ISetSelectionTarget
      */
     public static void selectAndReveal(IResource resource,
