diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/CUCorrectionProposalCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/CUCorrectionProposalCore.java
index 2fba70d..e357559 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/CUCorrectionProposalCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/CUCorrectionProposalCore.java
@@ -47,7 +47,7 @@
  * <p>
  * The proposal takes care of the preview of the changes as proposal information.
  * </p>
- * 
+ *
  * @since 1.11
  */
 public class CUCorrectionProposalCore extends ChangeCorrectionProposalCore implements ICUCorrectionProposal {
@@ -57,7 +57,7 @@
 
 	/**
 	 * Constructs a correction proposal working on a compilation unit with a given text change.
-	 * 
+	 *
 	 * @param proposal ICUCorrectionProposal to use
 	 * @param name the name that is displayed in the proposal selection dialog
 	 * @param cu the compilation unit to which the change can be applied
@@ -77,7 +77,7 @@
 
 	/**
 	 * Constructs a correction proposal working on a compilation unit with a given text change.
-	 * 
+	 *
 	 * @param name the name that is displayed in the proposal selection dialog
 	 * @param cu the compilation unit to which the change can be applied
 	 * @param change the change that is executed when the proposal is applied or <code>null</code>
@@ -100,7 +100,7 @@
 	 * Users have to override {@link #addEdits(IDocument, TextEdit)} to provide the text edits or
 	 * {@link #createTextChange()} to provide a text change.
 	 * </p>
-	 * 
+	 *
 	 * @param name the name that is displayed in the proposal selection dialog
 	 * @param cu the compilation unit on that the change works
 	 * @param relevance the relevance of this proposal
@@ -116,7 +116,7 @@
 	 * <p>
 	 * The default implementation does not add any edits
 	 * </p>
-	 * 
+	 *
 	 * @param document content of the underlying compilation unit. To be accessed read only.
 	 * @param editRoot The root edit to add all edits to
 	 * @throws CoreException can be thrown if adding the edits is failing.
@@ -141,7 +141,7 @@
 		}
 		return buf.toString();
 	}
-	
+
 	@Override
 	public void apply() throws CoreException {
 		performChange();
@@ -219,7 +219,7 @@
 	 *
 	 * @return the preview of the changed compilation unit
 	 * @throws CoreException if the creation of the change failed
-	 * 
+	 *
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
 	public String getPreviewContent() throws CoreException {
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ChangeCorrectionProposalCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ChangeCorrectionProposalCore.java
index 47118fd..d5c4c5d 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ChangeCorrectionProposalCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ChangeCorrectionProposalCore.java
@@ -1,6 +1,6 @@
 /*******************************************************************************
  * Copyright (c) 2018 IBM Corporation and others.
- * 
+ *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ICUCorrectionProposal.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ICUCorrectionProposal.java
index b5511ef..9a2d392 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ICUCorrectionProposal.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ICUCorrectionProposal.java
@@ -22,7 +22,7 @@
  * @since 1.11
  */
 public interface ICUCorrectionProposal {
-	
+
 	/**
 	 * Returns the text change that is invoked when the change is applied.
 	 *
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java
index 7ebe14f..f48164b 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/ImportReferencesCollector.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -291,7 +291,7 @@
 		doVisitChildren(node.annotations());
 		return false;
 	}
-	
+
 	@Override
 	public boolean visit(LabeledStatement node) {
 		doVisitNode(node.getBody());
@@ -302,15 +302,15 @@
 	public boolean visit(ContinueStatement node) {
 		return false;
 	}
-	
+
 	@Override
 	public boolean visit(YieldStatement node) {
 		if (node.getAST().isPreviewEnabled()) {
-			evalQualifyingExpression(node.getExpression(), null);			
+			evalQualifyingExpression(node.getExpression(), null);
 		}
 		return false;
 	}
-	
+
 	/*
 	 * @see ASTVisitor#visit(ThisExpression)
 	 */
@@ -319,7 +319,7 @@
 		typeRefFound(node.getQualifier());
 		return false;
 	}
-	
+
 	@Override
 	public boolean visit(SuperFieldAccess node) {
 		typeRefFound(node.getQualifier());
@@ -372,7 +372,7 @@
 		doVisitChildren(node.typeArguments());
 		return false;
 	}
-	
+
 	@Override
 	public boolean visit(ExpressionMethodReference node) {
 		evalQualifyingExpression(node.getExpression(), node.getName());
@@ -386,7 +386,7 @@
 		doVisitChildren(node.typeArguments());
 		return false;
 	}
-	
+
 	@Override
 	public boolean visit(TypeMethodReference node) {
 		doVisitNode(node.getType());
@@ -408,7 +408,7 @@
 		}
 		return false;
 	}
-	
+
 	/*
 	 * @see ASTVisitor#visit(SuperConstructorInvocation)
 	 */
@@ -491,7 +491,7 @@
 			doVisitNode(node.getReturnType2());
 		}
 		// name not visited
-		
+
 		int apiLevel= node.getAST().apiLevel();
 		if (apiLevel >= AST.JLS8) {
 			doVisitNode(node.getReceiverType());
@@ -568,7 +568,7 @@
 		}
 		return false;
 	}
-	
+
 	@Override
 	public boolean visit(MethodRefParameter node) {
 		doVisitNode(node.getType());
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/OrganizeImportsOperation.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/OrganizeImportsOperation.java
index 9b7cf5d..f7ee9fe 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/OrganizeImportsOperation.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/OrganizeImportsOperation.java
@@ -560,7 +560,7 @@
 		CompilationUnit astRoot= fASTRoot;
 		if (astRoot == null) {
 			astRoot= CoreASTProvider.getInstance().getAST(fCompilationUnit, CoreASTProvider.WAIT_YES, subMonitor.split(2));
-		} 
+		}
 		subMonitor.setWorkRemaining(7);
 
 		ImportRewrite importsRewrite= CodeStyleConfiguration.createImportRewrite(astRoot, false);
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.java
index bab2319..4d6e013 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/core/manipulation/SharedASTProviderCore.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -112,7 +112,7 @@
 	 * <p>
 	 * Clients are not allowed to modify the AST and must not keep any references.
 	 * </p>
-	 * 
+	 *
 	 * @param element the {@link ITypeRoot}, must not be <code>null</code>
 	 * @param waitFlag {@link #WAIT_YES}, {@link #WAIT_NO} or {@link #WAIT_ACTIVE_ONLY}
 	 * @param progressMonitor the progress monitor or <code>null</code>
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/CodeTemplateContext.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/CodeTemplateContext.java
index cac72fe..1fa70ff 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/CodeTemplateContext.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/CodeTemplateContext.java
@@ -52,7 +52,7 @@
 		}
 		return super.getAdapter(adapter);
 	}
-	
+
 	public IJavaProject getJavaProject() {
 		return fProject;
 	}
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java
index bacbefe..bd23b3c 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/core/manipulation/StubUtility.java
@@ -112,7 +112,7 @@
 /**
  * Implementations for {@link CodeGeneration} APIs, and other helper methods
  * to create source code stubs based on {@link IJavaElement}s.
- * 
+ *
  * See StubUtility2
  * See JDTUIHelperClasses
  */
@@ -379,7 +379,7 @@
 
 	/**
 	 * Don't use this method directly, use CodeGeneration.
-	 * 
+	 *
 	 * @param templateID the template id of the type body to get. Valid id's are
 	 *            {@link CodeTemplateContextType#CLASSBODY_ID},
 	 *            {@link CodeTemplateContextType#INTERFACEBODY_ID},
@@ -885,7 +885,7 @@
 
 	/**
 	 * Returns the line delimiter which is used in the specified project.
-	 * 
+	 *
 	 * @param project the java project, or <code>null</code>
 	 * @return the used line delimiter
 	 */
@@ -939,7 +939,7 @@
 
 	/**
 	 * Evaluates the indentation used by a Java element. (in tabulators)
-	 * 
+	 *
 	 * @param elem the element to get the indent of
 	 * @return return the indent unit
 	 * @throws JavaModelException thrown if the element could not be accessed
@@ -969,7 +969,7 @@
 
 	/**
 	 * Returns the element after the give element.
-	 * 
+	 *
 	 * @param member a Java element
 	 * @return the next sibling of the given element or <code>null</code>
 	 * @throws JavaModelException thrown if the element could not be accessed
@@ -1109,7 +1109,7 @@
 	/**
 	 * Returns variable name suggestions for the given base name. This is a layer over the JDT.Core
 	 * NamingConventions API to fix its shortcomings. JDT UI code should only use this API.
-	 * 
+	 *
 	 * @param variableKind specifies what type the variable is: {@link NamingConventions#VK_LOCAL},
 	 *            {@link NamingConventions#VK_PARAMETER}, {@link NamingConventions#VK_STATIC_FIELD},
 	 *            {@link NamingConventions#VK_INSTANCE_FIELD}, or
@@ -1122,7 +1122,7 @@
 	 *            are excluded
 	 * @param evaluateDefault if set, the result is guaranteed to contain at least one result. If
 	 *            not, the result can be an empty array.
-	 * 
+	 *
 	 * @return the name suggestions sorted by relevance (best proposal first). If
 	 *         <code>evaluateDefault</code> is set to true, the returned array is never empty. If
 	 *         <code>evaluateDefault</code> is set to false, an empty array is returned if there is
@@ -1379,7 +1379,7 @@
 		}
 		return names;
 	}
-	
+
 	public static String getBaseName(IField field) throws JavaModelException {
 		return NamingConventions.getBaseName(getFieldKind(field.getFlags()), field.getElementName(), field.getJavaProject());
 	}
@@ -1390,7 +1390,7 @@
 
 	/**
 	 * Returns the kind of the given binding.
-	 * 
+	 *
 	 * @param binding variable binding
 	 * @return one of the <code>NamingConventions.VK_*</code> constants
 	 * @since 3.5
@@ -1527,7 +1527,7 @@
 
 	/**
 	 * Only to be used by tests
-	 * 
+	 *
 	 * @param templateId the template id
 	 * @param pattern the new pattern
 	 * @param project not used
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/JdtViewerDropAdapterConstants.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/JdtViewerDropAdapterConstants.java
index 5e5bce5..7c944a8 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/JdtViewerDropAdapterConstants.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/JdtViewerDropAdapterConstants.java
@@ -1,6 +1,6 @@
 /*******************************************************************************
  * Copyright (c) 2018 IBM Corporation and others.
- * 
+ *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/HighlightedPositionCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/HighlightedPositionCore.java
index d93dcb6..1859d32 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/HighlightedPositionCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/HighlightedPositionCore.java
@@ -18,14 +18,14 @@
 
 /**
  * Highlighted Positions.
- * 
+ *
  * @since 1.11
  */
 public class HighlightedPositionCore extends Position {
 
 	/** Lock object */
 	private Object fLock;
-	
+
 	/** Highlighting object */
 	private Object fHighlighting;
 
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/PositionCollectorCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/PositionCollectorCore.java
index 8dc4c83..dc1b67b 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/PositionCollectorCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/PositionCollectorCore.java
@@ -30,7 +30,7 @@
 
 /**
  * Collects positions from the AST.
- * 
+ *
  * @since 1.11
  */
 public abstract class PositionCollectorCore extends GenericVisitor {
@@ -85,7 +85,7 @@
 	 * @since 3.5
 	 */
 	@Override
-	public abstract boolean visit(SuperConstructorInvocation node); 
+	public abstract boolean visit(SuperConstructorInvocation node);
 
 	@Override
 	public abstract boolean visit(SimpleType node);
@@ -94,7 +94,7 @@
 	 * @see org.eclipse.jdt.core.dom.ASTVisitor#visit(org.eclipse.jdt.core.dom.SimpleName)
 	 */
 	@Override
-	public abstract boolean visit(SimpleName node); 
+	public abstract boolean visit(SimpleName node);
 
 	/**
 	 * Retain the positions completely contained in the given range.
@@ -102,5 +102,5 @@
 	 * @param length The range length
 	 */
 	protected abstract void retainPositions(int offset, int length);
-	
+
 }
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingCore.java
index 9232ef4..7a7d277 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingCore.java
@@ -16,7 +16,7 @@
 
 /**
  * Semantic highlighting
- * 
+ *
  * @since 1.11
  */
 public abstract class SemanticHighlightingCore {
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenterCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenterCore.java
index 7fd859e..f09719f 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenterCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenterCore.java
@@ -248,7 +248,7 @@
 	 * Add a position with the given range and highlighting unconditionally, only from UI thread.
 	 * The position will also be registered on the document. The text presentation is not
 	 * invalidated.
-	 * 
+	 *
 	 * @param event The document event
 	 * @param category The category
 	 * @param offset The range offset
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingsCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingsCore.java
index 7f57be4..634430f 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingsCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingsCore.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Red Hat Inc. - copied and modified from SemanticHighlightings
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/proposals/EditAnnotator.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/proposals/EditAnnotator.java
index 4a2a2b1..3be2ab6 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/proposals/EditAnnotator.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/proposals/EditAnnotator.java
@@ -31,7 +31,7 @@
 /**
  * Class to annotate edits made by a quick fix/assist to be shown via the quick fix pop-up preview.
  * E.g. the added changes are shown in bold.
- * 
+ *
  * @since 3.8
  */
 public class EditAnnotator extends TextEditVisitor {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/ASTResolving.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/ASTResolving.java
index 6cf52cf..b567b04 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/ASTResolving.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/ASTResolving.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -665,7 +665,7 @@
 	/**
 	 * The node's enclosing method declaration or <code>null</code> if
 	 * the node is not inside a method and is not a method declaration itself.
-	 * 
+	 *
 	 * @param node a node
 	 * @return the enclosing method declaration or <code>null</code>
 	 */
@@ -684,11 +684,11 @@
 	/**
 	 * Returns the lambda expression node which encloses the given <code>node</code>, or
 	 * <code>null</code> if none.
-	 * 
+	 *
 	 * @param node the node
 	 * @return the enclosing lambda expression node for the given <code>node</code>, or
 	 *         <code>null</code> if none
-	 * 
+	 *
 	 * @since 3.10
 	 */
 	public static LambdaExpression findEnclosingLambdaExpression(ASTNode node) {
@@ -715,7 +715,7 @@
 	 * </p>
 	 * @param node the node
 	 * @param nodeType the node type constant from {@link ASTNode}
-	 * @return the closest ancestor of <code>node</code> (including <code>node</code> itself) 
+	 * @return the closest ancestor of <code>node</code> (including <code>node</code> itself)
 	 *         whose type is <code>nodeType</code>, or <code>null</code> if none
 	 */
 	public static ASTNode findAncestor(ASTNode node, int nodeType) {
@@ -985,7 +985,7 @@
 	 *     if false, the type of an expression x (R r= x)
 	 * @param ast the current AST
 	 * @return the normalized binding or null when only the 'null' binding
-	 * 
+	 *
 	 * @see Bindings#normalizeForDeclarationUse(ITypeBinding, AST)
 	 */
 	public static ITypeBinding normalizeWildcardType(ITypeBinding wildcardType, boolean isBindingToAssign, AST ast) {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/NecessaryParenthesesChecker.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/NecessaryParenthesesChecker.java
index 9734ebd..c3e22a4 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/NecessaryParenthesesChecker.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/dom/NecessaryParenthesesChecker.java
@@ -45,7 +45,7 @@
 
 /**
  * Helper class to check if an expression requires parentheses.
- * 
+ *
  * @see JDTUIHelperClasses
  * @since 3.7
  */
@@ -109,18 +109,18 @@
 		ITypeBinding binding= leftOperandType;
 		if (binding == null)
 			return false;
-	
+
 		ITypeBinding current= rightOperandType;
 		if (binding != current)
 			return false;
-	
+
 		for (Iterator<Expression> iterator= expression.extendedOperands().iterator(); iterator.hasNext();) {
 			Expression operand= iterator.next();
 			current= operand.resolveTypeBinding();
 			if (binding != current)
 				return false;
 		}
-	
+
 		return true;
 	}
 
@@ -147,7 +147,7 @@
 
 	/*
 	 * Is the given expression associative?
-	 * 
+	 *
 	 * This is true if and only if:<br>
 	 * <code>left operator (right) == (right) operator left == right operator left</code>
 	 */
@@ -164,7 +164,7 @@
 				|| operator == InfixExpression.Operator.OR
 				|| operator == InfixExpression.Operator.XOR)
 			return true;
-	
+
 		return false;
 	}
 
@@ -211,15 +211,15 @@
 
 				if (parentInfixOperator != InfixExpression.Operator.TIMES)
 					return false;
-	
+
 				if (operator == InfixExpression.Operator.TIMES)
 					// x * (y * z) == x * y * z
 					return false;
-	
+
 				if (operator == InfixExpression.Operator.REMAINDER || operator == InfixExpression.Operator.DIVIDE)
 					// x * (y % z) != x * y % z , x * (y / z) == x * y / z rounding involved
 					return true;
-	
+
 				return false;
 			}
 			return false;
@@ -230,13 +230,13 @@
 
 	/**
 	 * Returns the type of infix expression based on its operands and operator.
-	 * 
+	 *
 	 * @param operator the operator of infix expression
 	 * @param leftOperandType the type of left operand of infix expression
 	 * @param rightOperandType the type of right operand of infix expression
 	 * @return the type of infix expression if the type of both the operands is same or if the type
 	 *         of either operand of a + operator is String, <code>null</code> otherwise.
-	 * 
+	 *
 	 * @since 3.9
 	 */
 	private static ITypeBinding getInfixExpressionType(InfixExpression.Operator operator, ITypeBinding leftOperandType, ITypeBinding rightOperandType) {
@@ -257,11 +257,11 @@
 
 	/**
 	 * Can the parentheses be removed from the parenthesized expression ?
-	 * 
+	 *
 	 * <p>
 	 * <b>Note:</b> The parenthesized expression must not be an unparented node.
 	 * </p>
-	 * 
+	 *
 	 * @param expression the parenthesized expression
 	 * @return <code>true</code> if parentheses can be removed, <code>false</code> otherwise.
 	 */
@@ -272,11 +272,11 @@
 	/**
 	 * Can the parentheses be removed from the parenthesized expression when inserted into
 	 * <code>parent</code> at <code>locationInParent</code> ?
-	 * 
+	 *
 	 * <p>
 	 * <b>Note:</b> The parenthesized expression can be an unparented node.
 	 * </p>
-	 * 
+	 *
 	 * @param expression the parenthesized expression
 	 * @param parent the parent node
 	 * @param locationInParent location of expression in the parent
@@ -292,7 +292,7 @@
 	/**
 	 * Does the <code>rightOperand</code> need parentheses when inserted into
 	 * <code>infixExpression</code> ?
-	 * 
+	 *
 	 * <p>
 	 * <b>Note:</b>
 	 * <ul>
@@ -302,13 +302,13 @@
 	 * <li>The <code>rightOperand</code> node must have bindings.</li>
 	 * </ul>
 	 * </p>
-	 * 
+	 *
 	 * @param rightOperand the right operand in <code>infixExpression</code>
 	 * @param infixExpression the parent infix expression
 	 * @param leftOperandType the type of the left operand in <code>infixExpression</code>
 	 * @return <code>true</code> if <code>rightOperand</code> needs parentheses, <code>false</code>
 	 *         otherwise.
-	 * 
+	 *
 	 * @since 3.9
 	 */
 	public static boolean needsParenthesesForRightOperand(Expression rightOperand, InfixExpression infixExpression, ITypeBinding leftOperandType) {
@@ -318,11 +318,11 @@
 	/**
 	 * Does the <code>expression</code> need parentheses when inserted into <code>parent</code> at
 	 * <code>locationInParent</code> ?
-	 * 
+	 *
 	 * <p>
 	 * <b>Note:</b> The expression can be an unparented node.
 	 * </p>
-	 * 
+	 *
 	 * @param expression the expression
 	 * @param parent the parent node
 	 * @param locationInParent location of expression in the parent
@@ -336,7 +336,7 @@
 	/**
 	 * Does the <code>expression</code> need parentheses when inserted into <code>parent</code> at
 	 * <code>locationInParent</code> ?
-	 * 
+	 *
 	 * @param expression the expression
 	 * @param parent the parent node
 	 * @param locationInParent location of expression in the parent
@@ -345,7 +345,7 @@
 	 *            <code>expression</code> is the right operand in it, <code>null</code> otherwise
 	 * @return <code>true</code> if <code>expression</code> needs parentheses, <code>false</code>
 	 *         otherwise.
-	 * 
+	 *
 	 * @since 3.9
 	 */
 	private static boolean needsParentheses(Expression expression, ASTNode parent, StructuralPropertyDescriptor locationInParent, ITypeBinding leftOperandType) {
@@ -358,7 +358,7 @@
 
 		if (parent instanceof Expression) {
 			Expression parentExpression= (Expression)parent;
-			
+
 			if (expression instanceof PrefixExpression) { // see bug 405096
 				return needsParenthesesForPrefixExpression(parentExpression, ((PrefixExpression) expression).getOperator());
 			}
@@ -393,7 +393,7 @@
 
 		return true;
 	}
-	
+
 	private static boolean needsParenthesesForPrefixExpression(Expression parentExpression, PrefixExpression.Operator expressionOperator) {
 		if (parentExpression instanceof PrefixExpression) {
 			PrefixExpression.Operator parentOperator= ((PrefixExpression) parentExpression).getOperator();
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/BasicElementLabels.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/BasicElementLabels.java
index 3a49c48..aea795c 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/BasicElementLabels.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/BasicElementLabels.java
@@ -37,7 +37,7 @@
 	private static final String FILE_PATTERN_DELIMITERS= TextProcessor.getDefaultDelimiters() + "*.?"; //$NON-NLS-1$
 	private static final String URL_DELIMITERS= TextProcessor.getDefaultDelimiters() + ":@?-"; //$NON-NLS-1$
 
-	
+
 	/**
 	 * Returns the label of a path.
 	 *
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/Strings.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/Strings.java
index 49f0153..1852cf6 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/Strings.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/core/manipulation/util/Strings.java
@@ -54,7 +54,7 @@
 
 	/**
 	 * Adds special marks so that that the given string is readable in a BiDi environment.
-	 * 
+	 *
 	 * @param string the string
 	 * @return the processed styled string
 	 * @since 3.4
@@ -68,7 +68,7 @@
 
 	/**
 	 * Adds special marks so that that the given string is readable in a BiDi environment.
-	 * 
+	 *
 	 * @param string the string
 	 * @param delimiters the delimiters
 	 * @return the processed styled string
@@ -84,7 +84,7 @@
 	/**
 	 * Adds special marks so that that the given Java element label is readable in a BiDi
 	 * environment.
-	 * 
+	 *
 	 * @param string the string
 	 * @return the processed styled string
 	 * @since 3.6
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/CorextMessages.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/CorextMessages.java
index add7795..39546c9 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/CorextMessages.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/CorextMessages.java
@@ -34,7 +34,7 @@
 	public static String JavaDocLocations_noAttachedSource;
 	public static String JavaDocLocations_noAttachments;
 	public static String JavaDocLocations_noInformation;
-	
+
 	public static String History_error_serialize;
 	public static String History_error_read;
 	public static String TypeInfoHistory_consistency_check;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java
index e0390f0..d2fcd00 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/CallerMethodWrapper.java
@@ -46,14 +46,14 @@
 public class CallerMethodWrapper extends MethodWrapper {
 	/**
 	 * Value of the expand with constructors mode.
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	private boolean fExpandWithConstructors;
 
 	/**
 	 * Tells whether the expand with constructors mode has been set.
-	 * 
+	 *
 	 * @see #setExpandWithConstructors(boolean)
 	 * @since 3.5
 	 */
@@ -179,10 +179,10 @@
 
 	/**
 	 * Returns the value of expand with constructors mode.
-	 * 
+	 *
 	 * @return <code>true</code> if in expand with constructors mode, <code>false</code> otherwise or if not yet set
 	 * @see #isExpandWithConstructorsSet()
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	public boolean getExpandWithConstructors() {
@@ -191,7 +191,7 @@
 
 	/**
 	 * Sets the expand with constructors mode.
-	 * 
+	 *
 	 * @param value <code>true</code> if in expand with constructors mode, <code>false</code>
 	 *            otherwise
 	 * @since 3.5
@@ -204,7 +204,7 @@
 
 	/**
 	 * Tells whether the expand with constructors mode has been set.
-	 * 
+	 *
 	 * @return <code>true</code> if expand with constructors mode has been set explicitly, <code>false</code> otherwise
 	 * @see #setExpandWithConstructors(boolean)
 	 * @since 3.5
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java
index e796b32..7d5620a 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/callhierarchy/RealCallers.java
@@ -15,14 +15,14 @@
 
 /**
  * Class for the real callers.
- * 
+ *
  * @since 3.5
  */
 	public class RealCallers extends CallerMethodWrapper {
 
 		/**
 		 * Sets the parent method wrapper.
-		 * 
+		 *
 		 * @param methodWrapper the method wrapper
 		 * @param methodCall the method call
 		 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettingsConstants.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettingsConstants.java
index c32beac..6e57b46 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettingsConstants.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/CodeGenerationSettingsConstants.java
@@ -15,7 +15,7 @@
 package org.eclipse.jdt.internal.corext.codemanipulation;
 
 public class CodeGenerationSettingsConstants {
-	
+
 	/**
 	 * A named preference that controls if comment stubs will be added
 	 * automatically to newly created types and methods.
@@ -24,7 +24,7 @@
 	 * </p>
 	 */
 	public static final String CODEGEN_ADD_COMMENTS= "org.eclipse.jdt.ui.javadoc"; //$NON-NLS-1$
-	
+
 	/**
 	 * A named preference that controls whether the keyword "this" will be added
 	 * automatically to field accesses in generated methods.
@@ -33,7 +33,7 @@
 	 * </p>
 	 */
 	public static final String CODEGEN_KEYWORD_THIS= "org.eclipse.jdt.ui.keywordthis"; //$NON-NLS-1$
-	
+
 	/**
 	 * A named preference that controls whether to add a override annotation for newly created methods
 	 * <p>
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java
index df70e59..bfda4a6 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/ContextSensitiveImportRewriteContext.java
@@ -61,19 +61,19 @@
 
 	/**
 	 * Creates an import rewrite context at the given node's start position.
-	 * 
+	 *
 	 * @param node the node to use as context
 	 * @param importRewrite the import rewrite
-	 * 
+	 *
 	 * @since 3.6
 	 */
 	public ContextSensitiveImportRewriteContext(ASTNode node, ImportRewrite importRewrite) {
 		this((CompilationUnit) node.getRoot(), node.getStartPosition(), importRewrite, RedundantNullnessTypeAnnotationsFilter.createIfConfigured(node));
 	}
-	
+
 	/**
 	 * Creates an import rewrite context at the given start position.
-	 * 
+	 *
 	 * @param compilationUnit the root (must have resolved bindings)
 	 * @param position the context position
 	 * @param importRewrite the import rewrite
@@ -233,7 +233,7 @@
 		}
 		return fImportedNames;
 	}
-	
+
 	@Override
 	public IAnnotationBinding[] removeRedundantTypeAnnotations(IAnnotationBinding[] annotations, TypeLocation location, ITypeBinding type) {
 		RedundantNullnessTypeAnnotationsFilter redundantTypeAnnotationsFilter= fRedundantTypeAnnotationsFilter;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java
index 17ceddc..67771de 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/GenerateHashCodeEqualsOperation.java
@@ -150,7 +150,7 @@
 	private static final String METHODNAME_GETCLASS= "getClass"; //$NON-NLS-1$
 
 	private static final String METHODNAME_EQUALS= "equals"; //$NON-NLS-1$
-	
+
 	private static final String METHODNAME_DEEP_EQUALS= "deepEquals"; //$NON-NLS-1$
 
 	private static final String METHODNAME_HASH_CODE= "hashCode"; //$NON-NLS-1$
@@ -426,7 +426,7 @@
 
 		Block body= fAst.newBlock();
 		hashCodeMethod.setBody(body);
-	
+
 		boolean needsNoSuperCall= needsNoSuperCall(fType, METHODNAME_HASH_CODE, new ITypeBinding[0]);
 		boolean memberType= isMemberType();
 		ReturnStatement endReturn= fAst.newReturnStatement();
@@ -1085,7 +1085,7 @@
 
 		return ifSt;
 	}
-	
+
 	private Statement createMultiArrayComparison(String name) {
 		MethodInvocation invoc= fAst.newMethodInvocation();
 		invoc.setName(fAst.newSimpleName(METHODNAME_DEEP_EQUALS));
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java
index 5e28bb7..8e210ad 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/StubUtility2Core.java
@@ -300,7 +300,7 @@
 		}
 		return decl;
 	}
-	
+
 	public static MethodDeclaration createImplementationStubCore(ICompilationUnit unit, ASTRewrite rewrite, ImportRewrite imports, ImportRewriteContext context,
 			IMethodBinding binding, ITypeBinding targetType, CodeGenerationSettings settings, boolean inInterface,
 			ASTNode astNode, boolean snippetStringSupport) throws CoreException {
@@ -312,7 +312,7 @@
 			IMethodBinding binding, String[] parameterNames, ITypeBinding targetType, CodeGenerationSettings settings, boolean inInterface, ASTNode astNode, boolean snippetStringSupport) throws CoreException {
 		Assert.isNotNull(imports);
 		Assert.isNotNull(rewrite);
-		
+
 		AST ast= rewrite.getAST();
 		String type= Bindings.getTypeQualifiedName(targetType);
 
@@ -493,7 +493,7 @@
 					}
 					type= type.getComponentType();
 				}
-				
+
 				Type elementType= imports.addImport(type, ast, context);
 				if (dimensions == 1) {
 					var.setType(elementType);
@@ -570,7 +570,7 @@
 
 	private static void findUnimplementedInterfaceMethods(ITypeBinding typeBinding, HashSet<ITypeBinding> visited,
 			ArrayList<IMethodBinding> allMethods, IPackageBinding currPack, ArrayList<IMethodBinding> toImplement) {
-		
+
 		if (visited.add(typeBinding)) {
 			nextMethod: for (IMethodBinding curr : typeBinding.getDeclaredMethods()) {
 				for (Iterator<IMethodBinding> allIter= allMethods.iterator(); allIter.hasNext();) {
@@ -624,7 +624,7 @@
 		}
 		modifiers= modifiers & ~Modifier.ABSTRACT & ~Modifier.NATIVE & ~Modifier.PRIVATE;
 		IAnnotationBinding[] annotations= method.getAnnotations();
-		
+
 		if (modifiers != Modifier.NONE && annotations.length > 0) {
 			// need an AST of the source method to preserve order of modifiers
 			IMethod iMethod= (IMethod) method.getJavaElement();
@@ -664,16 +664,16 @@
 				}
 			}
 		}
-		
+
 		ArrayList<IExtendedModifier> result= new ArrayList<>();
-		
+
 		for (IAnnotationBinding annotation : annotations) {
 			if (StubUtility2Core.isCopyOnInheritAnnotation(annotation.getAnnotationType(), javaProject, nullnessDefault, TypeLocation.RETURN_TYPE))
 				result.add(importRewrite.addAnnotation(annotation, ast, context));
 		}
-		
+
 		result.addAll(ASTNodeFactory.newModifiers(ast, modifiers));
-		
+
 		return result;
 	}
 
@@ -925,7 +925,7 @@
 	/**
 	 * Adds <code>@Override</code> annotation to <code>methodDecl</code> if not already present and
 	 * if requested by code style settings or compiler errors/warnings settings.
-	 * 
+	 *
 	 * @param settings the code generation style settings, may be <code>null</code>
 	 * @param project the Java project used to access the compiler settings
 	 * @param rewrite the ASTRewrite
@@ -991,7 +991,7 @@
 		}
 		return null;
 	}
-	
+
 	public static ITypeBinding replaceWildcardsAndCaptures(ITypeBinding type) {
 		while (type.isWildcardType() || type.isCapture() || (type.isArray() && type.getElementType().isCapture())) {
 			ITypeBinding bound = type.getBound();
@@ -999,7 +999,7 @@
 		}
 		return type;
 	}
-	
+
 	/**
 	 * Creates a new stub utility.
 	 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java
index 741398f..a8190a0 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/AbstractToStringGenerator.java
@@ -76,7 +76,7 @@
  * which lists all selected fields and methods. What exactly is listed and how members are separated
  * is determined by a format template.
  * <p>
- * 
+ *
  * <p>
  * To print out items of arrays and/or limit number items printed for arrays, collections and so on,
  * various methods are used according to actual jdk compatibility:
@@ -133,7 +133,7 @@
  * Additionally, if helper method is generated it is also used for other members members (even if
  * other solution could be used), as it makes the code cleaner.
  * </p>
- * 
+ *
  * @since 3.5
  */
 public abstract class AbstractToStringGenerator {
@@ -148,7 +148,7 @@
 
 	final private String MAX_LEN_VARIABLE_NAME= "maxLen"; //$NON-NLS-1$
 	protected String fMaxLenVariableName= MAX_LEN_VARIABLE_NAME;
-	
+
 	/**
 	* The name of the property that every <code>MethodDeclaration</code> generated should have.
 	* This property determines whether the method should be overwritten if already exists. The data
@@ -180,7 +180,7 @@
 	/**
 	 * This method is an implementation of Director in Builder pattern. It goes through all elements
 	 * of the format template and calls methods responsible for processing them.
-	 * 
+	 *
 	 * @return declaration of the generated <code>toString()</code> method
 	 * @throws CoreException if creation failed
 	 */
@@ -223,7 +223,7 @@
 	/**
 	 * adds a comment (if necessary) and an <code>@Override</code> annotation to the generated
 	 * method
-	 * 
+	 *
 	 * @throws CoreException if creation failed
 	 */
 	protected void createMethodComment() throws CoreException {
@@ -248,7 +248,7 @@
 	/**
 	 * Creates a method that takes a <code>Collection</code> or an Array and returns a
 	 * <code>String</code> containing it's first <code>fSettings.limitValue</code> elements
-	 * 
+	 *
 	 * @param array if true, generated method will convert array to string, otherwise -
 	 *            <code>Collection</code>
 	 * @return <code>arrayToString(Object[] array)</code> or </code>collectionToString(Collection
@@ -428,7 +428,7 @@
 			Expression indexExpression= createInfixExpression(fAst.newSimpleName(indexName), Operator.LESS, fAst.newSimpleName(maxLenParamName));
 			forStatement.setExpression(createInfixExpression(createMethodInvocation(iteratorName, "hasNext", null), Operator.CONDITIONAL_AND, indexExpression)); //$NON-NLS-1$
 
-			//if (i > 0) 
+			//if (i > 0)
 			//stringBuilder.append(iterator.next());
 			MethodInvocation nextInvocation= createMethodInvocation(iteratorName, "next", null); //$NON-NLS-1$
 			forBlock.statements().add(fAst.newExpressionStatement(createMethodInvocation(stringBuilderName, appendMethodName, nextInvocation)));
@@ -472,14 +472,14 @@
 
 		Block body= fAst.newBlock();
 		toStringMethod.setBody(body);
-		
+
 		fMaxLenVariableName= createNameSuggestion(MAX_LEN_VARIABLE_NAME, NamingConventions.VK_LOCAL);
 	}
 
 	/**
 	 * This method is called at the end of the process of generating <code>toString</code> method.
 	 * It should make sure the processed properly and clean the environment.
-	 * 
+	 *
 	 * @throws CoreException if creation failed
 	 */
 	protected void complete() throws CoreException {
@@ -521,7 +521,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param templateElement the template element, see constants in {@link ToStringTemplateParser}
 	 * @param member the member
 	 * @return <code>String</code> or <code>Expression</code> switching
@@ -575,7 +575,7 @@
 	/**
 	 * Adds an element to the generated <code>toString</code> method. This method is called for
 	 * every element of the format template.
-	 * 
+	 *
 	 * @param element String or expression to be added (<code>IVariableBinding</code> or
 	 *            <code>IMethodBinding</code>
 	 */
@@ -584,7 +584,7 @@
 	/**
 	 * Adds a member to the <code>toString</code> method. This method is called for every member if
 	 * "Skip null values" options is unchecked.
-	 * 
+	 *
 	 * @param member a member to be added
 	 * @param addSeparator true, if separator should be added after the member (i.e. this is not the
 	 *            last member)
@@ -602,7 +602,7 @@
 	 * This method is called for every non-primitive type member if "Skip null values" options is
 	 * checked, or for every <code>Collection</code> and <code>Map</code> member if there's a limit
 	 * for number of elements.
-	 * 
+	 *
 	 * @param member a member to be added
 	 * @param addSeparator true, if separator should be added after the member (i.e. this is not the
 	 *            last member)
@@ -613,7 +613,7 @@
 
 	/**
 	 * Creates an invocation of a method that takes zero or one argument
-	 * 
+	 *
 	 * @param expression the receiver expression
 	 * @param methodName the method name
 	 * @param argument the argument, can be <code>null</code> if the method does not take any arguments
@@ -630,7 +630,7 @@
 
 	/**
 	 * Creates an invocation of a method that takes zero or one argument
-	 * 
+	 *
 	 * @param receiver the receiver name
 	 * @param methodName the method name
 	 * @param argument the argument, can be <code>null</code> if the method does not take any arguments
@@ -639,10 +639,10 @@
 	protected MethodInvocation createMethodInvocation(String receiver, String methodName, Expression argument) {
 		return createMethodInvocation(fAst.newName(receiver), methodName, argument);
 	}
-	
+
 	/**
 	 * Creates a statement that can be used as for/while/if-then-else block
-	 * 
+	 *
 	 * @param expression an expression
 	 * @return a single-line statement, or a block, depending on settings
 	 */
@@ -843,7 +843,7 @@
 	/**
 	 * Adds an import to the class. This method should be used for every class reference added to
 	 * the generated code.
-	 * 
+	 *
 	 * @param typeName a fully qualified name of a type
 	 * @return simple name of a class if the import was added and fully qualified name if there was
 	 *         a conflict
@@ -852,7 +852,7 @@
 		String importedName= fContext.getImportRewrite().addImport(typeName);
 		return fAst.newName(importedName);
 	}
-	
+
 	private Set<String> excluded;
 	protected String createNameSuggestion(String baseName, int variableKind) {
 		if (excluded == null) {
@@ -887,7 +887,7 @@
 
 	/**
 	 * Checks whether given type implements given interface
-	 * 
+	 *
 	 * @param memberType binding of the type to check
 	 * @param interfaceNames fully qualified names of the interfaces to seek for
 	 * @return array of booleans, every element is set to true if interface at the same position in
@@ -909,7 +909,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param member <code>IVariableBinding</code> or <code>IMethodBinding</code> representing a
 	 *            member
 	 * @param templateElement the template element
@@ -929,7 +929,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param member member to check
 	 * @return type of field or method's return type
 	 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java
index 14a6b5d..e1cabf1 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/CustomBuilderGenerator.java
@@ -67,7 +67,7 @@
  * </p>
  * <p>
  * Generated methods look like this:
- * 
+ *
  * <pre>
  * public String toString() {
  * 	ExternalBuilder builder= new ExternalBuilder();
@@ -76,9 +76,9 @@
  * 	return builder.toString();
  * }
  * </pre>
- * 
+ *
  * </p>
- * 
+ *
  * @since 3.5
  */
 public class CustomBuilderGenerator extends AbstractToStringGenerator {
@@ -117,9 +117,9 @@
 
 	/**
 	 * Information about versions of append method in the builder type
-	 * 
+	 *
 	 * key: String - fully qualified name of a member type
-	 * 
+	 *
 	 * value: {@link AppendMethodInformation} - information about corresponding method
 	 */
 	private HashMap<String, AppendMethodInformation> appendMethodSpecificTypes= new HashMap<>();
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java
index f9bad2e..0de49c8 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/GenerateToStringOperation.java
@@ -54,7 +54,7 @@
  * <p>
  * A workspace runnable to add implementation for <code>{@link java.lang.Object#toString()}</code>
  * </p>
- * 
+ *
  * @since 3.5
  */
 public class GenerateToStringOperation implements IWorkspaceRunnable {
@@ -158,7 +158,7 @@
 
 	/**
 	 * Determines if given method exists in a given list
-	 * 
+	 *
 	 * @param list list of method to search through
 	 * @param method method to find
 	 * @return declaration of method from the list that has the same name and parameter types, or
@@ -217,7 +217,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param toStringStyle id number of the code style (its position in the array returned by
 	 *            {@link #getStyleNames()}
 	 * @return a toString() generator implementing given code style
@@ -251,7 +251,7 @@
 	/**
 	 * Creates new <code>GenerateToStringOperation</code>, using <code>settings.toStringStyle</code>
 	 * field to choose the right subclass.
-	 * 
+	 *
 	 * @param typeBinding binding for the type for which the toString() method will be created
 	 * @param selectedBindings bindings for the typetype's members to be used in created method
 	 * @param unit a compilation unit containing the type
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java
index b0fb336..46ffdbd 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderChainGenerator.java
@@ -33,7 +33,7 @@
  * </p>
  * <p>
  * Generated methods look like this:
- * 
+ *
  * <pre>
  * public String toString() {
  * 	StringBuilder builder= new StringBuilder();
@@ -41,9 +41,9 @@
  * 	return builder.toString();
  * }
  * </pre>
- * 
+ *
  * </p>
- * 
+ *
  * @since 3.5
  */
 public class StringBuilderChainGenerator extends StringBuilderGenerator {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java
index f982199..4d0e96e 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringBuilderGenerator.java
@@ -38,7 +38,7 @@
  * </p>
  * <p>
  * Generated methods look like this:
- * 
+ *
  * <pre>
  * public String toString() {
  * 	StringBuilder builder= new StringBuilder();
@@ -50,9 +50,9 @@
  * 	return builder.toString();
  * }
  * </pre>
- * 
+ *
  * </p>
- * 
+ *
  * @since 3.5
  */
 public class StringBuilderGenerator extends AbstractToStringGenerator {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java
index 251ea57..cd64164 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringConcatenationGenerator.java
@@ -33,15 +33,15 @@
  * </p>
  * <p>
  * Generated methods look like this:
- * 
+ *
  * <pre>
  * public String toString() {
  * 	return &quot;FooClass( field1=&quot; + field1 + &quot;, field2=&quot; + field2 + &quot;, method1()=&quot; + method1 + &quot;)&quot;;
  * }
  * </pre>
- * 
+ *
  * </p>
- * 
+ *
  * @since 3.5
  */
 public class StringConcatenationGenerator extends AbstractToStringGenerator {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java
index 5935bad..a5b565e 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/StringFormatGenerator.java
@@ -36,15 +36,15 @@
  * method using <code>String.format()</code>. This style ignores <i>skip null values</i> option.
  * <p>
  * Generated methods look like this:
- * 
+ *
  * <pre>
  * public String toString() {
  * 	return String.format(&quot;FooClass( field1=%s, field2=%s )&quot;, field1, field2);
  * }
  * </pre>
- * 
+ *
  * </p>
- * 
+ *
  * @since 3.5
  */
 public class StringFormatGenerator extends AbstractToStringGenerator {
@@ -68,7 +68,7 @@
 			formatClass= "java.lang.String"; //$NON-NLS-1$
 		else
 			formatClass= "java.text.MessageFormat"; //$NON-NLS-1$
-		MethodInvocation formatInvocation= createMethodInvocation(addImport(formatClass), "format", null); //$NON-NLS-1$ 
+		MethodInvocation formatInvocation= createMethodInvocation(addImport(formatClass), "format", null); //$NON-NLS-1$
 		StringLiteral literal= fAst.newStringLiteral();
 		literal.setLiteralValue(buffer.toString());
 		formatInvocation.arguments().add(literal);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java
index 85b1061..7cd2a7d 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationContext.java
@@ -34,7 +34,7 @@
 	private ITypeBinding fType;
 
 	private ToStringGenerationSettingsCore fSettings;
-	
+
 	private ToStringGenerationSettingsCore.CustomBuilderSettings fCustomBuilderSettings;
 
 	private CompilationUnitRewrite fRewrite;
@@ -116,23 +116,23 @@
 	public boolean isSkipNulls() {
 		return fSettings.skipNulls;
 	}
-	
+
 	public String getCustomBuilderClass() {
 		return fCustomBuilderSettings.className;
 	}
-	
+
 	public String getCustomBuilderVariableName() {
 		return fCustomBuilderSettings.variableName;
 	}
-	
+
 	public String getCustomBuilderAppendMethod() {
 		return fCustomBuilderSettings.appendMethod;
 	}
-	
+
 	public String getCustomBuilderResultMethod() {
 		return fCustomBuilderSettings.resultMethod;
 	}
-	
+
 	public boolean isCustomBuilderChainedCalls() {
 		return fCustomBuilderSettings.chainCalls;
 	}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettingsCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettingsCore.java
index ceefd8d..2585fbd 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettingsCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringGenerationSettingsCore.java
@@ -111,9 +111,9 @@
 	/**
 	 * Returns a copy of customBuilderSettings. Changes made in the returned object will not affect
 	 * this settings object.  To save changes made to the object, use:
-	 * 
+	 *
 	 * ToStringGenerationSettings#writeCustomBuilderSettings(ToStringGenerationSettings.CustomBuilderSettings)
-	 * 
+	 *
 	 * @return copy of custom builder settings object
 	 */
 	public CustomBuilderSettings getCustomBuilderSettings() {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java
index 753b129..31027a9 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/codemanipulation/tostringgeneration/ToStringTemplateParser.java
@@ -48,7 +48,7 @@
  * variable and exactly one <code>${otherMembers}</code> variable. Additionally, no
  * <code>${member.*}</code> variables can follow the <code>${otherMembers}</code> variable.
  * </p>
- * 
+ *
  * @since 3.5
  */
 public class ToStringTemplateParser {
@@ -126,7 +126,7 @@
 	/**
 	 * This method is used in {@link #parseTemplate(String)} to determine what member specific
 	 * variables are expected in a template.
-	 * 
+	 *
 	 * @return member related variables recognized by this parser
 	 */
 	protected String[] getMemberRelatedVariables() {
@@ -136,7 +136,7 @@
 	/**
 	 * This method is used in {@link #parseTemplate(String)} to determine what object related
 	 * variables are expected in a template.
-	 * 
+	 *
 	 * @return object related variables recognized by this parser
 	 */
 	protected String[] getObjectRelatedVariables() {
@@ -146,7 +146,7 @@
 	/**
 	 * This method is used in {@link #parseTemplate(String)}. It returns all variables returned by
 	 * {@link #getMemberRelatedVariables()} and {@link #getObjectRelatedVariables()} (sum of sets).
-	 * 
+	 *
 	 * @return member and object related variables recognized by this parser (all variables but
 	 *         {$otherMembers})
 	 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java
index 665b35f..19b9c5d 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ASTFlattener.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -133,7 +133,7 @@
 			this.fBuffer.append('>');
 		}
 	}
-	
+
 	void printTypeAnnotations(AnnotatableType node) {
 		if (node.getAST().apiLevel() >= JLS8) {
 			printAnnotationsList(node.annotations());
@@ -529,7 +529,7 @@
 		this.fBuffer.append(";");//$NON-NLS-1$
 		return false;
 	}
-	
+
 	/*
 	 * @see ASTVisitor#visit(CreationReference)
 	 */
@@ -1582,7 +1582,7 @@
 		visitSwitchNode(node);
 		return false;
 	}
-	
+
 	@Override
 	public boolean visit(SwitchExpression node) {
 		visitSwitchNode(node);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java
index 8f6d3a4..853483d 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/BodyDeclarationRewrite.java
@@ -31,9 +31,9 @@
 
 /**
  * Rewrite helper for body declarations.
- * 
+ *
  * @see ASTNodes#getBodyDeclarationsProperty(ASTNode)
- * 
+ *
  * @since 1.10
  */
 public class BodyDeclarationRewrite {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/DimensionRewrite.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/DimensionRewrite.java
index adf9904..bf172e9 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/DimensionRewrite.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/DimensionRewrite.java
@@ -39,7 +39,7 @@
 	/**
 	 * Creates a {@link ASTRewrite#createCopyTarget(ASTNode) copy} of <code>type</code>
 	 * and adds <code>extraDimensions</code> to it.
-	 * 
+	 *
 	 * @param type the type to copy
 	 * @param extraDimensions the dimensions to add
 	 * @param rewrite the ASTRewrite with which to create new nodes
@@ -50,7 +50,7 @@
 		if (extraDimensions.isEmpty()) {
 			return (Type) rewrite.createCopyTarget(type);
 		}
-		
+
 		ArrayType result;
 		if (type instanceof ArrayType) {
 			ArrayType arrayType= (ArrayType) type;
@@ -68,10 +68,10 @@
 
 	/**
 	 * Returns {@link ASTRewrite#createCopyTarget(ASTNode) copies} of the given <code>dimensions</code>.
-	 * 
+	 *
 	 * @param dimensions the dimensions to copy
 	 * @param rewrite the ASTRewrite with which to create new nodes
-	 * 
+	 *
 	 * @return list of copy targets
 	 */
 	public static List<Dimension> copyDimensions(List<Dimension> dimensions, ASTRewrite rewrite) {
@@ -84,7 +84,7 @@
 
 	/**
 	 * Removes all children in <code>node</code>'s <code>childListProperty</code>.
-	 * 
+	 *
 	 * @param node ASTNode
 	 * @param childListProperty child list property
 	 * @param rewrite rewrite that removes the nodes
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java
index 0913532..db55b37 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/GenericVisitor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -43,7 +43,7 @@
 
 	/**
 	 * Visits the given type-specific AST node.
-	 * 
+	 *
 	 * @param node the AST note to visit
 	 * @return <code>true</code> if the children of this node should be visited, and
 	 *         <code>false</code> if the children of this node should be skipped
@@ -54,7 +54,7 @@
 
 	/**
 	 * Visits the given type-specific AST node.
-	 * 
+	 *
 	 * @param node the AST note to visit
 	 */
 	protected void endVisitNode(ASTNode node) {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java
index e888241..37fc87c 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/HierarchicalASTVisitor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -630,7 +630,7 @@
 	public void endVisit(StringLiteral node) {
 		endVisit((Expression)node);
 	}
-	
+
 	@Override
 	public boolean visit(SuperFieldAccess node) {
 		return visit((Expression)node);
@@ -645,7 +645,7 @@
 	public boolean visit(SuperMethodInvocation node) {
 		return visit((Expression)node);
 	}
-	
+
 	@Override
 	public boolean visit(TextBlock node) {
 		return visit((Expression)node);
@@ -660,7 +660,7 @@
 	public void endVisit(TextBlock node) {
 		endVisit((Expression)node);
 	}
-	
+
 	@Override
 	public boolean visit(ThisExpression node) {
 		return visit((Expression)node);
@@ -757,12 +757,12 @@
 	public boolean visit(ModuleDeclaration node) {
 		return visit((ASTNode)node);
 	}
-	
+
 	@Override
 	public void endVisit(ModuleDeclaration node) {
 		endVisit((ASTNode)node);
 	}
-	
+
 	//---- Begin ModuleDirective Hierarchy ----------------------------------
 
 	public boolean visit(ModuleDirective node) {
@@ -774,11 +774,11 @@
 	}
 
 	//---- Begin ModulePackageAccess Hierarchy ----------------------------------
-	
+
 	public boolean visit(ModulePackageAccess node) {
 		return visit((ModuleDirective)node);
 	}
-	
+
 	public void endVisit(ModulePackageAccess node) {
 		endVisit((ModuleDirective)node);
 	}
@@ -787,7 +787,7 @@
 	public boolean visit(ExportsDirective node) {
 		return visit((ModulePackageAccess)node);
 	}
-	
+
 	@Override
 	public void endVisit(ExportsDirective node) {
 		endVisit((ModulePackageAccess)node);
@@ -797,24 +797,24 @@
 	public boolean visit(OpensDirective node) {
 		return visit((ModulePackageAccess)node);
 	}
-	
+
 	@Override
 	public void endVisit(OpensDirective node) {
 		endVisit((ModulePackageAccess)node);
 	}
-	
+
 	//---- End ModulePackageAccess Hierarchy ------------------------------------
-	
+
 	@Override
 	public boolean visit(ProvidesDirective node) {
 		return visit((ModuleDirective)node);
 	}
-	
+
 	@Override
 	public void endVisit(ProvidesDirective node) {
 		endVisit((ModuleDirective)node);
 	}
-	
+
 	@Override
 	public boolean visit(RequiresDirective node) {
 		return visit((ModuleDirective)node);
@@ -829,24 +829,24 @@
 	public boolean visit(UsesDirective node) {
 		return visit((ModuleDirective)node);
 	}
-	
+
 	@Override
 	public void endVisit(UsesDirective node) {
 		endVisit((ModuleDirective)node);
 	}
-	
+
 	//---- End ModuleDirective Hierarchy ------------------------------------
-	
+
 	@Override
 	public boolean visit(ModuleModifier node) {
 		return visit((ASTNode)node);
 	}
-	
+
 	@Override
 	public void endVisit(ModuleModifier node) {
 		endVisit((ASTNode)node);
 	}
-	
+
 	@Override
 	public boolean visit(PackageDeclaration node) {
 		return visit((ASTNode)node);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java
index c435de7..fe25957 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ModifierRewrite.java
@@ -97,7 +97,7 @@
 
 	/**
 	 * Sets the given modifiers. Removes all other flags, but leaves annotations in place.
-	 * 
+	 *
 	 * @param modifiers the modifiers to set
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
 	 *            <code>null</code> if ungrouped
@@ -110,7 +110,7 @@
 	/**
 	 * Sets the included modifiers and removes the excluded modifiers. Does not touch other flags
 	 * and leaves annotations in place.
-	 * 
+	 *
 	 * @param included the modifiers to set
 	 * @param excluded the modifiers to remove
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
@@ -124,7 +124,7 @@
 	/**
 	 * Sets the included visibility modifiers and removes existing visibility modifiers. Does not
 	 * touch other flags and leaves annotations in place.
-	 * 
+	 *
 	 * @param visibilityFlags the new visibility modifiers
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
 	 *            <code>null</code> if ungrouped
@@ -137,7 +137,7 @@
 	public void copyAllModifiers(ASTNode otherDecl, TextEditGroup editGroup) {
 		copyAllModifiers(otherDecl, editGroup, false);
 	}
-	
+
 	public void copyAllModifiers(ASTNode otherDecl, TextEditGroup editGroup, boolean copyIndividually) {
 		ListRewrite modifierList= evaluateListRewrite(fModifierRewrite.getASTRewrite(), otherDecl);
 		List<IExtendedModifier> originalList= modifierList.getOriginalList();
@@ -176,7 +176,7 @@
 	/**
 	 * Sets the given modifiers and removes all other modifiers that match the consideredFlags mask.
 	 * Does not touch other flags and leaves annotations in place.
-	 * 
+	 *
 	 * @param modifiers the modifiers to set
 	 * @param consideredFlags mask of modifiers to consider
 	 * @param editGroup the edit group in which to collect the corresponding text edits, or
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ReplaceRewrite.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ReplaceRewrite.java
index 2a7a886..6884532 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ReplaceRewrite.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ReplaceRewrite.java
@@ -28,7 +28,7 @@
 
 /**
  * Rewrite helper for situations where one node can be replaced by many new nodes.
- * 
+ *
  * see JDTUIHelperClasses
  */
 public class ReplaceRewrite {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java
index 790cee8..76b9379 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/ScopeAnalyzer.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -760,7 +760,7 @@
 		public boolean visit(FieldDeclaration node) {
 			return !fBreak && isInside(node);
 		}
-		
+
 		@Override
 		public boolean visit(Expression node) {
 			return !fBreak && isInside(node);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java
index 44b0d84..31d1c30 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/StatementRewrite.java
@@ -28,7 +28,7 @@
 /**
  * Rewrite helper for {@link Statement}s. Ensures that
  * the replacement nodes are enclosed in a Block if necessary.
- * 
+ *
  * see JDTUIHelperClasses
  */
 public class StatementRewrite extends ReplaceRewrite {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java
index 498fca1..e2cf863 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/TypeRules.java
@@ -32,7 +32,7 @@
 
 	/**
 	 * Tests if two types are assign compatible. Void types are never compatible.
-	 * 
+	 *
 	 * @param typeToAssign The binding of the type to assign
 	 * @param definedType The type of the object that is assigned
 	 * @return <code>true</code> iff definedType = typeToAssign is a valid assignment
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java
index aab8d77..c68c11b 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/dom/VariableDeclarationRewrite.java
@@ -43,7 +43,7 @@
 
 /**
  * Rewrite helper for variable declarations.
- * 
+ *
  * see JDTUIHelperClasses
  */
 public class VariableDeclarationRewrite {
@@ -64,15 +64,15 @@
 /*
  * Problem: Same declarationNode can be the subject of multiple calls to this method.
  * For the 2nd++ calls, the original declarationNode has already been rewritten, and this has to be taken into account.
- * 
+ *
  * Assumption:
  * - Modifiers for each VariableDeclarationFragment are modified at most once.
- * 
+ *
  * Solution:
  * - Maintain a map from original VariableDeclarationFragments to their new FieldDeclaration.
  * - Original modifiers in declarationNode belong to the first fragment.
  * - When a later fragment needs different modifiers, we create a new FieldDeclaration and move all successive fragments into that declaration
- * - When a fragment has been moved to a new declaration, make sure we don't create a new move target again, but instead use the already created one 
+ * - When a fragment has been moved to a new declaration, make sure we don't create a new move target again, but instead use the already created one
  */
 		List<VariableDeclarationFragment> fragments= declarationNode.fragments();
 		Iterator<VariableDeclarationFragment> iter= fragments.iterator();
@@ -95,7 +95,7 @@
 		ListRewrite fragmentsRewrite= null;
 		while (iter.hasNext()) {
 			VariableDeclarationFragment currentFragment= iter.next();
-			
+
 			@SuppressWarnings("unchecked")
 			Map<VariableDeclarationFragment, MovedFragment> lookup= (Map<VariableDeclarationFragment, MovedFragment>) rewrite.getProperty(MovedFragment.class.getName());
 			if (lookup == null) {
@@ -103,14 +103,14 @@
 				rewrite.setProperty(MovedFragment.class.getName(), lookup);
 			}
 			MovedFragment currentMovedFragment= lookup.get(currentFragment);
-			
+
 			boolean changeLast= fragmentsToChange.contains(lastFragment);
 			boolean changeCurrent= fragmentsToChange.contains(currentFragment);
 			if (changeLast != changeCurrent || lookup.containsKey(lastFragment)) {
 				ModifierRewrite modifierRewrite= null;
 				if (currentMovedFragment != null) {
 					// Current fragment has already been moved.
-					
+
 					if (currentMovedFragment.fUsesOriginalModifiers) {
 						// Need to put in the right modifiers (removing any existing ones).
 						modifierRewrite= ModifierRewrite.create(rewrite, currentMovedFragment.fDeclaration);
@@ -123,11 +123,11 @@
 						}
 					}
 					// otherwise, don't need to touch the modifiers, so leave modifierRewrite null
-					
+
 				} else { // need to split an existing field declaration
 					VariableDeclarationFragment moveTarget;
 					moveTarget= (VariableDeclarationFragment)rewrite.createMoveTarget(currentFragment);
-					
+
 					FieldDeclaration newStatement= (FieldDeclaration)ast.createInstance(FieldDeclaration.class);
 					rewrite.getListRewrite(newStatement, FieldDeclaration.FRAGMENTS_PROPERTY).insertLast(moveTarget, group);
 					lookup.put(currentFragment, new MovedFragment(moveTarget, newStatement, !changeCurrent));
@@ -140,7 +140,7 @@
 					fragmentsRewrite= rewrite.getListRewrite(newStatement, FieldDeclaration.FRAGMENTS_PROPERTY);
 					lastStatement= newStatement;
 				}
-				
+
 				if (modifierRewrite != null) {
 					if (changeCurrent) {
 						int newModifiers= (declarationNode.getModifiers() & ~excludedModifiers) | includedModifiers;
@@ -150,7 +150,7 @@
 						modifierRewrite.setModifiers(newModifiers, Modifier.NONE, group);
 					}
 				}
-					
+
 			} else if (fragmentsRewrite != null) {
 				VariableDeclarationFragment fragment0;
 				boolean usesOriginalModifiers= true;
@@ -167,12 +167,12 @@
 			lastFragment= currentFragment;
 		}
 	}
-	
+
 	private static class MovedFragment {
 		final VariableDeclarationFragment fMoveTarget;
 		final ASTNode fDeclaration;
 		boolean fUsesOriginalModifiers;
-		
+
 		public MovedFragment(VariableDeclarationFragment moveTarget, ASTNode declaration, boolean usesOriginalModifiers) {
 			fMoveTarget= moveTarget;
 			fDeclaration= declaration;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperationCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperationCore.java
index 4cfef81..0f26134 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperationCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/AbstractSerialVersionOperationCore.java
@@ -69,7 +69,7 @@
 
 	/**
 	 * Adds an initializer to the specified variable declaration fragment.
-	 * 
+	 *
 	 * @param fragment the variable declaration fragment to add an initializer
 	 * @param declarationNode the declartion node
 	 * @return false if no id could be calculated
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFixCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFixCore.java
index f78ac84..5444854 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFixCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/CodeStyleFixCore.java
@@ -281,7 +281,7 @@
 					//the field. It's possible that the inner type inherits the same field. We must not remove
 					//the qualifier in this case.
 					return true;
-				
+
 				ITypeBinding enclosingTypeBinding= Bindings.getBindingOfParentType(node);
 				if (enclosingTypeBinding == null || Bindings.isSuperType(variablesDeclaringClass, enclosingTypeBinding))
 					//We have a reference to a field of an outer type, and this type inherited
@@ -474,7 +474,7 @@
 			Statement statement= ASTResolving.findParentStatement(qualifier);
 			if (statement == null)
 				return;
-			
+
 			ASTRewrite astRewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getAST();
 
@@ -710,7 +710,7 @@
 		if (accessBinding != null && qualifier != null) {
 			if (conservative && ASTResolving.findParentStatement(qualifier) == null)
 				return null;
-			
+
 			ToStaticAccessOperation declaring= null;
 			ITypeBinding declaringTypeBinding= getDeclaringTypeBinding(accessBinding);
 			if (declaringTypeBinding != null) {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java
index e14ab86..3b82ce7 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/FixMessages.java
@@ -152,7 +152,7 @@
 	public static String TypeParametersFix_insert_inferred_type_arguments_name;
 	public static String TypeParametersFix_remove_redundant_type_arguments_description;
 	public static String TypeParametersFix_remove_redundant_type_arguments_name;
-	
+
 	public static String TypeAnnotationFix_move;
 	public static String TypeAnnotationFix_remove;
 
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ICleanUpCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ICleanUpCore.java
index 67f8fe5..bd073dc 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ICleanUpCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ICleanUpCore.java
@@ -43,14 +43,14 @@
  * <p>
  * At the end {@link #checkPostConditions(IProgressMonitor)} is called.
  * </p>
- * 
+ *
  * @since 3.5
  */
 public interface ICleanUpCore {
 
 	/**
 	 * Sets the options that will be used.
-	 * 
+	 *
 	 * @param options the options to use
 	 */
 	void setOptions(CleanUpOptionsCore options);
@@ -60,7 +60,7 @@
 	 * <p>
 	 * <strong>Note:</strong> This method must only be called after the options have been set.
 	 * </p>
-	 * 
+	 *
 	 * @return descriptions an array of {@linkplain String strings} or <code>null</code>
 	 */
 	String[] getStepDescriptions();
@@ -70,7 +70,7 @@
 	 * <p>
 	 * <strong>Note:</strong> This method must only be called after the options have been set.
 	 * </p>
-	 * 
+	 *
 	 * @return the requirements used for {@link #createFixCore(CleanUpContextCore)} to work
 	 */
 	CleanUpRequirementsCore getRequirementsCore();
@@ -79,7 +79,7 @@
 	 * After call to checkPreConditions clients will start creating fixes for
 	 * <code>compilationUnits</code> in <code>project</code> unless the result of checkPreConditions
 	 * contains a fatal error
-	 * 
+	 *
 	 * @param project the project to clean up
 	 * @param compilationUnits an array of compilation units to clean up, all member of <code>project</code>
 	 * @param monitor the monitor to show progress
@@ -91,7 +91,7 @@
 	/**
 	 * Create an <code>ICleanUpFixCore</code> which fixes all problems in <code>context</code> or
 	 * <code>null</code> if nothing to fix.
-	 * 
+	 *
 	 * @param context a context containing all information requested by {@link #getRequirementsCore()}
 	 * @return the fix for the problems or <code>null</code> if nothing to fix
 	 * @throws CoreException if an unexpected error occurred
@@ -100,7 +100,7 @@
 
 	/**
 	 * Called when done cleaning up.
-	 * 
+	 *
 	 * @param monitor the monitor to show progress
 	 * @return the result of the postcondition check, not null
 	 * @throws CoreException if an unexpected error occurred
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroupCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroupCore.java
index 59cde73..6b03644 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroupCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/LinkedProposalPositionGroupCore.java
@@ -110,7 +110,7 @@
 
 	/**
 	 * A position that contains all of the given tracked node positions.
-	 * 
+	 *
 	 * @since 3.7
 	 */
 	public static class TrackedNodesPosition extends PositionInformation {
@@ -119,7 +119,7 @@
 
 		/**
 		 * A position that contains all of the given tracked node positions.
-		 * 
+		 *
 		 * @param pos the positions
 		 */
 		public TrackedNodesPosition(Collection<ITrackedNodePosition> pos) {
@@ -154,7 +154,7 @@
 
 	/**
 	 * A position for the start of the given tracked node position.
-	 * 
+	 *
 	 * @since 3.7
 	 */
 	public static class StartPositionInformation extends PositionInformation {
@@ -163,7 +163,7 @@
 
 		/**
 		 * A position for the start of the given tracked node position.
-		 * 
+		 *
 		 * @param pos the position
 		 */
 		public StartPositionInformation(ITrackedNodePosition pos) {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java
index 7c1bb5f..8341331 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/Checks.java
@@ -209,7 +209,7 @@
 	/**
 	 * Returns OK status if the new name is OK, i.e. when no file with that name exists.
 	 * The name of the given CU is not OK.
-	 * 
+	 *
 	 * @param cu CU to rename
 	 * @param newBareName the new name of the CU (without extension)
 	 * @return the status: FATAL if the CU already exists, OK if OK
@@ -877,7 +877,7 @@
 		}
 		if (e instanceof Annotation)
 			return NOT_RVALUE_MISC;
-			
+
 
 		ITypeBinding tb= e.resolveTypeBinding();
 		boolean guessingRequired= false;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java
index a750137..fed516a 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/RefactoringCoreMessages.java
@@ -655,7 +655,7 @@
 	public static String ExtractTempRefactoring_convention;
 
 	public static String ExtractTempRefactoring_declare_final;
-	
+
 	public static String ExtractTempRefactoring_declare_var_type;
 
 	public static String ExtractTempRefactoring_declare_local_variable;
@@ -1353,7 +1353,7 @@
 	public static String MoveMembersRefactoring_only_public_static;
 
 	public static String MoveMembersRefactoring_only_public_static_18;
-	
+
 	public static String MoveMembersRefactoring_read_only;
 
 	public static String MoveMembersRefactoring_referenceUpdate;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java
index f96b4ef..ea067da 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/changes/DynamicValidationStateChange.java
@@ -42,7 +42,7 @@
 	private ISchedulingRule fSchedulingRule;
 
 	private static final long DO_NOT_EXPIRE= -1;
-	
+
 	// 30 minutes
 	private static final long LIFE_TIME= 30 * 60 * 1000;
 
@@ -71,7 +71,7 @@
 			fTimeStamp= 0;
 		}
 	}
-	
+
 	@Override
 	public void initializeValidationData(IProgressMonitor pm) {
 		super.initializeValidationData(pm);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java
index 6b962dd..404bf84 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineConstantRefactoring.java
@@ -279,7 +279,7 @@
 							fNewLocationCuRewrite.getImportRemover().registerAddedImports(typeArgument);
 							typeArgsRewrite.insertLast(typeArgument, null);
 						}
-						
+
 						if (invocation instanceof MethodInvocation) {
 							MethodInvocation methodInvocation= (MethodInvocation) invocation;
 							Expression expression= methodInvocation.getExpression();
@@ -514,7 +514,7 @@
 				return;
 
 			TextEditGroup msg= fCuRewrite.createGroupDescription(RefactoringCoreMessages.InlineConstantRefactoring_Inline);
-			
+
 			Expression newReference;
 			boolean isStringPlaceholder= false;
 
@@ -532,7 +532,7 @@
 				ImportRewriteContext context= new ContextSensitiveImportRewriteContext(reference, fCuRewrite.getImportRewrite());
 				cast.setType(fCuRewrite.getImportRewrite().addImport(explicitCast, ast, context, TypeLocation.CAST));
 				newReference= cast;
-				
+
 			} else if (fInitializer instanceof ArrayInitializer) {
 				ArrayCreation arrayCreation= ast.newArrayCreation();
 				ArrayType arrayType= (ArrayType) ASTNodeFactory.newType(ast, fOriginalDeclaration);
@@ -547,7 +547,7 @@
 				ImportRewriteContext context= new ContextSensitiveImportRewriteContext(reference, fCuRewrite.getImportRewrite());
 				fCuRewrite.getImportRewrite().addImport(typeToAddToImport, context);
 				fCuRewrite.getImportRemover().registerAddedImport(typeToAddToImport.getName());
-				
+
 			} else {
 				newReference= (Expression) fCuRewrite.getASTRewrite().createStringPlaceholder(modifiedInitializer, reference.getNodeType());
 				isStringPlaceholder= true;
@@ -652,7 +652,7 @@
 
 	/**
 	 * Creates a new inline constant refactoring.
-	 * 
+	 *
 	 * @param unit the compilation unit, or <code>null</code> if invoked by scripting
 	 * @param node the compilation unit node, or <code>null</code> if invoked by scripting
 	 * @param selectionStart the start of the selection
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java
index 9657219..31a0ddf 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/InlineTempRefactoring.java
@@ -390,7 +390,7 @@
 				}
 			}
 		}
-		
+
 		Expression copy= (Expression) rewrite.getASTRewrite().createCopyTarget(initializer);
 		AST ast= rewrite.getAST();
 		if (NecessaryParenthesesChecker.needsParentheses(initializer, reference.getParent(), reference.getLocationInParent())) {
@@ -398,7 +398,7 @@
 			parenthesized.setExpression(copy);
 			copy= parenthesized;
 		}
-		
+
 		ITypeBinding explicitCast= ASTNodes.getExplicitCast(initializer, reference);
 		if (explicitCast != null) {
 			CastExpression cast= ast.newCastExpression();
@@ -411,7 +411,7 @@
 			ImportRewriteContext context= new ContextSensitiveImportRewriteContext(reference, rewrite.getImportRewrite());
 			cast.setType(rewrite.getImportRewrite().addImport(explicitCast, ast, context, TypeLocation.CAST));
 			copy= cast;
-			
+
 		} else if (initializer instanceof ArrayInitializer && ASTNodes.getDimensions(varDecl) > 0) {
 			ArrayType newType= (ArrayType) ASTNodeFactory.newType(ast, varDecl);
 
@@ -426,12 +426,12 @@
 	private String createParameterizedInvocation(Expression invocation, ITypeBinding[] typeArguments, CompilationUnitRewrite cuRewrite) throws JavaModelException {
 		ASTRewrite rewrite= ASTRewrite.create(invocation.getAST());
 		ListRewrite typeArgsRewrite= Invocations.getInferredTypeArgumentsRewrite(rewrite, invocation);
-		
+
 		for (ITypeBinding typeArgument : typeArguments) {
 			Type typeArgumentNode = cuRewrite.getImportRewrite().addImport(typeArgument, cuRewrite.getAST());
 			typeArgsRewrite.insertLast(typeArgumentNode, null);
 		}
-		
+
 		if (invocation instanceof MethodInvocation) {
 			MethodInvocation methodInvocation= (MethodInvocation) invocation;
 			Expression expression= methodInvocation.getExpression();
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java
index 03cd707..c46c313 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/Invocations.java
@@ -42,17 +42,17 @@
 				return ((MethodInvocation)invocation).arguments();
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return ((SuperMethodInvocation)invocation).arguments();
-				
+
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return ((ConstructorInvocation)invocation).arguments();
 			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
 				return ((SuperConstructorInvocation)invocation).arguments();
-				
+
 			case ASTNode.CLASS_INSTANCE_CREATION:
 				return ((ClassInstanceCreation)invocation).arguments();
 			case ASTNode.ENUM_CONSTANT_DECLARATION:
 				return ((EnumConstantDeclaration)invocation).arguments();
-				
+
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
@@ -64,39 +64,39 @@
 				return MethodInvocation.ARGUMENTS_PROPERTY;
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return SuperMethodInvocation.ARGUMENTS_PROPERTY;
-				
+
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return ConstructorInvocation.ARGUMENTS_PROPERTY;
 			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
 				return SuperConstructorInvocation.ARGUMENTS_PROPERTY;
-				
+
 			case ASTNode.CLASS_INSTANCE_CREATION:
 				return ClassInstanceCreation.ARGUMENTS_PROPERTY;
 			case ASTNode.ENUM_CONSTANT_DECLARATION:
 				return EnumConstantDeclaration.ARGUMENTS_PROPERTY;
-				
+
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
 	}
-	
+
 	public static Expression getExpression(ASTNode invocation) {
 		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 				return ((MethodInvocation)invocation).getExpression();
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return null;
-				
+
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return null;
 			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
 				return ((SuperConstructorInvocation)invocation).getExpression();
-				
+
 			case ASTNode.CLASS_INSTANCE_CREATION:
 				return ((ClassInstanceCreation)invocation).getExpression();
 			case ASTNode.ENUM_CONSTANT_DECLARATION:
 				return null;
-				
+
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
@@ -107,19 +107,19 @@
 		return type == ASTNode.METHOD_INVOCATION || type == ASTNode.SUPER_METHOD_INVOCATION ||
 			type == ASTNode.CONSTRUCTOR_INVOCATION;
 	}
-	
+
 	public static boolean isInvocationWithArguments(ASTNode node) {
 		switch (node.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 			case ASTNode.SUPER_METHOD_INVOCATION:
-				
+
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
-				
+
 			case ASTNode.CLASS_INSTANCE_CREATION:
 			case ASTNode.ENUM_CONSTANT_DECLARATION:
 				return true;
-				
+
 			default:
 				return false;
 		}
@@ -131,17 +131,17 @@
 				return ((MethodInvocation)invocation).resolveMethodBinding();
 			case ASTNode.SUPER_METHOD_INVOCATION:
 				return ((SuperMethodInvocation)invocation).resolveMethodBinding();
-				
+
 			case ASTNode.CONSTRUCTOR_INVOCATION:
 				return ((ConstructorInvocation)invocation).resolveConstructorBinding();
 			case ASTNode.SUPER_CONSTRUCTOR_INVOCATION:
 				return ((SuperConstructorInvocation)invocation).resolveConstructorBinding();
-				
+
 			case ASTNode.CLASS_INSTANCE_CREATION:
 				return ((ClassInstanceCreation)invocation).resolveConstructorBinding();
 			case ASTNode.ENUM_CONSTANT_DECLARATION:
 				return ((EnumConstantDeclaration)invocation).resolveConstructorBinding();
-				
+
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
@@ -150,7 +150,7 @@
 	public static boolean isResolvedTypeInferredFromExpectedType(Expression invocation) {
 		if (invocation == null)
 			return false;
-		
+
 		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
 				return ((MethodInvocation) invocation).isResolvedTypeInferredFromExpectedType();
@@ -158,12 +158,12 @@
 				return ((SuperMethodInvocation) invocation).isResolvedTypeInferredFromExpectedType();
 			case ASTNode.CLASS_INSTANCE_CREATION:
 				return ((ClassInstanceCreation) invocation).isResolvedTypeInferredFromExpectedType();
-				
+
 			default:
 				return false;
 		}
 	}
-	
+
 	public static ListRewrite getInferredTypeArgumentsRewrite(ASTRewrite rewrite, Expression invocation) {
 		switch (invocation.getNodeType()) {
 			case ASTNode.METHOD_INVOCATION:
@@ -173,7 +173,7 @@
 			case ASTNode.CLASS_INSTANCE_CREATION:
 				Type type= ((ClassInstanceCreation) invocation).getType();
 				return rewrite.getListRewrite(type, ParameterizedType.TYPE_ARGUMENTS_PROPERTY);
-				
+
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
@@ -192,7 +192,7 @@
 				Type type= ((ClassInstanceCreation) invocation).getType();
 				ITypeBinding typeBinding= type.resolveBinding();
 				return typeBinding == null ? null : typeBinding.getTypeArguments();
-				
+
 			default:
 				throw new IllegalArgumentException(invocation.toString());
 		}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java
index e55d04b..cdeba6a 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/ParameterData.java
@@ -65,7 +65,7 @@
 	public boolean isUnused() {
 		return fAccessMode == FlowInfo.UNUSED;
 	}
-	
+
 	public boolean isFinal() {
 		return Modifier.isFinal(fDeclaration.getModifiers());
 	}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java
index e62c7bb..981d6e7 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/PromoteTempToFieldRefactoring.java
@@ -344,7 +344,7 @@
 		ASTNode declaringType= ASTResolving.findParentType(fTempDeclarationNode);
 		if (declaringType instanceof TypeDeclaration && ((TypeDeclaration) declaringType).isInterface())
 			return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.PromoteTempToFieldRefactoring_interface_methods);
-		
+
 		result.merge(checkTempTypeForLocalTypeUsage());
 		if (result.hasFatalError())
 		    return result;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java
index 1bd59c8..be8bf82 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowAnalyzer.java
@@ -387,7 +387,7 @@
 	protected void endVisit(SwitchExpression node, SwitchData data) {
 		preEndVisit(node, node.getExpression(), data);
 	}
-	
+
 	private void preEndVisit(ASTNode node, Expression expression, SwitchData data) {
 		SwitchFlowInfo switchFlowInfo= createSwitch();
 		setFlowInfo(node, switchFlowInfo);
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java
index c1343c8..85df346 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/FlowInfo.java
@@ -271,7 +271,7 @@
 	/**
 	 * Checks whether the given local variable binding has the given access
 	 * mode.
-	 * 
+	 *
 	 * @param context the flow context used during flow analysis
 	 * @param local local variable of interest
 	 * @param mode the access mode of the local variable
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/TryFlowInfo.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/TryFlowInfo.java
index dcdf0b6..ad7685a 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/TryFlowInfo.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/flow/TryFlowInfo.java
@@ -23,7 +23,7 @@
 	public void mergeResources(FlowInfo info, FlowContext context) {
 		if (info == null)
 			return;
-		
+
 		mergeSequential(info, context);
 	}
 
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java
index 31bdae8..49097b5 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSElement.java
@@ -65,7 +65,7 @@
 
 	/**
 	 * Sets the actual string value.
-	 * 
+	 *
 	 * @param value the value
 	 */
 	public void setValue(String value) {
@@ -74,7 +74,7 @@
 
 	/**
 	 * Sets the tag position if one is associated with the NLS element.
-	 * 
+	 *
 	 * @param start the start offset
 	 * @param length the length
 	 */
@@ -85,7 +85,7 @@
 	/**
 	 * Returns the tag position for this element. The method can return <code>null</code>. In this
 	 * case no tag has been found for this NLS element.
-	 * 
+	 *
 	 * @return the new tag region region
 	 */
 	public Region getTagPosition() {
@@ -94,7 +94,7 @@
 
 	/**
 	 * Returns whether this element has an associated $NON-NLS-*$ tag.
-	 * 
+	 *
 	 * @return <code>true</code> if the NLS element has an associated $NON-NLS-*$ tag
 	 */
 	public boolean hasTag() {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java
index b06adb2..272ac9a 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSLine.java
@@ -38,7 +38,7 @@
 
 	/**
 	 * Adds a NLS element to this line.
-	 * 
+	 *
 	 * @param element the NLS element
 	 */
 	public void add(NLSElement element) {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java
index 82794d3..a6ef0fb 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/nls/NLSUtil.java
@@ -83,7 +83,7 @@
 	/**
 	 * Creates and returns an NLS tag edit for a string that is at the specified position in a
 	 * compilation unit.
-	 * 
+	 *
 	 * @param cu the compilation unit
 	 * @param position position of the string
 	 * @return the edit, or <code>null</code> if the string is already NLSed or the edit could not
@@ -107,7 +107,7 @@
 	/**
 	 * Creates and returns NLS tag edits for strings that are at the specified positions in a
 	 * compilation unit.
-	 * 
+	 *
 	 * @param cu the compilation unit
 	 * @param positions positions of the strings
 	 * @return the edit, or <code>null</code> if all strings are already NLSed or the edits could
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/reorg/IReorgPolicy.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/reorg/IReorgPolicy.java
index 76d248e..0ccdc2d 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/reorg/IReorgPolicy.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/reorg/IReorgPolicy.java
@@ -128,7 +128,7 @@
 		 * Checks if <b>Java</b> references to the selected element(s) can be updated if moved to
 		 * the selected destination. Even if <code>false</code>, participants could still update
 		 * non-Java references.
-		 * 
+		 *
 		 * @return <code>true</code> iff <b>Java</b> references to the moved element can be updated
 		 * @since 3.5
 		 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java
index 8ccf4dc..1717da9 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ASTNodeSearchUtil.java
@@ -60,7 +60,7 @@
 
 /**
  * JDT-UI-internal helper methods to find AST nodes for {@link SearchMatch}es or {@link IJavaElement}s. :
- * 
+ *
  * see JDTUIHelperClasses
  */
 public class ASTNodeSearchUtil {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java
index 48dcd4d..600e43c 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/ImportRemover.java
@@ -75,7 +75,7 @@
 	private final String PROPERTY_KEY= String.valueOf(System.currentTimeMillis());
 	private final String REMOVED= "removed"; //$NON-NLS-1$
 	private final String RETAINED= "retained"; //$NON-NLS-1$
-	
+
 	private Set<String> fAddedImports= new HashSet<>();
 
 	private Set<StaticImportData> fAddedStaticImports= new HashSet<>();
@@ -142,7 +142,7 @@
 				super.postVisit(node);
 			}
 		});
-		
+
 		for (Iterator<SimpleName> iterator= importNames.iterator(); iterator.hasNext();) {
 			SimpleName name= iterator.next();
 			if (isInRemoved(name, removedStartsEnds))
@@ -258,7 +258,7 @@
 				addName(node.getName());
 				return false;
 			}
-			
+
 			@Override
 			public boolean visit(QualifiedName node) {
 				addName(node.getName());
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java
index c95af29..aa9da7d 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MemberVisibilityAdjustor.java
@@ -631,7 +631,7 @@
 		boolean adjust= true;
 		final IType declaring= member.getDeclaringType();
 		if (declaring != null && (JavaModelUtil.isInterfaceOrAnnotation(declaring)
-				|| (member instanceof IField) && Flags.isEnum(member.getFlags()) 
+				|| (member instanceof IField) && Flags.isEnum(member.getFlags())
 				|| declaring.equals(fReferenced)))
 			adjust= false;
 		if (adjust && hasLowerVisibility(member.getFlags(), keywordToVisibility(threshold)) && needsVisibilityAdjustment(member, threshold))
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java
index 80858ee..b9f6a30 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/structure/MoveInstanceMethodProcessor.java
@@ -1732,7 +1732,7 @@
 					// replace move target parameter with new target
 					arguments.add(factory.getTargetNode());
 				} else {
-					// drop unused move target parameter 
+					// drop unused move target parameter
 				}
 			} else {
 				arguments.add(factory.getArgumentNode(binding, i == size - 1));
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/tagging/IReferenceUpdating.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/tagging/IReferenceUpdating.java
index 5f020c9..894c518 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/tagging/IReferenceUpdating.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/tagging/IReferenceUpdating.java
@@ -17,14 +17,14 @@
 
 	/**
 	 * Informs the refactoring object whether references should be updated.
-	 * 
+	 *
 	 * @param update <code>true</code> to enable reference updating
 	 */
 	public void setUpdateReferences(boolean update);
 
 	/**
 	 * Asks the refactoring object whether references should be updated.
-	 * 
+	 *
 	 * @return <code>true</code> iff reference updating is enabled
 	 */
 	public boolean getUpdateReferences();
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java
index 9a00416..94132a6 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/NullType.java
@@ -38,7 +38,7 @@
 	public int hashCode() {
 		return 1234;
 	}
-	
+
 	@Override
 	public String getName() {
 		return "null";  //$NON-NLS-1$
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java
index fe3999f..285c936 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/PrimitiveType.java
@@ -70,7 +70,7 @@
 	public int hashCode() {
 		return fId;
 	}
-	
+
 	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		if (lhs.getKind() != PRIMITIVE_TYPE) {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java
index 1c65123..5ef1ffe 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TType.java
@@ -25,10 +25,10 @@
 /**
  * TTypes are lightweight fully-resolved type objects that stand for {@link ITypeBinding}s.
  * TTypes can answer basic questions about the relationship between types.
- * 
+ *
  * They do not hold references to their corresponding {@link ITypeBinding}s, and they
  * don't carry any information about members of a type.
- * 
+ *
  * @see TypeEnvironment
  * @see TType#canAssignTo(TType)
  * @see HierarchyType#isSubType(HierarchyType)
@@ -78,7 +78,7 @@
 	/**
 	 * Creates a new type with the given environment as an owner.
 	 * The type environment <em>must</em> call {@link #initialize(ITypeBinding)} after using this constructor.
-	 * 
+	 *
 	 * @param environment owner
 	 */
 	protected TType(TypeEnvironment environment) {
@@ -88,7 +88,7 @@
 	/**
 	 * Creates a new type with the given environment as an owner.
 	 * The type environment must <em>not</em> call {@link #initialize(ITypeBinding)} after using this constructor.
-	 * 
+	 *
 	 * @param environment owner
 	 * @param key this type's binding key
 	 */
@@ -482,7 +482,7 @@
 
 	@Override
 	public abstract int hashCode();
-	
+
 	/**
 	 * Performs the actual equals check.
 	 *
@@ -544,7 +544,7 @@
 	 * Returns whether the receiver type is type equivalent to the other type.
 	 * This method considers the erasure for generic, raw and parameterized
 	 * types.
-	 * 
+	 *
 	 * @param other the other type
 	 * @return whether the receiver is type equivalent to other
 	 */
@@ -557,7 +557,7 @@
 	 * a type argument of a parameterized type is compatible with the given type
 	 * <code>rhs</code>. For example if
 	 * <code>List&lt;this&gt;= List&lt;rhs&gt;</code> is a valid assignment.
-	 * 
+	 *
 	 * @param rhs the right-hand-side type
 	 * @return <code>true</code> iff <code>this</code> contains <code>rhs</code> according to JLS3 4.5.1.1
 	 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java
index 3ef2804..8e776f3 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/TypeEnvironment.java
@@ -40,7 +40,7 @@
  * A type environment comprises a set of {@link TType}s that stand for Java {@link ITypeBinding}s.
  * In contrast to type bindings, TTypes of the same type environment also work across project boundaries and
  * across compiler environments, i.e. a type environment can handle bindings from multiple {@link ASTParser} sessions.
- * 
+ *
  * @see TType
  */
 public class TypeEnvironment {
@@ -174,7 +174,7 @@
 	public TypeEnvironment(boolean rememberSubtypes) {
 		this(rememberSubtypes, false);
 	}
-	
+
 	public TypeEnvironment(boolean rememberSubtypes, boolean removeCapures) {
 		if (rememberSubtypes) {
 			fSubTypes= new HashMap<>();
@@ -234,7 +234,7 @@
 	 * has already created its first hierarchy type or it has been initialized explicitly.
 	 *
 	 * @return the TType for java.lang.Object
-	 * 
+	 *
 	 * @see #initializeJavaLangObject(IJavaProject)
 	 */
 	public TType getJavaLangObject() {
@@ -244,11 +244,11 @@
 	public void initializeJavaLangObject(IJavaProject project) {
 		if (OBJECT_TYPE != null)
 			return;
-		
+
 		TType objectType= createStandardType("java.lang.Object", project); //$NON-NLS-1$
 		Assert.isTrue(objectType.isJavaLangObject());
 	}
-	
+
 	void initializeJavaLangObject(ITypeBinding object) {
 		if (OBJECT_TYPE != null)
 			return;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java
index 6e4c4c4..971609e 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/typeconstraints/types/VoidType.java
@@ -41,7 +41,7 @@
 	public int hashCode() {
 		return 12345;
 	}
-	
+
 	@Override
 	protected boolean doCanAssignTo(TType lhs) {
 		return false;
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java
index feeae6b..7eb66b1 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/JavaElementUtil.java
@@ -48,7 +48,7 @@
 
 /**
  * Utility methods for the Java Model.
- * 
+ *
  * @see JavaModelUtil (a better place for new methods)
  * see JDTUIHelperClasses
  */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java
index bb78409..77c30f8 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/RefactoringASTParser.java
@@ -142,7 +142,7 @@
 	 * Turns all errors, warnings and infos into ignore and disables task tags. The customizable set of
 	 * compiler options only contains additional Eclipse options. The standard JDK compiler options
 	 * can't be changed anyway.
-	 * 
+	 *
 	 * @param element an element (not the Java model)
 	 * @return compiler options
 	 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java
index f6b3796e..192c8fa 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/util/TightSourceRangeComputer.java
@@ -33,7 +33,7 @@
  * <p>
  * For nodes inside "tight" nodes, the source range is the extended source range, unless this would
  * violate the no-overlapping condition from the superclass.
- * 
+ *
  * @since 3.2
  */
 public class TightSourceRangeComputer extends TargetSourceRangeComputer {
@@ -41,7 +41,7 @@
 
 	/**
 	 * Add the given node to the set of "tight" nodes.
-	 * 
+	 *
 	 * @param reference a node
 	 * @since 3.2
 	 */
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaConventionsUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaConventionsUtil.java
index d9db428..d1d4f6a 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaConventionsUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaConventionsUtil.java
@@ -28,7 +28,7 @@
  * the same element, please use {@link JavaConventions} directly (with the
  * arguments from {@link #getSourceComplianceLevels(IJavaElement)}).
  * </p>
- * 
+ *
  * @see JDTUIHelperClasses
  */
 public class JavaConventionsUtil {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java
index d71c00f..1a3b91f 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JavaModelUtil.java
@@ -70,7 +70,7 @@
  */
 // @see JDTUIHelperClasses
 public final class JavaModelUtil {
-	
+
 	/**
 	 * The latest available {@link JavaCore}{@code #VERSION_*} level.
 	 * @since 3.7
@@ -102,7 +102,7 @@
 	 * @since 3.8
 	 */
 	public static final String PACKAGE_INFO_JAVA= "package-info.java"; //$NON-NLS-1$
-	
+
 	/**
 	 * The name of the package-info.class file.
 	 * @since 3.9
@@ -137,7 +137,7 @@
 	 * Finds a type container by container name. The returned element will be of type
 	 * <code>IType</code> or a <code>IPackageFragment</code>. <code>null</code> is returned if the
 	 * type container could not be found.
-	 * 
+	 *
 	 * @param jproject The Java project defining the context to search
 	 * @param typeContainerName A dot separated name of the type container
 	 * @return returns the container
@@ -253,7 +253,7 @@
 	/**
 	 * Returns whether the two names match. They match if they
 	 * are equal, or if they are the same name but one is missing a dot-separated qualifier.
-	 * 
+	 *
 	 * @param nameA a potentially qualified name
 	 * @param nameB a potentially qualified name
 	 * @return <code>true</code> iff the given names match
@@ -489,7 +489,7 @@
 	 *
 	 * @param refTypeSig the type name in signature notation (for example 'QVector') this can also be an array type, but dimensions will be ignored.
 	 * @param declaringType the context for resolving (type where the reference was made in)
-	 * @param enclosingTypeSeparator the enclosing type separator used in the qualified type name 
+	 * @param enclosingTypeSeparator the enclosing type separator used in the qualified type name
 	 * @return returns the fully qualified type name or build-in-type name. if a unresolved type couldn't be resolved null is returned
 	 * @throws JavaModelException thrown when the type can not be accessed
 	 */
@@ -540,7 +540,7 @@
 
 	/**
 	 * Checks whether the given type signature is from a primitive type.
-	 * 
+	 *
 	 * @param typeSignature the type signature string to check
 	 * @return <code>true</code> if the type is a primitive type, <code> false</code> otherwise
 	 * @throws JavaModelException if this element does not exist or if an exception occurs while
@@ -687,7 +687,7 @@
 	/**
 	 * Returns the classpath entry of the given package fragment root. This is the raw entry, except
 	 * if the root is a referenced library, in which case it's the resolved entry.
-	 * 
+	 *
 	 * @param root a package fragment root
 	 * @return the corresponding classpath entry
 	 * @throws JavaModelException if accessing the entry failed
@@ -789,11 +789,11 @@
 	public static boolean is50OrHigher(String compliance) {
 		return !isVersionLessThan(compliance, JavaCore.VERSION_1_5);
 	}
-	
+
 	public static boolean is16OrHigher(String compliance) {
 		return !isVersionLessThan(compliance, JavaCore.VERSION_1_6);
 	}
-	
+
 	public static boolean is17OrHigher(String compliance) {
 		return !isVersionLessThan(compliance, JavaCore.VERSION_1_7);
 	}
@@ -805,7 +805,7 @@
 	public static boolean is9OrHigher(String compliance) {
 		return !isVersionLessThan(compliance, JavaCore.VERSION_9);
 	}
-	
+
 	public static boolean is10OrHigher(String compliance) {
 		return !isVersionLessThan(compliance, JavaCore.VERSION_10);
 	}
@@ -841,10 +841,10 @@
 	public static boolean is17OrHigher(IJavaProject project) {
 		return is17OrHigher(getSourceCompliance(project));
 	}
-	
+
 	/**
 	 * Checks if the given project or workspace has source compliance 1.8 or greater.
-	 * 
+	 *
 	 * @param project the project to test or <code>null</code> to test the workspace settings
 	 * @return <code>true</code> if the given project or workspace has source compliance 1.8 or
 	 *         greater.
@@ -855,7 +855,7 @@
 
 	/**
 	 * Checks if the given project or workspace has source compliance 9 or greater.
-	 * 
+	 *
 	 * @param project the project to test or <code>null</code> to test the workspace settings
 	 * @return <code>true</code> if the given project or workspace has source compliance 9 or
 	 *         greater.
@@ -866,7 +866,7 @@
 
 	/**
 	 * Checks if the given project or workspace has source compliance 10 or greater.
-	 * 
+	 *
 	 * @param project the project to test or <code>null</code> to test the workspace settings
 	 * @return <code>true</code> if the given project or workspace has source compliance 10 or greater.
 	 */
@@ -876,21 +876,21 @@
 
 	/**
 	 * Checks if the given project or workspace has source compliance 11 or greater.
-	 * 
+	 *
 	 * @param project the project to test or <code>null</code> to test the workspace settings
 	 * @return <code>true</code> if the given project or workspace has source compliance 11 or greater.
 	 */
 	public static boolean is11OrHigher(IJavaProject project) {
 		return is11OrHigher(getSourceCompliance(project));
 	}
-	
+
 	public static boolean is12OrHigher(IJavaProject project) {
 		return is12OrHigher(getSourceCompliance(project));
 	}
 
 	/**
 	 * Checks if the given project or workspace has source compliance 13 or greater.
-	 * 
+	 *
 	 * @param project the project to test or <code>null</code> to test the workspace settings
 	 * @return <code>true</code> if the given project or workspace has source compliance 13 or greater.
 	 */
@@ -901,7 +901,7 @@
 	private static String getSourceCompliance(IJavaProject project) {
 		return project != null ? project.getOption(JavaCore.COMPILER_SOURCE, true) : JavaCore.getOption(JavaCore.COMPILER_SOURCE);
 	}
-	
+
 	/**
 	 * Checks if the JRE of the given project or workspace default JRE have source compliance 1.5 or
 	 * greater.
@@ -968,7 +968,7 @@
 			if (compliance instanceof String)
 				return (String)compliance;
 		}
-		
+
 		// fallback:
 		String desc= executionEnvironment.getId();
 		if (desc.indexOf(JavaCore.VERSION_13) != -1) {
@@ -1058,7 +1058,7 @@
 
 	/**
 	 * Tells whether the given type root represents a module.
-	 * 
+	 *
 	 * @param typeRoot the type root to test
 	 * @return <code>true</code> if the given type root is a module-info.java CU or a module-info.class class file.
 	 * @since 3.14
@@ -1070,7 +1070,7 @@
 
 	/**
 	 * Tells whether the given Java element represents a module.
-	 * 
+	 *
 	 * @param javaElement the Java element to test
 	 * @return <code>true</code> if the given Java element represents a module.
 	 * @since 3.14
@@ -1084,7 +1084,7 @@
 	 * Tells whether the given package fragment contains any ordinary compilation unit,
 	 * not counting the modular compilation unit module-info.java nor its class file module-info.class.
 	 * @param fragment a package fragment to test
-	 * @return true iff at least one ordinary compilation unit (or class file) was found. 
+	 * @return true iff at least one ordinary compilation unit (or class file) was found.
 	 * @throws JavaModelException if the package fragment does not exist or if an
 	 *      exception occurs while accessing its corresponding resource
 	 * @since 3.14
@@ -1103,7 +1103,7 @@
 
 	/**
 	 * Applies a text edit to a compilation unit.
-	 * 
+	 *
 	 * @param cu the compilation unit to apply the edit to
 	 * @param edit the edit to apply
 	 * @param save is set, save the CU after the edit has been applied
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JdtFlags.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JdtFlags.java
index fbab609..ab7703f 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JdtFlags.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/JdtFlags.java
@@ -93,7 +93,7 @@
 			return true;
 		return Modifier.isStatic(bodyDeclaration.getModifiers());
 	}
-	
+
 	public static boolean isStatic(IMember member) throws JavaModelException {
 		if (isNestedInterfaceOrAnnotation(member))
 			return true;
@@ -268,7 +268,7 @@
 	private static boolean isNestedInterfaceOrAnnotation(BodyDeclaration bodyDeclaration) {
 		return bodyDeclaration.getParent() instanceof AbstractTypeDeclaration && isInterfaceOrAnnotation(bodyDeclaration);
 	}
-	
+
 	private static boolean isNestedInterfaceOrAnnotation(IMember member) throws JavaModelException{
 		return member.getElementType() == IJavaElement.TYPE &&
 				member.getDeclaringType() != null &&
@@ -403,7 +403,7 @@
 
 	/**
 	 * Gets the higher visibility of the given parameters.
-	 * 
+	 *
 	 * @param visibility1 First visibility value to compare. Valid inputs are the {@link Modifier} visibility constants.
 	 * @param visibility2 Second visibility value to compare. Valid inputs are the {@link Modifier} visibility constants.
 	 * @return The parameter value with the higher visibility.
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java
index 46b28a0..dc7c0f7 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/LRUMap.java
@@ -26,7 +26,7 @@
  * the order that key-value mappings are provided by the specified map's entry set iterator. <i>No
  * other methods generate entry accesses.</i> In particular, operations on collection-views do
  * <i>not</i> affect the order of iteration of the backing map.
- * 
+ *
  * @param <K> type of the keys
  * @param <V> type of the values
  */
@@ -37,7 +37,7 @@
 
 	/**
 	 * Creates an empty LRU map with the given maximum size.
-	 * 
+	 *
 	 * @param maxSize the maximum number of elements in the cache
 	 */
 	public LRUMap(int maxSize) {
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java
index 3bacf73..5dcb1a2 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/util/MethodsSourcePositionComparator.java
@@ -36,7 +36,7 @@
  * <li><code>m1</code> and <code>m2</code> are defined in the same type (<code>T</code> or any
  * supertype of <code>T</code>), that type doesn't have a source attachment and name of
  * <code>m1</code> alphabetically precedes name of <code>m2</code></li>
- * 
+ *
  * <li><code>m2</code> is defined in <code>T</code> and <code>m1</code> is defined in any supertype
  * of <code>T</code></li>
  * <li><code>m2</code> is defined in a superclass of <code>T</code> and <code>m1</code> is defined
diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/CompilationUnitChange.java b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/CompilationUnitChange.java
index 89d35ef..78bb13d 100644
--- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/CompilationUnitChange.java
+++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/core/refactoring/CompilationUnitChange.java
@@ -36,7 +36,7 @@
 
 /**
  * A {@link TextFileChange} that operates on an {@link ICompilationUnit} in the workspace.
- * 
+ *
  * @since 1.3
  */
 public class CompilationUnitChange extends TextFileChange {
diff --git a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/RefactoringSignatureDescriptorFactory.java b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/RefactoringSignatureDescriptorFactory.java
index 5b2d9f3..2ef4427 100644
--- a/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/RefactoringSignatureDescriptorFactory.java
+++ b/org.eclipse.jdt.core.manipulation/refactoring/org/eclipse/jdt/internal/core/refactoring/descriptors/RefactoringSignatureDescriptorFactory.java
@@ -47,7 +47,7 @@
 
 /**
  * Internal factory for Java refactoring signature descriptors.
- *  
+ *
  * @since 3.5
  */
 public class RefactoringSignatureDescriptorFactory {
@@ -55,7 +55,7 @@
 	public static ChangeMethodSignatureDescriptor createChangeMethodSignatureDescriptor() {
 		return new ChangeMethodSignatureDescriptor();
 	}
-	
+
 	public static ChangeMethodSignatureDescriptor createChangeMethodSignatureDescriptor(String project, String description, String comment, Map<String, String> arguments, int flags) {
 		return new ChangeMethodSignatureDescriptor(project, description, comment, arguments, flags);
 	}
