Bug 566058: [15] Compilation error in Y20200813-1200

Merge remote-tracking branch 'origin/master' into BETA_JAVA15

Change-Id: I8d275c0226b21c5c1215450f35c90a9a33840f18
diff --git a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java
index 03f18a8..47ef1f5 100644
--- a/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java
+++ b/org.eclipse.jdt.astview/src/org/eclipse/jdt/astview/views/ASTViewLabelProvider.java
@@ -240,8 +240,6 @@
 	@Override
 	public void dispose() {
 		super.dispose();
-		fSelectedElemBGColor.dispose();
-		fLightRed.dispose();
 		fAllocatedBoldItalic.dispose();
 	}
 
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 3506808..9e37ffc 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
@@ -288,9 +288,7 @@
 		TemplateBuffer buffer;
 		try {
 			buffer= context.evaluate(template);
-		} catch (BadLocationException e) {
-			throw new CoreException(Status.CANCEL_STATUS);
-		} catch (TemplateException e) {
+		} catch (BadLocationException | TemplateException e) {
 			throw new CoreException(Status.CANCEL_STATUS);
 		}
 		String str= buffer.getString();
@@ -446,9 +444,7 @@
 		TemplateBuffer buffer;
 		try {
 			buffer= context.evaluate(template);
-		} catch (BadLocationException e) {
-			throw new CoreException(Status.CANCEL_STATUS);
-		} catch (TemplateException e) {
+		} catch (BadLocationException | TemplateException e) {
 			throw new CoreException(Status.CANCEL_STATUS);
 		}
 		if (buffer == null) {
@@ -524,9 +520,7 @@
 		TemplateBuffer buffer;
 		try {
 			buffer= context.evaluate(template);
-		} catch (BadLocationException e) {
-			throw new CoreException(Status.CANCEL_STATUS);
-		} catch (TemplateException e) {
+		} catch (BadLocationException | TemplateException e) {
 			throw new CoreException(Status.CANCEL_STATUS);
 		}
 		String str= buffer.getString();
@@ -652,9 +646,7 @@
 		TemplateBuffer buffer;
 		try {
 			buffer= context.evaluate(template);
-		} catch (BadLocationException e) {
-			throw new CoreException(Status.CANCEL_STATUS);
-		} catch (TemplateException e) {
+		} catch (BadLocationException | TemplateException e) {
 			throw new CoreException(Status.CANCEL_STATUS);
 		}
 		if (buffer == null)
@@ -677,9 +669,7 @@
 				return null;
 			}
 			return str;
-		} catch (BadLocationException e) {
-			throw new CoreException(Status.CANCEL_STATUS);
-		} catch (TemplateException e) {
+		} catch (BadLocationException | TemplateException e) {
 			throw new CoreException(Status.CANCEL_STATUS);
 		}
 	}
@@ -723,9 +713,7 @@
 		TemplateBuffer buffer;
 		try {
 			buffer= context.evaluate(template);
-		} catch (BadLocationException e) {
-			throw new CoreException(Status.CANCEL_STATUS);
-		} catch (TemplateException e) {
+		} catch (BadLocationException | TemplateException e) {
 			throw new CoreException(Status.CANCEL_STATUS);
 		}
 		if (buffer == null)
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 f9f138d..c642712 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
@@ -383,10 +383,7 @@
 				}
 				fPositions= newPositions;
 			}
-		} catch (BadPositionCategoryException e) {
-			// Should not happen
-			JavaManipulationPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (BadPositionCategoryException | BadLocationException e) {
 			// Should not happen
 			JavaManipulationPlugin.log(e);
 		}
diff --git a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java
index 6a51af6..284d4a2 100644
--- a/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java
+++ b/org.eclipse.jdt.core.manipulation/common/org/eclipse/jdt/internal/ui/text/correction/SerialVersionHashOperationCore.java
@@ -349,9 +349,7 @@
 				if (id != null)
 					serialVersionID= id.longValue();
 			}
-		} catch (CoreException exception) {
-			displayErrorMessage(exception);
-		} catch (IOException exception) {
+		} catch (CoreException | IOException exception) {
 			displayErrorMessage(exception);
 		} finally {
 			monitor.done();
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java
index dad6400..53e076d 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/ConvertIterableLoopOperation.java
@@ -295,14 +295,14 @@
 						}
 						if (!newComments.isEmpty()) {
 							ASTNode lastComment= newComments.get(0);
-							list.replace(parent, lastComment, null);
+							list.replace(parent, lastComment, group);
 							for (int i= 1; i < newComments.size(); ++i) {
 								ASTNode nextComment= newComments.get(i);
-								list.insertAfter(nextComment, lastComment, null);
+								list.insertAfter(nextComment, lastComment, group);
 								lastComment= nextComment;
 							}
 						} else {
-							list.remove(parent, null);
+							list.remove(parent, group);
 						}
 						remover.registerRemovedNode(parent);
 					}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFixCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFixCore.java
index 1c78620..304d674 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFixCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/fix/PotentialProgrammingProblemsFixCore.java
@@ -129,9 +129,7 @@
 							} else {
 							   	result.addWarning(Messages.format(FixMessages.PotentialProgrammingProblemsFix_calculatingUIDFailed_unknown, BasicElementLabels.getJavaElementName(typeBinding.getName())));
 							}
-						} catch (IOException e) {
-						   	result.addWarning(Messages.format(FixMessages.PotentialProgrammingProblemsFix_calculatingUIDFailed_exception, new String[] { BasicElementLabels.getJavaElementName(typeBinding.getName()), e.getLocalizedMessage()}), JavaStatusContext.create(types[i]));
-				        } catch (CoreException e) {
+						} catch (IOException | CoreException e) {
 						   	result.addWarning(Messages.format(FixMessages.PotentialProgrammingProblemsFix_calculatingUIDFailed_exception, new String[] { BasicElementLabels.getJavaElementName(typeBinding.getName()), e.getLocalizedMessage()}), JavaStatusContext.create(types[i]));
 				        }
 					}
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 2ca2ee2..c01e449 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
@@ -580,9 +580,7 @@
 				IRegion region= document.getLineInformation(document.getLineOfOffset(marker.getOffset()));
 				int oldIndent= Strings.computeIndentUnits(document.get(region.getOffset(), region.getLength()), project);
 				return Strings.changeIndent(rewrittenInitializer, oldIndent, project, "", TextUtilities.getDefaultLineDelimiter(document)); //$NON-NLS-1$
-			} catch (MalformedTreeException e) {
-				JavaManipulationPlugin.log(e);
-			} catch (BadLocationException e) {
+			} catch (MalformedTreeException | BadLocationException e) {
 				JavaManipulationPlugin.log(e);
 			}
 			return fInitializerUnit.getBuffer().getText(fInitializer.getStartPosition(), fInitializer.getLength());
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 be928cf..26730c5 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
@@ -457,9 +457,7 @@
 			IRegion region= document.getLineInformation(document.getLineOfOffset(marker.getOffset()));
 			int oldIndent= Strings.computeIndentUnits(document.get(region.getOffset(), region.getLength()), project);
 			return Strings.changeIndent(rewrittenInitializer, oldIndent, project, "", TextUtilities.getDefaultLineDelimiter(document)); //$NON-NLS-1$
-		} catch (MalformedTreeException e) {
-			JavaManipulationPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (MalformedTreeException | BadLocationException e) {
 			JavaManipulationPlugin.log(e);
 		}
 		//fallback:
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java
index 27c2e5f..8d5e237 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/code/SourceProvider.java
@@ -407,9 +407,7 @@
 			processor= new TextEditProcessor(fDocument, undo, TextEdit.UPDATE_REGIONS);
 			processor.performEdits();
 			return result;
-		} catch (MalformedTreeException exception) {
-			JavaManipulationPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaManipulationPlugin.log(exception);
 		}
 		return new String[] {};
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 be8b942..7312c3d 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
@@ -141,9 +141,7 @@
 					}
 				}
 			}
-		} catch (InvalidInputException e) {
-			return null;
-		} catch (BadLocationException e) {
+		} catch (InvalidInputException | BadLocationException e) {
 			return null;
 		}
 		if (result.isEmpty())
@@ -160,9 +158,7 @@
 					return line;
 			}
 			return null;
-		} catch (InvalidInputException e) {
-			return null;
-		} catch (BadLocationException e) {
+		} catch (InvalidInputException | BadLocationException e) {
 			return null;
 		}
 	}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java
index 6c28da3..e9f90ae 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RefactoringAnalyzeUtil.java
@@ -110,8 +110,7 @@
 		IProblem[] newProblems= getIntroducedCompileProblems(newCuNode, oldCuNode);
 		for (IProblem problem : newProblems) {
 			if (problem.isError())
-				result.addEntry(new RefactoringStatusEntry((problem.isError() ? RefactoringStatus.ERROR : RefactoringStatus.WARNING), problem.getMessage(),
-						new JavaStringStatusContext(newCuSource, SourceRangeFactory.create(problem))));
+				result.addEntry(new RefactoringStatusEntry(RefactoringStatus.ERROR, problem.getMessage(), new JavaStringStatusContext(newCuSource, SourceRangeFactory.create(problem))));
 		}
 		return result;
 	}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java
index bc04d7c..2447b31 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/refactoring/rename/RenameAnalyzeUtil.java
@@ -453,7 +453,7 @@
 		RefactoringStatus result= new RefactoringStatus();
 		for (IProblem problem : RefactoringAnalyzeUtil.getIntroducedCompileProblems(newCUNode, oldCUNode)) {
 			if (problem.isError())
-				result.addEntry(new RefactoringStatusEntry((problem.isError() ? RefactoringStatus.ERROR : RefactoringStatus.WARNING), problem.getMessage(), new JavaStringStatusContext(newCuSource,
+				result.addEntry(new RefactoringStatusEntry(RefactoringStatus.ERROR, problem.getMessage(), new JavaStringStatusContext(newCuSource,
 						SourceRangeFactory.create(problem))));
 		}
 		return result;
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 1e3b0a1..7ea48a4 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
@@ -2928,9 +2928,7 @@
 							setTarget(bindings[index]);
 					}
 				}
-			} catch (NumberFormatException exception) {
-				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_illegal_argument, new String[] { value, ATTRIBUTE_TARGET_INDEX }));
-			} catch (JavaModelException exception) {
+			} catch (NumberFormatException | JavaModelException exception) {
 				return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_illegal_argument, new String[] { value, ATTRIBUTE_TARGET_INDEX }));
 			}
 		} else
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java
index 1c4ade7..bba4e7f 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/CompilationUnitCompletion.java
@@ -325,8 +325,7 @@
 						TypeParameterResolver util= new TypeParameterResolver(this);
 						String[] result= util.computeBinding(supertype.getFullyQualifiedName(), index);
 						all.addAll(Arrays.asList(result));
-					} catch (JavaModelException e) {
-					} catch (IndexOutOfBoundsException e) {
+					} catch (JavaModelException | IndexOutOfBoundsException e) {
 					}
 				}
 			}
diff --git a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextCore.java b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextCore.java
index 01a85b8..31a4e75 100644
--- a/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextCore.java
+++ b/org.eclipse.jdt.core.manipulation/core extension/org/eclipse/jdt/internal/corext/template/java/JavaContextCore.java
@@ -613,9 +613,7 @@
 				document.removePositionUpdater(updater);
 				document.removePositionCategory(category);
 			}
-		} catch (BadLocationException e) {
-			handleException(e);
-		} catch (BadPositionCategoryException e) {
+		} catch (BadLocationException | BadPositionCategoryException e) {
 			handleException(e);
 		}
 	}
diff --git a/org.eclipse.jdt.jeview/src/org/eclipse/jdt/jeview/views/JavaElementView.java b/org.eclipse.jdt.jeview/src/org/eclipse/jdt/jeview/views/JavaElementView.java
index 46e71fe..4b7aa8d 100644
--- a/org.eclipse.jdt.jeview/src/org/eclipse/jdt/jeview/views/JavaElementView.java
+++ b/org.eclipse.jdt.jeview/src/org/eclipse/jdt/jeview/views/JavaElementView.java
@@ -756,13 +756,7 @@
 								try {
 									Object context= getSite().getService(IHandlerService.class).getCurrentState();
 									showInCommand.executeWithChecks(new ExecutionEvent(null, params, null, context));
-								} catch (ExecutionException e1) {
-									showAndLogError("Could not show element", e1);
-								} catch (NotDefinedException e1) {
-									showAndLogError("Could not show element", e1);
-								} catch (NotEnabledException e1) {
-									showAndLogError("Could not show element", e1);
-								} catch (NotHandledException e1) {
+								} catch (ExecutionException | NotDefinedException | NotEnabledException | NotHandledException e1) {
 									showAndLogError("Could not show element", e1);
 								}
 								break;
@@ -778,9 +772,7 @@
 											JavaUI.revealInEditor(editorPart, javaElement);
 										}
 									}
-								} catch (PartInitException e) {
-									showAndLogError("Could not open editor.", e); //$NON-NLS-1$
-								} catch (JavaModelException e) {
+								} catch (PartInitException | JavaModelException e) {
 									showAndLogError("Could not open editor.", e); //$NON-NLS-1$
 								}
 						}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTrace.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTrace.java
index 62fb7af..b648c7c 100644
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTrace.java
+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/FailureTrace.java
@@ -168,9 +168,7 @@
 			lineNumber= lineNumber.substring(lineNumber.indexOf(':') + 1, lineNumber.lastIndexOf(')'));
 			int line= Integer.valueOf(lineNumber).intValue();
 			return new OpenEditorAtLineAction(fTestRunner, testName, line);
-		} catch(NumberFormatException e) {
-		}
-		catch(IndexOutOfBoundsException e) {
+		} catch(NumberFormatException | IndexOutOfBoundsException e) {
 		}
 		return null;
 	}
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java
index 72478c9..cb2a2ea 100644
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java
+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/ui/JUnitProgressBar.java
@@ -53,11 +53,6 @@
 			}
 		});
 		addPaintListener(this::paint);
-		addDisposeListener(event -> {
-			fFailureColor.dispose();
-			fOKColor.dispose();
-			fStoppedColor.dispose();
-		});
 		Display display= parent.getDisplay();
 		fFailureColor= new Color(display, 159, 63, 63);
 		fOKColor= new Color(display, 95, 191, 95);
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
index d6151bd..4227341 100644
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
@@ -1123,9 +1123,7 @@
 				name= types[0].getFullyQualifiedName('.');
 
 			}
-		} catch (InterruptedException ie) {
-
-		} catch (InvocationTargetException ite) {
+		} catch (InterruptedException | InvocationTargetException ite) {
 		}
 		config.setAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, name);
 		if (testKindId != null)
diff --git a/org.eclipse.jdt.text.tests/.classpath b/org.eclipse.jdt.text.tests/.classpath
index 3e5654f..73d6894 100644
--- a/org.eclipse.jdt.text.tests/.classpath
+++ b/org.eclipse.jdt.text.tests/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src">
 		<attributes>
diff --git a/org.eclipse.jdt.text.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.jdt.text.tests/.settings/org.eclipse.jdt.core.prefs
index 42d8f80..36d4882 100644
--- a/org.eclipse.jdt.text.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.jdt.text.tests/.settings/org.eclipse.jdt.core.prefs
@@ -26,9 +26,9 @@
 org.eclipse.jdt.core.compiler.annotation.nullanalysis=disabled
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -44,6 +44,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=enabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=ignore
 org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=warning
@@ -100,6 +101,7 @@
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=info
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
 org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=error
 org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
@@ -132,8 +134,10 @@
 org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
 org.eclipse.jdt.core.formatter.align_type_members_on_columns=false
+org.eclipse.jdt.core.formatter.alignment_for_additive_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_annotation=0
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_enum_constant=16
@@ -141,17 +145,20 @@
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_method_invocation=16
 org.eclipse.jdt.core.formatter.alignment_for_arguments_in_qualified_allocation_expression=16
 org.eclipse.jdt.core.formatter.alignment_for_assignment=0
-org.eclipse.jdt.core.formatter.alignment_for_binary_expression=16
+org.eclipse.jdt.core.formatter.alignment_for_bitwise_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_compact_if=16
 org.eclipse.jdt.core.formatter.alignment_for_conditional_expression=48
 org.eclipse.jdt.core.formatter.alignment_for_enum_constants=0
 org.eclipse.jdt.core.formatter.alignment_for_expressions_in_array_initializer=16
+org.eclipse.jdt.core.formatter.alignment_for_logical_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_method_declaration=0
 org.eclipse.jdt.core.formatter.alignment_for_multiple_fields=16
+org.eclipse.jdt.core.formatter.alignment_for_multiplicative_operator=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_constructor_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_parameters_in_method_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_resources_in_try=80
 org.eclipse.jdt.core.formatter.alignment_for_selector_in_method_invocation=16
+org.eclipse.jdt.core.formatter.alignment_for_string_concatenation=16
 org.eclipse.jdt.core.formatter.alignment_for_superclass_in_type_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_enum_declaration=16
 org.eclipse.jdt.core.formatter.alignment_for_superinterfaces_in_type_declaration=16
@@ -237,11 +244,12 @@
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_enum_declaration=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_method_body=insert
 org.eclipse.jdt.core.formatter.insert_new_line_in_empty_type_declaration=insert
+org.eclipse.jdt.core.formatter.insert_space_after_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_after_assignment_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_at_in_annotation_type_declaration=do not insert
-org.eclipse.jdt.core.formatter.insert_space_after_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_angle_bracket_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_closing_brace_in_block=insert
@@ -272,6 +280,8 @@
 org.eclipse.jdt.core.formatter.insert_space_after_comma_in_type_parameters=insert
 org.eclipse.jdt.core.formatter.insert_space_after_ellipsis=insert
 org.eclipse.jdt.core.formatter.insert_space_after_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_after_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_opening_angle_bracket_in_type_parameters=do not insert
@@ -296,13 +306,17 @@
 org.eclipse.jdt.core.formatter.insert_space_after_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_after_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_after_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_for=insert
 org.eclipse.jdt.core.formatter.insert_space_after_semicolon_in_try_resources=insert
+org.eclipse.jdt.core.formatter.insert_space_after_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_after_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_after_unary_operator=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_additive_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_and_in_type_parameter=insert
 org.eclipse.jdt.core.formatter.insert_space_before_assignment_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_at_in_annotation_type_declaration=insert
-org.eclipse.jdt.core.formatter.insert_space_before_binary_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_bitwise_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_closing_angle_bracket_in_type_parameters=do not insert
@@ -350,6 +364,8 @@
 org.eclipse.jdt.core.formatter.insert_space_before_comma_in_type_parameters=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_ellipsis=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_lambda_arrow=insert
+org.eclipse.jdt.core.formatter.insert_space_before_logical_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_multiplicative_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_parameterized_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_arguments=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_opening_angle_bracket_in_type_parameters=do not insert
@@ -386,9 +402,12 @@
 org.eclipse.jdt.core.formatter.insert_space_before_prefix_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_conditional=insert
 org.eclipse.jdt.core.formatter.insert_space_before_question_in_wildcard=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_relational_operator=insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_for=do not insert
 org.eclipse.jdt.core.formatter.insert_space_before_semicolon_in_try_resources=do not insert
+org.eclipse.jdt.core.formatter.insert_space_before_shift_operator=insert
+org.eclipse.jdt.core.formatter.insert_space_before_string_concatenation=insert
 org.eclipse.jdt.core.formatter.insert_space_before_unary_operator=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_brackets_in_array_type_reference=do not insert
 org.eclipse.jdt.core.formatter.insert_space_between_empty_braces_in_array_initializer=do not insert
@@ -414,8 +433,12 @@
 org.eclipse.jdt.core.formatter.tabulation.size=4
 org.eclipse.jdt.core.formatter.use_on_off_tags=false
 org.eclipse.jdt.core.formatter.use_tabs_only_for_leading_indentations=false
-org.eclipse.jdt.core.formatter.wrap_before_binary_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_additive_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_bitwise_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_logical_operator=true
+org.eclipse.jdt.core.formatter.wrap_before_multiplicative_operator=true
 org.eclipse.jdt.core.formatter.wrap_before_or_operator_multicatch=true
+org.eclipse.jdt.core.formatter.wrap_before_string_concatenation=true
 org.eclipse.jdt.core.formatter.wrap_outer_expressions_when_nested=true
 org.eclipse.jdt.core.incompatibleJDKLevel=ignore
 org.eclipse.jdt.core.incompleteClasspath=error
diff --git a/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF b/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF
index 6ecea6e..ee1f3d5 100644
--- a/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.text.tests/META-INF/MANIFEST.MF
@@ -39,6 +39,6 @@
  org.eclipse.core.expressions,
  org.junit.platform.runner,
  org.junit.platform.suite.api
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Eclipse-BundleShape: dir
 Import-Package: org.junit.jupiter.api
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/BreakContinueTargetFinderTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/BreakContinueTargetFinderTest.java
index 3fd8a7e..b42212b 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/BreakContinueTargetFinderTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/BreakContinueTargetFinderTest.java
@@ -62,13 +62,13 @@
 		fParser = ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		fFinder= new BreakContinueTargetFinder();
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	private OccurrenceLocation[] getHighlights(StringBuffer source, int offset, int length) throws Exception {
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d7.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d7.java
index 3d3d429..a8e61d9 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d7.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d7.java
@@ -67,7 +67,7 @@
 	public void setUp() throws Exception {
 		fParser= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 
-		fJProject1= Java1d7ProjectTestSetup.getProject();
+		fJProject1= j7s.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 		JavaPlugin.getDefault().getPreferenceStore().setValue(PreferenceConstants.EDITOR_MARK_OCCURRENCES, true);
 		JavaPlugin.getDefault().getPreferenceStore().setValue(PreferenceConstants.EDITOR_MARK_IMPLEMENTORS, true);
@@ -75,7 +75,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d7ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j7s.getDefaultClasspath());
 	}
 
 	private OccurrenceLocation[] getHighlights(StringBuffer source, int offset, int length) throws Exception {
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d8.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d8.java
index 05315e2..0f3d910 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d8.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/MarkOccurrenceTest1d8.java
@@ -42,6 +42,7 @@
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.search.ExceptionOccurrencesFinder;
+import org.eclipse.jdt.internal.ui.search.MethodExitsFinder;
 
 /**
  * Those tests are made to run on Java Spider 1.8 .
@@ -65,32 +66,32 @@
 	public void setUp() throws Exception {
 		fParser= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= f18p.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 		JavaPlugin.getDefault().getPreferenceStore().setValue(PreferenceConstants.EDITOR_MARK_OCCURRENCES, true);
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, f18p.getDefaultClasspath());
 	}
 
-	private OccurrenceLocation[] getHighlights(StringBuffer source, int offset, int length) throws Exception {
+	private OccurrenceLocation[] getHighlights(String source, int offset, int length) throws Exception {
 		CompilationUnit root= createCompilationUnit(source);
 		String errorString= fFinder.initialize(root, offset, length);
 		assertNull(errorString, errorString);
 		return fFinder.getOccurrences();
 	}
 
-	private CompilationUnit createCompilationUnit(StringBuffer source) throws JavaModelException {
+	private CompilationUnit createCompilationUnit(String source) throws JavaModelException {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
-		ICompilationUnit cu= pack1.createCompilationUnit("E.java", source.toString(), true, null);
+		ICompilationUnit cu= pack1.createCompilationUnit("E.java", source, true, null);
 		fParser.setSource(cu);
 		fParser.setResolveBindings(true);
 		return (CompilationUnit)fParser.createAST(null);
 	}
 
-	private void checkSelection(StringBuffer s, int offset, int length, OccurrenceLocation[] expected) throws Exception {
+	private void checkSelection(String s, int offset, int length, OccurrenceLocation[] expected) throws Exception {
 		OccurrenceLocation[] selectedNodes= getHighlights(s, offset, length);
 		assertEquals("number of selections", expected.length, selectedNodes.length);
 		sortByStartIndex(selectedNodes);
@@ -106,13 +107,13 @@
 	}
 
 	//pattern must be found - otherwise it's assumed to be an error
-	private OccurrenceLocation find(StringBuffer s, String pattern, int ithOccurrence) {
+	private OccurrenceLocation find(String s, String pattern, int ithOccurrence) {
 		if (ithOccurrence < 1)
 			throw new IllegalStateException("ithOccurrence = " + ithOccurrence);
 		return find(s, pattern, ithOccurrence, 0);
 	}
 
-	private OccurrenceLocation find(StringBuffer s, String pattern, int ithOccurrence, int startIdx) {
+	private OccurrenceLocation find(String s, String pattern, int ithOccurrence, int startIdx) {
 		if (startIdx < 0 || startIdx > s.length())
 			throw new IllegalStateException("startIdx = " + startIdx);
 		int idx= s.indexOf(pattern, startIdx);
@@ -125,48 +126,48 @@
 
 	@Test
 	public void testThrowingAnnotatedException1() throws Exception {
-		StringBuffer s= new StringBuffer();
-		s.append("package test1;\n");
-		s.append("import java.lang.annotation.Documented;\n");
-		s.append("import java.lang.annotation.ElementType;\n");
-		s.append("import java.lang.annotation.Retention;\n");
-		s.append("import java.lang.annotation.RetentionPolicy;\n");
-		s.append("import java.lang.annotation.Target;\n");
-		s.append("\n");
-		s.append("public class E {\n");
-		s.append("    @Target(ElementType.TYPE_USE)\n");
-		s.append("    @Retention(RetentionPolicy.RUNTIME)\n");
-		s.append("    @Documented\n");
-		s.append("    static @interface Critical {\n");
-		s.append("        String msg() default \"We're all going to die!\";\n");
-		s.append("    }\n");
-		s.append("\n");
-		s.append("    class InnerException extends Exception {\n");
-		s.append("        private static final long serialVersionUID = 1L;\n");
-		s.append("    }\n");
-		s.append("\n");
-		s.append("    /**\n");
-		s.append("     * @throws E.InnerException\n");
-		s.append("     */\n");
-		s.append("    void foo() throws @Critical() E.@Critical() InnerException, IllegalArgumentException {\n");
-		s.append("        if (Boolean.TRUE)\n");
-		s.append("            throw new @Critical() InnerException();\n");
-		s.append("        else\n");
-		s.append("            throw new @Critical() E.@Critical() InnerException();\n");
-		s.append("    }\n");
-		s.append("\n");
-		s.append("    void tryCatch() {\n");
-		s.append("        try {\n");
-		s.append("            foo();\n");
-		s.append("        } catch (@Critical() E.@Critical() InnerException e) {\n");
-		s.append("        } catch (RuntimeException e) {\n");
-		s.append("        }\n");
-		s.append("        try {\n");
-		s.append("            foo();\n");
-		s.append("        } catch (RuntimeException | @Critical(msg=\"He\"+\"llo\") E.@Critical() InnerException e) {\n");
-		s.append("        }\n");
-		s.append("    }\n");
-		s.append("}\n");
+		String s= "" +
+				"package test1;\n" +
+				"import java.lang.annotation.Documented;\n" +
+				"import java.lang.annotation.ElementType;\n" +
+				"import java.lang.annotation.Retention;\n" +
+				"import java.lang.annotation.RetentionPolicy;\n" +
+				"import java.lang.annotation.Target;\n" +
+				"\n" +
+				"public class E {\n" +
+				"    @Target(ElementType.TYPE_USE)\n" +
+				"    @Retention(RetentionPolicy.RUNTIME)\n" +
+				"    @Documented\n" +
+				"    static @interface Critical {\n" +
+				"        String msg() default \"We're all going to die!\";\n" +
+				"    }\n" +
+				"\n" +
+				"    class InnerException extends Exception {\n" +
+				"        private static final long serialVersionUID = 1L;\n" +
+				"    }\n" +
+				"\n" +
+				"    /**\n" +
+				"     * @throws E.InnerException\n" +
+				"     */\n" +
+				"    void foo() throws @Critical() E.@Critical() InnerException, IllegalArgumentException {\n" +
+				"        if (Boolean.TRUE)\n" +
+				"            throw new @Critical() InnerException();\n" +
+				"        else\n" +
+				"            throw new @Critical() E.@Critical() InnerException();\n" +
+				"    }\n" +
+				"\n" +
+				"    void tryCatch() {\n" +
+				"        try {\n" +
+				"            foo();\n" +
+				"        } catch (@Critical() E.@Critical() InnerException e) {\n" +
+				"        } catch (RuntimeException e) {\n" +
+				"        }\n" +
+				"        try {\n" +
+				"            foo();\n" +
+				"        } catch (RuntimeException | @Critical(msg=\"He\"+\"llo\") E.@Critical() InnerException e) {\n" +
+				"        }\n" +
+				"    }\n" +
+				"}\n";
 
 		fFinder= new ExceptionOccurrencesFinder();
 		int offset= 8 + s.indexOf("@throws E.InnerException"); // in Javadoc
@@ -206,54 +207,74 @@
 
 	@Test
 	public void testThrownExceptionInLambda() throws Exception {
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("import java.io.IOException;\n");
-		buf.append("\n");
-		buf.append("public class E {\n");
-		buf.append("    void test(int i) throws IOException {\n");
-		buf.append("        if (i == 0) {\n");
-		buf.append("            throw new IOException();\n");
-		buf.append("        } else {\n");
-		buf.append("            FI fi = () -> { throw new IOException(); };\n");
-		buf.append("        }\n");
-		buf.append("    }\n");
-		buf.append("}\n");
-		buf.append("\n");
-		buf.append("@FunctionalInterface\n");
-		buf.append("interface FI {\n");
-		buf.append("    void foo() throws IOException;\n");
-		buf.append("}\n");
+		String s= "" +
+				"package test1;\n" +
+				"\n" +
+				"import java.io.IOException;\n" +
+				"\n" +
+				"public class E {\n" +
+				"    void test(int i) throws IOException {\n" +
+				"        if (i == 0) {\n" +
+				"            throw new IOException();\n" +
+				"        } else {\n" +
+				"            FI fi = () -> { throw new IOException(); };\n" +
+				"        }\n" +
+				"    }\n" +
+				"}\n" +
+				"\n" +
+				"@FunctionalInterface\n" +
+				"interface FI {\n" +
+				"    void foo() throws IOException;\n" +
+				"}\n";
 
 		fFinder= new ExceptionOccurrencesFinder();
-		int offset= buf.indexOf("IOException {");
+		int offset= s.indexOf("IOException {");
 		int length= 0;
-		OccurrenceLocation[] ranges= { find(buf, "IOException", 2), find(buf, "throw", 2) };
-		checkSelection(buf, offset, length, ranges);
+		OccurrenceLocation[] ranges= { find(s, "IOException", 2), find(s, "throw", 2) };
+		checkSelection(s, offset, length, ranges);
 	}
 
 	@Test
 	public void testTryCatchInLambda() throws Exception {
-		StringBuffer buf= new StringBuffer();
-		buf.append("package test1;\n");
-		buf.append("\n");
-		buf.append("import java.io.FileInputStream;\n");
-		buf.append("import java.io.FileNotFoundException;\n");
-		buf.append("\n");
-		buf.append("public class E {\n");
-		buf.append("    Runnable lambda = () -> {\n");
-		buf.append("        try {\n");
-		buf.append("            new FileInputStream(\"dummy\");\n");
-		buf.append("        } catch (FileNotFoundException e) {\n");
-		buf.append("        }\n");
-		buf.append("    };\n");
-		buf.append("}\n");
+		String s= "" +
+				"package test1;\n" +
+				"\n" +
+				"import java.io.FileInputStream;\n" +
+				"import java.io.FileNotFoundException;\n" +
+				"\n" +
+				"public class E {\n" +
+				"    Runnable lambda = () -> {\n" +
+				"        try {\n" +
+				"            new FileInputStream(\"dummy\");\n" +
+				"        } catch (FileNotFoundException e) {\n" +
+				"        }\n" +
+				"    };\n" +
+				"}\n";
 
 		fFinder= new ExceptionOccurrencesFinder();
-		int offset= buf.indexOf("FileNotFoundException e");
+		int offset= s.indexOf("FileNotFoundException e");
 		int length= 0;
-		OccurrenceLocation[] ranges= { find(buf, "FileInputStream", 2), find(buf, "FileNotFoundException", 2) };
-		checkSelection(buf, offset, length, ranges);
+		OccurrenceLocation[] ranges= { find(s, "FileInputStream", 2), find(s, "FileNotFoundException", 2) };
+		checkSelection(s, offset, length, ranges);
+	}
+
+	@Test
+	public void testMarkMethodExitsBug565387() throws Exception {
+		fFinder= new MethodExitsFinder();
+		String s= "" +
+				"import java.util.function.Function;\n\n" +
+				"public class TestClass {\n" +
+				"	String foo() {\n" +
+				"		Function<Object,Object> f = o -> {\n" +
+				"			return o;\n" +
+			    "		};\n" +
+				"		return null;\n" +
+			    "	}\n" +
+				"}\n";
+
+		int offset= 1 + s.indexOf("String");//middle of word
+		int length= 0;
+		OccurrenceLocation[] ranges= { find(s, "String", 1), find(s, "return null;", 1) };
+		checkSelection(s, offset, length, ranges);
 	}
 }
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFileAutoEditStrategyTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFileAutoEditStrategyTest.java
index 4e7cefa..f2825f6 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFileAutoEditStrategyTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/PropertiesFileAutoEditStrategyTest.java
@@ -77,7 +77,7 @@
 	@Before
 	public void setUp() throws Exception {
 		try {
-			fJProject1= ProjectTestSetup.getProject();
+			fJProject1= pts.getProject();
 			fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 			IPackageFragment pack= fSourceFolder.createPackageFragment("test", false, null);
 			fPropertiesFileISO_8859_1= write((IFolder)pack.getCorrespondingResource(), "", "Messages_ISO_8859_1.properties");
@@ -98,7 +98,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	//utility methods
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java
index 589edd9..3df0fa4 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/AbstractCompletionTest.java
@@ -79,7 +79,11 @@
 import org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor;
 import org.eclipse.jdt.internal.ui.text.java.JavaCompletionProcessor;
 
-public class AbstractCompletionTest {
+public abstract class AbstractCompletionTest {
+
+	@Rule
+	public CompletionTestSetup cts= new CompletionTestSetup();
+
 	protected static String suiteName(Class<?> fqn) {
 		String name= fqn.toString();
 		name= name.substring(name.lastIndexOf('.') + 1);
@@ -126,7 +130,7 @@
 	}
 
 	protected IPackageFragment getAnonymousTestPackage() throws CoreException {
-		return CompletionTestSetup.getAnonymousTestPackage();
+		return cts.getAnonymousTestPackage();
 	}
 
 	protected void configureCoreOptions(Hashtable<String, String> options) {
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CamelCaseCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CamelCaseCompletionTest.java
index 12f6c79..d89bc68 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CamelCaseCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CamelCaseCompletionTest.java
@@ -15,7 +15,6 @@
 
 import java.util.Hashtable;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.core.JavaCore;
@@ -25,9 +24,6 @@
  * @since 3.2
  */
 public class CamelCaseCompletionTest extends AbstractCompletionTest {
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
-
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#configureCoreOptions(java.util.Hashtable)
 	 */
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest1d8.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest1d8.java
index b572cde..6b0ad56 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest1d8.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CodeCompletionTest1d8.java
@@ -77,7 +77,7 @@
 
 	@Override
 	public void setUp() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= j18s.getProject();
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
 		options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, "1");
@@ -108,7 +108,7 @@
 		store.setToDefault(PreferenceConstants.CODEASSIST_GUESS_METHOD_ARGUMENTS);
 		store.setToDefault(PreferenceConstants.CODEASSIST_SHOW_VISIBLE_PROPOSALS);
 		closeAllEditors();
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j18s.getDefaultClasspath());
 	}
 
 	public static void closeEditor(IEditorPart editor) {
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CompletionTestSetup.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CompletionTestSetup.java
index 588cffa..d93bdcb 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CompletionTestSetup.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/CompletionTestSetup.java
@@ -24,7 +24,7 @@
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
 class CompletionTestSetup extends ProjectTestSetup {
-	public static IPackageFragment getTestPackage() throws CoreException {
+	public IPackageFragment getTestPackage() throws CoreException {
 		IJavaProject project= getProject();
 		IPackageFragmentRoot root= project.getPackageFragmentRoot("src");
 		if (!root.exists())
@@ -38,7 +38,7 @@
 	}
 
 	private static int fAnonymousSoureFolderCounter= 0;
-	public static IPackageFragment getAnonymousTestPackage() throws CoreException {
+	public IPackageFragment getAnonymousTestPackage() throws CoreException {
 		IJavaProject project= getProject();
 		String sourceFolder= "src" + fAnonymousSoureFolderCounter++;
 		IPackageFragmentRoot root= project.getPackageFragmentRoot(sourceFolder);
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java
index f75753d..118d86c 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContentAssistHistoryTest.java
@@ -65,7 +65,7 @@
 			protected void before() throws Throwable {
 				super.before();
 
-				IJavaProject project= ProjectTestSetup.getProject();
+				IJavaProject project= getProject();
 				fgStringT= project.findType(STRING);
 				fgCharSequenceT= project.findType(CHAR_SEQUENCE);
 				fgStringBufferT= project.findType(STRING_BUFFER);
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContinuousTypingCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContinuousTypingCompletionTest.java
index fca4471..3266058 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContinuousTypingCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/ContinuousTypingCompletionTest.java
@@ -15,7 +15,6 @@
 
 import static org.junit.Assert.assertEquals;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.testplugin.util.DisplayHelper;
@@ -64,8 +63,7 @@
 
 	private JavaEditor fEditor;
 
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
+
 
 	/*
 	 * This tests https://bugs.eclipse.org/bugs/show_bug.cgi?id=511542
@@ -78,7 +76,7 @@
 				"		/*COMPLETE_HERE*/\n" +
 				"	}\n" +
 				"}\n";
-		ICompilationUnit compilationUnit= CompletionTestSetup.getAnonymousTestPackage().createCompilationUnit(getName() + ".java", contents, true, new NullProgressMonitor());
+		ICompilationUnit compilationUnit= cts.getAnonymousTestPackage().createCompilationUnit(getName() + ".java", contents, true, new NullProgressMonitor());
 		fEditor= (JavaEditor) EditorUtility.openInEditor(compilationUnit);
 		int completionOffset= contents.indexOf("/*COMPLETE_HERE*/");
 		fEditor.getViewer().setSelectedRange(completionOffset, 0);
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/Java1d7CompletionTestSetup.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/Java1d7CompletionTestSetup.java
index 3aa56fd..be0467c 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/Java1d7CompletionTestSetup.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/Java1d7CompletionTestSetup.java
@@ -27,7 +27,7 @@
  * This class is used to run tests on Java Dolphin 1.7 .
  */
 class Java1d7CompletionTestSetup extends Java1d7ProjectTestSetup {
-	public static IPackageFragment getTestPackage() throws CoreException {
+	public IPackageFragment getTestPackage() throws CoreException {
 		IJavaProject project= getProject();
 		IPackageFragmentRoot root= project.getPackageFragmentRoot("src");
 		if (!root.exists())
@@ -41,7 +41,7 @@
 	}
 
 	private static int fAnonymousSoureFolderCounter= 0;
-	public static IPackageFragment getAnonymousTestPackage() throws CoreException {
+	public IPackageFragment getAnonymousTestPackage() throws CoreException {
 		IJavaProject project= getProject();
 		String sourceFolder= "src" + fAnonymousSoureFolderCounter++;
 		IPackageFragmentRoot root= project.getPackageFragmentRoot(sourceFolder);
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java
index 017786a..a86b1ff 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/JavadocCompletionTest.java
@@ -13,7 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.text.tests.contentassist;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.core.JavaCore;
@@ -42,9 +41,6 @@
 	private static final String[] FIELD_INLINE_TAGS= {"@docRoot", "@link", "@linkplain", "@value", "@code", "@literal", };
 	private static final String[] HTML_TAGS= {"b", "blockquote", "br", "code", "dd", "dl", "dt", "em", "hr", "h1", "h2", "h3", "h4", "h5", "h6", "i", "li", "nl", "ol", "p", "pre", "q", "td", "th", "tr", "tt", "ul",};
 
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
-
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#setUp()
 	 */
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertCompletionTest.java
index 95b3f2d..43bc929 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertCompletionTest.java
@@ -14,7 +14,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.text.tests.contentassist;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.core.JavaCore;
@@ -26,8 +25,6 @@
  * @since 3.2
  */
 public class MethodInsertCompletionTest extends AbstractCompletionTest {
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
 
 	@Test
 	public void testThisMethod() throws Exception {
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertionFormattedCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertionFormattedCompletionTest.java
index 31035dd..31ca4ce 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertionFormattedCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodInsertionFormattedCompletionTest.java
@@ -15,7 +15,6 @@
 
 import java.util.Hashtable;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.core.JavaCore;
@@ -30,9 +29,6 @@
 public class MethodInsertionFormattedCompletionTest extends AbstractCompletionTest {
 	private static final boolean BUG_DISABLED_DUE_TO_FORMATTER_CONTEXT_INFO_INTERATION= true;
 
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
-
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#configureCoreOptions(java.util.Hashtable)
 	 */
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodOverwriteCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodOverwriteCompletionTest.java
index d37077f..16f0ed8 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodOverwriteCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodOverwriteCompletionTest.java
@@ -13,7 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.text.tests.contentassist;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
@@ -23,8 +22,6 @@
  * @since 3.2
  */
 public class MethodOverwriteCompletionTest extends AbstractCompletionTest {
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
 
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#setUp()
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParameterGuessingCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParameterGuessingCompletionTest.java
index 7ccbc50..d87c2d5 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParameterGuessingCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParameterGuessingCompletionTest.java
@@ -13,7 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.text.tests.contentassist;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
@@ -23,8 +22,6 @@
  * @since 3.2
  */
 public class MethodParameterGuessingCompletionTest extends AbstractCompletionTest {
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
 
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#setUp()
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParamsCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParamsCompletionTest.java
index 582f4ee..36d2aa9 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParamsCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/MethodParamsCompletionTest.java
@@ -13,7 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.text.tests.contentassist;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
@@ -23,8 +22,6 @@
  * @since 3.2
  */
 public class MethodParamsCompletionTest extends AbstractCompletionTest {
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
 
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#setUp()
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/SpecialMethodsCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/SpecialMethodsCompletionTest.java
index 6c6117c..c7c3f31 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/SpecialMethodsCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/SpecialMethodsCompletionTest.java
@@ -15,7 +15,6 @@
 
 import java.util.Hashtable;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 /**
@@ -23,8 +22,6 @@
  * @since 3.2
  */
 public class SpecialMethodsCompletionTest extends AbstractCompletionTest {
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
 
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#setUp()
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest.java
index 01a941c..c9efbb6 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest.java
@@ -13,7 +13,6 @@
  *******************************************************************************/
 package org.eclipse.jdt.text.tests.contentassist;
 
-import org.junit.Rule;
 import org.junit.Test;
 
 import org.eclipse.jdt.core.IPackageFragment;
@@ -26,8 +25,6 @@
  * @since 3.2
  */
 public class TypeCompletionTest extends AbstractCompletionTest {
-	@Rule
-	public CompletionTestSetup cts= new CompletionTestSetup();
 
 	/*
 	 * @see org.eclipse.jdt.text.tests.contentassist.AbstractCompletionTest#setUp()
@@ -293,7 +290,7 @@
 
 	@Test
 	public void testBug182468() throws Exception {
-		IPackageFragmentRoot src= (IPackageFragmentRoot)CompletionTestSetup.getTestPackage().getParent();
+		IPackageFragmentRoot src= (IPackageFragmentRoot)cts.getTestPackage().getParent();
 
 		IPackageFragment package1= src.createPackageFragment("package1", true, null);
 		package1.createCompilationUnit("AClass.java", "package " + package1.getElementName() + "; public class AClass {}", true, null);
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest1d7.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest1d7.java
index 95d27ec..416906a 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest1d7.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/contentassist/TypeCompletionTest1d7.java
@@ -44,7 +44,7 @@
 
 	@Override
 	protected IPackageFragment getAnonymousTestPackage() throws CoreException {
-		return Java1d7CompletionTestSetup.getAnonymousTestPackage();
+		return cts.getAnonymousTestPackage();
 	}
 
 	@Override
@@ -86,7 +86,7 @@
 	@Override
 	@Test
 	public void testBug182468() throws Exception {
-		IPackageFragmentRoot src= (IPackageFragmentRoot)Java1d7CompletionTestSetup.getTestPackage().getParent();
+		IPackageFragmentRoot src= (IPackageFragmentRoot)cts.getTestPackage().getParent();
 
 		IPackageFragment package1= src.createPackageFragment("package1", true, null);
 		package1.createCompilationUnit("AClass.java", "package " + package1.getElementName() + "; public class AClass {}", true, null);
diff --git a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/KeyboardProbe.java b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/KeyboardProbe.java
index ad79df0..3c9a9e7 100644
--- a/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/KeyboardProbe.java
+++ b/org.eclipse.jdt.text.tests/src/org/eclipse/jdt/text/tests/performance/KeyboardProbe.java
@@ -244,8 +244,8 @@
 	}
 
 	private void addListeners(Text control) {
-		control.addListener(SWT.KeyDown, event -> onKeyDown(event));
-		control.addListener(SWT.KeyUp, event -> onKeyUp(event));
+		control.addListener(SWT.KeyDown, this::onKeyDown);
+		control.addListener(SWT.KeyUp, this::onKeyUp);
 		control.addListener(SWT.Modify, event -> onModify());
 	}
 
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeTypeRefactoring/positive/A_testParameterTypeWithOverrideMethod_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeTypeRefactoring/positive/A_testParameterTypeWithOverrideMethod_in.java
new file mode 100644
index 0000000..b7c9a1a
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeTypeRefactoring/positive/A_testParameterTypeWithOverrideMethod_in.java
@@ -0,0 +1,16 @@
+class A_testParameterTypeWithOverrideMethod_in {
+	static class E {
+		public void bar(String s1, Float g, String s) {
+			g.foo();
+		}
+	}
+
+	static class F extends E {
+		@Override
+		public void bar(String s1, Float g, String s) {
+		}
+
+		public void bar(String s1, Object i, String s) {
+		}
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeTypeRefactoring/positive/A_testParameterTypeWithOverrideMethod_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeTypeRefactoring/positive/A_testParameterTypeWithOverrideMethod_out.java
new file mode 100644
index 0000000..2ee60cb
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ChangeTypeRefactoring/positive/A_testParameterTypeWithOverrideMethod_out.java
@@ -0,0 +1,16 @@
+class A_testParameterTypeWithOverrideMethod_in {
+	static class E {
+		public void bar(String s1, Number g, String s) {
+			g.foo();
+		}
+	}
+
+	static class F extends E {
+		@Override
+		public void bar(String s1, Number g, String s) {
+		}
+
+		public void bar(String s1, Object i, String s) {
+		}
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test116_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test116_in.java
new file mode 100644
index 0000000..13c7e93
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test116_in.java
@@ -0,0 +1,9 @@
+package p; //7, 16, 7, 28
+
+public class A {
+	public Object bar;
+
+	static void foo() {
+		return new Object();
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test116_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test116_out.java
new file mode 100644
index 0000000..bced768
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test116_out.java
@@ -0,0 +1,10 @@
+package p; //7, 16, 7, 28
+
+public class A {
+	public Object bar;
+
+	static void foo() {
+		Object bar= new Object();
+		return bar;
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test117_in.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test117_in.java
new file mode 100644
index 0000000..1e5be76
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test117_in.java
@@ -0,0 +1,12 @@
+package p; //8, 18, 8, 19
+
+class A {
+	private void foo(int i) {
+		switch (i) {
+			case 1:
+				break;
+			case 2:
+				break;
+		}
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test117_out.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test117_out.java
new file mode 100644
index 0000000..cc8874f
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/canExtract/A_test117_out.java
@@ -0,0 +1,13 @@
+package p; //8, 18, 8, 19
+
+class A {
+	private void foo(int i) {
+		final int temp= 2;
+		switch (i) {
+			case 1:
+				break;
+			case temp:
+				break;
+		}
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail39.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail39.java
new file mode 100644
index 0000000..c2af4c8
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail39.java
@@ -0,0 +1,9 @@
+package p; //7, 16, 7, 28
+
+public class A {
+	public Object bar;
+
+	void foo() {
+		return new Object();
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail40.java b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail40.java
new file mode 100644
index 0000000..a38795c
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests.refactoring/resources/ExtractTemp/cannotExtract/A_testFail40.java
@@ -0,0 +1,9 @@
+package p; //7, 16, 7, 28
+
+public class A {
+	public static Object bar;
+
+	void foo() {
+		return new Object();
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests1d8.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests1d8.java
index 0665c58..7d9daab 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests1d8.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeSignatureTests1d8.java
@@ -48,12 +48,12 @@
 
 	@Override
 	public void genericafter() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, jps.getDefaultClasspath());
 	}
 
 	@Override
 	public void genericbefore() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= jps.getProject();
 		fRoot= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 		fPackageP= fRoot.createPackageFragment("p", true, null);
 		fIsPreDeltaTest= false;
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeTypeRefactoringTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeTypeRefactoringTests.java
index f243a72..dd50e17 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeTypeRefactoringTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ChangeTypeRefactoringTests.java
@@ -266,6 +266,16 @@
 		Assert.assertTrue(types.contains("java.util.List"));
 		Assert.assertTrue(types.contains("java.util.Collection"));
 	}
+
+	@Test
+	public void testParameterTypeWithOverrideMethod() throws Exception {
+		Collection<String> types= helper1(3, 36, 3, 41, "java.lang.Number").getValidTypeNames();
+		Assert.assertEquals(3, types.size());
+		Assert.assertTrue(types.contains("java.io.Serializable"));
+		Assert.assertTrue(types.contains("java.lang.Comparable<java.lang.Float>"));
+		Assert.assertTrue(types.contains("java.lang.Number"));
+		Assert.assertFalse(types.contains("java.lang.Object"));
+	}
 	@Test
 	public void testParameterDeclWithOverride() throws Exception {
 		Collection<String> types= helper1(10, 25, 10, 39, "java.util.AbstractCollection").getValidTypeNames();
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractTempTests.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractTempTests.java
index fa048d7..5e74ab1 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractTempTests.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/ExtractTempTests.java
@@ -824,6 +824,18 @@
 	}
 
 	@Test
+	public void test116() throws Exception {
+		//test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=100430
+		helper1(7, 16, 7, 28, true, false, "bar", "object");
+	}
+
+	@Test
+	public void test117() throws Exception {
+		//test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=377288
+		helper1(8, 18, 8, 19, true, false, "temp", "j");
+	}
+
+	@Test
 	public void testZeroLengthSelection0() throws Exception {
 //		printTestDisabledMessage("test for bug 30146");
 		helper1(4, 18, 4, 18, true, false, "temp", "j");
@@ -1052,4 +1064,16 @@
 	public void testFail38() throws Exception {
 		failHelper1(4, 45, 4, 50, true, false, "temp", RefactoringStatus.FATAL);
 	}
+
+	@Test
+	public void testFail39() throws Exception {
+		//test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=100430
+		failHelper1(7, 16, 7, 28, false, false, "bar", RefactoringStatus.WARNING);
+	}
+
+	@Test
+	public void testFail40() throws Exception {
+		//test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=100430
+		failHelper1(7, 16, 7, 28, false, false, "bar", RefactoringStatus.WARNING);
+	}
 }
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintHelperTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintHelperTest.java
index 9181878..14692de 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintHelperTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintHelperTest.java
@@ -79,7 +79,7 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject= ProjectTestSetup.getProject();
+		fJProject= pts.getProject();
 		File lib= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.NLS_LIB);
 		assertNotNull("lib does not exist", lib);
 		assertTrue("lib does not exist", lib.exists());
@@ -448,6 +448,6 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject, pts.getDefaultClasspath());
 	}
 }
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java
index e15361b..8e39eec 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHintTest.java
@@ -65,13 +65,13 @@
 
     @Before
 	public void setUp() throws Exception {
-        javaProject = ProjectTestSetup.getProject();
+        javaProject = pts.getProject();
         fSourceFolder = JavaProjectHelper.addSourceContainer(javaProject, "src");
     }
 
     @After
 	public void tearDown() throws Exception {
-        JavaProjectHelper.clear(javaProject, ProjectTestSetup.getDefaultClasspath());
+        JavaProjectHelper.clear(javaProject, pts.getDefaultClasspath());
     }
 
     /*
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHolderTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHolderTest.java
index 325f694..84067a8 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHolderTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSHolderTest.java
@@ -46,13 +46,13 @@
 
 	@Before
 	public void setUp() throws Exception {
-		javaProject= ProjectTestSetup.getProject();
+		javaProject= pts.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(javaProject, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(javaProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(javaProject, pts.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSourceModifierTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSourceModifierTest.java
index 9d75415..c5e5e81 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSourceModifierTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NLSSourceModifierTest.java
@@ -84,13 +84,13 @@
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "//TODO\n${body_statement}", null);
 
-        javaProject = ProjectTestSetup.getProject();
+        javaProject = pts.getProject();
         fSourceFolder = JavaProjectHelper.addSourceContainer(javaProject, "src");
     }
 
     @After
 	public void tearDown() throws Exception {
-        JavaProjectHelper.clear(javaProject, ProjectTestSetup.getDefaultClasspath());
+        JavaProjectHelper.clear(javaProject, pts.getDefaultClasspath());
     }
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java
index aedd8ef..a995071 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckFinalConditionsTest.java
@@ -60,13 +60,13 @@
 
 	@Before
 	public void setUp() throws Exception {
-		javaProject= ProjectTestSetup.getProject();
+		javaProject= pts.getProject();
 		fHelper= new NlsRefactoringTestHelper(javaProject);
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(javaProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(javaProject, pts.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckInitialConditionsTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckInitialConditionsTest.java
index abcad95..c7df738 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckInitialConditionsTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCheckInitialConditionsTest.java
@@ -42,13 +42,13 @@
 
 	@Before
 	public void setUp() throws Exception {
-		javaProject= ProjectTestSetup.getProject();
+		javaProject= pts.getProject();
 		fHelper= new NlsRefactoringTestHelper(javaProject);
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(javaProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(javaProject, pts.getDefaultClasspath());
 	}
 
 	protected String getRefactoringPath() {
diff --git a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java
index 2b48860..f4c8fb6 100644
--- a/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java
+++ b/org.eclipse.jdt.ui.tests.refactoring/test cases/org/eclipse/jdt/ui/tests/refactoring/nls/NlsRefactoringCreateChangeTest.java
@@ -57,14 +57,14 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJavaProject= ProjectTestSetup.getProject();
+		fJavaProject= pts.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJavaProject, "src");
 		fHelper= new NlsRefactoringTestHelper(fJavaProject);
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJavaProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJavaProject, pts.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/example/LeakTestExample.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/example/LeakTestExample.java
index cea475d..70af7ae 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/example/LeakTestExample.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/leaktest/example/LeakTestExample.java
@@ -27,7 +27,7 @@
 public class LeakTestExample extends LeakTestCase {
 
 	@Rule
-	public LeakTestSetup projectsetup = new LeakTestSetup();
+	public LeakTestSetup projectSetup = new LeakTestSetup();
 
 	private static class MyClass {
 	}
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/JavaLeakTest.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/JavaLeakTest.java
index c4792d8..b469a77 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/JavaLeakTest.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/JavaLeakTest.java
@@ -83,7 +83,7 @@
 public class JavaLeakTest extends LeakTestCase {
 
 	@Rule
-	public LeakTestSetup projectsetup = new LeakTestSetup();
+	public LeakTestSetup projectSetup = new LeakTestSetup();
 
 	private IJavaProject fJProject;
 
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/TextViewerUndoManagerLeakTest.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/TextViewerUndoManagerLeakTest.java
index e7ce9a0..48c2444 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/TextViewerUndoManagerLeakTest.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/TextViewerUndoManagerLeakTest.java
@@ -49,7 +49,7 @@
 public class TextViewerUndoManagerLeakTest extends LeakTestCase {
 
 	@Rule
-	public LeakTestSetup projectsetup = new LeakTestSetup();
+	public LeakTestSetup projectSetup = new LeakTestSetup();
 
 	/** The maximum undo level. */
 	private static final int MAX_UNDO_LEVEL= 256;
diff --git a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/UndoManagerLeakTest.java b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/UndoManagerLeakTest.java
index 2c33c97..308cb72 100644
--- a/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/UndoManagerLeakTest.java
+++ b/org.eclipse.jdt.ui.tests/leaks/org/eclipse/jdt/ui/tests/leaks/UndoManagerLeakTest.java
@@ -47,7 +47,7 @@
 public class UndoManagerLeakTest extends LeakTestCase {
 
 	@Rule
-	public LeakTestSetup projectsetup = new LeakTestSetup();
+	public LeakTestSetup projectSetup = new LeakTestSetup();
 
 	/** The maximum undo level. */
 	private static final int MAX_UNDO_LEVEL= 256;
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/JdtPerformanceTestCaseCommon.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/JdtPerformanceTestCaseCommon.java
new file mode 100644
index 0000000..e92f415
--- /dev/null
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/JdtPerformanceTestCaseCommon.java
@@ -0,0 +1,112 @@
+/*******************************************************************************
+ * Copyright (c) 2020 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.jdt.ui.tests.performance;
+
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
+import org.eclipse.test.performance.Dimension;
+import org.eclipse.test.performance.PerformanceTestCaseJunit4;
+
+import org.eclipse.swt.widgets.Shell;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.jobs.IJobManager;
+import org.eclipse.core.runtime.jobs.Job;
+
+import org.eclipse.core.resources.ResourcesPlugin;
+
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+import org.eclipse.jdt.internal.ui.JavaPlugin;
+
+public class JdtPerformanceTestCaseCommon extends PerformanceTestCaseJunit4 {
+
+	protected void joinBackgroudActivities() throws CoreException {
+		// Join Building
+		boolean interrupted= true;
+		while (interrupted) {
+			try {
+				Job.getJobManager().join(ResourcesPlugin.FAMILY_AUTO_BUILD, null);
+				interrupted= false;
+			} catch (InterruptedException e) {
+				interrupted= true;
+			}
+		}
+		// Join indexing
+		JavaProjectHelper.performDummySearch();
+		// Join jobs. Maximal wait 1 minute before all jobs have completed
+		if(!joinJobs(0, 1 * 60 * 1000, 500)) {
+			JavaPlugin.logErrorMessage("Performance test " + tn.getMethodName() + " started with running background activity");
+		}
+	}
+
+	private static boolean joinJobs(long minTime, long maxTime, long intervalTime) {
+		long startTime= System.currentTimeMillis() + minTime;
+		runEventQueue();
+		while (System.currentTimeMillis() < startTime)
+			runEventQueue(intervalTime);
+
+		long endTime= maxTime > 0  && maxTime < Long.MAX_VALUE ? System.currentTimeMillis() + maxTime : Long.MAX_VALUE;
+		boolean calm= allJobsQuiet();
+		while (!calm && System.currentTimeMillis() < endTime) {
+			runEventQueue(intervalTime);
+			calm= allJobsQuiet();
+		}
+		return calm;
+	}
+
+	private static void sleep(int intervalTime) {
+		try {
+			Thread.sleep(intervalTime);
+		} catch (InterruptedException e) {
+		}
+	}
+
+	private static boolean allJobsQuiet() {
+		IJobManager jobManager= Job.getJobManager();
+		for (Job job : jobManager.find(null)) {
+			int state= job.getState();
+			if (state == Job.RUNNING || state == Job.WAITING)
+				return false;
+		}
+		return true;
+	}
+
+	private static void runEventQueue() {
+		IWorkbenchWindow window= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+		if (window != null)
+			runEventQueue(window.getShell());
+	}
+
+	private static void runEventQueue(Shell shell) {
+		while (shell.getDisplay().readAndDispatch()) {
+			// do nothing
+		}
+	}
+
+	private static void runEventQueue(long minTime) {
+		long nextCheck= System.currentTimeMillis() + minTime;
+		while (System.currentTimeMillis() < nextCheck) {
+			runEventQueue();
+			sleep(1);
+		}
+	}
+
+	protected void finishMeasurements() {
+		stopMeasuring();
+		commitMeasurements();
+		assertPerformanceInRelativeBand(Dimension.ELAPSED_PROCESS, -100, +10);
+	}
+}
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java
index e95a590..a169e52 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/CleanUpPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -20,10 +20,14 @@
 import java.util.Map;
 
 import org.junit.Assert;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExternalResource;
+import org.junit.runners.MethodSorters;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.test.OrderedTestSuite;
 import org.eclipse.test.performance.Dimension;
 
 import org.eclipse.core.runtime.CoreException;
@@ -51,7 +55,7 @@
 import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
 import org.eclipse.jdt.ui.cleanup.CleanUpRequirements;
 import org.eclipse.jdt.ui.cleanup.ICleanUp;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.fix.AbstractCleanUp;
@@ -72,22 +76,16 @@
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class CleanUpPerfTest extends JdtPerformanceTestCaseCommon {
 
-public class CleanUpPerfTest extends JdtPerformanceTestCase {
-
-	private static class MyTestSetup extends TestSetup {
+	private static class MyTestSetup extends ExternalResource {
 		public static final String SRC_CONTAINER= "src";
 
 		public static IJavaProject fJProject1;
 
-		public MyTestSetup(Test test) {
-			super(test);
-		}
-
 		@Override
-		protected void setUp() throws Exception {
+		public void before() throws Throwable {
 			fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 			Assert.assertNotNull("rt not found", JavaProjectHelper.addRTJar(fJProject1));
 			File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC_381);
@@ -95,34 +93,18 @@
 		}
 
 		@Override
-		protected void tearDown() throws Exception {
-			if (fJProject1 != null && fJProject1.exists())
-				JavaProjectHelper.delete(fJProject1);
+		public void after() {
+			try {
+				if (fJProject1 != null && fJProject1.exists())
+					JavaProjectHelper.delete(fJProject1);
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
 		}
 	}
 
-	public static Test suite() {
-		return new MyTestSetup(new OrderedTestSuite(CleanUpPerfTest.class, new String[] {
-			"testNullCleanUp",
-			"testAllCleanUps",
-			"testCodeStyleCleanUp",
-			"testControlStatementsCleanUp",
-			"testConvertLoopCleanUp",
-			"testExpressionsCleanUp",
-			"testJava50CleanUp",
-			"testStringCleanUp",
-			"testSortMembersCleanUp",
-			"testUnnecessaryCodeCleanUp",
-			"testUnusedCodeCleanUp",
-			"testVariableDeclarationCleanUp",
-			"testCodeFormatCleanUp",
-			"testOrganizeImports",
-		}));
-	}
-
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
-	}
+	@Rule
+	public MyTestSetup stup= new MyTestSetup();
 
 	private void addAllCUs(CleanUpRefactoring cleanUp, IJavaElement[] children) throws JavaModelException {
 		for (IJavaElement element : children) {
@@ -160,6 +142,7 @@
 		profileStore.writeProfiles(profiles, InstanceScope.INSTANCE);
 	}
 
+	@Test
 	public void testNullCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -177,6 +160,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testAllCleanUps() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -238,6 +222,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testCodeStyleCleanUp() throws Exception {
 		tagAsSummary("Clean Up - Code Style", Dimension.ELAPSED_PROCESS);
 
@@ -263,6 +248,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testControlStatementsCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -280,6 +266,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testConvertLoopCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -296,6 +283,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testExpressionsCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -312,6 +300,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testJava50CleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -329,6 +318,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testStringCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -344,6 +334,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testSortMembersCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -360,6 +351,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testUnnecessaryCodeCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -373,6 +365,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testUnusedCodeCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -394,6 +387,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testVariableDeclarationCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -412,6 +406,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testCodeFormatCleanUp() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
@@ -427,6 +422,7 @@
 		doCleanUp(cleanUpRefactoring);
 	}
 
+	@Test
 	public void testOrganizeImports() throws Exception {
 		CleanUpRefactoring cleanUpRefactoring= new CleanUpRefactoring();
 		addAllCUs(cleanUpRefactoring, MyTestSetup.fJProject1.getChildren());
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OpenTypePerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OpenTypePerfTest.java
index 6d54f64..83dcbcd 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OpenTypePerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OpenTypePerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,11 +13,15 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.performance.views;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
+import static org.junit.Assert.fail;
+
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExternalResource;
+import org.junit.runners.MethodSorters;
 
 import org.eclipse.jdt.testplugin.util.DisplayHelper;
-import org.eclipse.test.OrderedTestSuite;
 import org.eclipse.test.performance.Dimension;
 import org.eclipse.test.performance.Performance;
 
@@ -35,71 +39,57 @@
 import org.eclipse.jdt.ui.IJavaElementSearchConstants;
 import org.eclipse.jdt.ui.JavaUI;
 import org.eclipse.jdt.ui.dialogs.TypeSelectionExtension;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 import org.eclipse.jdt.ui.tests.performance.SWTTestProject;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.util.CoreUtility;
 
-public class OpenTypePerfTest extends JdtPerformanceTestCase {
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class OpenTypePerfTest extends JdtPerformanceTestCaseCommon {
 
 	private SelectionDialog fOpenTypeDialog;
 	private Shell fShell;
 
-	private static class MyTestSetup extends TestSetup {
+	private static class MyTestSetup extends ExternalResource {
 		private SWTTestProject fTestProject;
 		private boolean fAutoBuilding;
 
-		public MyTestSetup(Test test) {
-			super(test);
-		}
-
 		@Override
-		protected void setUp() throws Exception {
-			super.setUp();
+		public void before() throws Throwable {
 			fAutoBuilding= CoreUtility.setAutoBuilding(false);
 			fTestProject= new SWTTestProject();
 		}
 
 		@Override
-		protected void tearDown() throws Exception {
-			fTestProject.delete();
-			CoreUtility.setAutoBuilding(fAutoBuilding);
-			super.tearDown();
+		public void after() {
+			try {
+				fTestProject.delete();
+				CoreUtility.setAutoBuilding(fAutoBuilding);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 		}
 	}
 
-	public static Test suite() throws Exception {
-		OrderedTestSuite testSuite= new OrderedTestSuite(
-				OpenTypePerfTest.class,
-				new String[] {
-					"testColdException",
-					"testWarmException",
-					"testWarmException10",
-					"testWarmS10",
-					"testWarmOpenSWT",
-					"testWarmOpenSWTHistory10",
-				});
-		return new MyTestSetup(testSuite);
-	}
+	@Rule
+	public MyTestSetup stup= new MyTestSetup();
 
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
-	}
-
-	public  OpenTypePerfTest(String name) {
-		super(name);
+	@Override
+	public void setUp() throws Exception {
+		System.out.println("starting " + OpenTypePerfTest.class.getName() + "#" + tn.getMethodName());
+		super.setUp();
 	}
 
 	@Override
-	protected void setUp() throws Exception {
-		System.out.println("starting " + OpenTypePerfTest.class.getName() + "#" + getName());
-		super.setUp();
+	public void tearDown() throws Exception {
+		super.tearDown();
 	}
 
 	//---
 
-	public void testColdException() throws Exception {
+	@Test
+	public void testAColdException() throws Exception {
 		//cold
 		joinBackgroudActivities();
 		try {
@@ -110,7 +100,8 @@
 		}
 	}
 
-	public void testWarmException() throws Exception {
+	@Test
+	public void testBWarmException() throws Exception {
 		//warm
 		joinBackgroudActivities();
 		try {
@@ -121,7 +112,8 @@
 		}
 	}
 
-	public void testWarmException10() throws Exception {
+	@Test
+	public void testCWarmException10() throws Exception {
 		//warm, repeated
 		joinBackgroudActivities();
 		try {
@@ -134,7 +126,8 @@
 		}
 	}
 
-	public void testWarmS10() throws Exception {
+	@Test
+	public void testDWarmS10() throws Exception {
 		//warm, repeated, many matches
 		joinBackgroudActivities();
 		try {
@@ -147,7 +140,8 @@
 		}
 	}
 
-	public void testWarmOpenSWT() throws Exception {
+	@Test
+	public void testEWarmOpenSWT() throws Exception {
 		//warm, add SWT to history
 		joinBackgroudActivities();
 		try {
@@ -158,7 +152,8 @@
 		}
 	}
 
-	public void testWarmOpenSWTHistory10() throws Exception {
+	@Test
+	public void testFWarmOpenSWTHistory10() throws Exception {
 		//warm, repeated, open SWT from history
 		joinBackgroudActivities();
 		try {
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java
index 85246f8..ff91cb1 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/OrganizeImportsPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,19 +13,22 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.performance.views;
 
+import static org.junit.Assert.assertTrue;
+
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExternalResource;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.test.OrderedTestSuite;
 import org.eclipse.test.performance.Performance;
 import org.eclipse.test.performance.PerformanceMeter;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
 import org.eclipse.jdt.core.ICompilationUnit;
@@ -38,21 +41,17 @@
 import org.eclipse.jdt.core.manipulation.OrganizeImportsOperation;
 import org.eclipse.jdt.core.manipulation.SharedASTProviderCore;
 
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
-public class OrganizeImportsPerfTest extends JdtPerformanceTestCase {
+public class OrganizeImportsPerfTest extends JdtPerformanceTestCaseCommon {
 
-	private static class MyTestSetup extends TestSetup {
+	private static class MyTestSetup extends ExternalResource {
 		public static final String SRC_CONTAINER= "src";
 
 		public static IJavaProject fJProject1;
 
-		public MyTestSetup(Test test) {
-			super(test);
-		}
-
 		@Override
-		protected void setUp() throws Exception {
+		public void before() throws Throwable {
 			fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 			assertTrue("rt not found", JavaProjectHelper.addRTJar(fJProject1) != null);
 			File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC_381);
@@ -60,21 +59,19 @@
 		}
 
 		@Override
-		protected void tearDown() throws Exception {
-			if (fJProject1 != null && fJProject1.exists())
-				JavaProjectHelper.delete(fJProject1);
+		public void after() {
+			try {
+				if (fJProject1 != null && fJProject1.exists()) {
+					JavaProjectHelper.delete(fJProject1);
+				}
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
 		}
 	}
 
-	public static Test suite() {
-		return new MyTestSetup(new OrderedTestSuite(OrganizeImportsPerfTest.class, new String[] {
-			"testOrganizeImport"
-		}));
-	}
-
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
-	}
+	@Rule
+	public MyTestSetup stup= new MyTestSetup();
 
 	private void addAllCUs(IJavaElement[] children, List<IJavaElement> result) throws JavaModelException {
 		for (IJavaElement element : children) {
@@ -98,6 +95,7 @@
 		return result;
 	}
 
+	@Test
 	public void testOrganizeImport() throws Exception {
 		measure(Performance.getDefault().getNullPerformanceMeter(), 10);
 		measure(fPerformanceMeter, 10);
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerColdPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerColdPerfTest.java
index f7a8aeb..e0f3097 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerColdPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerColdPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.performance.views;
 
-import junit.framework.Test;
+import org.junit.Test;
 
-import org.eclipse.test.OrderedTestSuite;
 import org.eclipse.test.performance.Dimension;
 import org.eclipse.test.performance.Performance;
 
@@ -25,19 +24,9 @@
 import org.eclipse.ui.IWorkbenchWindow;
 import org.eclipse.ui.PlatformUI;
 
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
-public class PackageExplorerColdPerfTest extends JdtPerformanceTestCase {
-
-	public static Test suite() {
-		return new OrderedTestSuite(PackageExplorerColdPerfTest.class, new String[] {
-			"testOpen"
-		});
-	}
-
-	public PackageExplorerColdPerfTest(String name) {
-		super(name);
-	}
+public class PackageExplorerColdPerfTest extends JdtPerformanceTestCaseCommon {
 
 	@Override
 	public final void finishMeasurements() {
@@ -51,6 +40,7 @@
 		super.startMeasuring();
 	}
 
+	@Test
 	public void testOpen() throws Exception {
 		IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		IWorkbenchPage page= activeWorkbenchWindow.getActivePage();
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerEmptyPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerEmptyPerfTest.java
index 5a04a75..bce34b7 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerEmptyPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerEmptyPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,9 +13,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.performance.views;
 
-import junit.framework.Test;
-
-import org.eclipse.test.OrderedTestSuite;
+import org.junit.Test;
 
 import org.eclipse.core.resources.ResourcesPlugin;
 
@@ -24,20 +22,11 @@
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
-public class PackageExplorerEmptyPerfTest extends JdtPerformanceTestCase {
+public class PackageExplorerEmptyPerfTest extends JdtPerformanceTestCaseCommon {
 
-	public static Test suite() {
-		return new OrderedTestSuite(PackageExplorerEmptyPerfTest.class, new String[] {
-			"testOpen"
-		});
-	}
-
-	public PackageExplorerEmptyPerfTest(String name) {
-		super(name);
-	}
-
+	@Test
 	public void testOpen() throws Exception {
 		IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		IWorkbenchPage page= activeWorkbenchWindow.getActivePage();
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java
index f2f4166..cef1b12 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -14,16 +14,19 @@
 
 package org.eclipse.jdt.ui.tests.performance.views;
 
+import static org.junit.Assert.assertTrue;
+
 import java.io.File;
 import java.util.zip.ZipFile;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-import junit.framework.TestSuite;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExternalResource;
+import org.junit.runners.MethodSorters;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.test.OrderedTestSuite;
 
 import org.eclipse.core.runtime.CoreException;
 
@@ -44,22 +47,20 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 
 import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
 import org.eclipse.jdt.internal.ui.packageview.PackageExplorerPart;
 
-public class PackageExplorerPerfTest extends JdtPerformanceTestCase {
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class PackageExplorerPerfTest extends JdtPerformanceTestCaseCommon {
 
-	private static class MyTestSetup extends TestSetup {
+	private static class MyTestSetup extends ExternalResource {
 		public static final String SRC_CONTAINER= "src";
 
 		public static IJavaProject fJProject1;
 
-		public MyTestSetup(Test test) {
-			super(test);
-		}
 		@Override
-		protected void setUp() throws Exception {
+		public void before() throws Throwable {
 			fJProject1= JavaProjectHelper.createJavaProject("Testing", "bin");
 			// we must make sure that the performance test are compatible to 2.1.3 & 3.0 so use rt13
 			assertTrue("rt not found", JavaProjectHelper.addRTJar13(fJProject1) != null);
@@ -67,29 +68,21 @@
 			JavaProjectHelper.addSourceContainerWithImport(fJProject1, SRC_CONTAINER, junitSrcArchive, JavaProjectHelper.JUNIT_SRC_ENCODING);
 		}
 		@Override
-		protected void tearDown() throws Exception {
-			if (fJProject1 != null && fJProject1.exists())
-				JavaProjectHelper.delete(fJProject1);
+		public void after() {
+			try {
+				if (fJProject1 != null && fJProject1.exists())
+					JavaProjectHelper.delete(fJProject1);
+			} catch (Exception e) {
+				e.printStackTrace();
+			}
 		}
 	}
 
-	public static Test suite() {
-		TestSuite suite= new OrderedTestSuite(PackageExplorerPerfTest.class, new String[] {
-			"testOpen", "testSelect", "testExpand",
-			"testRefreshClassFolder"
-		});
-		return new MyTestSetup(suite);
-	}
+	@Rule
+	public MyTestSetup stup= new MyTestSetup();
 
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
-	}
-
-	public PackageExplorerPerfTest(String name) {
-		super(name);
-	}
-
-	public void testOpen() throws Exception {
+	@Test
+	public void testAOpen() throws Exception {
 		IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		IWorkbenchPage page= activeWorkbenchWindow.getActivePage();
 		page.close();
@@ -100,7 +93,8 @@
 		finishMeasurements();
 	}
 
-	public void testSelect() throws Exception {
+	@Test
+	public void testBSelect() throws Exception {
 		joinBackgroudActivities();
 		TreeViewer viewer= getViewer();
 		StructuredSelection selection= new StructuredSelection(MyTestSetup.fJProject1);
@@ -109,7 +103,8 @@
 		finishMeasurements();
 	}
 
-	public void testExpand() throws Exception {
+	@Test
+	public void testCExpand() throws Exception {
 		joinBackgroudActivities();
 		TreeViewer viewer= getViewer();
 		startMeasuring();
@@ -118,7 +113,8 @@
 	}
 
 	// test for Bug 311212: [package explorer] Performance problem with refreshing external class folders
-	public void testRefreshClassFolder() throws Throwable {
+	@Test
+	public void testDRefreshClassFolder() throws Throwable {
 		// Import rtstubs a few times. Caveat: Only import class files, but not META-INF.
 		// PackageExplorerContentProvider#processResourceDelta(..) refreshes the parent if a resource changes.
 		// This is not what we want to test.
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWarmPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWarmPerfTest.java
index 71f3727..4dcdc5e 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWarmPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWarmPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,9 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.performance.views;
 
-import junit.framework.Test;
+import org.junit.Test;
 
-import org.eclipse.test.OrderedTestSuite;
 import org.eclipse.test.performance.Dimension;
 import org.eclipse.test.performance.Performance;
 
@@ -26,20 +25,11 @@
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
-public class PackageExplorerWarmPerfTest extends JdtPerformanceTestCase {
+public class PackageExplorerWarmPerfTest extends JdtPerformanceTestCaseCommon {
 
-	public static Test suite() {
-		return new OrderedTestSuite(PackageExplorerWarmPerfTest.class, new String[] {
-			"testOpen"
-		});
-	}
-
-	public PackageExplorerWarmPerfTest(String name) {
-		super(name);
-	}
-
+	@Test
 	public void testOpen() throws Exception {
 		IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		IWorkbenchPage page= activeWorkbenchWindow.getActivePage();
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspacePerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspacePerfTest.java
index 49e2a28..4e8f05e 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspacePerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspacePerfTest.java
@@ -14,10 +14,7 @@
 
 package org.eclipse.jdt.ui.tests.performance.views;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.test.OrderedTestSuite;
+import org.junit.Test;
 
 import org.eclipse.core.resources.ResourcesPlugin;
 
@@ -26,18 +23,18 @@
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
-public class PackageExplorerWorkspacePerfTest extends JdtPerformanceTestCase {
+public class PackageExplorerWorkspacePerfTest extends JdtPerformanceTestCaseCommon {
 
-	private static class MyTestSetup extends TestSetup {
-
-		public MyTestSetup(Test test) {
-			super(test);
-		}
-
-		@Override
-		protected void setUp() throws Exception {
+//	private static class MyTestSetup extends TestSetup {
+//
+//		public MyTestSetup(Test test) {
+//			super(test);
+//		}
+//
+//		@Override
+//		protected void setUp() throws Exception {
 //			IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
 //			if (model.getJavaProjects().length == 0) {
 //				ExternalModelManager manager= PDECore.getDefault().getExternalModelManager();
@@ -50,28 +47,14 @@
 //				});
 //				ResourcesPlugin.getWorkspace().run(op, new NullProgressMonitor());
 //			}
-		}
+//		}
+//
+//		@Override
+//		protected void tearDown() throws Exception {
+//		}
+//	}
 
-		@Override
-		protected void tearDown() throws Exception {
-		}
-	}
-
-	public static Test suite() {
-		OrderedTestSuite suite= new OrderedTestSuite(PackageExplorerWorkspacePerfTest.class, new String[] {
-			"testOpen"
-		});
-		return new MyTestSetup(suite);
-	}
-
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
-	}
-
-	public PackageExplorerWorkspacePerfTest(String name) {
-		super(name);
-	}
-
+	@Test
 	public void testOpen() throws Exception {
 		IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		IWorkbenchPage page= activeWorkbenchWindow.getActivePage();
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspaceWarmPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspaceWarmPerfTest.java
index 47727ac..996e0a2 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspaceWarmPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/PackageExplorerWorkspaceWarmPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,10 +13,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.performance.views;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
-
-import org.eclipse.test.OrderedTestSuite;
+import org.junit.Test;
 
 import org.eclipse.core.resources.ResourcesPlugin;
 
@@ -25,18 +22,18 @@
 import org.eclipse.ui.PlatformUI;
 
 import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
-public class PackageExplorerWorkspaceWarmPerfTest extends JdtPerformanceTestCase {
+public class PackageExplorerWorkspaceWarmPerfTest extends JdtPerformanceTestCaseCommon {
 
-	private static class MyTestSetup extends TestSetup {
-
-		public MyTestSetup(Test test) {
-			super(test);
-		}
-
-		@Override
-		protected void setUp() throws Exception {
+//	private static class MyTestSetup extends TestSetup {
+//
+//		public MyTestSetup(Test test) {
+//			super(test);
+//		}
+//
+//		@Override
+//		protected void setUp() throws Exception {
 //			IJavaModel model= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
 //			if (model.getJavaProjects().length == 0) {
 //				ExternalModelManager manager= PDECore.getDefault().getExternalModelManager();
@@ -49,28 +46,14 @@
 //				});
 //				ResourcesPlugin.getWorkspace().run(op, new NullProgressMonitor());
 //			}
-		}
+//		}
+//
+//		@Override
+//		protected void tearDown() throws Exception {
+//		}
+//	}
 
-		@Override
-		protected void tearDown() throws Exception {
-		}
-	}
-
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
-	}
-
-	public static Test suite() {
-		OrderedTestSuite suite= new OrderedTestSuite(PackageExplorerWorkspaceWarmPerfTest.class, new String[] {
-			"testOpen"
-		});
-		return new MyTestSetup(suite);
-	}
-
-	public PackageExplorerWorkspaceWarmPerfTest(String name) {
-		super(name);
-	}
-
+	@Test
 	public void testOpen() throws Exception {
 		IWorkbenchWindow activeWorkbenchWindow= PlatformUI.getWorkbench().getActiveWorkbenchWindow();
 		IWorkbenchPage page= activeWorkbenchWindow.getActivePage();
diff --git a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/TypeHierarchyPerfTest.java b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/TypeHierarchyPerfTest.java
index fe6e54d..40bf40f 100644
--- a/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/TypeHierarchyPerfTest.java
+++ b/org.eclipse.jdt.ui.tests/performance/org/eclipse/jdt/ui/tests/performance/views/TypeHierarchyPerfTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,17 +13,23 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.performance.views;
 
+import static org.junit.Assert.assertTrue;
+
 import java.io.File;
 
-import junit.extensions.TestSetup;
-import junit.framework.Test;
+import org.junit.FixMethodOrder;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExternalResource;
+import org.junit.runners.MethodSorters;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.JavaTestPlugin;
-import org.eclipse.test.OrderedTestSuite;
 import org.eclipse.test.performance.Dimension;
 import org.eclipse.test.performance.Performance;
 
+import org.eclipse.core.runtime.CoreException;
+
 import org.eclipse.core.resources.ResourcesPlugin;
 
 import org.eclipse.ui.IWorkbenchPage;
@@ -35,26 +41,23 @@
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 
 import org.eclipse.jdt.ui.JavaUI;
-import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCase;
+import org.eclipse.jdt.ui.tests.performance.JdtPerformanceTestCaseCommon;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.typehierarchy.TypeHierarchyViewPart;
 import org.eclipse.jdt.internal.ui.util.OpenTypeHierarchyUtil;
 
-public class TypeHierarchyPerfTest extends JdtPerformanceTestCase {
+@FixMethodOrder(MethodSorters.NAME_ASCENDING)
+public class TypeHierarchyPerfTest extends JdtPerformanceTestCaseCommon {
 
-	private static class MyTestSetup extends TestSetup {
+	private static class MyTestSetup extends ExternalResource {
 		public static final String SRC_CONTAINER= "src";
 
 		public static IJavaProject fJProject1;
 		public static IPackageFragmentRoot fJunitSrcRoot;
 
-		public MyTestSetup(Test test) {
-			super(test);
-		}
-
 		@Override
-		protected void setUp() throws Exception {
+		public void before() throws Throwable {
 			fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 			// we must make sure that the performance test are compatible to 2.1.3 & 3.0 so use rt13
 			assertTrue("rt not found", JavaProjectHelper.addRTJar13(fJProject1) != null);
@@ -63,32 +66,21 @@
 		}
 
 		@Override
-		protected void tearDown() throws Exception {
-			if (fJProject1 != null && fJProject1.exists())
-				JavaProjectHelper.delete(fJProject1);
+		public void after() {
+			try {
+				if (fJProject1 != null && fJProject1.exists())
+					JavaProjectHelper.delete(fJProject1);
+			} catch (CoreException e) {
+				e.printStackTrace();
+			}
 		}
 	}
 
-	public static Test suite() {
-		OrderedTestSuite testSuite= new OrderedTestSuite(
-				TypeHierarchyPerfTest.class,
-				new String[] {
-					"testOpenObjectHierarchy",
-					"testOpenCollHierarchy",
-					"testOpenObjectHierarchy2",
-				});
-		return new MyTestSetup(testSuite);
-	}
+	@Rule
+	public MyTestSetup stup= new MyTestSetup();
 
-	public static Test setUpTest(Test someTest) {
-		return new MyTestSetup(someTest);
-	}
-
-	public TypeHierarchyPerfTest(String name) {
-		super(name);
-	}
-
-	public void testOpenObjectHierarchy() throws Exception {
+	@Test
+	public void testAOpenObjectHierarchy() throws Exception {
 		//cold
 
 		// make sure stuff like the Intro view gets closed and we start with a clean Java perspective:
@@ -101,13 +93,15 @@
 		Performance.getDefault().assertPerformanceInAbsoluteBand(fPerformanceMeter, Dimension.ELAPSED_PROCESS, 0, 2000);
 	}
 
-	public void testOpenCollHierarchy() throws Exception {
+	@Test
+	public void testBOpenCollHierarchy() throws Exception {
 		//junit source folder
 		measureOpenHierarchy(MyTestSetup.fJunitSrcRoot);
 		Performance.getDefault().assertPerformanceInAbsoluteBand(fPerformanceMeter, Dimension.ELAPSED_PROCESS, 0, 1000);
 	}
 
-	public void testOpenObjectHierarchy2() throws Exception {
+	@Test
+	public void testCOpenObjectHierarchy2() throws Exception {
 		//warm
 		tagAsSummary("Open type hierarchy on Object", Dimension.ELAPSED_PROCESS);
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTNodesInsertTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTNodesInsertTest.java
index 67a5590..62385c2 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTNodesInsertTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTNodesInsertTest.java
@@ -60,7 +60,7 @@
 	@Before
 	public void setUp() throws Exception {
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
@@ -69,7 +69,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTProviderTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTProviderTest.java
index 6c3ca82..0bdbdf4 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTProviderTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ASTProviderTest.java
@@ -105,14 +105,14 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java
index d076f3c..8142119 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AbstractBindingLabelsTest.java
@@ -22,41 +22,18 @@
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import org.junit.After;
-import org.junit.Before;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
-import org.eclipse.jface.preference.IPreferenceStore;
-
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTParser;
 import org.eclipse.jdt.core.dom.IBinding;
 
-import org.eclipse.jdt.ui.PreferenceConstants;
-import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
-
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks;
 
 public abstract class AbstractBindingLabelsTest extends CoreTests {
 	protected IJavaProject fJProject1;
 	protected boolean fHaveSource= true;
 
-	@Before
-	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
-
-		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
-		store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, false);
-	}
-
-	@After
-	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
-	}
-
 	protected String getBindingLabel(IJavaElement elem, long flags) {
 		ASTParser parser= ASTParser.newParser(AST.JLS15);
 		parser.setResolveBindings(true);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AddImportTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AddImportTest.java
index 0407237..d62e77e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AddImportTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/AddImportTest.java
@@ -68,7 +68,7 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		JavaProjectHelper.set15CompilerOptions(fJProject1);
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
@@ -78,7 +78,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java
index 6d4e994..57d4a03 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels18Test.java
@@ -57,18 +57,16 @@
 	@Rule
 	public Java1d8ProjectTestSetup j18p= new Java1d8ProjectTestSetup();
 
-	@Override
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= j18p.getProject();
 		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
 		store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, false);
 	}
 
-	@Override
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j18p.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels9Test.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels9Test.java
index 38910cb..1e2dc60 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels9Test.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabels9Test.java
@@ -13,7 +13,6 @@
 import static org.junit.Assert.assertEquals;
 
 import org.junit.After;
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
@@ -36,19 +35,16 @@
 	@Rule
 	public Java9ProjectTestSetup j9p= new Java9ProjectTestSetup();
 
-	@Override
-	@Before
 	public void setUp() throws Exception {
-		fJProject1= Java9ProjectTestSetup.getProject();
+		fJProject1= j9p.getProject();
 
 		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
 		store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, false);
 	}
 
-	@Override
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java9ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j9p.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java
index 65bb629..8919980 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/BindingLabelsTest.java
@@ -13,6 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.core;
 
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 
@@ -20,6 +22,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.jface.preference.IPreferenceStore;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jdt.core.IMethod;
@@ -34,6 +38,7 @@
 import org.eclipse.jdt.core.dom.ITypeBinding;
 
 import org.eclipse.jdt.ui.JavaElementLabels;
+import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
 import org.eclipse.jdt.internal.ui.viewsupport.JavaElementLinks;
@@ -46,6 +51,19 @@
 	@Rule
 	public ProjectTestSetup pts= new ProjectTestSetup();
 
+	@Before
+	public void setUp() throws Exception {
+		fJProject1= pts.getProject();
+
+		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
+		store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, false);
+	}
+
+	@After
+	public void tearDown() throws Exception {
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
+	}
+
 	@Test
 	public void testTypeLabelOuter() throws Exception {
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest.java
index ab2325b..addb842 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest.java
@@ -67,7 +67,7 @@
 	@Before
 	public void setUp() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		JavaProjectHelper.addRequiredProject(fJProject1, ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredProject(fJProject1, pts.getProject());
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest9.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest9.java
index d95f5e8..ed0b78e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest9.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterTest9.java
@@ -40,7 +40,7 @@
 	@Before
 	public void setUp() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		JavaProjectHelper.addRequiredProject(fJProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredProject(fJProject1, j9p.getProject());
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java
index 0cc7394..00852a9 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/CodeFormatterUtilTest.java
@@ -63,7 +63,7 @@
 	@Before
 	public void setUp() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		JavaProjectHelper.addRequiredProject(fJProject1, ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredProject(fJProject1, pts.getProject());
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
 		options.put(DefaultCodeFormatterConstants.FORMATTER_TAB_CHAR, JavaCore.SPACE);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
index 83f831b..887d99f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest.java
@@ -63,7 +63,7 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
 		options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, String.valueOf(99));
@@ -73,7 +73,7 @@
 	@After
 	public void tearDown() throws Exception {
 		setOrganizeImportSettings(null, 99, 99, fJProject1);
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	protected IChooseImportQuery createQuery(final String name, final String[] choices, final int[] nEntries) {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest1d8.java
index 4886ec2..5e2dd30 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ImportOrganizeTest1d8.java
@@ -45,7 +45,7 @@
 
 	@Before
 	public void before() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= j18p.getProject();
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
 		options.put(DefaultCodeFormatterConstants.FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE, String.valueOf(99));
@@ -56,7 +56,7 @@
 	@After
 	public void after() throws Exception {
 		setOrganizeImportSettings(null, 99, 99, fJProject1);
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j18p.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java
index 00d001f..10eced4 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JDTFlagsTest18.java
@@ -13,6 +13,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.core;
 
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
@@ -20,7 +21,6 @@
 import java.util.Hashtable;
 
 import org.junit.After;
-import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -73,13 +73,13 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= j18p.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j18p.getDefaultClasspath());
 	}
 
 	protected CompilationUnit getCompilationUnitNode(String source) {
@@ -104,23 +104,23 @@
 		ICompilationUnit cUnit= pack1.createCompilationUnit("Snippet.java", buf.toString(), false, null);
 		int offset= cUnit.getSource().indexOf("public static");
 		IMethod method= (IMethod)cUnit.getElementAt(offset);
-		Assert.assertTrue(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isAbstract(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
+		assertTrue(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
 
 		ASTParser p= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		p.setProject(fJProject1);
 		p.setBindingsRecovery(true);
 		try {
 			IMethodBinding binding= (IMethodBinding)p.createBindings(new IJavaElement[] { method }, null)[0];
-			Assert.assertTrue(JdtFlags.isStatic(binding));
-			Assert.assertFalse(JdtFlags.isAbstract(binding));
-			Assert.assertFalse(JdtFlags.isDefaultMethod(binding));
+			assertTrue(JdtFlags.isStatic(binding));
+			assertFalse(JdtFlags.isAbstract(binding));
+			assertFalse(JdtFlags.isDefaultMethod(binding));
 		} catch (OperationCanceledException e) {
 		}
 
 		MethodDeclaration methodNode= ASTNodeSearchUtil.getMethodDeclarationNode(method, getCompilationUnitNode(buf.toString()));
-		Assert.assertTrue(JdtFlags.isStatic(methodNode));
+		assertTrue(JdtFlags.isStatic(methodNode));
 	}
 
 	@Test
@@ -138,8 +138,8 @@
 		int offset= cUnit.getSource().indexOf("enum E");
 		IJavaElement elem= cUnit.getElementAt(offset);
 		EnumDeclaration enumNode= ASTNodeSearchUtil.getEnumDeclarationNode((IType)elem, getCompilationUnitNode(buf.toString()));
-		Assert.assertTrue(JdtFlags.isStatic(enumNode));
-		Assert.assertTrue(JdtFlags.isStatic((IType)elem));
+		assertTrue(JdtFlags.isStatic(enumNode));
+		assertTrue(JdtFlags.isStatic((IType)elem));
 	}
 
 	@Test
@@ -171,17 +171,17 @@
 		int offset= cUnit.getSource().indexOf("enum CoffeeSize");
 		IJavaElement elem= cUnit.getElementAt(offset);
 		IMember type= (IMember)elem;
-		Assert.assertTrue(JdtFlags.isStatic(type));
-		Assert.assertFalse(JdtFlags.isAbstract(type));
+		assertTrue(JdtFlags.isStatic(type));
+		assertFalse(JdtFlags.isAbstract(type));
 
 		EnumDeclaration enumNode= ASTNodeSearchUtil.getEnumDeclarationNode((IType)elem, getCompilationUnitNode(buf.toString()));
-		Assert.assertTrue(JdtFlags.isStatic(enumNode));
+		assertTrue(JdtFlags.isStatic(enumNode));
 
 		// testcase for isF an enum
-		Assert.assertFalse(JdtFlags.isFinal(type));
+		assertFalse(JdtFlags.isFinal(type));
 		offset= cUnit.getSource().indexOf("enum Colors");
 		type= (IMember)cUnit.getElementAt(offset);
-		Assert.assertTrue(JdtFlags.isFinal(type));
+		assertTrue(JdtFlags.isFinal(type));
 	}
 
 	@Test
@@ -210,26 +210,26 @@
 		CompilationUnit cuNode= getCompilationUnitNode(buf.toString());
 		IJavaElement javaElem= cUnit.getElementAt(offset);
 		IMember element= (IMember)javaElem;
-		Assert.assertTrue(JdtFlags.isStatic(element));
-		Assert.assertFalse(JdtFlags.isAbstract(element));
+		assertTrue(JdtFlags.isStatic(element));
+		assertFalse(JdtFlags.isAbstract(element));
 
 		EnumDeclaration enumNode= ASTNodeSearchUtil.getEnumDeclarationNode((IType)javaElem, cuNode);
-		Assert.assertTrue(JdtFlags.isStatic(enumNode));
+		assertTrue(JdtFlags.isStatic(enumNode));
 
 		// testing enum constant
 		offset= cUnit.getSource().indexOf("RED");
 		javaElem= cUnit.getElementAt(offset);
 		element= (IMember)javaElem;
-		Assert.assertTrue(JdtFlags.isStatic(element));
-		Assert.assertFalse(JdtFlags.isAbstract(element));
+		assertTrue(JdtFlags.isStatic(element));
+		assertFalse(JdtFlags.isAbstract(element));
 
 		EnumConstantDeclaration enumConst= ASTNodeSearchUtil.getEnumConstantDeclaration((IField)javaElem, cuNode);
-		Assert.assertTrue(JdtFlags.isStatic(enumConst));
+		assertTrue(JdtFlags.isStatic(enumConst));
 
 		// testing enum constant
 		offset= cUnit.getSource().indexOf("Runnable r");
 		element= (IMember)cUnit.getElementAt(offset);
-		Assert.assertFalse(JdtFlags.isFinal(element));
+		assertFalse(JdtFlags.isFinal(element));
 
 	}
 
@@ -246,7 +246,7 @@
 		ICompilationUnit cUnit= pack1.createCompilationUnit("Snippet.java", buf.toString(), false, null);
 		int offset= cUnit.getSource().indexOf("enum Color");
 		IMember element= (IMember)cUnit.getElementAt(offset);
-		Assert.assertFalse(JdtFlags.isFinal(element));
+		assertFalse(JdtFlags.isFinal(element));
 	}
 
 	@Test
@@ -257,16 +257,16 @@
 		IPackageFragmentRoot jarRoot= JavaProjectHelper.addLibraryWithImport(fJProject1, new Path(clsJarPath.getAbsolutePath()), null, null);
 		fJProject1.open(null);
 		fJProject1.getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
-		Assert.assertTrue(jarRoot.exists());
-		Assert.assertTrue(jarRoot.isArchive());
+		assertTrue(jarRoot.exists());
+		assertTrue(jarRoot.isArchive());
 		IPackageFragment pf= jarRoot.getPackageFragment("pack1");//$NON-NLS-1$
-		Assert.assertTrue(pf.exists());
+		assertTrue(pf.exists());
 		IOrdinaryClassFile classFile2= (IOrdinaryClassFile) pf.getClassFile("Snippet.class");
 		IMethod[] clsFile= classFile2.getType().getMethods();
 		IMethod method= clsFile[0];
-		Assert.assertTrue(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isAbstract(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
+		assertTrue(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
 	}
 
 	@Test
@@ -282,18 +282,18 @@
 		ICompilationUnit cUnit= pack1.createCompilationUnit("Snippet.java", buf.toString(), false, null);
 		int offset= cUnit.getSource().indexOf("public default");
 		IMethod method= (IMethod)cUnit.getElementAt(offset);
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isAbstract(method));
-		Assert.assertTrue(JdtFlags.isDefaultMethod(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isAbstract(method));
+		assertTrue(JdtFlags.isDefaultMethod(method));
 
 		ASTParser p= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		p.setProject(pack1.getJavaProject());
 		p.setBindingsRecovery(true);
 		try {
 			IMethodBinding binding= (IMethodBinding)p.createBindings(new IJavaElement[] { method }, null)[0];
-			Assert.assertFalse(JdtFlags.isStatic(binding));
-			Assert.assertFalse(JdtFlags.isAbstract(binding));
-			Assert.assertTrue(JdtFlags.isDefaultMethod(binding));
+			assertFalse(JdtFlags.isStatic(binding));
+			assertFalse(JdtFlags.isAbstract(binding));
+			assertTrue(JdtFlags.isDefaultMethod(binding));
 		} catch (OperationCanceledException e) {
 		}
 	}
@@ -306,15 +306,15 @@
 		IPackageFragmentRoot jarRoot= JavaProjectHelper.addLibraryWithImport(fJProject1, new Path(clsJarPath.getAbsolutePath()), null, null);
 		fJProject1.open(null);
 		fJProject1.getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
-		Assert.assertTrue(jarRoot.exists());
-		Assert.assertTrue(jarRoot.isArchive());
+		assertTrue(jarRoot.exists());
+		assertTrue(jarRoot.isArchive());
 		IPackageFragment pf= jarRoot.getPackageFragment("pack1");//$NON-NLS-1$
-		Assert.assertTrue(pf.exists());
+		assertTrue(pf.exists());
 		IOrdinaryClassFile classFile2= (IOrdinaryClassFile) pf.getClassFile("Snippet.class");
 		IMethod method= classFile2.getType().getMethod("defaultMethod", null);
-		Assert.assertTrue(JdtFlags.isDefaultMethod(method));
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isAbstract(method));
+		assertTrue(JdtFlags.isDefaultMethod(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isAbstract(method));
 	}
 
 	@Test
@@ -333,35 +333,35 @@
 		ICompilationUnit cUnit= pack1.createCompilationUnit("Snippet.java", buf.toString(), false, null);
 		int offset= cUnit.getSource().indexOf("public String notDefaultMethod");
 		IMethod method= (IMethod)cUnit.getElementAt(offset);
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isAbstract(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
 
 		ASTParser p= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		p.setProject(pack1.getJavaProject());
 		p.setBindingsRecovery(true);
 		try {
 			IMethodBinding binding= (IMethodBinding)p.createBindings(new IJavaElement[] { method }, null)[0];
-			Assert.assertFalse(JdtFlags.isStatic(binding));
-			Assert.assertFalse(JdtFlags.isAbstract(binding));
-			Assert.assertFalse(JdtFlags.isDefaultMethod(binding));
+			assertFalse(JdtFlags.isStatic(binding));
+			assertFalse(JdtFlags.isAbstract(binding));
+			assertFalse(JdtFlags.isDefaultMethod(binding));
 		} catch (OperationCanceledException e) {
 		}
 
 		offset= cUnit.getSource().indexOf("public String notDefaultIntMet");
 		method= (IMethod)cUnit.getElementAt(offset);
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertTrue(JdtFlags.isAbstract(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertTrue(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
 
 		p= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		p.setProject(pack1.getJavaProject());
 		p.setBindingsRecovery(true);
 		try {
 			IMethodBinding binding= (IMethodBinding)p.createBindings(new IJavaElement[] { method }, null)[0];
-			Assert.assertFalse(JdtFlags.isStatic(binding));
-			Assert.assertTrue(JdtFlags.isAbstract(binding));
-			Assert.assertFalse(JdtFlags.isDefaultMethod(binding));
+			assertFalse(JdtFlags.isStatic(binding));
+			assertTrue(JdtFlags.isAbstract(binding));
+			assertFalse(JdtFlags.isDefaultMethod(binding));
 		} catch (OperationCanceledException e) {
 		}
 	}
@@ -378,21 +378,21 @@
 		ICompilationUnit cUnit= pack1.createCompilationUnit("Snippet.java", buf.toString(), false, null);
 		int offset= cUnit.getSource().indexOf("float");
 		IMethod method= (IMethod)cUnit.getElementAt(offset);
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
-		Assert.assertTrue(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
+		assertTrue(JdtFlags.isAbstract(method));
 
 		MethodDeclaration methodNode= ASTNodeSearchUtil.getMethodDeclarationNode(method, getCompilationUnitNode(buf.toString()));
-		Assert.assertFalse(JdtFlags.isStatic(methodNode));
+		assertFalse(JdtFlags.isStatic(methodNode));
 
 		ASTParser p= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		p.setProject(pack1.getJavaProject());
 		p.setBindingsRecovery(true);
 		try {
 			IMethodBinding binding= (IMethodBinding)p.createBindings(new IJavaElement[] { method }, null)[0];
-			Assert.assertFalse(JdtFlags.isStatic(binding));
-			Assert.assertTrue(JdtFlags.isAbstract(binding));
-			Assert.assertFalse(JdtFlags.isDefaultMethod(binding));
+			assertFalse(JdtFlags.isStatic(binding));
+			assertTrue(JdtFlags.isAbstract(binding));
+			assertFalse(JdtFlags.isDefaultMethod(binding));
 		} catch (OperationCanceledException e) {
 		}
 	}
@@ -409,18 +409,18 @@
 		ICompilationUnit cUnit= pack1.createCompilationUnit("Snippet.java", buf.toString(), false, null);
 		int offset= cUnit.getSource().indexOf("public abstract");
 		IMethod method= (IMethod)cUnit.getElementAt(offset);
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
-		Assert.assertTrue(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
+		assertTrue(JdtFlags.isAbstract(method));
 
 		ASTParser p= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		p.setProject(pack1.getJavaProject());
 		p.setBindingsRecovery(true);
 		try {
 			IMethodBinding binding= (IMethodBinding)p.createBindings(new IJavaElement[] { method }, null)[0];
-			Assert.assertFalse(JdtFlags.isStatic(binding));
-			Assert.assertTrue(JdtFlags.isAbstract(binding));
-			Assert.assertFalse(JdtFlags.isDefaultMethod(binding));
+			assertFalse(JdtFlags.isStatic(binding));
+			assertTrue(JdtFlags.isAbstract(binding));
+			assertFalse(JdtFlags.isDefaultMethod(binding));
 		} catch (OperationCanceledException e) {
 		}
 	}
@@ -433,15 +433,15 @@
 		IPackageFragmentRoot jarRoot= JavaProjectHelper.addLibraryWithImport(fJProject1, new Path(clsJarPath.getAbsolutePath()), null, null);
 		fJProject1.open(null);
 		fJProject1.getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
-		Assert.assertTrue(jarRoot.exists());
-		Assert.assertTrue(jarRoot.isArchive());
+		assertTrue(jarRoot.exists());
+		assertTrue(jarRoot.isArchive());
 		IPackageFragment pf= jarRoot.getPackageFragment("pack1");//$NON-NLS-1$
-		Assert.assertTrue(pf.exists());
+		assertTrue(pf.exists());
 		IOrdinaryClassFile classFile2= (IOrdinaryClassFile) pf.getClassFile("Snippet.class");
 		IMethod method= classFile2.getType().getMethod("explicitAbstractMethod", null);
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
-		Assert.assertTrue(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
+		assertTrue(JdtFlags.isAbstract(method));
 	}
 
 	@Test
@@ -452,15 +452,15 @@
 		IPackageFragmentRoot jarRoot= JavaProjectHelper.addLibraryWithImport(fJProject1, new Path(clsJarPath.getAbsolutePath()), null, null);
 		fJProject1.open(null);
 		fJProject1.getProject().refreshLocal(IResource.DEPTH_INFINITE, null);
-		Assert.assertTrue(jarRoot.exists());
-		Assert.assertTrue(jarRoot.isArchive());
+		assertTrue(jarRoot.exists());
+		assertTrue(jarRoot.isArchive());
 		IPackageFragment pf= jarRoot.getPackageFragment("pack1");//$NON-NLS-1$
-		Assert.assertTrue(pf.exists());
+		assertTrue(pf.exists());
 		IOrdinaryClassFile classFile2= (IOrdinaryClassFile) pf.getClassFile("Snippet.class");
 		IMethod method= classFile2.getType().getMethod("implicitAbstractMethod", null);
-		Assert.assertFalse(JdtFlags.isStatic(method));
-		Assert.assertFalse(JdtFlags.isDefaultMethod(method));
-		Assert.assertTrue(JdtFlags.isAbstract(method));
+		assertFalse(JdtFlags.isStatic(method));
+		assertFalse(JdtFlags.isDefaultMethod(method));
+		assertTrue(JdtFlags.isAbstract(method));
 	}
 
 	@Test
@@ -479,13 +479,13 @@
 		int offset= cUnit.getSource().indexOf("i=");
 		IJavaElement elem= cUnit.getElementAt(offset);
 		FieldDeclaration field= ASTNodeSearchUtil.getFieldDeclarationNode((IField)elem, cuNode);
-		Assert.assertTrue(JdtFlags.isStatic(field));
-		Assert.assertTrue(JdtFlags.isStatic((IField)elem));
+		assertTrue(JdtFlags.isStatic(field));
+		assertTrue(JdtFlags.isStatic((IField)elem));
 
 		offset= cUnit.getSource().indexOf("name");
 		elem= cUnit.getElementAt(offset);
 		AnnotationTypeMemberDeclaration annotationMember= ASTNodeSearchUtil.getAnnotationTypeMemberDeclarationNode((IMethod)elem, cuNode);
-		Assert.assertFalse(JdtFlags.isStatic(annotationMember));
-		Assert.assertFalse(JdtFlags.isStatic((IMethod)elem));
+		assertFalse(JdtFlags.isStatic(annotationMember));
+		assertFalse(JdtFlags.isStatic((IMethod)elem));
 	}
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest.java
index c6bc088..25493fe 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest.java
@@ -47,14 +47,14 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
 		store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, false);
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	private static void assertExpectedLabel(IJavaElement element, String expectedLabel, long flags) {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest1d8.java
index 5772c4c..b2b23c6 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/JavaElementLabelsTest1d8.java
@@ -49,7 +49,7 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= j18p.getProject();
 
 		IPreferenceStore store= PreferenceConstants.getPreferenceStore();
 		store.setValue(PreferenceConstants.APPEARANCE_COMPRESS_PACKAGE_NAMES, false);
@@ -57,7 +57,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j18p.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java
index e3c10b4..d1e300a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest.java
@@ -15,7 +15,7 @@
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.util.Hashtable;
 import java.util.List;
@@ -79,14 +79,14 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
 		JavaCore.setOptions(options);
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	@Test
@@ -471,7 +471,7 @@
 			for (IProblem prob : problems) {
 				buf.append(prob.getMessage()).append('\n');
 			}
-			assertTrue(buf.toString(), false);
+			fail(buf.toString());
 		}
 
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest1d8.java
index 7854ad0..1d0a89f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/MethodOverrideTest1d8.java
@@ -50,7 +50,7 @@
 
 	@Before
 	public void before() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= j18p.getProject();
 		fSrc= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
@@ -59,7 +59,7 @@
 
 	@After
 	public void after() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, j18p.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java
index abeb246..7c4952b 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/PartialASTTest.java
@@ -76,14 +76,14 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	@Test
@@ -146,24 +146,24 @@
 		List<AbstractTypeDeclaration> list= astRoot.types();
 		for (AbstractTypeDeclaration element : list) {
 			TypeDeclaration decl= (TypeDeclaration) element;
-			assertTrue(decl.resolveBinding() != null);
+			assertNotNull(decl.resolveBinding());
 
 			if (!decl.isInterface() && decl.getSuperclassType() != null) {
-				assertTrue(decl.getSuperclassType().resolveBinding() != null);
+				assertNotNull(decl.getSuperclassType().resolveBinding());
 			}
 			List<Type> interfaces= decl.superInterfaceTypes();
 			for (Type interface1 : interfaces) {
-				assertTrue(interface1.resolveBinding() != null);
+				assertNotNull(interface1.resolveBinding());
 			}
 
 			for (MethodDeclaration meth : decl.getMethods()) {
-				assertTrue(meth.resolveBinding() != null);
+				assertNotNull(meth.resolveBinding());
 				List<SingleVariableDeclaration> params= meth.parameters();
 				for (SingleVariableDeclaration arg : params) {
-					assertTrue(arg.resolveBinding() != null);
+					assertNotNull(arg.resolveBinding());
 				}
 				if (!meth.isConstructor()) {
-					assertTrue(meth.getReturnType2().resolveBinding() != null);
+					assertNotNull(meth.getReturnType2().resolveBinding());
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java
index 2fd97d8..742dcbf 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/ScopeAnalyzerTest.java
@@ -13,8 +13,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.core;
 
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.util.Hashtable;
 
@@ -54,7 +53,7 @@
 	@Before
 	public void setUp() throws Exception {
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
@@ -66,7 +65,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	@Test
@@ -917,7 +916,7 @@
 					return;
 				}
 			}
-			assertFalse("getDefaultValue not found", true);
+			fail("getDefaultValue not found");
 		}
 
 	}
@@ -937,7 +936,7 @@
 			for (IProblem problem : problems) {
 				buf.append(problem.getMessage()).append('\n');
 			}
-			assertTrue(buf.toString(), false);
+			fail(buf.toString());
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeHierarchyTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeHierarchyTest.java
index 6b82ea9..4f373d4 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeHierarchyTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeHierarchyTest.java
@@ -51,13 +51,13 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJavaProject1= ProjectTestSetup.getProject();
+		fJavaProject1= pts.getProject();
 		fJavaProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");
 	}
 
 	@After
 	public void tearDown () throws Exception {
-		JavaProjectHelper.clear(fJavaProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJavaProject1, pts.getDefaultClasspath());
 		JavaProjectHelper.delete(fJavaProject2);
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
index c973ee4..4bbca53 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/TypeRulesTest.java
@@ -13,8 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.core;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
 
 import java.util.Hashtable;
 import java.util.List;
@@ -63,13 +63,13 @@
 		options.put(JavaCore.COMPILER_PB_UNCHECKED_TYPE_OPERATION, JavaCore.IGNORE);
 		JavaCore.setOptions(options);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	private VariableDeclarationFragment[] createVariables() throws JavaModelException {
@@ -197,7 +197,7 @@
 				}
 			}
 		}
-		assertTrue(errors.toString(), errors.length() == 0);
+		assertEquals(errors.toString(), 0, errors.length());
 	}
 
 	@Test
@@ -238,7 +238,7 @@
 				}
 			}
 		}
-		assertTrue(errors.toString(), errors.length() == 0);
+		assertEquals(errors.toString(), 0, errors.length());
 	}
 
 	@Test
@@ -279,7 +279,7 @@
 				}
 			}
 		}
-		assertTrue(errors.toString(), errors.length() == 0);
+		assertEquals(errors.toString(), 0, errors.length());
 	}
 
 	@Test
@@ -332,7 +332,7 @@
 				}
 			}
 		}
-		assertTrue(errors.toString(), errors.length() == 0);
+		assertEquals(errors.toString(), 0, errors.length());
 	}
 
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java10ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java10ProjectTestSetup.java
index b056699..de76470 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java10ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java10ProjectTestSetup.java
@@ -36,12 +36,14 @@
 
 	public static final String PROJECT_NAME10= "TestSetupProject10";
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME10);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_10);
 		IClasspathAttribute[] extraAttributes= { JavaCore.newClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString()) };
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], ClasspathEntry.NO_ACCESS_RULES, extraAttributes, true) };
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java12ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java12ProjectTestSetup.java
index d9f5f88..d9b2208 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java12ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java12ProjectTestSetup.java
@@ -38,12 +38,14 @@
 
 	private boolean enable_preview_feature;
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME12);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_12);
 		IClasspathAttribute[] extraAttributes= { JavaCore.newClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString()) };
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], ClasspathEntry.NO_ACCESS_RULES, extraAttributes, true) };
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java13ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java13ProjectTestSetup.java
index 8648f89..a6e2550 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java13ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java13ProjectTestSetup.java
@@ -38,12 +38,14 @@
 
 	private boolean enable_preview_feature;
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME13);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS13);
 		IClasspathAttribute[] extraAttributes= { JavaCore.newClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString()) };
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], ClasspathEntry.NO_ACCESS_RULES, extraAttributes, true) };
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java14ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java14ProjectTestSetup.java
index 6fa3908..0fc6f4c 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java14ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java14ProjectTestSetup.java
@@ -38,12 +38,14 @@
 
 	private boolean enable_preview_feature;
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME14);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS14);
 		IClasspathAttribute[] extraAttributes= { JavaCore.newClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString()) };
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], ClasspathEntry.NO_ACCESS_RULES, extraAttributes, true) };
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java15ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java15ProjectTestSetup.java
index 0049401..7ed20a7 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java15ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java15ProjectTestSetup.java
@@ -38,12 +38,14 @@
 
 	private boolean enable_preview_feature;
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME15);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS15);
 		IClasspathAttribute[] extraAttributes= { JavaCore.newClasspathAttribute(IClasspathAttribute.MODULE, Boolean.TRUE.toString()) };
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], ClasspathEntry.NO_ACCESS_RULES, extraAttributes, true) };
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d5ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d5ProjectTestSetup.java
index b44f91a..a6914d5 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d5ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d5ProjectTestSetup.java
@@ -35,12 +35,14 @@
 public class Java1d5ProjectTestSetup extends ProjectTestSetup {
 	public static final String PROJECT_NAME1d5= "TestSetupProject1d5";
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME1d5);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_15);
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], true) };
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d7ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d7ProjectTestSetup.java
index af8fd17..6920fc1 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d7ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d7ProjectTestSetup.java
@@ -33,12 +33,14 @@
 
 	public static final String PROJECT_NAME1D7= "TestSetupProject1d7";
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME1D7);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_17);
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], true) };
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d8ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d8ProjectTestSetup.java
index 224f354..1f3f03d 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d8ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java1d8ProjectTestSetup.java
@@ -43,12 +43,14 @@
 public class Java1d8ProjectTestSetup extends ProjectTestSetup {
 	public static final String PROJECT_NAME18= "TestSetupProject18";
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME18);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_18);
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], true) };
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java9ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java9ProjectTestSetup.java
index 120cc7a..7ac288a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java9ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/Java9ProjectTestSetup.java
@@ -34,12 +34,14 @@
 
 	public static final String PROJECT_NAME9= "TestSetupProject9";
 
-	public static IJavaProject getProject() {
+	@Override
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME9);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	@Override
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_9);
 		return new IClasspathEntry[] { JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2],
 						null,
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/ProjectTestSetup.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/ProjectTestSetup.java
index aaf2298..b340af8 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/ProjectTestSetup.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/rules/ProjectTestSetup.java
@@ -44,12 +44,12 @@
 
 	public static final String PROJECT_NAME= "TestSetupProject";
 
-	public static IJavaProject getProject() {
+	public IJavaProject getProject() {
 		IProject project= ResourcesPlugin.getWorkspace().getRoot().getProject(PROJECT_NAME);
 		return JavaCore.create(project);
 	}
 
-	public static IClasspathEntry[] getDefaultClasspath() throws CoreException {
+	public IClasspathEntry[] getDefaultClasspath() throws CoreException {
 		IPath[] rtJarPath= JavaProjectHelper.findRtJar(JavaProjectHelper.RT_STUBS_15);
 		return new IClasspathEntry[] {  JavaCore.newLibraryEntry(rtJarPath[0], rtJarPath[1], rtJarPath[2], true) };
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest1d8.java
index a9e1a0b..243124a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/core/source/AddUnimplementedMethodsTest1d8.java
@@ -13,6 +13,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.core.source;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
@@ -62,14 +63,14 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJavaProject= Java1d8ProjectTestSetup.getProject();
+		fJavaProject= j18p.getProject();
 		IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(fJavaProject, "src");
 		fPackage= root.createPackageFragment("ibm.util", true, null);
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJavaProject, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJavaProject, j18p.getDefaultClasspath());
 		fJavaProject= null;
 		fPackage= null;
 	}
@@ -107,7 +108,7 @@
 	private void checkMethods(String[] expected, IMethod[] methods) {
 		int nMethods= methods.length;
 		int nExpected= expected.length;
-		assertTrue("" + nExpected + " methods expected, is " + nMethods, nMethods == nExpected);
+		assertEquals("" + nExpected + " methods expected, is " + nMethods, nExpected, nMethods);
 		for (int i= 0; i < nExpected; i++) {
 			String methName= expected[i];
 			assertTrue("method " + methName + " expected", nameContained(methName, methods));
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/JavadocHoverTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/JavadocHoverTests.java
index 3bcb69f..24795be 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/JavadocHoverTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/JavadocHoverTests.java
@@ -56,13 +56,13 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= pts.getProject();
 		JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 
 	protected ICompilationUnit getWorkingCopy(String path, String source, WorkingCopyOwner owner) throws JavaModelException {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/PackageJavadocTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/PackageJavadocTests.java
index 3d0c65f..5470d1a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/PackageJavadocTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/hover/PackageJavadocTests.java
@@ -357,12 +357,11 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
-
+		fJProject1= pts.getProject();
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, pts.getDefaultClasspath());
 	}
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java
index 608ad3f..e881d55 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/FatJarExportTests.java
@@ -124,7 +124,7 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fProject= ProjectTestSetup.getProject();
+		fProject= pts.getProject();
 
 		Map<String, String> options= fProject.getOptions(false);
 		String compliance= JavaCore.VERSION_1_4;
@@ -149,7 +149,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fProject, pts.getDefaultClasspath());
 	}
 
 	private static String getFooContent() {
@@ -778,7 +778,7 @@
 	public void exportOtherProject() throws Exception {
 		IJavaProject otherProject= JavaProjectHelper.createJavaProject("OtherProject", "bin"); //$NON-NLS-1$  //$NON-NLS-2$
 		try {
-			otherProject.setRawClasspath(ProjectTestSetup.getDefaultClasspath(), null);
+			otherProject.setRawClasspath(pts.getDefaultClasspath(), null);
 
 			IPackageFragmentRoot root= JavaProjectHelper.addSourceContainer(otherProject, "other"); //$NON-NLS-1$
 			IPackageFragment pack= root.createPackageFragment("mylib", true, null); //$NON-NLS-1$
@@ -989,7 +989,8 @@
 	@Test
 	public void externalClassFolder() throws Exception {
 		File classFolder= JavaTestPlugin.getDefault().getFileInPlugin(new Path("testresources/externalClassFolder/"));//$NON-NLS-1$
-		assertTrue("class folder not found", classFolder != null && classFolder.exists());//$NON-NLS-1$
+		assertNotNull("class folder not found", classFolder);//$NON-NLS-1$
+		assertTrue("class folder not found", classFolder.exists());
 		IPackageFragmentRoot externalRoot= JavaProjectHelper.addLibrary(fProject, Path.fromOSString(classFolder.getPath()), null, null);
 
 		try {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java
index 4fe92ea..3e8fa96 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/jarexport/PlainJarExportTests.java
@@ -78,7 +78,7 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fProject= ProjectTestSetup.getProject();
+		fProject= pts.getProject();
 
 		Map<String, String> options= fProject.getOptions(false);
 		String compliance= JavaCore.VERSION_1_4;
@@ -104,7 +104,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fProject, pts.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/PackageExplorerShowInTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/PackageExplorerShowInTests.java
index c0f0562..48a2444 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/PackageExplorerShowInTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/packageview/PackageExplorerShowInTests.java
@@ -64,7 +64,7 @@
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject= ProjectTestSetup.getProject();
+		fJProject= pts.getProject();
 		fPage= PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
 		fPackageExplorer= (PackageExplorerPart) fPage.showView(JavaUI.ID_PACKAGES);
 		fPackageExplorer.selectAndReveal(new StructuredSelection());
@@ -72,7 +72,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject, pts.getDefaultClasspath());
 		fPage.hideView(fPackageExplorer);
 		fPage= null;
 		fPackageExplorer= null;
@@ -195,7 +195,4 @@
 			editor.getSite().getPage().closeEditor(editor, false);
 		}
 	}
-
-
-
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AbstractAnnotateAssistTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AbstractAnnotateAssistTests.java
index f11dfb1..2e8ac71 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AbstractAnnotateAssistTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AbstractAnnotateAssistTests.java
@@ -23,12 +23,6 @@
 import java.util.Arrays;
 import java.util.List;
 
-import org.junit.After;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import org.eclipse.jdt.testplugin.JavaProjectHelper;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Path;
 
@@ -50,7 +44,6 @@
 import org.eclipse.jdt.internal.core.ClasspathEntry;
 import org.eclipse.jdt.internal.core.manipulation.util.Strings;
 
-import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.quickfix.JarUtil.ClassFileFilter;
 
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
@@ -58,16 +51,10 @@
 import org.eclipse.jdt.internal.ui.text.correction.ExternalNullAnnotationQuickAssistProcessor;
 import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionAssistant;
 
-@RunWith(JUnit4.class)
 public abstract class AbstractAnnotateAssistTests extends QuickFixTest {
 
 	protected IJavaProject fJProject1;
 
-	@After
-	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
-	}
-
 	protected void ensureExists(IContainer parent) throws CoreException {
 		if (parent.exists()) return;
 		if (parent.getParent() != null)
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java
index 1af1cd1..7f71149 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest.java
@@ -58,17 +58,14 @@
 import org.eclipse.jdt.internal.ui.text.correction.CorrectionMessages;
 import org.eclipse.jdt.internal.ui.text.correction.QuickTemplateProcessor;
 
-
 @RunWith(JUnit4.class)
 public class AdvancedQuickAssistTest extends QuickFixTest {
-
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
 
-
 	@Before
 	public void setUp() throws Exception {
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
@@ -89,14 +86,14 @@
 		corePrefs.setValue(JavaCore.CODEASSIST_FIELD_SUFFIXES, "");
 		corePrefs.setValue(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, "");
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d7.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d7.java
index 002e833..d370d4a 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d7.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d7.java
@@ -20,8 +20,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -52,11 +50,9 @@
 /**
  * Those tests should run on Java Dolphin 1.7 .
  */
-@RunWith(JUnit4.class)
 public class AdvancedQuickAssistTest1d7 extends QuickFixTest {
-
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d7ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java1d7ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -82,7 +78,7 @@
 		corePrefs.setValue(JavaCore.CODEASSIST_FIELD_SUFFIXES, "");
 		corePrefs.setValue(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, "");
 
-		fJProject1= Java1d7ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
@@ -90,7 +86,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d7ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d8.java
index d80bba0..ba805be 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AdvancedQuickAssistTest1d8.java
@@ -20,8 +20,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -50,10 +48,9 @@
 /**
  * Those tests are made to run on Java Spider 1.8 .
  */
-@RunWith(JUnit4.class)
 public class AdvancedQuickAssistTest1d8 extends QuickFixTest {
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -73,14 +70,14 @@
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "//TODO\n${body_statement}", null);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d5.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d5.java
index 20324df..b448cd3 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d5.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d5.java
@@ -21,6 +21,7 @@
 import java.io.ByteArrayInputStream;
 import java.util.List;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
@@ -57,19 +58,22 @@
 @RunWith(JUnit4.class)
 public class AnnotateAssistTest1d5 extends AbstractAnnotateAssistTests {
 	@Rule
-	public ProjectTestSetup projectsetup= new ProjectTestSetup();
+	public ProjectTestSetup projectSetup= new ProjectTestSetup();
 
 	protected static final String ANNOTATION_PATH= "annots";
 
-	protected static final Class<?> THIS= AnnotateAssistTest1d5.class;
-
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 		fJProject1.getProject().getFolder(ANNOTATION_PATH).create(true, true, null);
 		fJProject1.setOption(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED);
 	}
 
+	@After
+	public void tearDown() throws Exception {
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
+	}
+
 	// === Tests ===
 
 	/**
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d8.java
index 5919289..7902b30 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AnnotateAssistTest1d8.java
@@ -19,11 +19,12 @@
 import java.io.ByteArrayInputStream;
 import java.util.List;
 
+import org.junit.After;
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
+
+import org.eclipse.jdt.testplugin.JavaProjectHelper;
 
 import org.eclipse.core.runtime.Path;
 
@@ -45,23 +46,25 @@
 /**
  * Those tests are made to run on Java Spider 1.8 .
  */
-@RunWith(JUnit4.class)
 public class AnnotateAssistTest1d8 extends AbstractAnnotateAssistTests {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	protected static final String ANNOTATION_PATH= "annots";
 
-	protected static final Class<?> THIS= AnnotateAssistTest1d8.class;
-
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 		fJProject1.getProject().getFolder(ANNOTATION_PATH).create(true, true, null);
 		fJProject1.setOption(JavaCore.COMPILER_ANNOTATION_NULL_ANALYSIS, JavaCore.ENABLED);
 	}
 
+	@After
+	public void tearDown() throws Exception {
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
+	}
+
 	/**
 	 * Assert two proposals ("@NonNull" and "@Nullable") on a type argument of a parameter.
 	 * The parameterized type already has a @NonNull annotation.
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
index ad0e1eb..ff039d3 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest.java
@@ -69,7 +69,7 @@
 @RunWith(JUnit4.class)
 public class AssistQuickFixTest extends QuickFixTest {
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private static final String CHANGE_MODIFIER_TO_FINAL= FixMessages.VariableDeclarationFix_changeModifierOfUnknownToFinal_description;
 
@@ -96,7 +96,7 @@
 		corePrefs.setValue(JavaCore.CODEASSIST_FIELD_SUFFIXES, "");
 		corePrefs.setValue(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, "");
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
@@ -104,7 +104,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java
index 4e80b6a..62a7032 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest10.java
@@ -53,7 +53,7 @@
 public class AssistQuickFixTest10 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java10ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java10ProjectTestSetup();
 
 	private static final Class<?>[] TYPE_CHANGE_PROPOSAL_TYPE= { TypeChangeCorrectionProposal.class };
 
@@ -89,13 +89,13 @@
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "//TODO\n${body_statement}", null);
 
-		fJProject1= Java10ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java10ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest12.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest12.java
index efe6817..f5197a9 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest12.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest12.java
@@ -39,7 +39,7 @@
 public class AssistQuickFixTest12 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java12ProjectTestSetup(true);
+    public ProjectTestSetup projectSetup = new Java12ProjectTestSetup(true);
 
 	private IJavaProject fJProject1;
 
@@ -60,7 +60,7 @@
 	@Test
 	public void testSplitSwitchCaseStatement() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java12ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set12CompilerOptions(fJProject1, true);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -126,7 +126,7 @@
 	@Test
 	public void testSplitSwitchCaseLabelRuleStatement() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java12ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set12CompilerOptions(fJProject1, true);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d7.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d7.java
index 6d4a24e..2610f8c 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d7.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d7.java
@@ -57,7 +57,7 @@
 public class AssistQuickFixTest1d7 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d7ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d7ProjectTestSetup();
 
 	private static final String REMOVE_CATCH_CLAUSE= CorrectionMessages.QuickAssistProcessor_removecatchclause_description;
 	private static final String REPLACE_CATCH_CLAUSE_WITH_THROWS= CorrectionMessages.QuickAssistProcessor_catchclausetothrows_description;
@@ -89,14 +89,14 @@
 		corePrefs.setValue(JavaCore.CODEASSIST_FIELD_SUFFIXES, "");
 		corePrefs.setValue(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, "");
 
-		fJProject1= Java1d7ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d7ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java
index c77e7ec..de707b0 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/AssistQuickFixTest1d8.java
@@ -63,7 +63,7 @@
 @RunWith(JUnit4.class)
 public class AssistQuickFixTest1d8 extends QuickFixTest {
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -96,13 +96,13 @@
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "//TODO\n${body_statement}", null);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
@@ -3895,7 +3895,7 @@
 		context= getCorrectionContext(cu, offset, 0);
 		assertNoErrors(context);
 		proposals= collectAssists(context, false);
-		assertNumberOfProposals(proposals, 5);
+		assertNumberOfProposals(proposals, 4);
 		assertCorrectLabels(proposals);
 
 		buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ChangeNonStaticToStaticTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ChangeNonStaticToStaticTest.java
index b55ec02..5f7250e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ChangeNonStaticToStaticTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ChangeNonStaticToStaticTest.java
@@ -20,8 +20,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -56,11 +54,10 @@
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.fix.CodeStyleCleanUp;
 
-@RunWith(JUnit4.class)
 public class ChangeNonStaticToStaticTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -86,14 +83,14 @@
 		corePrefs.setValue(JavaCore.CODEASSIST_FIELD_SUFFIXES, "");
 		corePrefs.setValue(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, "");
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	private void assertRefactoringResultAsExpected(CleanUpRefactoring refactoring, String[] expected) throws CoreException {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpActionTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpActionTest.java
index adf1b29..11cd7fe 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpActionTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpActionTest.java
@@ -21,15 +21,17 @@
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
+
+import org.eclipse.core.runtime.CoreException;
 
 import org.eclipse.jface.viewers.StructuredSelection;
 
 import org.eclipse.ui.IWorkbenchPartSite;
 import org.eclipse.ui.PlatformUI;
 
+import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
 
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
@@ -42,11 +44,20 @@
 /**
  * @since 3.4
  */
-@RunWith(JUnit4.class)
 public class CleanUpActionTest extends CleanUpTestCase {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
+
+	@Override
+	protected IJavaProject getProject() {
+		return projectSetup.getProject();
+	}
+
+	@Override
+	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
+		return projectSetup.getDefaultClasspath();
+	}
 
 	//205600 [clean up] 'Sort members' action uses workspace/project clean up options
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpAnnotationTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpAnnotationTest.java
index 5c79c22..8d56c89 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpAnnotationTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpAnnotationTest.java
@@ -21,8 +21,6 @@
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.core.runtime.CoreException;
 
@@ -37,7 +35,9 @@
 
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 
+import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -48,11 +48,20 @@
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
 
-@RunWith(JUnit4.class)
 public class CleanUpAnnotationTest extends CleanUpTestCase {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
+
+	@Override
+	protected IJavaProject getProject() {
+		return projectSetup.getProject();
+	}
+
+	@Override
+	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
+		return projectSetup.getDefaultClasspath();
+	}
 
 	private void assertMarker(long markerId, ICompilationUnit unit, int expectedLineNumber, int expectedCharStart, int expectedCharEnd) throws CoreException {
 		IFile file= (IFile)unit.getResource();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
index b522e18..4b3e3ca 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpStressTest.java
@@ -16,29 +16,30 @@
 package org.eclipse.jdt.ui.tests.quickfix;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertNotNull;
 
 import java.io.File;
 import java.util.ArrayList;
 import java.util.Hashtable;
 import java.util.List;
 
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.JavaTestPlugin;
 
+import org.eclipse.core.runtime.CoreException;
+
 import org.eclipse.jface.text.BadLocationException;
 import org.eclipse.jface.text.Document;
 import org.eclipse.jface.text.IDocument;
 import org.eclipse.jface.text.IRegion;
 
+import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.IPackageFragmentRoot;
 import org.eclipse.jdt.core.JavaModelException;
@@ -48,23 +49,31 @@
 import org.eclipse.jdt.ui.JavaElementLabels;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
-@RunWith(JUnit4.class)
 public class CleanUpStressTest extends CleanUpTestCase {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
+
+	@Override
+	protected IJavaProject getProject() {
+		return projectSetup.getProject();
+	}
+
+	@Override
+	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
+		return projectSetup.getDefaultClasspath();
+	}
 
 	private static final String SRC_CONTAINER= "src";
 
 	protected static IPackageFragmentRoot fJunitSrcRoot;
 
 	@Override
-	@Before
 	public void setUp() throws Exception {
 		super.setUp();
 
 		File junitSrcArchive= JavaTestPlugin.getDefault().getFileInPlugin(JavaProjectHelper.JUNIT_SRC_381);
-		fJunitSrcRoot= JavaProjectHelper.addSourceContainerWithImport(fJProject1, SRC_CONTAINER, junitSrcArchive, JavaProjectHelper.JUNIT_SRC_ENCODING);
+		fJunitSrcRoot= JavaProjectHelper.addSourceContainerWithImport(getProject(), SRC_CONTAINER, junitSrcArchive, JavaProjectHelper.JUNIT_SRC_ENCODING);
 	}
 
 	private void addAllCUs(IJavaElement[] children, List<IJavaElement> result) throws JavaModelException {
@@ -5233,7 +5242,7 @@
 	@Test
 	public void testAllCleanUps() throws Exception {
 		List<IJavaElement> cus= new ArrayList<>();
-		addAllCUs(fJProject1.getChildren(), cus);
+		addAllCUs(getProject().getChildren(), cus);
 
 		enable(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS);
 		enable(CleanUpConstants.MEMBER_ACCESSES_NON_STATIC_FIELD_USE_THIS_ALWAYS);
@@ -5299,7 +5308,7 @@
 
 			String expected= fExpectedChangesAllTests.get(compilationUnitName);
 
-			assertTrue("No expected value in table for " + compilationUnitName, expected != null);
+			assertNotNull("No expected value in table for " + compilationUnitName, expected);
 			assertEquals("Content not as expected for " + compilationUnitName, expected, previewContent);
 		}
 	}
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
index 584e7f5..8d80042 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest.java
@@ -17,6 +17,7 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.quickfix;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
@@ -26,8 +27,6 @@
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -40,6 +39,7 @@
 import org.eclipse.ltk.core.refactoring.RefactoringStatus;
 import org.eclipse.ltk.core.refactoring.RefactoringStatusEntry;
 
+import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
@@ -55,7 +55,9 @@
 
 import org.eclipse.jdt.internal.corext.dom.IASTSharedValues;
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.FixMessages;
 import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser;
+import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
@@ -64,15 +66,27 @@
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.fix.Java50CleanUp;
+import org.eclipse.jdt.internal.ui.fix.MultiFixMessages;
 import org.eclipse.jdt.internal.ui.fix.RedundantModifiersCleanUp;
 import org.eclipse.jdt.internal.ui.fix.UnimplementedCodeCleanUp;
 import org.eclipse.jdt.internal.ui.text.correction.ProblemLocation;
 
-@RunWith(JUnit4.class)
 public class CleanUpTest extends CleanUpTestCase {
 
 	@Rule
-	public ProjectTestSetup projectsetup = new ProjectTestSetup();
+	public ProjectTestSetup projectSetup = new ProjectTestSetup();
+
+	@Override
+	protected IJavaProject getProject() {
+		return projectSetup.getProject();
+	}
+
+	@Override
+	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
+		return projectSetup.getDefaultClasspath();
+	}
+
+	IJavaProject fJProject1= getProject();
 
 	private class NoChangeRedundantModifiersCleanUp extends RedundantModifiersCleanUp {
 		private NoChangeRedundantModifiersCleanUp(Map<String, String> options) {
@@ -1457,9 +1471,9 @@
 
 		ASTParser parser= ASTParser.newParser(IASTSharedValues.SHARED_AST_LEVEL);
 		parser.setResolveBindings(true);
-		parser.setProject(fJProject1);
+		parser.setProject(getProject());
 
-		Map<String, String> options= RefactoringASTParser.getCompilerOptions(fJProject1);
+		Map<String, String> options= RefactoringASTParser.getCompilerOptions(getProject());
 		options.putAll(cleanUp.getRequirements().getCompilerOptions());
 		parser.setCompilerOptions(options);
 
@@ -1472,7 +1486,7 @@
 		}, null);
 
 		IProblem[] problems= roots[0].getProblems();
-		assertTrue(problems.length == 2);
+		assertEquals(2, problems.length);
 		for (IProblem problem : problems) {
 			ProblemLocation location= new ProblemLocation(problem);
 			assertTrue(cleanUp.canFix(cu1, location));
@@ -4205,7 +4219,7 @@
 	@Test
 	public void testSerialVersion01() throws Exception {
 
-		JavaProjectHelper.set14CompilerOptions(fJProject1);
+		JavaProjectHelper.set14CompilerOptions(getProject());
 
 		try {
 			IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -4215,7 +4229,7 @@
 			buf.append("public class E1 implements Serializable {\n");
 			buf.append("}\n");
 			ICompilationUnit cu1= pack1.createCompilationUnit("E1.java", buf.toString(), false, null);
-			fJProject1.getProject().build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
+			getProject().getProject().build(IncrementalProjectBuilder.FULL_BUILD, new NullProgressMonitor());
 
 			enable(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID);
 			enable(CleanUpConstants.ADD_MISSING_SERIAL_VERSION_ID_GENERATED);
@@ -4276,14 +4290,14 @@
 			String expected1= buf.toString();
 			assertRefactoringResultAsExpectedIgnoreHashValue(new ICompilationUnit[] {cu1}, new String[] {expected1});
 		} finally {
-			JavaProjectHelper.set15CompilerOptions(fJProject1);
+			JavaProjectHelper.set15CompilerOptions(getProject());
 		}
 	}
 
 	@Test
 	public void testSerialVersion03() throws Exception {
 
-		JavaProjectHelper.set14CompilerOptions(fJProject1);
+		JavaProjectHelper.set14CompilerOptions(getProject());
 
 		try {
 			IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -4321,14 +4335,14 @@
 
 			assertRefactoringResultAsExpectedIgnoreHashValue(new ICompilationUnit[] {cu1, cu2}, new String[] {expected1, expected2});
 		} finally {
-			JavaProjectHelper.set15CompilerOptions(fJProject1);
+			JavaProjectHelper.set15CompilerOptions(getProject());
 		}
 	}
 
 	@Test
 	public void testSerialVersion04() throws Exception {
 
-		JavaProjectHelper.set14CompilerOptions(fJProject1);
+		JavaProjectHelper.set14CompilerOptions(getProject());
 
 		try {
 			IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -4364,14 +4378,14 @@
 			String expected1= buf.toString();
 			assertRefactoringResultAsExpectedIgnoreHashValue(new ICompilationUnit[] {cu1}, new String[] {expected1});
 		} finally {
-			JavaProjectHelper.set15CompilerOptions(fJProject1);
+			JavaProjectHelper.set15CompilerOptions(getProject());
 		}
 	}
 
 	@Test
 	public void testSerialVersion05() throws Exception {
 
-		JavaProjectHelper.set14CompilerOptions(fJProject1);
+		JavaProjectHelper.set14CompilerOptions(getProject());
 
 		try {
 			IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -4406,7 +4420,7 @@
 			String expected1= buf.toString();
 			assertRefactoringResultAsExpectedIgnoreHashValue(new ICompilationUnit[] {cu1}, new String[] {expected1});
 		} finally {
-			JavaProjectHelper.set15CompilerOptions(fJProject1);
+			JavaProjectHelper.set15CompilerOptions(getProject());
 		}
 	}
 
@@ -4591,7 +4605,7 @@
 				+ "        boolean newBoolean2 = b1 | new SideEffect() instanceof SideEffect;\n" //
 				+ "    }\n" //
 				+ "}\n";
-
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { MultiFixMessages.CodeStyleCleanUp_LazyLogical_description });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { sample });
 	}
 
@@ -4664,6 +4678,7 @@
 				+ "    }\n" //
 				+ "}\n";
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { MultiFixMessages.PushDownNegationCleanup_description });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { sample });
 	}
 
@@ -5418,7 +5433,7 @@
 				+ "        }\n" //
 				+ "    }\n" //
 				+ "}\n";
-
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { MultiFixMessages.MergeConditionalBlocksCleanup_description });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { sample });
 	}
 
@@ -5609,6 +5624,7 @@
 				+ "    }\n" //
 				+ "}\n";
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { MultiFixMessages.UseDirectlyMapMethodCleanup_description });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { sample });
 	}
 
@@ -5659,7 +5675,7 @@
 	@Test
 	public void testSerialVersionBug139381() throws Exception {
 
-		JavaProjectHelper.set14CompilerOptions(fJProject1);
+		JavaProjectHelper.set14CompilerOptions(getProject());
 
 		try {
 			IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -7581,7 +7597,7 @@
 				+ "       return dateText1 + dateText2;\n" //
 				+ "    }\n" //
 				+ "\n" //
-				+ "    public String usePatternForSplit(String speech1, String speech2) {\n" //
+				+ "    public String usePatternForSplit1(String speech1, String speech2) {\n" //
 				+ "       // Keep this comment\n" //
 				+ "       String line= \"\\\\r?\\\\n\";\n" //
 				+ "\n" //
@@ -7593,6 +7609,30 @@
 				+ "       return Arrays.toString(phrases1) + Arrays.toString(phrases2);\n" //
 				+ "    }\n" //
 				+ "\n" //
+				+ "    public String usePatternForSplit2(String speech1, String speech2) {\n" //
+				+ "       // Keep this comment\n" //
+				+ "       String line= \".\";\n" //
+				+ "\n" //
+				+ "       // Keep this comment too\n" //
+				+ "       String[] phrases1= speech1.split(line);\n" //
+				+ "       // Keep this comment also\n" //
+				+ "       String[] phrases2= speech2.split(line, 123);\n" //
+				+ "\n" //
+				+ "       return Arrays.toString(phrases1) + Arrays.toString(phrases2);\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String usePatternForSplit3(String speech1, String speech2) {\n" //
+				+ "       // Keep this comment\n" //
+				+ "       String line= \"\\\\a\";\n" //
+				+ "\n" //
+				+ "       // Keep this comment too\n" //
+				+ "       String[] phrases1= speech1.split(line);\n" //
+				+ "       // Keep this comment also\n" //
+				+ "       String[] phrases2= speech2.split(line, 123);\n" //
+				+ "\n" //
+				+ "       return Arrays.toString(phrases1) + Arrays.toString(phrases2);\n" //
+				+ "    }\n" //
+				+ "\n" //
 				+ "    public String usePatternForLocalVariableOnly(String date1, String date2, String date3) {\n" //
 				+ "       String dateText1= date1.replaceFirst(dateValidation, \"0000-00-00\");\n" //
 				+ "       // Keep this comment\n" //
@@ -7656,7 +7696,7 @@
 				+ "       return dateText1 + dateText2;\n" //
 				+ "    }\n" //
 				+ "\n" //
-				+ "    public String usePatternForSplit(String speech1, String speech2) {\n" //
+				+ "    public String usePatternForSplit1(String speech1, String speech2) {\n" //
 				+ "       // Keep this comment\n" //
 				+ "       Pattern line= Pattern.compile(\"\\\\r?\\\\n\");\n" //
 				+ "\n" //
@@ -7668,6 +7708,30 @@
 				+ "       return Arrays.toString(phrases1) + Arrays.toString(phrases2);\n" //
 				+ "    }\n" //
 				+ "\n" //
+				+ "    public String usePatternForSplit2(String speech1, String speech2) {\n" //
+				+ "       // Keep this comment\n" //
+				+ "       Pattern line= Pattern.compile(\".\");\n" //
+				+ "\n" //
+				+ "       // Keep this comment too\n" //
+				+ "       String[] phrases1= line.split(speech1);\n" //
+				+ "       // Keep this comment also\n" //
+				+ "       String[] phrases2= line.split(speech2, 123);\n" //
+				+ "\n" //
+				+ "       return Arrays.toString(phrases1) + Arrays.toString(phrases2);\n" //
+				+ "    }\n" //
+				+ "\n" //
+				+ "    public String usePatternForSplit3(String speech1, String speech2) {\n" //
+				+ "       // Keep this comment\n" //
+				+ "       Pattern line= Pattern.compile(\"\\\\a\");\n" //
+				+ "\n" //
+				+ "       // Keep this comment too\n" //
+				+ "       String[] phrases1= line.split(speech1);\n" //
+				+ "       // Keep this comment also\n" //
+				+ "       String[] phrases2= line.split(speech2, 123);\n" //
+				+ "\n" //
+				+ "       return Arrays.toString(phrases1) + Arrays.toString(phrases2);\n" //
+				+ "    }\n" //
+				+ "\n" //
 				+ "    public String usePatternForLocalVariableOnly(String date1, String date2, String date3) {\n" //
 				+ "       String dateText1= date1.replaceFirst(dateValidation, \"0000-00-00\");\n" //
 				+ "       // Keep this comment\n" //
@@ -7742,6 +7806,20 @@
 				+ "\n" //
 				+ "       return dateText1 + dateText2;\n" //
 				+ "    }\n" //
+				+ "    public String doNotUsePatternOnSimpleSplit1(String speech1, String speech2) {\n" //
+				+ "       String line= \"a\";\n" //
+				+ "\n" //
+				+ "       String[] phrases1= speech1.split(line);\n" //
+				+ "       String[] phrases2= speech2.split(line, 1);\n" //
+				+ "       return phrases1[0] + phrases2[0];\n" //
+				+ "    }\n" //
+				+ "    public String doNotUsePatternOnSimpleSplit2(String speech1, String speech2) {\n" //
+				+ "       String line= \"\\\\;\";\n" //
+				+ "\n" //
+				+ "       String[] phrases1= speech1.split(line1);\n" //
+				+ "       String[] phrases2= speech2.split(line1, 1);\n" //
+				+ "       return phrases1[0] + phrases2[0];\n" //
+				+ "    }\n" //
 				+ "}\n";
 		ICompilationUnit cu= pack1.createCompilationUnit("E1.java", sample, false, null);
 
@@ -7842,6 +7920,7 @@
 		buf.append("}\n");
 		String expected1= buf.toString();
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { FixMessages.CodeStyleFix_removeThis_groupDescription });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] {cu1}, new String[] {expected1});
 	}
 
@@ -8162,6 +8241,9 @@
 		buf.append("}\n");
 		String expected1= buf.toString();
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] {
+				FixMessages.VariableDeclarationFix_changeModifierOfUnknownToFinal_description
+				});
 		assertRefactoringResultAsExpected(new ICompilationUnit[] {cu1}, new String[] {expected1});
 	}
 
@@ -9489,7 +9571,7 @@
 
 		RefactoringStatus status= assertRefactoringHasNoChange(new ICompilationUnit[] {cu1});
 		RefactoringStatusEntry[] entries= status.getEntries();
-		assertTrue(entries.length == 1);
+		assertEquals(1, entries.length);
 		String message= entries[0].getMessage();
 		assertTrue(message, entries[0].isInfo());
 		assertTrue(message, message.contains("ambiguous"));
@@ -9509,7 +9591,7 @@
 
 		RefactoringStatus status= assertRefactoringHasNoChange(new ICompilationUnit[] {cu1});
 		RefactoringStatusEntry[] entries= status.getEntries();
-		assertTrue(entries.length == 1);
+		assertEquals(1, entries.length);
 		String message= entries[0].getMessage();
 		assertTrue(message, entries[0].isInfo());
 		assertTrue(message, message.contains("parse"));
@@ -9674,7 +9756,7 @@
 
 	@Test
 	public void testCorrectIndetationBug202145_2() throws Exception {
-		IJavaProject project= ProjectTestSetup.getProject();
+		IJavaProject project= getProject();
 		project.setOption(DefaultCodeFormatterConstants.FORMATTER_NEVER_INDENT_LINE_COMMENTS_ON_FIRST_COLUMN, DefaultCodeFormatterConstants.TRUE);
 		try {
 			IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -10067,6 +10149,9 @@
 
 		String expected1= buf.toString();
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] {
+				Messages.format(FixMessages.CodeStyleFix_QualifyWithThis_description, new Object[] {"field", "this"})
+		});
 		assertRefactoringResultAsExpected(new ICompilationUnit[] {cu1}, new String[] {expected1});
 	}
 }
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d10.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d10.java
index dbbe163..1b12f83 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d10.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d10.java
@@ -15,8 +15,6 @@
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.core.runtime.CoreException;
 
@@ -33,20 +31,19 @@
 /**
  * Tests the cleanup features related to Java 10.
  */
-@RunWith(JUnit4.class)
 public class CleanUpTest1d10 extends CleanUpTestCase {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java10ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java10ProjectTestSetup();
 
 	@Override
 	protected IJavaProject getProject() {
-		return Java10ProjectTestSetup.getProject();
+		return projectSetup.getProject();
 	}
 
 	@Override
 	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
-		return Java10ProjectTestSetup.getDefaultClasspath();
+		return projectSetup.getDefaultClasspath();
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java
index 20d79f9..2638638 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d5.java
@@ -15,8 +15,6 @@
 
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.core.runtime.CoreException;
 
@@ -26,28 +24,30 @@
 import org.eclipse.jdt.core.IPackageFragment;
 
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.FixMessages;
 
 import org.eclipse.jdt.ui.tests.core.rules.Java1d5ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
+import org.eclipse.jdt.internal.ui.fix.MultiFixMessages;
+
 
 /**
  * Tests the cleanup features related to Java 5.
  */
-@RunWith(JUnit4.class)
 public class CleanUpTest1d5 extends CleanUpTestCase {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d5ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d5ProjectTestSetup();
 
 	@Override
 	protected IJavaProject getProject() {
-		return Java1d5ProjectTestSetup.getProject();
+		return projectSetup.getProject();
 	}
 
 	@Override
 	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
-		return Java1d5ProjectTestSetup.getDefaultClasspath();
+		return projectSetup.getDefaultClasspath();
 	}
 
 	@Test
@@ -1468,6 +1468,7 @@
 				+ "}\n";
 		String expected1= sample;
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { MultiFixMessages.AutoboxingCleanup_description });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected1 });
 	}
 
@@ -2530,7 +2531,7 @@
 
 		enable(CleanUpConstants.REMOVE_UNNECESSARY_ARRAY_CREATION);
 
-		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { "Remove unnecessary array creation" });
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { FixMessages.UnusedCodeFix_RemoveUnnecessaryArrayCreation_description });
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d7.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d7.java
index a6d694a..59136c3 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d7.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d7.java
@@ -24,22 +24,23 @@
 import org.eclipse.jdt.core.IPackageFragment;
 
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.FixMessages;
 
 import org.eclipse.jdt.ui.tests.core.rules.Java1d7ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
 public class CleanUpTest1d7 extends CleanUpTestCase {
 	@Rule
-    public ProjectTestSetup projectsetup= new Java1d7ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java1d7ProjectTestSetup();
 
 	@Override
 	protected IJavaProject getProject() {
-		return Java1d7ProjectTestSetup.getProject();
+		return projectSetup.getProject();
 	}
 
 	@Override
 	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
-		return Java1d7ProjectTestSetup.getDefaultClasspath();
+		return projectSetup.getDefaultClasspath();
 	}
 
 	@Test
@@ -347,6 +348,7 @@
 				+ "}\n";
 		String expected1= sample;
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { FixMessages.Java50Fix_ConvertToEnhancedForLoop_description });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected1 });
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java
index 3838e62..742d298 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTest1d8.java
@@ -13,11 +13,8 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.tests.quickfix;
 
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.core.runtime.CoreException;
 
@@ -29,17 +26,16 @@
 import org.eclipse.jdt.internal.core.manipulation.CodeTemplateContextType;
 import org.eclipse.jdt.internal.core.manipulation.StubUtility;
 import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+import org.eclipse.jdt.internal.corext.fix.FixMessages;
 
 import org.eclipse.jdt.ui.tests.core.rules.Java1d8ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
-@RunWith(JUnit4.class)
 public class CleanUpTest1d8 extends CleanUpTestCase {
 	@Rule
-    public ProjectTestSetup projectsetup= new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java1d8ProjectTestSetup();
 
 	@Override
-	@Before
 	public void setUp() throws Exception {
 		super.setUp();
 		StubUtility.setCodeTemplate(CodeTemplateContextType.OVERRIDECOMMENT_ID, "", null);
@@ -47,12 +43,12 @@
 
 	@Override
 	protected IJavaProject getProject() {
-		return Java1d8ProjectTestSetup.getProject();
+		return projectSetup.getProject();
 	}
 
 	@Override
 	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
-		return Java1d8ProjectTestSetup.getDefaultClasspath();
+		return projectSetup.getDefaultClasspath();
 	}
 
 	@Test
@@ -90,6 +86,7 @@
 		disable(CleanUpConstants.USE_LAMBDA);
 		enable(CleanUpConstants.USE_ANONYMOUS_CLASS_CREATION);
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { FixMessages.LambdaExpressionsFix_convert_to_anonymous_class_creation });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { original });
 	}
 
@@ -134,11 +131,13 @@
 				+ "}\n";
 		String expected1= sample;
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { FixMessages.LambdaExpressionsFix_convert_to_lambda_expression });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { expected1 });
 
 		disable(CleanUpConstants.USE_LAMBDA);
 		enable(CleanUpConstants.USE_ANONYMOUS_CLASS_CREATION);
 
+		assertGroupCategoryUsed(new ICompilationUnit[] { cu1 }, new String[] { FixMessages.LambdaExpressionsFix_convert_to_anonymous_class_creation });
 		assertRefactoringResultAsExpected(new ICompilationUnit[] { cu1 }, new String[] { original });
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java
index 2911f3d..336c800 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/CleanUpTestCase.java
@@ -68,7 +68,6 @@
 import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.cleanup.CleanUpOptions;
 import org.eclipse.jdt.ui.cleanup.ICleanUp;
-import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
@@ -78,11 +77,10 @@
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileManager.Profile;
 import org.eclipse.jdt.internal.ui.preferences.formatter.ProfileStore;
 
-public class CleanUpTestCase extends QuickFixTest {
+public abstract class CleanUpTestCase extends QuickFixTest {
 	protected static final String FIELD_COMMENT= "/* Test */";
 
 	protected IPackageFragmentRoot fSourceFolder;
-	protected IJavaProject fJProject1;
 
 	private CustomProfile fProfile;
 
@@ -108,9 +106,7 @@
 		corePrefs.setValue(JavaCore.CODEASSIST_FIELD_SUFFIXES, "");
 		corePrefs.setValue(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, "");
 
-		fJProject1= getProject();
-
-		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
+		fSourceFolder= JavaProjectHelper.addSourceContainer(getProject(), "src");
 
 		Map<String, String> settings= new Hashtable<>();
 		fProfile= new ProfileManager.CustomProfile("testProfile", settings, CleanUpProfileVersioner.CURRENT_VERSION, CleanUpProfileVersioner.PROFILE_KIND);
@@ -122,20 +118,15 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, getDefaultClasspath());
+		JavaProjectHelper.clear(getProject(), getDefaultClasspath());
 		disableAll();
-		fJProject1= null;
 		fSourceFolder= null;
 		fProfile= null;
 	}
 
-	protected IJavaProject getProject() {
-		return ProjectTestSetup.getProject();
-	}
+	protected abstract IJavaProject getProject();
 
-	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
-		return ProjectTestSetup.getDefaultClasspath();
-	}
+	protected abstract IClasspathEntry[] getDefaultClasspath() throws CoreException;
 
 	private void disableAll() throws CoreException {
 		Map<String, String> settings= fProfile.getSettings();
@@ -209,7 +200,7 @@
 					found= true;
 				}
 			}
-			assertTrue("expected group category: " + expectedGroupCategory + " not found", found);
+			assertTrue("should have group category: " + expectedGroupCategory + ", found instead: "+set.stream().map(e -> e.getName()).reduce("", String::concat), found);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ContributedQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ContributedQuickFixTest.java
index 2d9c935..9dc4ed1 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ContributedQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ContributedQuickFixTest.java
@@ -22,8 +22,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -42,11 +40,10 @@
 
 import org.eclipse.jdt.internal.ui.text.correction.AssistContext;
 
-@RunWith(JUnit4.class)
 public class ContributedQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -59,15 +56,14 @@
 
 		JavaCore.setOptions(options);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java
index 458f791..b8e2669 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertForLoopQuickFixTest.java
@@ -25,8 +25,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -59,11 +57,10 @@
 import org.eclipse.jdt.internal.ui.text.correction.QuickAssistProcessor;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.FixCorrectionProposal;
 
-@RunWith(JUnit4.class)
 public class ConvertForLoopQuickFixTest extends QuickFixTest {
 
 	@Rule
-	public ProjectTestSetup projectsetup= new ProjectTestSetup();
+	public ProjectTestSetup projectSetup= new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	IPackageFragmentRoot fSourceFolder;
@@ -79,7 +76,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 		fConvertLoopProposal= null;
@@ -87,7 +84,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 		fJProject1= null;
 		fSourceFolder= null;
 		fConvertLoopProposal= null;
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest.java
index a249cea..1ae3b38 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest.java
@@ -26,8 +26,6 @@
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -52,11 +50,10 @@
 import org.eclipse.jdt.internal.ui.text.correction.QuickAssistProcessor;
 import org.eclipse.jdt.internal.ui.text.correction.proposals.FixCorrectionProposal;
 
-@RunWith(JUnit4.class)
 public final class ConvertIterableLoopQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new ProjectTestSetup();
 
 	private FixCorrectionProposal fConvertLoopProposal;
 
@@ -86,7 +83,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fProject= ProjectTestSetup.getProject();
+		fProject= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fProject, "src");
 		fConvertLoopProposal= null;
@@ -94,7 +91,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fProject, projectSetup.getDefaultClasspath());
 		fConvertLoopProposal= null;
 		fProject= null;
 		fSourceFolder= null;
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest1d7.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest1d7.java
index add5ea5..16fc712 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest1d7.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ConvertIterableLoopQuickFixTest1d7.java
@@ -48,7 +48,7 @@
 public final class ConvertIterableLoopQuickFixTest1d7 extends QuickFixTest {
 
 	@Rule
-	public ProjectTestSetup projectsetup = new Java1d7ProjectTestSetup();
+	public ProjectTestSetup projectSetup = new Java1d7ProjectTestSetup();
 
 	private FixCorrectionProposal fConvertLoopProposal;
 
@@ -78,7 +78,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fProject= Java1d7ProjectTestSetup.getProject();
+		fProject= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fProject, "src");
 		fConvertLoopProposal= null;
@@ -86,7 +86,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fProject, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/GetterSetterQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/GetterSetterQuickFixTest.java
index 444cadc..aa41f44 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/GetterSetterQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/GetterSetterQuickFixTest.java
@@ -20,8 +20,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -45,11 +43,10 @@
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
-@RunWith(JUnit4.class)
 public class GetterSetterQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -66,7 +63,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
@@ -76,7 +73,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest.java
index 1829cfc..d0c78a5 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest.java
@@ -22,8 +22,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -45,11 +43,10 @@
 
 import org.eclipse.jdt.internal.ui.text.correction.CorrectionMessages;
 
-@RunWith(JUnit4.class)
 public class JavadocQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -97,7 +94,7 @@
 		comment.append(" */");
 		StubUtility.setCodeTemplate(CodeTemplateContextType.DELEGATECOMMENT_ID, comment.toString(), null);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
@@ -105,7 +102,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest9.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest9.java
index ff88329..4e9b4af 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest9.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTest9.java
@@ -21,8 +21,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -43,11 +41,10 @@
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal;
 
-@RunWith(JUnit4.class)
 public class JavadocQuickFixTest9 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java9ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java9ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -105,14 +102,14 @@
 
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 		JavaProjectHelper.set9CompilerOptions(fJProject1);
-		JavaProjectHelper.addRequiredModularProject(fJProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(fJProject1, projectSetup.getProject());
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java
index c96ff0c..08bfff4 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/JavadocQuickFixTestPreview.java
@@ -76,14 +76,14 @@
 
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
-		JavaProjectHelper.addRequiredModularProject(fJProject1, Java15ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(fJProject1, projectsetup.getProject());
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectsetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
index 854a904..22c4d27 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest.java
@@ -72,7 +72,7 @@
 public class LocalCorrectionsQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+	public ProjectTestSetup projectSetup= new ProjectTestSetup();
 
 	/**
 	 * Bug 434188: [quick fix] shows sign of quick fix, but says no suggestions available.
@@ -101,18 +101,16 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
-
 	@Test
 	public void testFieldAccessToStatic() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -12151,7 +12149,7 @@
 
 	@Test
 	public void testConvertLambdaToAnonymous() throws Exception {
-		assertTrue("error should not appear in 1.8 or higher", !JavaModelUtil.is18OrHigher(fJProject1));
+		assertFalse("error should not appear in 1.8 or higher", JavaModelUtil.is18OrHigher(fJProject1));
 
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("p", false, null);
 		StringBuffer buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d7.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d7.java
index d9fd7bb..0d3275e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d7.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d7.java
@@ -20,8 +20,6 @@
 import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
 
 import org.eclipse.jdt.testplugin.JavaProjectHelper;
 import org.eclipse.jdt.testplugin.TestOptions;
@@ -50,11 +48,10 @@
 /**
  * Those tests should run on Java Dolphin 1.7 .
  */
-@RunWith(JUnit4.class)
 public class LocalCorrectionsQuickFixTest1d7 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d7ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java1d7ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -80,7 +77,7 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= Java1d7ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
@@ -88,7 +85,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d7ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d8.java
index 0a147dc..bda34b0 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/LocalCorrectionsQuickFixTest1d8.java
@@ -55,7 +55,7 @@
 public class LocalCorrectionsQuickFixTest1d8 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -81,15 +81,14 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionTest.java
index 3ff6398..f7a3bc2 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/MarkerResolutionTest.java
@@ -63,7 +63,7 @@
 public class MarkerResolutionTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private static final class TextViewerContext implements IQuickAssistInvocationContext {
 
@@ -116,18 +116,16 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
-
 	private IMarker createMarker(ICompilationUnit cu, int line, int offset, int len) throws CoreException {
 		IFile file= (IFile) cu.getResource();
 		IMarker marker= file.createMarker(AddTestMarkersAction.MARKER_TYPE);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java
index addc7d7..d282049 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest.java
@@ -60,7 +60,7 @@
 public class ModifierCorrectionsQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -80,7 +80,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
@@ -88,10 +88,9 @@
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest1d7.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest1d7.java
index a4531f3..470bad0 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest1d7.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest1d7.java
@@ -54,7 +54,7 @@
 public class ModifierCorrectionsQuickFixTest1d7 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d7ProjectTestSetup();
+    public ProjectTestSetup projectSetup= new Java1d7ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -73,7 +73,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= Java1d7ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
@@ -81,10 +81,9 @@
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d7ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest9.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest9.java
index f4ef750..1d29422 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest9.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ModifierCorrectionsQuickFixTest9.java
@@ -50,7 +50,7 @@
 public class ModifierCorrectionsQuickFixTest9 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java9ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java9ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -69,7 +69,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= Java9ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
@@ -77,10 +77,9 @@
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java9ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsCleanUpTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsCleanUpTest1d8.java
index 9860af5..7fa1a15 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsCleanUpTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsCleanUpTest1d8.java
@@ -17,7 +17,6 @@
 import java.util.HashMap;
 import java.util.Hashtable;
 
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -54,12 +53,11 @@
 public class NullAnnotationsCleanUpTest1d8 extends CleanUpTestCase {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	private String ANNOTATION_JAR_PATH;
 
 	@Override
-	@Before
 	public void setUp() throws Exception {
 		super.setUp();
 		Hashtable<String, String> options= JavaCore.getOptions();
@@ -89,17 +87,17 @@
 			else
 				this.ANNOTATION_JAR_PATH= bundleFile.getPath();
 		}
-		JavaProjectHelper.addLibrary(fJProject1, new Path(ANNOTATION_JAR_PATH));
+		JavaProjectHelper.addLibrary(getProject(), new Path(ANNOTATION_JAR_PATH));
 		}
 
 	@Override
 	protected IJavaProject getProject() {
-		return Java1d8ProjectTestSetup.getProject();
+		return projectSetup.getProject();
 	}
 
 	@Override
 	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
-		return Java1d8ProjectTestSetup.getDefaultClasspath();
+		return projectSetup.getDefaultClasspath();
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest.java
index b37ea9a..683cc7e 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest.java
@@ -15,6 +15,7 @@
 package org.eclipse.jdt.ui.tests.quickfix;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
 import java.io.File;
@@ -77,7 +78,7 @@
 public class NullAnnotationsQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -110,7 +111,7 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		if (ANNOTATION_JAR_PATH == null) {
 			String version= "[1.1.0,2.0.0)"; // tests run at 1.5, need the "old" null annotations
@@ -128,7 +129,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	// ==== Problem:	dereferencing a @Nullable field
@@ -2201,7 +2202,7 @@
 			ICompilationUnit packageInfoCU= pack1.getCompilationUnit("package-info.java");
 			ICompilationUnit packageInfoCU2= pack2.getCompilationUnit("package-info.java");
 			assertTrue("a package-info.java should have been created in src", packageInfoCU.exists());
-			assertTrue("no package-info.java should have been created in src-tests", !packageInfoCU2.exists());
+			assertFalse("no package-info.java should have been created in src-tests", packageInfoCU2.exists());
 
 			StringBuilder expected= new StringBuilder();
 			expected.append("/**\n");
@@ -2232,7 +2233,7 @@
 			StubUtility.setCodeTemplate(CodeTemplateContextType.FILECOMMENT_ID, "/**\n * File\n */", null);
 
 			proj2= JavaProjectHelper.createJavaProject("OtherProject", "bin");
-			proj2.setRawClasspath(ProjectTestSetup.getDefaultClasspath(), null);
+			proj2.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 			TestOptions.initializeProjectOptions(proj2);
 			JavaProjectHelper.addLibrary(proj2, new Path(ANNOTATION_JAR_PATH));
 			JavaProjectHelper.addRequiredProject(proj2, fJProject1);
@@ -2295,7 +2296,7 @@
 			ICompilationUnit packageInfoCU= pack1.getCompilationUnit("package-info.java");
 			ICompilationUnit packageInfoCU2= pack2.getCompilationUnit("package-info.java");
 			assertTrue("a package-info.java should have been created in fJProject1", packageInfoCU.exists());
-			assertTrue("no package-info.java should have been created in proj2", !packageInfoCU2.exists());
+			assertFalse("no package-info.java should have been created in proj2", packageInfoCU2.exists());
 
 			StringBuilder expected= new StringBuilder();
 			expected.append("/**\n");
@@ -2329,7 +2330,7 @@
 			StubUtility.setCodeTemplate(CodeTemplateContextType.FILECOMMENT_ID, "/**\n * File\n */", null);
 
 			proj2= JavaProjectHelper.createJavaProject("OtherProject", "bin");
-			proj2.setRawClasspath(ProjectTestSetup.getDefaultClasspath(), null);
+			proj2.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 			TestOptions.initializeProjectOptions(proj2);
 			JavaProjectHelper.addLibrary(proj2, new Path(ANNOTATION_JAR_PATH));
 			IPackageFragmentRoot sourceFolder2= JavaProjectHelper.addSourceContainer(proj2, "src");
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8.java
index c635ab6..7dc00d6 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8.java
@@ -67,7 +67,7 @@
 public class NullAnnotationsQuickFixTest1d8 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -100,7 +100,7 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 		if (this.ANNOTATION_JAR_PATH == null) {
 			String version= "[2.0.0,3.0.0)"; // tests run at 1.8, need the "new" null annotations
 			Bundle[] bundles= Platform.getBundles("org.eclipse.jdt.annotation", version);
@@ -117,7 +117,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	/*
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8Mix.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8Mix.java
index 8052d8d..63496a9 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8Mix.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest1d8Mix.java
@@ -61,7 +61,7 @@
 public class NullAnnotationsQuickFixTest1d8Mix extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -94,7 +94,7 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		if (ANNOTATION_JAR_PATH == null) {
 			String version= "[1.1.0,2.0.0)"; // tests run at 1.8, but still use "old" null annotations
@@ -112,7 +112,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	// ==== Problem:	unchecked conversion, type elided lambda arg
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest9.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest9.java
index 0a7f71e..7c77e94 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest9.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/NullAnnotationsQuickFixTest9.java
@@ -48,7 +48,7 @@
 public class NullAnnotationsQuickFixTest9 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java9ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java9ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java
index 2d7fa76..dd5788f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/PropertiesFileQuickAssistTest.java
@@ -74,7 +74,7 @@
 public class PropertiesFileQuickAssistTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject;
 	private IPackageFragmentRoot fSourceFolder;
@@ -92,7 +92,7 @@
 
 		setPreferences();
 
-		fJProject= ProjectTestSetup.getProject();
+		fJProject= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject, "src");
 
@@ -112,7 +112,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject, projectSetup.getDefaultClasspath());
 	}
 
 	private static IFile createPropertyFile(IPackageFragment pack, String name, String content) throws UnsupportedEncodingException, CoreException {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixEnablementTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixEnablementTest.java
index a2dbf75..3007cf2 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixEnablementTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixEnablementTest.java
@@ -42,14 +42,14 @@
 public class QuickFixEnablementTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
 
 	@Before
 	public void setUp() throws Exception {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
@@ -58,7 +58,7 @@
 	@After
 	public void tearDown() throws Exception {
 		TestOptions.initializeProjectOptions(fJProject1);
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest14.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest14.java
index 9a17152..266afc5 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest14.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest14.java
@@ -36,11 +36,8 @@
 
 @RunWith(JUnit4.class)
 public class QuickFixTest14 extends QuickFixTest {
-
-//	private static final Class<QuickFixTest14> THIS= QuickFixTest14.class;
-
     @Rule
-    public ProjectTestSetup projectsetup = new Java14ProjectTestSetup(true);
+    public ProjectTestSetup projectSetup = new Java14ProjectTestSetup(true);
 
     private IJavaProject fJProject1;
 
@@ -61,7 +58,7 @@
 	@Test
 	public void testAddDefaultCaseSwitchStatement1() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -115,7 +112,7 @@
 	@Test
 	public void testAddDefaultCaseSwitchStatement2() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -170,7 +167,7 @@
 	@Test
 	public void testAddDefaultCaseSwitchStatement3() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -221,7 +218,7 @@
 	@Test
 	public void testAddMissingCaseSwitchStatement1() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -277,7 +274,7 @@
 	@Test
 	public void testAddDefaultCaseSwitchExpression1() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -331,7 +328,7 @@
 	@Test
 	public void testAddDefaultCaseSwitchExpression2() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -391,7 +388,7 @@
 	@Test
 	public void testAddMissingCaseSwitchExpression() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -459,7 +456,7 @@
 	@Test
 	public void testReplaceIncorrectReturnInSwitchExpressionWithYieldStatement() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java14ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectSetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest15.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest15.java
index 7b71071..c3b6b46 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest15.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest15.java
@@ -40,7 +40,6 @@
 import org.eclipse.jdt.internal.corext.util.Messages;
 
 import org.eclipse.jdt.ui.tests.core.rules.Java14ProjectTestSetup;
-import org.eclipse.jdt.ui.tests.core.rules.Java15ProjectTestSetup;
 import org.eclipse.jdt.ui.tests.core.rules.ProjectTestSetup;
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal;
 import org.eclipse.jdt.ui.text.java.correction.CUCorrectionProposal;
@@ -69,7 +68,7 @@
 	@Test
 	public void testEnablePreviewsAndOpenCompilerPropertiesProposals() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set15CompilerOptions(fJProject1, false);
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
@@ -127,7 +126,7 @@
 	@Test
 	public void testTextBlockGetNeedHigherComplianceProposal() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set14CompilerOptions(fJProject1, false);
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
@@ -161,7 +160,7 @@
 	@Test
 	public void testNoEnablePreviewProposal() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
@@ -186,7 +185,7 @@
 	@Test
 	public void testRecordSuppressWarningsProposals() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
 
 		Map<String, String> options= fJProject1.getOptions(false);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest1d8.java
index 7376fe2..ddbe2ea 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest1d8.java
@@ -60,7 +60,7 @@
 @RunWith(JUnit4.class)
 public class QuickFixTest1d8 extends QuickFixTest {
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -79,7 +79,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
@@ -89,7 +89,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest9.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest9.java
index f203491..9bd4548 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest9.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTest9.java
@@ -53,7 +53,7 @@
 public class QuickFixTest9 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java9ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java9ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -67,7 +67,7 @@
 	public void setUp() throws CoreException {
 		fJProject2= JavaProjectHelper.createJavaProject("TestProject2", "bin");
 		JavaProjectHelper.set9CompilerOptions(fJProject2);
-		JavaProjectHelper.addRequiredModularProject(fJProject2, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(fJProject2, projectSetup.getProject());
 		IPackageFragmentRoot java9Src= JavaProjectHelper.addSourceContainer(fJProject2, "src");
 		IPackageFragment def= java9Src.createPackageFragment("", false, null);
 		IPackageFragment pkgFrag= java9Src.createPackageFragment("java.defaultProject", false, null);
@@ -84,7 +84,7 @@
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
 		JavaProjectHelper.set9CompilerOptions(fJProject1);
 		JavaProjectHelper.addRequiredModularProject(fJProject1, fJProject2);
-		JavaProjectHelper.addRequiredModularProject(fJProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(fJProject1, projectSetup.getProject());
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
@@ -260,7 +260,7 @@
 	public void testMultipleNewServiceProvider() throws Exception {
 		IJavaProject jProject1= JavaProjectHelper.createJavaProject("TestProject_1", "bin");
 		JavaProjectHelper.set9CompilerOptions(jProject1);
-		JavaProjectHelper.addRequiredModularProject(jProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(jProject1, projectSetup.getProject());
 		IPackageFragmentRoot fProject1Src = JavaProjectHelper.addSourceContainer(jProject1, "src");
 
 		StringBuffer buf= new StringBuffer();
@@ -313,7 +313,7 @@
 		// Project 1 (The Libraries)
 		IJavaProject jProject1= JavaProjectHelper.createJavaProject("TestProject_1", "bin");
 		JavaProjectHelper.set9CompilerOptions(jProject1);
-		JavaProjectHelper.addRequiredModularProject(jProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(jProject1, projectSetup.getProject());
 		IPackageFragmentRoot fProject1Src = JavaProjectHelper.addSourceContainer(jProject1, "src");
 
 		StringBuffer buf= new StringBuffer();
@@ -334,7 +334,7 @@
 		IJavaProject jProject2= JavaProjectHelper.createJavaProject("TestProject_2", "bin");
 		JavaProjectHelper.set9CompilerOptions(jProject2);
 		JavaProjectHelper.addRequiredModularProject(jProject2, jProject1);
-		JavaProjectHelper.addRequiredModularProject(jProject2, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(jProject2, projectSetup.getProject());
 		IPackageFragmentRoot fProject2Src = JavaProjectHelper.addSourceContainer(jProject2, "src");
 
 		buf= new StringBuffer();
@@ -355,7 +355,7 @@
 		IJavaProject jProject3= JavaProjectHelper.createJavaProject("TestProject_3", "bin");
 		JavaProjectHelper.set9CompilerOptions(jProject3);
 		JavaProjectHelper.addRequiredModularProject(jProject3, jProject1);
-		JavaProjectHelper.addRequiredModularProject(jProject3, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(jProject3, projectSetup.getProject());
 		IPackageFragmentRoot fProject3Src = JavaProjectHelper.addSourceContainer(jProject3, "src");
 
 		pack= fProject3Src.createPackageFragment("test3", false, null);
@@ -400,7 +400,7 @@
 	public void testServiceProviderLocalTypeVisibility() throws Exception {
 		IJavaProject jProject1= JavaProjectHelper.createJavaProject("TestProject_1", "bin");
 		JavaProjectHelper.set9CompilerOptions(jProject1);
-		JavaProjectHelper.addRequiredModularProject(jProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(jProject1, projectSetup.getProject());
 		IPackageFragmentRoot fProject1Src = JavaProjectHelper.addSourceContainer(jProject1, "src");
 
 		StringBuffer buf= new StringBuffer();
@@ -442,7 +442,7 @@
 	public void testServiceProviderConstructorProposal () throws Exception {
 		IJavaProject jProject1= JavaProjectHelper.createJavaProject("TestProject_1", "bin");
 		JavaProjectHelper.set9CompilerOptions(jProject1);
-		JavaProjectHelper.addRequiredModularProject(jProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(jProject1, projectSetup.getProject());
 		IPackageFragmentRoot fProject1Src = JavaProjectHelper.addSourceContainer(jProject1, "src");
 
 		StringBuffer buf= new StringBuffer();
@@ -495,7 +495,7 @@
 	public void testServiceProviderVisibilityProposal () throws Exception {
 		IJavaProject jProject1= JavaProjectHelper.createJavaProject("TestProject_1", "bin");
 		JavaProjectHelper.set9CompilerOptions(jProject1);
-		JavaProjectHelper.addRequiredModularProject(jProject1, Java9ProjectTestSetup.getProject());
+		JavaProjectHelper.addRequiredModularProject(jProject1, projectSetup.getProject());
 		IPackageFragmentRoot fProject1Src = JavaProjectHelper.addSourceContainer(jProject1, "src");
 
 		StringBuffer buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java
index 9bac30c..eaeefca 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/QuickFixTestPreview.java
@@ -69,7 +69,7 @@
 	@Test
 	public void testEnablePreviewsAndOpenCompilerPropertiesProposals() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set15CompilerOptions(fJProject1, false);
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
@@ -97,7 +97,7 @@
 	@Test
 	public void testRecordSuppressWarningsProposals() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
 
 		Map<String, String> options= fJProject1.getOptions(false);
@@ -140,7 +140,7 @@
 	@Test
 	public void testGetNeedHigherComplianceProposalsAndEnablePreviewsProposal() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set15CompilerOptions(fJProject1, false);
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
@@ -169,7 +169,7 @@
 	@Test
 	public void testNoEnablePreviewProposal() throws Exception {
 		fJProject1= JavaProjectHelper.createJavaProject("TestProject1", "bin");
-		fJProject1.setRawClasspath(Java15ProjectTestSetup.getDefaultClasspath(), null);
+		fJProject1.setRawClasspath(projectsetup.getDefaultClasspath(), null);
 		JavaProjectHelper.set15CompilerOptions(fJProject1, true);
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReorgQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReorgQuickFixTest.java
index 1fa469f..34e2ecd 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReorgQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReorgQuickFixTest.java
@@ -74,7 +74,7 @@
 public class ReorgQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -90,17 +90,16 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
-
 	@Test
 	public void testUnusedImports() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReturnTypeQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReturnTypeQuickFixTest.java
index 0cc522a..92c618f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReturnTypeQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/ReturnTypeQuickFixTest.java
@@ -50,7 +50,7 @@
 public class ReturnTypeQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -66,18 +66,16 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
-
 	@Test
 	public void testReturnTypeMissingWithSimpleType() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SaveParticipantTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SaveParticipantTest.java
index 40e89de..c248e0f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SaveParticipantTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SaveParticipantTest.java
@@ -17,18 +17,20 @@
 
 import java.util.Hashtable;
 
-import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.JUnit4;
 
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 
 import org.eclipse.ui.PartInitException;
 
+import org.eclipse.jdt.core.IClasspathEntry;
 import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.IPackageFragment;
 import org.eclipse.jdt.core.JavaCore;
 import org.eclipse.jdt.core.JavaModelException;
@@ -49,10 +51,19 @@
 public class SaveParticipantTest extends CleanUpTestCase {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	@Override
-	@Before
+	protected IJavaProject getProject() {
+		return projectSetup.getProject();
+	}
+
+	@Override
+	protected IClasspathEntry[] getDefaultClasspath() throws CoreException {
+		return projectSetup.getDefaultClasspath();
+	}
+
+	@Override
 	public void setUp() throws Exception {
 		super.setUp();
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SerialVersionQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SerialVersionQuickFixTest.java
index 630f47d..1324462 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SerialVersionQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SerialVersionQuickFixTest.java
@@ -56,7 +56,7 @@
 public class SerialVersionQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private static final String DEFAULT_VALUE= "1L";
 
@@ -81,7 +81,7 @@
 	@Before
 	public void setUp() throws Exception {
 		JavaRuntime.getDefaultVMInstall();
-		fProject= ProjectTestSetup.getProject();
+		fProject= projectSetup.getProject();
 
 		Hashtable<String, String> options= TestOptions.getDefaultOptions();
 
@@ -107,7 +107,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fProject, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fProject, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java
index def2ac8..f02b7cc 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/SurroundWithTemplateTest.java
@@ -61,7 +61,7 @@
 public class SurroundWithTemplateTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -86,14 +86,14 @@
 		corePrefs.setValue(JavaCore.CODEASSIST_FIELD_SUFFIXES, "");
 		corePrefs.setValue(JavaCore.CODEASSIST_STATIC_FIELD_SUFFIXES, "");
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	private static List<IJavaCompletionProposal> getRunnableProposal(AssistContext context) throws CoreException {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeAnnotationQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeAnnotationQuickFixTest.java
index 5c0d1b3..8542bd7 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeAnnotationQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeAnnotationQuickFixTest.java
@@ -53,7 +53,7 @@
 public class TypeAnnotationQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -72,7 +72,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
@@ -83,7 +83,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	public void runQuickFixTest(String testCaseSpecificInput, String... testCaseSpecificOutputs) throws Exception {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeMismatchQuickFixTests.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeMismatchQuickFixTests.java
index 75a1aaf..65b9d5d 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeMismatchQuickFixTests.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeMismatchQuickFixTests.java
@@ -16,7 +16,8 @@
 package org.eclipse.jdt.ui.tests.quickfix;
 
 import static org.junit.Assert.assertArrayEquals;
-import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -67,7 +68,7 @@
 public class TypeMismatchQuickFixTests extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -90,18 +91,16 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1,ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1,projectSetup.getDefaultClasspath());
 	}
 
-
 	@Test
 	public void testTypeMismatchInVarDecl() throws Exception {
 		IPackageFragment pack1= fSourceFolder.createPackageFragment("test1", false, null);
@@ -2448,7 +2447,7 @@
 		assertNumberOfProposals(proposals, 3);
 
 		ICompletionProposal proposal= proposals.get(0);
-		assertTrue(proposal.getDisplayString().indexOf("Integer") != -1);
+		assertNotEquals(-1, proposal.getDisplayString().indexOf("Integer"));
 
 		String[] expected= new String[3];
 		buf= new StringBuffer();
@@ -2511,13 +2510,13 @@
 		assertNumberOfProposals(proposals, 3);
 
 		ICompletionProposal proposal= proposals.get(0);
-		assertTrue(proposal.getDisplayString().indexOf("Integer") == -1);
+		assertEquals(-1, proposal.getDisplayString().indexOf("Integer"));
 
 		ICompletionProposal proposal2= proposals.get(1);
-		assertTrue(proposal2.getDisplayString().indexOf("Integer") == -1);
+		assertEquals(-1, proposal2.getDisplayString().indexOf("Integer"));
 
 		ICompletionProposal proposal3= proposals.get(2);
-		assertTrue(proposal3.getDisplayString().indexOf("Integer") == -1);
+		assertEquals(-1, proposal3.getDisplayString().indexOf("Integer"));
 
 		String[] expected= new String[3];
 		buf= new StringBuffer();
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeParameterMismatchTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeParameterMismatchTest.java
index 0f105eb..9908ae5 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeParameterMismatchTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/TypeParameterMismatchTest.java
@@ -49,7 +49,7 @@
 public class TypeParameterMismatchTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -72,7 +72,7 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.METHODSTUB_ID, "", null);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
@@ -80,7 +80,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java
index 47a5d8c..71518b7 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnnecessaryArrayCreationQuickFixTest.java
@@ -51,7 +51,7 @@
 public class UnnecessaryArrayCreationQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -67,7 +67,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 		fRemoveArrayCreationProposal= null;
@@ -75,7 +75,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 		fJProject1= null;
 		fSourceFolder= null;
 		fRemoveArrayCreationProposal= null;
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java
index 8139472..eb41ac8 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest.java
@@ -52,7 +52,7 @@
 public class UnresolvedMethodsQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -70,7 +70,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CATCHBLOCK_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
@@ -81,7 +81,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest1d8.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest1d8.java
index 2b0d3ab..deefd55 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest1d8.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedMethodsQuickFixTest1d8.java
@@ -62,7 +62,7 @@
 public class UnresolvedMethodsQuickFixTest1d8 extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new Java1d8ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new Java1d8ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 
@@ -81,7 +81,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= Java1d8ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CATCHBLOCK_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.CONSTRUCTORSTUB_ID, "", null);
@@ -92,7 +92,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, Java1d8ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java
index 1d1b1d7..5324124 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedTypesQuickFixTest.java
@@ -57,7 +57,7 @@
 public class UnresolvedTypesQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -73,7 +73,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		String newFileTemplate= "${package_declaration}\n\n${type_declaration}";
 		StubUtility.setCodeTemplate(CodeTemplateContextType.NEWTYPE_ID, newFileTemplate, null);
@@ -83,10 +83,9 @@
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
-
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedVariablesQuickFixTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedVariablesQuickFixTest.java
index fa49ee5..6bc75c8 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedVariablesQuickFixTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UnresolvedVariablesQuickFixTest.java
@@ -56,7 +56,7 @@
 public class UnresolvedVariablesQuickFixTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -74,7 +74,7 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		StubUtility.setCodeTemplate(CodeTemplateContextType.NEWTYPE_ID, "", null);
 		StubUtility.setCodeTemplate(CodeTemplateContextType.TYPECOMMENT_ID, "", null);
@@ -84,7 +84,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java
index 91b8720..fd6b701 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/quickfix/UtilitiesTest.java
@@ -59,7 +59,7 @@
 public class UtilitiesTest extends QuickFixTest {
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
@@ -75,14 +75,14 @@
 		IPreferenceStore store= JavaPlugin.getDefault().getPreferenceStore();
 		store.setValue(PreferenceConstants.CODEGEN_ADD_COMMENTS, false);
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/refactoring/IsCompletelySelectedTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/refactoring/IsCompletelySelectedTest.java
index ef61163..a87647d 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/refactoring/IsCompletelySelectedTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/refactoring/IsCompletelySelectedTest.java
@@ -73,7 +73,7 @@
 	private IPackageFragment package_a_b_e;
 
 	@Rule
-    public ProjectTestSetup projectsetup = new ProjectTestSetup();
+    public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	@Before
 	public void setUp() throws Exception {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java
index cff4540..c7ec979 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/FileAdapterTest.java
@@ -37,7 +37,7 @@
 public class FileAdapterTest {
 
 	@Rule
-	public JUnitSourceSetup projectsetup = new JUnitSourceSetup();
+	public JUnitSourceSetup projectSetup = new JUnitSourceSetup();
 
 	@Test
 	public void testGetFile() throws Exception {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTest.java
index 7db380e..1fff91c 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/NLSSearchTest.java
@@ -53,14 +53,14 @@
 public class NLSSearchTest {
 
 	@Rule
-	public ProjectTestSetup projectsetup = new ProjectTestSetup();
+	public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	private IJavaProject fJProject1;
 	private IPackageFragmentRoot fSourceFolder;
 
 	@Before
 	public void setUp() throws CoreException {
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 
 		IPackageFragment pack= fSourceFolder.createPackageFragment("org.eclipse.osgi.util", false, null);
@@ -73,7 +73,7 @@
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 		ISearchResultViewPart searchResultView= NewSearchUI.getSearchResultView();
 		if (searchResultView != null) {
 			searchResultView.getSite().getPage().hideView(searchResultView);
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java
index 2f7cedb..708c754 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/ParticipantTest.java
@@ -46,7 +46,7 @@
 public class ParticipantTest {
 
 	@Rule
-	public JUnitSourceSetup projectsetup = new JUnitSourceSetup(new TestExtensionPoint());
+	public JUnitSourceSetup projectSetup = new JUnitSourceSetup(new TestExtensionPoint());
 
 	static class TestExtensionPoint extends SearchParticipantsExtensionPoint {
 		@Override
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java
index ecd16b6..da9dd0f 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTest.java
@@ -48,7 +48,7 @@
 public class SearchLeakTest extends LeakTestCase {
 
 	@Rule
-	public LeakTestSetup projectsetup = new LeakTestSetup();
+	public LeakTestSetup projectSetup = new LeakTestSetup();
 
 	@Test
 	public void testRemoveSearchQueries() throws Exception {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java
index 7a7112e..51a0b17 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/SearchLeakTestWrapper.java
@@ -34,7 +34,7 @@
 public class SearchLeakTestWrapper {
 
 	@Rule
-	public LeakTestSetup projectsetup = new LeakTestSetup();
+	public LeakTestSetup projectSetup = new LeakTestSetup();
 
 	SearchLeakTest fTest;
 
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTest.java
index 5714bdd..276be88 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTest.java
@@ -54,7 +54,7 @@
 public class TreeContentProviderTest {
 
 	@Rule
-	public JUnitSourceSetup projectsetup = new JUnitSourceSetup();
+	public JUnitSourceSetup projectSetup = new JUnitSourceSetup();
 
 	private LevelTreeContentProvider fProvider;
 	private JavaSearchResult fResult;
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTestWrapper.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTestWrapper.java
index b0eae0f..2393e63 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTestWrapper.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/TreeContentProviderTestWrapper.java
@@ -36,7 +36,7 @@
 	TreeContentProviderTest fTest;
 
 	@Rule
-	public JUnitSourceSetup projectsetup = new JUnitSourceSetup();
+	public JUnitSourceSetup projectSetup = new JUnitSourceSetup();
 
 	@Before
 	public void setUp() throws Exception {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceReferenceTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceReferenceTest.java
index 1fc3f08..cb80e66 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceReferenceTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/search/WorkspaceReferenceTest.java
@@ -28,7 +28,7 @@
 public class WorkspaceReferenceTest {
 
 	@Rule
-	public JUnitSourceSetup projectsetup = new JUnitSourceSetup();
+	public JUnitSourceSetup projectSetup = new JUnitSourceSetup();
 
 	@Test
 	public void testSimpleMethodRef() throws Exception {
diff --git a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/wizardapi/NewTypeWizardTest.java b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/wizardapi/NewTypeWizardTest.java
index 479356a..d136b93 100644
--- a/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/wizardapi/NewTypeWizardTest.java
+++ b/org.eclipse.jdt.ui.tests/ui/org/eclipse/jdt/ui/tests/wizardapi/NewTypeWizardTest.java
@@ -70,7 +70,7 @@
 	private IPackageFragmentRoot fSourceFolder;
 
 	@Rule
-	public ProjectTestSetup projectsetup = new ProjectTestSetup();
+	public ProjectTestSetup projectSetup = new ProjectTestSetup();
 
 	@Before
 	public void setUp() throws Exception {
@@ -98,14 +98,14 @@
 		StubUtility.setCodeTemplate(CodeTemplateContextType.ANNOTATIONBODY_ID, "/* annotation body */\n", null);
 
 
-		fJProject1= ProjectTestSetup.getProject();
+		fJProject1= projectSetup.getProject();
 		fSourceFolder= JavaProjectHelper.addSourceContainer(fJProject1, "src");
 	}
 
 
 	@After
 	public void tearDown() throws Exception {
-		JavaProjectHelper.clear(fJProject1, ProjectTestSetup.getDefaultClasspath());
+		JavaProjectHelper.clear(fJProject1, projectSetup.getDefaultClasspath());
 	}
 
 	@Test
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java
index 615cefb..a4df20a 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpPostSaveListener.java
@@ -171,11 +171,7 @@
 							synchronized (this) {
 								try {
 									performEdit(document, oldFileValue, undoEditCollector, oldDocValue, setContentStampSuccess);
-								} catch (BadLocationException e) {
-									fException= e;
-								} catch (MalformedTreeException e) {
-									fException= e;
-								} catch (CoreException e) {
+								} catch (BadLocationException | MalformedTreeException | CoreException e) {
 									fException= e;
 								} finally {
 									fDone= true;
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java
index 01f0503..523c488 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java
@@ -485,9 +485,7 @@
 
 				try {
 					edit.apply(document, TextEdit.UPDATE_REGIONS);
-				} catch (MalformedTreeException e) {
-					JavaPlugin.log(e);
-				} catch (BadLocationException e) {
+				} catch (MalformedTreeException | BadLocationException e) {
 					JavaPlugin.log(e);
 				}
 			}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java
index 3a6a30b..1efdc4d 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/ExternalNullAnnotationChangeProposals.java
@@ -187,9 +187,7 @@
 		public void apply(IDocument document) {
 			try {
 				doAnnotateMember(new NullProgressMonitor());
-			} catch (CoreException e) {
-				JavaPlugin.log(e);
-			} catch (IOException e) {
+			} catch (CoreException | IOException e) {
 				JavaPlugin.log(e);
 			}
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java
index 0b8c96c..ee406ed 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/template/java/JavaFormatter.java
@@ -286,9 +286,7 @@
 			try {
 				format(document, (CompilationUnitContext) context);
 				return;
-			} catch (BadLocationException e) {
-				// ignore and indent
-			} catch (MalformedTreeException e) {
+			} catch (BadLocationException | MalformedTreeException e) {
 				// ignore and indent
 			}
 		}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java
index 58af0bd..c7ab161 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/History.java
@@ -172,9 +172,7 @@
 	        try {
 				reader = new InputStreamReader(new FileInputStream(file), "utf-8");//$NON-NLS-1$
 				load(new InputSource(reader));
-			} catch (IOException e) {
-				JavaPlugin.log(e);
-			} catch (CoreException e) {
+			} catch (IOException | CoreException e) {
 				JavaPlugin.log(e);
 			} finally {
 				try {
@@ -194,11 +192,7 @@
 		try {
 			out= new FileOutputStream(file);
 			save(out);
-		} catch (IOException e) {
-			JavaPlugin.log(e);
-		} catch (CoreException e) {
-			JavaPlugin.log(e);
-		} catch (TransformerFactoryConfigurationError e) {
+		} catch (IOException | CoreException | TransformerFactoryConfigurationError e) {
 			// The XML library can be misconficgured (e.g. via
 			// -Djava.endorsed.dirs=C:\notExisting\xerces-2_7_1)
 			JavaPlugin.log(e);
@@ -260,11 +254,7 @@
 			DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
 			parser.setErrorHandler(new DefaultHandler());
 			root = parser.parse(inputSource).getDocumentElement();
-		} catch (SAXException e) {
-			throw createException(e, Messages.format(CorextMessages.History_error_read, BasicElementLabels.getResourceName(fFileName)));
-		} catch (ParserConfigurationException e) {
-			throw createException(e, Messages.format(CorextMessages.History_error_read, BasicElementLabels.getResourceName(fFileName)));
-		} catch (IOException e) {
+		} catch (SAXException | ParserConfigurationException | IOException e) {
 			throw createException(e, Messages.format(CorextMessages.History_error_read, BasicElementLabels.getResourceName(fFileName)));
 		}
 
@@ -314,9 +304,7 @@
 			StreamResult result = new StreamResult(stream);
 
 			transformer.transform(source, result);
-		} catch (TransformerException e) {
-			throw createException(e, Messages.format(CorextMessages.History_error_serialize, BasicElementLabels.getResourceName(fFileName)));
-		} catch (ParserConfigurationException e) {
+		} catch (TransformerException | ParserConfigurationException e) {
 			throw createException(e, Messages.format(CorextMessages.History_error_serialize, BasicElementLabels.getResourceName(fFileName)));
 		}
 	}
diff --git a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java
index 13205ee..b94d8aa 100644
--- a/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java
+++ b/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java
@@ -227,10 +227,7 @@
 		if (fUpdateJob.getState() == Job.RUNNING) {
 			try {
 				Job.getJobManager().join(UpdateJob.FAMILY, monitor);
-			} catch (OperationCanceledException e) {
-				// Ignore and do the consistency check without
-				// waiting for the update job.
-			} catch (InterruptedException e) {
+			} catch (OperationCanceledException | InterruptedException e) {
 				// Ignore and do the consistency check without
 				// waiting for the update job.
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java
index 6897099..f75fe4a 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ExtractTempRefactoring.java
@@ -68,6 +68,7 @@
 import org.eclipse.jdt.core.dom.FieldAccess;
 import org.eclipse.jdt.core.dom.ForStatement;
 import org.eclipse.jdt.core.dom.IBinding;
+import org.eclipse.jdt.core.dom.IExtendedModifier;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
@@ -75,6 +76,7 @@
 import org.eclipse.jdt.core.dom.Initializer;
 import org.eclipse.jdt.core.dom.LambdaExpression;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
+import org.eclipse.jdt.core.dom.Modifier;
 import org.eclipse.jdt.core.dom.Modifier.ModifierKeyword;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.NullLiteral;
@@ -92,6 +94,8 @@
 import org.eclipse.jdt.core.dom.SwitchStatement;
 import org.eclipse.jdt.core.dom.TryStatement;
 import org.eclipse.jdt.core.dom.Type;
+import org.eclipse.jdt.core.dom.TypeDeclaration;
+import org.eclipse.jdt.core.dom.VariableDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.VariableDeclarationStatement;
@@ -208,7 +212,7 @@
 		if (isUsedInForInitializerOrUpdater((Expression) node))
 			return false;
 		if (parent instanceof SwitchCase)
-			return false;
+			return true;
 		if (node instanceof SimpleName && node.getLocationInParent() != null) {
 			return !node.getLocationInParent().getId().equals("name"); //$NON-NLS-1$
 		}
@@ -427,11 +431,14 @@
 
 	private void addReplaceExpressionWithTemp() throws JavaModelException {
 		IASTFragment[] fragmentsToReplace= retainOnlyReplacableMatches(getMatchingFragments());
+		if (fragmentsToReplace.length == 0) {
+			return;
+		}
 		//TODO: should not have to prune duplicates here...
 		ASTRewrite rewrite= fCURewrite.getASTRewrite();
 		HashSet<IASTFragment> seen= new HashSet<>();
 		for (IASTFragment fragment : fragmentsToReplace) {
-			if (! seen.add(fragment))
+			if (!seen.add(fragment))
 				continue;
 			SimpleName tempName= fCURewrite.getAST().newSimpleName(fTempName);
 			TextEditGroup description= fCURewrite.createGroupDescription(RefactoringCoreMessages.ExtractTempRefactoring_replace);
@@ -664,6 +671,15 @@
 		return status;
 	}
 
+	private boolean hasFinalModifer(List<IExtendedModifier> modifiers) {
+		for (IExtendedModifier modifier : modifiers) {
+			if (modifier.isModifier() && Modifier.isFinal(((Modifier) modifier).getKeyword().toFlagValue())) {
+				return true;
+			}
+		}
+		return false;
+	}
+
 	private void createAndInsertTempDeclaration() throws CoreException {
 		Expression initializer= getSelectedExpression().createCopyTarget(fCURewrite.getASTRewrite(), true);
 		VariableDeclarationStatement vds= createTempDeclaration(initializer);
@@ -676,9 +692,24 @@
 			insertAtSelection= replacableMatches.length == 0
 					|| replacableMatches.length == 1 && replacableMatches[0].getAssociatedNode().equals(getSelectedExpression().getAssociatedExpression());
 		}
-		if (insertAtSelection) {
-			insertAt(getSelectedExpression().getAssociatedNode(), vds);
+		ASTNode node= ASTResolving.findParentStatement(getSelectedExpression().getAssociatedNode());
+		if (node instanceof SwitchCase) {
+			/* VariableDeclarationStatement must be final for switch/case */
+			if (!hasFinalModifer(vds.modifiers())) {
+				vds.modifiers().add(vds.getAST().newModifier(ModifierKeyword.FINAL_KEYWORD));
+			}
+			node= ASTNodes.getParent(node, SwitchStatement.class);
+			fDeclareFinal= true;
+		}
+		if (node instanceof SwitchStatement) {
+			/* must insert above switch statement */
+			insertAt(node, vds);
 			return;
+		} else {
+			if (insertAtSelection) {
+				insertAt(getSelectedExpression().getAssociatedNode(), vds);
+				return;
+			}
 		}
 
 		ASTNode[] firstReplaceNodeParents= getParents(getFirstReplacedExpression().getAssociatedNode());
@@ -701,7 +732,9 @@
 
 		VariableDeclarationStatement vds= ast.newVariableDeclarationStatement(vdf);
 		if (fDeclareFinal) {
-			vds.modifiers().add(ast.newModifier(ModifierKeyword.FINAL_KEYWORD));
+			if (!hasFinalModifer(vds.modifiers())) {
+				vds.modifiers().add(ast.newModifier(ModifierKeyword.FINAL_KEYWORD));
+			}
 		}
 		vds.setType(createTempType());
 
@@ -826,15 +859,38 @@
 		return null;
 	}
 
+	private static boolean excludeVariableName(ASTNode enclosingNode, int modifiers, IBinding binding) {
+		if (Modifier.isStatic(modifiers) && !Modifier.isStatic(binding.getModifiers())) {
+			VariableDeclaration bindingDeclaration= ASTNodes.findVariableDeclaration((IVariableBinding) binding, enclosingNode.getRoot());
+			if (bindingDeclaration != null) {
+				ASTNode bindingMethodDeclarationparent= ASTNodes.getParent(bindingDeclaration, ASTNode.METHOD_DECLARATION);
+				if (enclosingNode == bindingMethodDeclarationparent) {
+					// if variables live in same methods then we exclude the name
+					return true;
+				}
+			}
+			return false;
+		}
+		return true;
+	}
+
 	private String[] getExcludedVariableNames() {
 		if (fExcludedVariableNames == null) {
 			try {
-				IBinding[] bindings= new ScopeAnalyzer(fCompilationUnitNode).getDeclarationsInScope(getSelectedExpression().getStartPosition(), ScopeAnalyzer.VARIABLES
-						| ScopeAnalyzer.CHECK_VISIBILITY);
-				fExcludedVariableNames= new String[bindings.length];
-				for (int i= 0; i < bindings.length; i++) {
-					fExcludedVariableNames[i]= bindings[i].getName();
+				IBinding[] bindings= new ScopeAnalyzer(fCompilationUnitNode)
+						.getDeclarationsInScope(getSelectedExpression().getStartPosition(), ScopeAnalyzer.VARIABLES | ScopeAnalyzer.CHECK_VISIBILITY);
+				ASTNode enclosingNode= getEnclosingBodyNode().getParent();
+				List<String> excludedVariableNames= new ArrayList<>();
+				for (IBinding binding : bindings) {
+					BodyDeclaration bodyDeclaration= ASTNodes.getParent(getEnclosingBodyNode(), BodyDeclaration.class);
+					int modifiers= bodyDeclaration.getModifiers();
+					modifiers= bodyDeclaration instanceof TypeDeclaration ? modifiers&= ~Modifier.STATIC : modifiers;
+					// Bug 100430 - Work around ScopeAnalyzer#getDeclarationsInScope(..) returning out-of-scope elements
+					if (excludeVariableName(enclosingNode, modifiers, binding)) {
+						excludedVariableNames.add(binding.getName());
+					}
 				}
+				fExcludedVariableNames= excludedVariableNames.toArray(new String[0]);
 			} catch (JavaModelException e) {
 				fExcludedVariableNames= new String[0];
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java
index 81e0cfd..af2faf3 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/IntroduceFactoryRefactoring.java
@@ -864,7 +864,7 @@
 			if (ASTNodes.isExistingNode(actualCtorArg)) {
 				movedArg= unitRewriter.createMoveTarget(actualCtorArg);
 			} else {
-				unitRewriter.remove(actualCtorArg, null);
+				unitRewriter.remove(actualCtorArg, gd);
 				movedArg= actualCtorArg;
 			}
 
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java
index 480ede4..a431e5b 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/code/ReplaceInvocationsRefactoring.java
@@ -255,9 +255,7 @@
 			Document document= new Document(methodCu.getBuffer().getContents());
 			try {
 				textEdit.apply(document);
-			} catch (MalformedTreeException e) {
-				JavaPlugin.log(e);
-			} catch (BadLocationException e) {
+			} catch (MalformedTreeException | BadLocationException e) {
 				JavaPlugin.log(e);
 			}
 			source= document;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java
index 352cc0a..0655d07 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHint.java
@@ -264,11 +264,7 @@
 	private static NLSLine[] createRawLines(ICompilationUnit cu) {
 		try {
 			return NLSScanner.scan(cu);
-		} catch (JavaModelException x) {
-			return new NLSLine[0];
-		} catch (InvalidInputException x) {
-			return new NLSLine[0];
-		} catch (BadLocationException x) {
+		} catch (JavaModelException | InvalidInputException | BadLocationException x) {
 			return new NLSLine[0];
 		}
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java
index 1db6396..1b08c5c 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSHintHelper.java
@@ -457,10 +457,7 @@
 
 			props.load(is);
 
-		} catch (IOException e) {
-			// sorry no properties
-			return null;
-		} catch (CoreException e) {
+		} catch (IOException | CoreException e) {
 			// sorry no properties
 			return null;
 		} finally {
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java
index ede01c2..8cdabaa 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/nls/NLSSourceModifier.java
@@ -187,8 +187,7 @@
 					String editText= ' ' + NLSElement.createTagText(indexInElementList + 1); //tags are 1-based
 					TextChangeCompatibility.addTextEdit(change, label, new InsertEdit(lineEnd, editText));
 
-				} catch (InvalidInputException e) {
-				} catch (BadLocationException e) {
+				} catch (InvalidInputException | BadLocationException e) {
 				}
 			}
 		}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java
index 163a0f7..240ffad 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ChangeTypeRefactoring.java
@@ -1167,20 +1167,22 @@
 	 * @throws JavaModelException
 	 */
 	private Collection<ITypeBinding> computeValidTypes(ITypeBinding originalType,
-													Collection<ConstraintVariable> relevantVars,
-													Collection<ITypeConstraint> relevantConstraints,
-													IProgressMonitor pm) throws JavaModelException {
+			Collection<ConstraintVariable> relevantVars,
+			Collection<ITypeConstraint> relevantConstraints,
+			IProgressMonitor pm) throws JavaModelException {
 
 		Collection<ITypeBinding> result= new HashSet<>();
 
-		Collection<ITypeBinding> allTypes = new HashSet<>();
+		Collection<ITypeBinding> allTypes= new HashSet<>();
 		allTypes.addAll(getAllSuperTypes(originalType));
 
 		pm.beginTask(RefactoringCoreMessages.ChangeTypeRefactoring_analyzingMessage, allTypes.size());
 
 		for (ITypeBinding type : allTypes) {
 			if (isValid(type, relevantVars, relevantConstraints, new SubProgressMonitor(pm, 1))) {
-				result.add(type);
+				if (checkTypeParameterConflict(relevantVars, type)) {
+					result.add(type);
+				}
 			}
 		}
 		// "changing" to the original type is a no-op
@@ -1194,6 +1196,51 @@
 		return result;
 	}
 
+	/*
+	 * check if replacement type is conflicting with existing type usage for classes with overridden
+	 * method.
+	 *
+	 * @return TRUE if no conflict found
+	 */
+	private boolean checkTypeParameterConflict(Collection<ConstraintVariable> relevantVars, ITypeBinding replaceTypeTo) {
+		for (ConstraintVariable constraintVariable : relevantVars) {
+			if (constraintVariable instanceof ParameterTypeVariable) {
+				ParameterTypeVariable parameterTypeVariable= (ParameterTypeVariable) constraintVariable;
+				ITypeBinding declaringClass= parameterTypeVariable.getMethodBinding().getDeclaringClass();
+				ITypeBinding[] parameterTypeVariableTypes= parameterTypeVariable.getMethodBinding().getParameterTypes();
+				List<IMethodBinding> possibleConflictMethods= new ArrayList<>();
+				for (IMethodBinding declaredMethod : declaringClass.getDeclaredMethods()) {
+					if (declaredMethod.getName().equals(parameterTypeVariable.getMethodBinding().getName()) &&
+							declaredMethod.getParameterTypes().length == parameterTypeVariableTypes.length) {
+						// if method name and number of parameters match it might be a conflict
+						possibleConflictMethods.add(declaredMethod);
+					}
+				}
+				if (possibleConflictMethods.size() < 2) {
+					continue; // no conflicting methods
+				}
+				mLoop: for (IMethodBinding declaredMethod : possibleConflictMethods) {
+					ITypeBinding[] parameterTypes= declaredMethod.getParameterTypes();
+					/* check if other parameter Types are equal, if not this method is ok */
+					for (int i= 0; i < parameterTypes.length; i++) {
+						if (i == fParamIndex) {
+							continue;
+						}
+						if (!Bindings.equals(parameterTypes[i], parameterTypeVariableTypes[i])) {
+							continue mLoop;
+						}
+					}
+					// if all method parameter Types are equal then we have a conflict with the Type we want to replace to
+					// so we return false to remove it from allowed types
+					if (Bindings.equals(parameterTypes[fParamIndex], replaceTypeTo)) {
+						return false;
+					}
+				}
+			}
+		}
+		return true;
+	}
+
 	/**
 	 * Determines if a given type satisfies a set of type constraints.
 	 * @param type
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java
index c1600ea..d05b2f6 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractClassRefactoring.java
@@ -77,8 +77,8 @@
 import org.eclipse.jdt.core.dom.VariableDeclaration;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
-import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.TypeLocation;
+import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
 import org.eclipse.jdt.core.refactoring.descriptors.ExtractClassDescriptor;
 import org.eclipse.jdt.core.refactoring.descriptors.ExtractClassDescriptor.Field;
 import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor;
@@ -86,6 +86,9 @@
 import org.eclipse.jdt.core.search.SearchMatch;
 import org.eclipse.jdt.core.search.SearchPattern;
 
+import org.eclipse.jdt.internal.core.manipulation.StubUtility;
+import org.eclipse.jdt.internal.core.manipulation.dom.ASTResolving;
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.codemanipulation.ContextSensitiveImportRewriteContext;
 import org.eclipse.jdt.internal.corext.codemanipulation.GetterSetterUtil;
 import org.eclipse.jdt.internal.corext.dom.ASTNodes;
@@ -106,10 +109,6 @@
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 
-import org.eclipse.jdt.internal.core.manipulation.StubUtility;
-import org.eclipse.jdt.internal.core.manipulation.dom.ASTResolving;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
-
 public class ExtractClassRefactoring extends Refactoring {
 
 	public static class ExtractClassDescriptorVerification {
@@ -764,12 +763,12 @@
 				}
 			}
 		}
-		FieldDeclaration fieldDeclaration= createParameterObjectField(pof, typeNode, modifier);
+		FieldDeclaration fieldDeclaration= createParameterObjectField(pof, typeNode, modifier, removeFieldGroup);
 		ListRewrite bodyDeclList= rewrite.getListRewrite(typeNode, TypeDeclaration.BODY_DECLARATIONS_PROPERTY);
 		if (lastField != null)
-			bodyDeclList.insertAfter(fieldDeclaration, lastField, null);
+			bodyDeclList.insertAfter(fieldDeclaration, lastField, removeFieldGroup);
 		else
-			bodyDeclList.insertFirst(fieldDeclaration, null);
+			bodyDeclList.insertFirst(fieldDeclaration, removeFieldGroup);
 		return fieldDeclaration;
 	}
 
@@ -792,7 +791,7 @@
 		baseCURewrite.getImportRemover().registerRemovedNode(parent);
 	}
 
-	private FieldDeclaration createParameterObjectField(ParameterObjectFactory pof, TypeDeclaration typeNode, int modifier) {
+	private FieldDeclaration createParameterObjectField(ParameterObjectFactory pof, TypeDeclaration typeNode, int modifier, TextEditGroup removeFieldGroup) {
 		AST ast= fBaseCURewrite.getAST();
 		ClassInstanceCreation creation= ast.newClassInstanceCreation();
 		creation.setType(pof.createType(fDescriptor.isCreateTopLevel(), fBaseCURewrite, typeNode.getStartPosition()));
@@ -811,9 +810,9 @@
 						ArrayCreation arrayCreation= ast.newArrayCreation();
 						arrayCreation.setType((ArrayType) addImport);
 						arrayCreation.setInitializer((ArrayInitializer) createMoveTarget);
-						listRewrite.insertLast(arrayCreation, null);
+						listRewrite.insertLast(arrayCreation, removeFieldGroup);
 					} else {
-						listRewrite.insertLast(createMoveTarget, null);
+						listRewrite.insertLast(createMoveTarget, removeFieldGroup);
 					}
 				}
 			}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java
index ea7d89c..dfa5fc4 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractInterfaceProcessor.java
@@ -479,9 +479,7 @@
 			try {
 				rewrite.rewriteAST(document, unit.getJavaProject().getOptions(true)).apply(document, TextEdit.UPDATE_REGIONS);
 				targetRewrite.getListRewrite(targetDeclaration, targetDeclaration.getBodyDeclarationsProperty()).insertFirst(targetRewrite.createStringPlaceholder(normalizeText(document.get(position.getStartPosition(), position.getLength())), ASTNode.FIELD_DECLARATION), null);
-			} catch (MalformedTreeException exception) {
-				JavaPlugin.log(exception);
-			} catch (BadLocationException exception) {
+			} catch (MalformedTreeException | BadLocationException exception) {
 				JavaPlugin.log(exception);
 			}
 		} finally {
@@ -688,9 +686,7 @@
 			try {
 				rewrite.rewriteAST(document, unit.getJavaProject().getOptions(true)).apply(document, TextEdit.UPDATE_REGIONS);
 				targetRewrite.getListRewrite(targetDeclaration, targetDeclaration.getBodyDeclarationsProperty()).insertFirst(targetRewrite.createStringPlaceholder(normalizeText(document.get(position.getStartPosition(), position.getLength())), ASTNode.METHOD_DECLARATION), null);
-			} catch (MalformedTreeException exception) {
-				JavaPlugin.log(exception);
-			} catch (BadLocationException exception) {
+			} catch (MalformedTreeException | BadLocationException exception) {
 				JavaPlugin.log(exception);
 			}
 		} finally {
@@ -1042,9 +1038,7 @@
 				final IDocument document= new Document(buffer.getDocument().get());
 				try {
 					rewrite.rewriteAST(document, fSubType.getJavaProject().getOptions(true)).apply(document, TextEdit.UPDATE_REGIONS);
-				} catch (MalformedTreeException exception) {
-					JavaPlugin.log(exception);
-				} catch (BadLocationException exception) {
+				} catch (MalformedTreeException | BadLocationException exception) {
 					JavaPlugin.log(exception);
 				}
 				subUnit.getBuffer().setContents(document.get());
@@ -1088,10 +1082,7 @@
 													final IDocument document= new Document(superUnit.getBuffer().getContents());
 													try {
 														edit.apply(document, TextEdit.UPDATE_REGIONS);
-													} catch (MalformedTreeException exception) {
-														JavaPlugin.log(exception);
-														status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error));
-													} catch (BadLocationException exception) {
+													} catch (MalformedTreeException | BadLocationException exception) {
 														JavaPlugin.log(exception);
 														status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error));
 													}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java
index 4165844..225b3dc 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/ExtractSupertypeProcessor.java
@@ -407,13 +407,7 @@
 			final ICompilationUnit copy= getSharedWorkingCopy(unit, new NullProgressMonitor());
 			copy.getBuffer().setContents(document.get());
 			JavaModelUtil.reconcile(copy);
-		} catch (CoreException exception) {
-			JavaPlugin.log(exception);
-			status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractSupertypeProcessor_unexpected_exception_on_layer));
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-			status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractSupertypeProcessor_unexpected_exception_on_layer));
-		} catch (BadLocationException exception) {
+		} catch (CoreException | MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 			status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractSupertypeProcessor_unexpected_exception_on_layer));
 		}
@@ -537,10 +531,7 @@
 			if (edit != null) {
 				try {
 					edit.apply(document, TextEdit.UPDATE_REGIONS);
-				} catch (MalformedTreeException exception) {
-					JavaPlugin.log(exception);
-					status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractSupertypeProcessor_unexpected_exception_on_layer));
-				} catch (BadLocationException exception) {
+				} catch (MalformedTreeException | BadLocationException exception) {
 					JavaPlugin.log(exception);
 					status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractSupertypeProcessor_unexpected_exception_on_layer));
 				}
@@ -620,10 +611,7 @@
 			final TextEdit edit= targetRewrite.createChange(true).getEdit();
 			try {
 				edit.apply(document, TextEdit.UPDATE_REGIONS);
-			} catch (MalformedTreeException exception) {
-				JavaPlugin.log(exception);
-				status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractSupertypeProcessor_unexpected_exception_on_layer));
-			} catch (BadLocationException exception) {
+			} catch (MalformedTreeException | BadLocationException exception) {
 				JavaPlugin.log(exception);
 				status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractSupertypeProcessor_unexpected_exception_on_layer));
 			}
@@ -1105,9 +1093,7 @@
 								final IDocument document= new Document(fSuperSource);
 								try {
 									edit.apply(document, TextEdit.UPDATE_REGIONS);
-								} catch (MalformedTreeException exception) {
-									JavaPlugin.log(exception);
-								} catch (BadLocationException exception) {
+								} catch (MalformedTreeException | BadLocationException exception) {
 									JavaPlugin.log(exception);
 								}
 								fSuperSource= document.get();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java
index 3095e10..5f9d6ec 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/HierarchyProcessor.java
@@ -322,9 +322,7 @@
 			expression.accept(new TypeVariableMapper(rewriter, mapping));
 			rewriter.rewriteAST(document, declaringCu.getJavaProject().getOptions(true)).apply(document, TextEdit.NONE);
 			result= (Expression) rewrite.createStringPlaceholder(document.get(position.getStartPosition(), position.getLength()), ASTNode.METHOD_INVOCATION);
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 		}
 		return result;
@@ -373,9 +371,7 @@
 			});
 			rewriter.rewriteAST(document, declaringCu.getJavaProject().getOptions(true)).apply(document, TextEdit.NONE);
 			result= (BodyDeclaration) rewrite.createStringPlaceholder(document.get(position.getStartPosition(), position.getLength()), ASTNode.TYPE_DECLARATION);
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 		}
 		return result;
@@ -394,9 +390,7 @@
 			declaration.accept(new TypeVariableMapper(rewriter, mapping));
 			rewriter.rewriteAST(document, declaringCu.getJavaProject().getOptions(true)).apply(document, TextEdit.NONE);
 			result= (SingleVariableDeclaration) rewrite.createStringPlaceholder(document.get(position.getStartPosition(), position.getLength()), ASTNode.SINGLE_VARIABLE_DECLARATION);
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 		}
 		return result;
@@ -415,9 +409,7 @@
 			type.accept(new TypeVariableMapper(rewriter, mapping));
 			rewriter.rewriteAST(document, declaringCu.getJavaProject().getOptions(true)).apply(document, TextEdit.NONE);
 			result= (Type) rewrite.createStringPlaceholder(document.get(position.getStartPosition(), position.getLength()), ASTNode.SIMPLE_TYPE);
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 		}
 		return result;
@@ -436,9 +428,7 @@
 			bodyDeclaration.accept(new TypeVariableMapper(rewriter, mapping));
 			rewriter.rewriteAST(document, declaringCu.getJavaProject().getOptions(true)).apply(document, TextEdit.NONE);
 			result= (BodyDeclaration) rewrite.createStringPlaceholder(document.get(position.getStartPosition(), position.getLength()), ASTNode.TYPE_DECLARATION);
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 		}
 		return result;
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
index e46d602..645d42d 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PullUpRefactoringProcessor.java
@@ -1019,9 +1019,7 @@
 			Strings.trimIndentation(lines, method.getJavaProject(), false);
 			content= Strings.concatenate(lines, StubUtility.getLineDelimiterUsed(method));
 			newMethod.setBody((Block) targetRewrite.getASTRewrite().createStringPlaceholder(content, ASTNode.BLOCK));
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 		}
 	}
@@ -1425,11 +1423,7 @@
 			copy.getBuffer().setContents(document.get());
 			JavaModelUtil.reconcile(copy);
 			return copy;
-		} catch (JavaModelException exception) {
-			status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error));
-		} catch (MalformedTreeException exception) {
-			status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error));
-		} catch (BadLocationException exception) {
+		} catch (JavaModelException | MalformedTreeException | BadLocationException exception) {
 			status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error));
 		} finally {
 			monitor.done();
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java
index ea6e6e7..c8c8d91 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/PushDownRefactoringProcessor.java
@@ -619,9 +619,7 @@
 			Strings.trimIndentation(lines, method.getJavaProject(), false);
 			content= Strings.concatenate(lines, StubUtility.getLineDelimiterUsed(method));
 			newMethod.setBody((Block) targetRewrite.createStringPlaceholder(content, ASTNode.BLOCK));
-		} catch (MalformedTreeException exception) {
-			JavaPlugin.log(exception);
-		} catch (BadLocationException exception) {
+		} catch (MalformedTreeException | BadLocationException exception) {
 			JavaPlugin.log(exception);
 		}
 	}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
index c313154..98c7dbe 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/structure/constraints/SuperTypeRefactoringProcessor.java
@@ -298,9 +298,7 @@
 			final TextEdit edit= targetRewrite.rewriteAST(document, subType.getJavaProject().getOptions(true));
 			try {
 				edit.apply(document, TextEdit.UPDATE_REGIONS);
-			} catch (MalformedTreeException exception) {
-				JavaPlugin.log(exception);
-			} catch (BadLocationException exception) {
+			} catch (MalformedTreeException | BadLocationException exception) {
 				JavaPlugin.log(exception);
 			}
 			buffer.setLength(0);
@@ -342,11 +340,7 @@
 			final IDocument document= new Document();
 			try {
 				rewrite.rewriteImports(new SubProgressMonitor(monitor, 100)).apply(document);
-			} catch (MalformedTreeException exception) {
-				JavaPlugin.log(exception);
-			} catch (BadLocationException exception) {
-				JavaPlugin.log(exception);
-			} catch (CoreException exception) {
+			} catch (MalformedTreeException | BadLocationException | CoreException exception) {
 				JavaPlugin.log(exception);
 			}
 			fTypeBindings.clear();
@@ -443,10 +437,7 @@
 			if (edit != null) {
 				try {
 					edit.apply(document, TextEdit.UPDATE_REGIONS);
-				} catch (MalformedTreeException exception) {
-					JavaPlugin.log(exception);
-					status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error));
-				} catch (BadLocationException exception) {
+				} catch (MalformedTreeException | BadLocationException exception) {
 					JavaPlugin.log(exception);
 					status.merge(RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.ExtractInterfaceProcessor_internal_error));
 				}
diff --git a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesRefactoring.java b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesRefactoring.java
index 7f00392..85828c8 100644
--- a/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesRefactoring.java
+++ b/org.eclipse.jdt.ui/core refactoring/org/eclipse/jdt/internal/corext/refactoring/surround/SurroundWithTryWithResourcesRefactoring.java
@@ -337,21 +337,14 @@
 		}
 
 		ASTNode node= fSelectedNodes[0];
-		ASTNode parentStatement= ASTResolving.findAncestor(node, ASTNode.VARIABLE_DECLARATION_STATEMENT);
 		List<ASTNode> coveredStatements= new ArrayList<>();
-		if (fSelectedNodes == null || fSelectedNodes.length == 0 && parentStatement != null
-				&& (parentStatement instanceof VariableDeclarationStatement)
-				&& (parentStatement instanceof ExpressionStatement)) {
-			coveredStatements.add(parentStatement);
-		} else {
-			for (ASTNode coveredNode : fSelectedNodes) {
-				Statement statement= ASTResolving.findParentStatement(coveredNode);
-				if (statement == null) {
-					continue;
-				}
-				if (!coveredStatements.contains(statement)) {
-					coveredStatements.add(statement);
-				}
+		for (ASTNode coveredNode : fSelectedNodes) {
+			Statement statement= ASTResolving.findParentStatement(coveredNode);
+			if (statement == null) {
+				continue;
+			}
+			if (!coveredStatements.contains(statement)) {
+				coveredStatements.add(statement);
 			}
 		}
 
diff --git a/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java b/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java
index 86b5986..eef9a79 100644
--- a/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java
+++ b/org.eclipse.jdt.ui/internal compatibility/org/eclipse/jdt/internal/ui/dialogs/TypeInfoViewer.java
@@ -935,7 +935,6 @@
 		});
 		fTable.addDisposeListener(event -> {
 			stop(true, true);
-			fDashLineColor.dispose();
 			fSeparatorIcon.dispose();
 			fImageManager.dispose();
 			if (fProgressUpdateJob != null) {
diff --git a/org.eclipse.jdt.ui/jar in jar loader/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java b/org.eclipse.jdt.ui/jar in jar loader/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java
index 24737b0..9613f4e 100644
--- a/org.eclipse.jdt.ui/jar in jar loader/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java
+++ b/org.eclipse.jdt.ui/jar in jar loader/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java
@@ -58,7 +58,7 @@
 		Thread.currentThread().setContextClassLoader(jceClassLoader);
 		Class c = Class.forName(mi.rsrcMainClass, true, jceClassLoader);
 		Method main = c.getMethod(JIJConstants.MAIN_METHOD_NAME, args.getClass());
-		main.invoke((Object) null, args);
+		main.invoke((Object) null, new Object[] {args});
 	}
 
 	private static ClassLoader getParentClassLoader() throws InvocationTargetException, IllegalAccessException {
diff --git a/org.eclipse.jdt.ui/jar-in-jar-loader.zip b/org.eclipse.jdt.ui/jar-in-jar-loader.zip
index 7e5a3ab..3c6c9bf 100644
--- a/org.eclipse.jdt.ui/jar-in-jar-loader.zip
+++ b/org.eclipse.jdt.ui/jar-in-jar-loader.zip
Binary files differ
diff --git a/org.eclipse.jdt.ui/plugin.properties b/org.eclipse.jdt.ui/plugin.properties
index 399dd50..4580ab5 100644
--- a/org.eclipse.jdt.ui/plugin.properties
+++ b/org.eclipse.jdt.ui/plugin.properties
@@ -1210,6 +1210,7 @@
 
 #--- Clean Up ---
 CleanUpTabPage.CodeStyle.name = &Code Style
+CleanUpTabPage.Optimization.name = O&ptimization
 CleanUpTabPage.MemberAccesses.name = Membe&r Accesses
 CleanUpTabPage.UnnecessaryCode.name = &Unnecessary Code
 CleanUpTabPage.MissingCode.name = &Missing Code
diff --git a/org.eclipse.jdt.ui/plugin.xml b/org.eclipse.jdt.ui/plugin.xml
index a891705..de8e8f3 100644
--- a/org.eclipse.jdt.ui/plugin.xml
+++ b/org.eclipse.jdt.ui/plugin.xml
@@ -6976,6 +6976,11 @@
             cleanUpKind="cleanUp">
       </cleanUpConfigurationUI>
       <cleanUpConfigurationUI
+            class="org.eclipse.jdt.internal.ui.preferences.cleanup.OptimizationTabPage"
+            name="%CleanUpTabPage.Optimization.name"
+            cleanUpKind="cleanUp">
+      </cleanUpConfigurationUI>
+      <cleanUpConfigurationUI
             class="org.eclipse.jdt.internal.ui.preferences.cleanup.MemberAccessesTabPage"
             name="%CleanUpTabPage.MemberAccesses.name"
             cleanUpKind="cleanUp">
@@ -7002,6 +7007,11 @@
             cleanUpKind="saveAction">
       </cleanUpConfigurationUI>
       <cleanUpConfigurationUI
+            class="org.eclipse.jdt.internal.ui.preferences.cleanup.OptimizationTabPage"
+            name="%CleanUpTabPage.Optimization.name"
+            cleanUpKind="saveAction">
+      </cleanUpConfigurationUI>
+      <cleanUpConfigurationUI
             class="org.eclipse.jdt.internal.ui.preferences.cleanup.MemberAccessesTabPage"
             name="%CleanUpTabPage.MemberAccesses.name"
             cleanUpKind="saveAction">
@@ -7071,9 +7081,14 @@
             runAfter="org.eclipse.jdt.ui.cleanup.expressions">
       </cleanUp>
       <cleanUp
+            class="org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp"
+            id="org.eclipse.jdt.ui.cleanup.number_suffix"
+            runAfter="org.eclipse.jdt.ui.cleanup.lambda_and_method_ref">
+      </cleanUp>
+      <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.LazyLogicalCleanUp"
             id="org.eclipse.jdt.ui.cleanup.lazy_logical"
-            runAfter="org.eclipse.jdt.ui.cleanup.lambda_and_method_ref">
+            runAfter="org.eclipse.jdt.ui.cleanup.number_suffix">
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.PatternCleanUp"
@@ -7081,14 +7096,9 @@
             runAfter="org.eclipse.jdt.ui.cleanup.lazy_logical">
       </cleanUp>
       <cleanUp
-            class="org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp"
-            id="org.eclipse.jdt.ui.cleanup.number_suffix"
-            runAfter="org.eclipse.jdt.ui.cleanup.precompile_regex">
-      </cleanUp>
-      <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.UnusedCodeCleanUp"
             id="org.eclipse.jdt.ui.cleanup.unused_code"
-            runAfter="org.eclipse.jdt.ui.cleanup.number_suffix">
+            runAfter="org.eclipse.jdt.ui.cleanup.precompile_regex">
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.Java50CleanUp"
@@ -7122,13 +7132,13 @@
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.ObjectsEqualsCleanUp"
-            id="org.eclipse.jdt.ui.cleanup.precompile_regex"
+            id="org.eclipse.jdt.ui.cleanup.objects_equals"
             runAfter="org.eclipse.jdt.ui.cleanup.unnecessary_array_creation">
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.StringCleanUp"
             id="org.eclipse.jdt.ui.cleanup.strings"
-            runAfter="org.eclipse.jdt.ui.cleanup.precompile_regex">
+            runAfter="org.eclipse.jdt.ui.cleanup.objects_equals">
       </cleanUp>
       <cleanUp
             class="org.eclipse.jdt.internal.ui.fix.UnimplementedCodeCleanUp"
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java
index 94764cd..45bbacd 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/CompilationUnitChangeNode.java
@@ -166,9 +166,7 @@
 					break;
 				result= result.getParent();
 			}
-		} catch(JavaModelException e) {
-			// Do nothing, use old value.
-		} catch(ClassCastException e) {
+		} catch(JavaModelException | ClassCastException e) {
 			// Do nothing, use old value.
 		}
 		return result;
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
index ff8a5c4..9322be6 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/PasteAction.java
@@ -950,9 +950,7 @@
 					try {
 						edit.apply(document, TextEdit.UPDATE_REGIONS);
 						return textPosition;
-					} catch (MalformedTreeException e) {
-						JavaPlugin.log(e);
-					} catch (BadLocationException e) {
+					} catch (MalformedTreeException | BadLocationException e) {
 						JavaPlugin.log(e);
 					} finally {
 						if (rewriteSession != null)
@@ -1034,10 +1032,7 @@
 		private IEditorPart openCu(ICompilationUnit cu) {
 			try {
 				return JavaUI.openInEditor(cu, true, true);
-			} catch (PartInitException e) {
-				JavaPlugin.log(e);
-				return null;
-			} catch (JavaModelException e) {
+			} catch (PartInitException | JavaModelException e) {
 				JavaPlugin.log(e);
 				return null;
 			}
diff --git a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java
index 7c20586..503d088 100644
--- a/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java
+++ b/org.eclipse.jdt.ui/ui refactoring/org/eclipse/jdt/internal/ui/refactoring/reorg/RenameLinkedMode.java
@@ -377,9 +377,7 @@
 			JavaPlugin.log(ex);
 		} catch (InterruptedException ex) {
 			// canceling is OK -> redo text changes in that case?
-		} catch (InvocationTargetException ex) {
-			JavaPlugin.log(ex);
-		} catch (BadLocationException e) {
+		} catch (InvocationTargetException | BadLocationException e) {
 			JavaPlugin.log(e);
 		} finally {
 			if (label != null)
@@ -462,9 +460,7 @@
 			RenameSupport renameSupport= undoAndCreateRenameSupport(newName);
 			if (renameSupport != null)
 				renameSupport.openDialog(fEditor.getSite().getShell());
-		} catch (CoreException e) {
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (CoreException | BadLocationException e) {
 			JavaPlugin.log(e);
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTextBlockAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTextBlockAction.java
index 2390c8e..8788d30 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTextBlockAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/actions/AddTextBlockAction.java
@@ -143,9 +143,7 @@
 			}
 			DocumentCommand command= getDocumentCommand(document, javaProject, selection, indentStr);
 			addTextBlock(document, command, setCaratPosition);
-		} catch (BadLocationException e) {
-			//do nothing
-		} catch (BadPartitioningException e) {
+		} catch (BadLocationException | BadPartitioningException e) {
 			//do nothing
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java
index c31401b..df217d6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/browsing/JavaBrowsingPart.java
@@ -574,7 +574,7 @@
 		if (fHasWorkingSetFilter) {
 			String viewId= getConfigurationElement().getAttribute("id"); //$NON-NLS-1$
 			Assert.isNotNull(viewId);
-			IPropertyChangeListener workingSetListener= event -> doWorkingSetChanged(event);
+			IPropertyChangeListener workingSetListener= this::doWorkingSetChanged;
 			fWorkingSetFilterActionGroup= new WorkingSetFilterActionGroup(getSite(), workingSetListener);
 			fViewer.addFilter(fWorkingSetFilterActionGroup.getWorkingSetFilter());
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java
index ed3bb86..b9124f2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyUI.java
@@ -111,9 +111,7 @@
         if (element != null) {
             try {
                 JavaUI.openInEditor(element, true, true);
-            } catch (JavaModelException e) {
-                JavaPlugin.log(e);
-            } catch (PartInitException e) {
+            } catch (JavaModelException | PartInitException e) {
                 JavaPlugin.log(e);
             }
         }
@@ -127,9 +125,7 @@
                 editor.selectAndReveal(callLocation.getStart(),
                     (callLocation.getEnd() - callLocation.getStart()));
             }
-        } catch (JavaModelException e) {
-            JavaPlugin.log(e);
-        } catch (PartInitException e) {
+        } catch (JavaModelException | PartInitException e) {
             JavaPlugin.log(e);
         }
     }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java
index da6aace..a763b7c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/CallHierarchyViewPart.java
@@ -485,7 +485,7 @@
         getSite().setSelectionProvider(fSelectionProviderMediator);
 
         fCallHierarchyViewer.initContextMenu(
-        		menu -> fillCallHierarchyViewerContextMenu(menu), getSite(), fSelectionProviderMediator);
+        		this::fillCallHierarchyViewerContextMenu, getSite(), fSelectionProviderMediator);
 
 
         fClipboard= new Clipboard(parent.getDisplay());
@@ -975,7 +975,7 @@
         fLocationViewer= new LocationViewer(parent);
 
 
-        fLocationViewer.initContextMenu(menu -> fillLocationViewerContextMenu(menu), ID_CALL_HIERARCHY, getSite());
+        fLocationViewer.initContextMenu(this::fillLocationViewerContextMenu, ID_CALL_HIERARCHY, getSite());
     }
 
     private void createHierarchyLocationSplitter(Composite parent) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java
index 32526ab..8d1a70e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/callhierarchy/SearchScopeActionGroup.java
@@ -182,7 +182,7 @@
 				IContextMenuConstants.GROUP_SEARCH);
 		javaSearchMM.setRemoveAllWhenShown(true);
 
-		javaSearchMM.addMenuListener(manager -> fillSearchActions(manager));
+		javaSearchMM.addMenuListener(this::fillSearchActions);
 
 		fillSearchActions(javaSearchMM);
 		menu.appendToGroup(IContextMenuConstants.GROUP_SEARCH, javaSearchMM);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/OpenElementInEditorHandler.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/OpenElementInEditorHandler.java
index 69935ec..bef6798 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/OpenElementInEditorHandler.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/commands/OpenElementInEditorHandler.java
@@ -42,9 +42,7 @@
 		try {
 			IEditorPart editorPart= JavaUI.openInEditor(javaElement);
 			JavaUI.revealInEditor(editorPart, javaElement);
-		} catch (JavaModelException ex) {
-			throw new ExecutionException("Error opening java element in editor", ex); //$NON-NLS-1$
-		} catch (PartInitException ex) {
+		} catch (JavaModelException | PartInitException ex) {
 			throw new ExecutionException("Error opening java element in editor", ex); //$NON-NLS-1$
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java
index a90d8b0..6460202 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/AutoboxingCleanUp.java
@@ -21,6 +21,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
@@ -174,6 +176,7 @@
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.AutoboxingCleanup_description, cuRewrite);
 			Expression arg0= (Expression) rewrite.createCopyTarget((Expression) ((MethodInvocation) node).arguments().get(0));
 
 			if (primitiveType != null && !primitiveType.equals(actualParameterType)
@@ -183,9 +186,9 @@
 				newCastExpression.setType(ast.newPrimitiveType(PrimitiveType.toCode(primitiveType.getName())));
 				newCastExpression.setExpression(arg0);
 
-				rewrite.replace(node, newCastExpression, null);
+				rewrite.replace(node, newCastExpression, group);
 			} else {
-				rewrite.replace(node, arg0, null);
+				rewrite.replace(node, arg0, group);
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LambdaExpressionAndMethodRefCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LambdaExpressionAndMethodRefCleanUp.java
index f342d23..fe44b9f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LambdaExpressionAndMethodRefCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LambdaExpressionAndMethodRefCleanUp.java
@@ -20,6 +20,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
@@ -345,13 +347,14 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.LambdaExpressionAndMethodRefCleanUp_description, cuRewrite);
 
 			LambdaExpression copyOfLambdaExpression= ast.newLambdaExpression();
 			ASTNode copyOfParameter= rewrite.createCopyTarget((ASTNode) node.parameters().get(0));
 			copyOfLambdaExpression.parameters().add(copyOfParameter);
 			copyOfLambdaExpression.setBody(rewrite.createCopyTarget(node.getBody()));
 			copyOfLambdaExpression.setParentheses(false);
-			rewrite.replace(node, copyOfLambdaExpression, null);
+			rewrite.replace(node, copyOfLambdaExpression, group);
 		}
 	}
 
@@ -369,10 +372,11 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.LambdaExpressionAndMethodRefCleanUp_description, cuRewrite);
 
 			ReturnStatement returnStatement= (ReturnStatement) statements.get(0);
 			Expression copyOfExpression= (Expression) rewrite.createCopyTarget(returnStatement.getExpression());
-			rewrite.replace(node.getBody(), ASTNodeFactory.parenthesizeIfNeeded(ast, copyOfExpression), null);
+			rewrite.replace(node.getBody(), ASTNodeFactory.parenthesizeIfNeeded(ast, copyOfExpression), group);
 		}
 	}
 
@@ -390,10 +394,11 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.LambdaExpressionAndMethodRefCleanUp_description, cuRewrite);
 
 			CreationReference creationRef= ast.newCreationReference();
 			creationRef.setType(copyType(cuRewrite, ast, classInstanceCreation, classInstanceCreation.resolveTypeBinding()));
-			rewrite.replace(node, creationRef, null);
+			rewrite.replace(node, creationRef, group);
 		}
 	}
 
@@ -411,10 +416,11 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.LambdaExpressionAndMethodRefCleanUp_description, cuRewrite);
 
 			SuperMethodReference creationRef= ast.newSuperMethodReference();
 			creationRef.setName((SimpleName) rewrite.createCopyTarget(superMethodInvocation.getName()));
-			rewrite.replace(node, creationRef, null);
+			rewrite.replace(node, creationRef, group);
 		}
 	}
 
@@ -434,12 +440,13 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.LambdaExpressionAndMethodRefCleanUp_description, cuRewrite);
 
 			TypeMethodReference typeMethodRef= ast.newTypeMethodReference();
 
 			typeMethodRef.setType(copyType(cuRewrite, ast, methodInvocation, type));
 			typeMethodRef.setName((SimpleName) rewrite.createCopyTarget(methodInvocation.getName()));
-			rewrite.replace(node, typeMethodRef, null);
+			rewrite.replace(node, typeMethodRef, group);
 		}
 	}
 
@@ -457,6 +464,7 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.LambdaExpressionAndMethodRefCleanUp_description, cuRewrite);
 			ExpressionMethodReference typeMethodRef= ast.newExpressionMethodReference();
 
 			if (methodInvocation.getExpression() != null) {
@@ -466,7 +474,7 @@
 			}
 
 			typeMethodRef.setName((SimpleName) rewrite.createCopyTarget(methodInvocation.getName()));
-			rewrite.replace(node, typeMethodRef, null);
+			rewrite.replace(node, typeMethodRef, group);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LazyLogicalCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LazyLogicalCleanUp.java
index b45b22b..d9b4bbc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LazyLogicalCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/LazyLogicalCleanUp.java
@@ -20,6 +20,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTVisitor;
@@ -148,6 +150,7 @@
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.CodeStyleCleanUp_LazyLogical_description, cuRewrite);
 			List<Expression> allOperands= ASTNodes.allOperands(node);
 			List<Expression> copyOfOperands= new ArrayList<>(allOperands.size());
 
@@ -161,7 +164,7 @@
 			newIe.setRightOperand(copyOfOperands.remove(0));
 			newIe.extendedOperands().addAll(copyOfOperands);
 
-			rewrite.replace(this.node, newIe, null);
+			rewrite.replace(this.node, newIe, group);
 		}
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapMethodCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapMethodCleanUp.java
index ac3edcc..c4e512b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapMethodCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MapMethodCleanUp.java
@@ -22,6 +22,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
@@ -194,6 +196,7 @@
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.UseDirectlyMapMethodCleanup_description, cuRewrite);
 
 			MethodInvocation newMethodInvocation= ast.newMethodInvocation();
 			newMethodInvocation.setName(ast.newSimpleName(methodName));
@@ -206,7 +209,7 @@
 				newMethodInvocation.arguments().add(rewrite.createMoveTarget((Expression) expression));
 			}
 
-			rewrite.replace(this.globalMi, newMethodInvocation, null);
+			rewrite.replace(this.globalMi, newMethodInvocation, group);
 		}
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MergeConditionalBlocksCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MergeConditionalBlocksCleanUp.java
index d230ab9..a3695f5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MergeConditionalBlocksCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MergeConditionalBlocksCleanUp.java
@@ -21,6 +21,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTMatcher;
@@ -202,6 +204,7 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.MergeConditionalBlocksCleanup_description, cuRewrite);
 
 			List<Expression> newConditions= new ArrayList<>(duplicateIfBlocks.size());
 
@@ -221,12 +224,12 @@
 			newCondition.setRightOperand(newConditions.remove(0));
 			newCondition.extendedOperands().addAll(newConditions);
 
-			rewrite.replace(duplicateIfBlocks.get(0).getExpression(), newCondition, null);
+			rewrite.replace(duplicateIfBlocks.get(0).getExpression(), newCondition, group);
 
 			if (remainingStatement != null) {
-				rewrite.replace(duplicateIfBlocks.get(0).getElseStatement(), ASTNodes.createMoveTarget(rewrite, remainingStatement), null);
+				rewrite.replace(duplicateIfBlocks.get(0).getElseStatement(), ASTNodes.createMoveTarget(rewrite, remainingStatement), group);
 			} else if (duplicateIfBlocks.get(0).getElseStatement() != null) {
-				rewrite.remove(duplicateIfBlocks.get(0).getElseStatement(), null);
+				rewrite.remove(duplicateIfBlocks.get(0).getElseStatement(), group);
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/NumberSuffixCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/NumberSuffixCleanUp.java
index b832fa9..6b97e63 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/NumberSuffixCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/NumberSuffixCleanUp.java
@@ -20,6 +20,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTNode;
@@ -135,11 +137,12 @@
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.CodeStyleCleanUp_numberSuffix_description, cuRewrite);
 
 			final String newToken= token.substring(0, token.length() - 1) + token.substring(token.length() - 1).toUpperCase();
 			final NumberLiteral replacement= ast.newNumberLiteral(newToken);
 
-			rewrite.replace(node, replacement, null);
+			rewrite.replace(node, replacement, group);
 		}
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ObjectsEqualsCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ObjectsEqualsCleanUp.java
index 2d61d4b..a98ce9b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ObjectsEqualsCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/ObjectsEqualsCleanUp.java
@@ -22,6 +22,8 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTMatcher;
@@ -250,6 +252,7 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.ObjectsEqualsCleanup_description, cuRewrite);
 			ImportRewrite importRewrite= cuRewrite.getImportRewrite();
 
 			String objectNameText= importRewrite.addImport(Objects.class.getCanonicalName());
@@ -266,16 +269,16 @@
 
 			ReturnStatement copyOfReturnStatement= ASTNodes.createMoveTarget(rewrite, returnStatement);
 
-			rewrite.replace(node.getExpression(), notExpression, null);
+			rewrite.replace(node.getExpression(), notExpression, group);
 
 			if (node.getThenStatement() instanceof Block) {
-				rewrite.replace((ASTNode) ((Block) node.getThenStatement()).statements().get(0), copyOfReturnStatement, null);
+				rewrite.replace((ASTNode) ((Block) node.getThenStatement()).statements().get(0), copyOfReturnStatement, group);
 			} else {
-				rewrite.replace(node.getThenStatement(), copyOfReturnStatement, null);
+				rewrite.replace(node.getThenStatement(), copyOfReturnStatement, group);
 			}
 
 			if (node.getElseStatement() != null) {
-				rewrite.remove(node.getElseStatement(), null);
+				rewrite.remove(node.getElseStatement(), group);
 			}
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternCleanUp.java
index 04e54ad..fb961c5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PatternCleanUp.java
@@ -25,15 +25,18 @@
 
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
+import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.Block;
 import org.eclipse.jdt.core.dom.CompilationUnit;
 import org.eclipse.jdt.core.dom.Expression;
+import org.eclipse.jdt.core.dom.IBinding;
 import org.eclipse.jdt.core.dom.IVariableBinding;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Name;
 import org.eclipse.jdt.core.dom.SimpleName;
 import org.eclipse.jdt.core.dom.SingleVariableDeclaration;
+import org.eclipse.jdt.core.dom.StringLiteral;
 import org.eclipse.jdt.core.dom.Type;
 import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
 import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
@@ -186,7 +189,7 @@
 
 						if (writes.size() == 1 && reads.size() > 1) {
 							for (SimpleName simpleName : reads) {
-								if (!isRegExUse(simpleName)) {
+								if (!isRegExUse(simpleName, initializer)) {
 									return true;
 								}
 							}
@@ -200,7 +203,7 @@
 					return true;
 				}
 
-				private boolean isRegExUse(final SimpleName simpleName) {
+				private boolean isRegExUse(final SimpleName simpleName, final Expression initializer) {
 					if (simpleName.getParent() instanceof MethodInvocation) {
 						MethodInvocation methodInvocation= (MethodInvocation) simpleName.getParent();
 
@@ -209,9 +212,48 @@
 								&& simpleName.equals(methodInvocation.arguments().get(0))) {
 							if (ASTNodes.usesGivenSignature(methodInvocation, STRING_CLASS_NAME, MATCHES_METHOD, STRING_CLASS_NAME)
 									|| ASTNodes.usesGivenSignature(methodInvocation, STRING_CLASS_NAME, REPLACE_ALL_METHOD, STRING_CLASS_NAME, STRING_CLASS_NAME)
-									|| ASTNodes.usesGivenSignature(methodInvocation, STRING_CLASS_NAME, REPLACE_FIRST_METHOD, STRING_CLASS_NAME, STRING_CLASS_NAME)
-									|| ASTNodes.usesGivenSignature(methodInvocation, STRING_CLASS_NAME, SPLIT_METHOD, STRING_CLASS_NAME)
+									|| ASTNodes.usesGivenSignature(methodInvocation, STRING_CLASS_NAME, REPLACE_FIRST_METHOD, STRING_CLASS_NAME, STRING_CLASS_NAME)) {
+								return true;
+							} else if (ASTNodes.usesGivenSignature(methodInvocation, STRING_CLASS_NAME, SPLIT_METHOD, STRING_CLASS_NAME)
 									|| ASTNodes.usesGivenSignature(methodInvocation, STRING_CLASS_NAME, SPLIT_METHOD, STRING_CLASS_NAME, int.class.getCanonicalName())) {
+								String value= null;
+								Expression expression= ASTNodes.getUnparenthesedExpression(initializer);
+
+								if (expression instanceof StringLiteral) {
+									StringLiteral literal= (StringLiteral) expression;
+									value= literal.getLiteralValue();
+								} else if (expression instanceof Name) {
+									Name name= (Name) expression;
+									IBinding binding= name.resolveBinding();
+
+									if (binding instanceof IVariableBinding) {
+										ASTNode aSTNode= ASTNodes.findDeclaration(binding, startNode);
+
+										if (aSTNode instanceof VariableDeclarationFragment) {
+											Expression exp= ((VariableDeclarationFragment) aSTNode).getInitializer();
+
+											if (exp != null) {
+												exp= ASTNodes.getUnparenthesedExpression(exp);
+
+												if (exp instanceof StringLiteral) {
+													value= ((StringLiteral) exp).getLiteralValue();
+												}
+											}
+										}
+									}
+								}
+
+								if (value != null) {
+									// Don't compile pattern for single character that doesn't use regex meta-chars
+									// and don't compile pattern for double character where first char is back-slash
+									// and second character isn't alpha-numeric
+									if (value.length() == 1) {
+										return ".$|()[{^?*+\\".contains(value); //$NON-NLS-1$
+									} else if (value.length() == 2 && value.charAt(0) == '\\') {
+										return Character.isLetterOrDigit(value.charAt(1));
+									}
+								}
+
 								return true;
 							}
 						}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PushDownNegationCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PushDownNegationCleanUp.java
index 45563f9..d5ce469 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PushDownNegationCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/PushDownNegationCleanUp.java
@@ -21,6 +21,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTMatcher;
@@ -205,13 +207,14 @@
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			Expression copyOfReplacement= (Expression) rewrite.createCopyTarget(this.replacement);
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.PushDownNegationCleanup_description, cuRewrite);
 
 			// if next operation has been replaced above by a copy, update the target node to change
 			if (nextOperation != null) {
 				nextOperation.setNode(copyOfReplacement);
 			}
 
-			rewrite.replace(this.getNode(), copyOfReplacement, null);
+			rewrite.replace(this.getNode(), copyOfReplacement, group);
 		}
 
 		public void setNextOperation(ReplacementOperation nextOperation) {
@@ -235,9 +238,10 @@
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.PushDownNegationCleanup_description, cuRewrite);
 			Expression copyOfReplacement= ast.newBooleanLiteral(this.replacement);
 
-			rewrite.replace(this.getNode(), copyOfReplacement, null);
+			rewrite.replace(this.getNode(), copyOfReplacement, group);
 		}
 	}
 
@@ -256,9 +260,10 @@
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.PushDownNegationCleanup_description, cuRewrite);
 			ParenthesizedExpression parenthesizedExpression= doRewriteAST(rewrite, ast, infixExpression, reverseOp);
 
-			rewrite.replace(this.getNode(), parenthesizedExpression, null);
+			rewrite.replace(this.getNode(), parenthesizedExpression, group);
 		}
 
 		private ParenthesizedExpression doRewriteAST(ASTRewrite rewrite, AST ast, InfixExpression pInfixExpression, Operator pReverseOp) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
index debdf0f..420129a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/RedundantModifiersCleanUp.java
@@ -21,6 +21,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.ASTNode;
 import org.eclipse.jdt.core.dom.ASTVisitor;
@@ -210,7 +212,8 @@
 		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ModifierRewrite rewrite= ModifierRewrite.create(cuRewrite.getASTRewrite(), node);
-			rewrite.setModifiers(Modifier.NONE, excludedModifiers, null);
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.RedundantModifiersCleanup_description, cuRewrite);
+			rewrite.setModifiers(Modifier.NONE, excludedModifiers, group);
 		}
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java
index 7269a1a..63522e5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnboxingCleanUp.java
@@ -20,6 +20,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.ASTVisitor;
 import org.eclipse.jdt.core.dom.CompilationUnit;
@@ -159,8 +161,9 @@
 		@Override
 		public void rewriteAST(CompilationUnitRewrite cuRewrite, LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.UnboxingCleanup_description, cuRewrite);
 			Expression copyOfWrapper= (Expression) rewrite.createCopyTarget(node.getExpression());
-			rewrite.replace(node, copyOfWrapper, null);
+			rewrite.replace(node, copyOfWrapper, group);
 		}
 	}
 }
\ No newline at end of file
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java
index 8849959..f7335a7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/UnimplementedCodeCleanUp.java
@@ -177,10 +177,7 @@
 		TemplateBuffer buffer;
 		try {
 			buffer= context.evaluate(template);
-		} catch (BadLocationException e) {
-			JavaPlugin.log(e);
-			return ""; //$NON-NLS-1$
-		} catch (TemplateException e) {
+		} catch (BadLocationException | TemplateException e) {
 			JavaPlugin.log(e);
 			return ""; //$NON-NLS-1$
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VarCleanUp.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VarCleanUp.java
index 3d1c635..377c658 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VarCleanUp.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/VarCleanUp.java
@@ -22,6 +22,8 @@
 
 import org.eclipse.core.runtime.CoreException;
 
+import org.eclipse.text.edits.TextEditGroup;
+
 import org.eclipse.jdt.core.ICompilationUnit;
 import org.eclipse.jdt.core.dom.AST;
 import org.eclipse.jdt.core.dom.ASTVisitor;
@@ -259,14 +261,15 @@
 		public void rewriteAST(final CompilationUnitRewrite cuRewrite, final LinkedProposalModel linkedModel) throws CoreException {
 			ASTRewrite rewrite= cuRewrite.getASTRewrite();
 			AST ast= cuRewrite.getRoot().getAST();
+			TextEditGroup group= createTextEditGroup(MultiFixMessages.VarCleanUp_description, cuRewrite);
 
 			if (classInstanceCreation != null) {
-				rewrite.replace(classInstanceCreation.getType(), rewrite.createCopyTarget(node), null);
+				rewrite.replace(classInstanceCreation.getType(), rewrite.createCopyTarget(node), group);
 			} else if (literal != null) {
-				rewrite.replace(literal, ast.newNumberLiteral(literal.getToken() + postfix), null);
+				rewrite.replace(literal, ast.newNumberLiteral(literal.getToken() + postfix), group);
 			}
 
-			rewrite.replace(node, ast.newSimpleType(ast.newSimpleName("var")), null); //$NON-NLS-1$
+			rewrite.replace(node, ast.newSimpleType(ast.newSimpleName("var")), group); //$NON-NLS-1$
 		}
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
index 18b67f4..969b259 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/AbstractInfoView.java
@@ -158,14 +158,8 @@
 	 */
 	private IProgressMonitor fComputeProgressMonitor;
 
-	/**
-	 * Background color.
-	 * @since 3.2
-	 */
-	private Color fBackgroundColor;
 	private RGB fBackgroundColorRGB;
 
-	private Color fForegroundColor;
 	private RGB fForegroundColorRGB;
 
 	/**
@@ -393,8 +387,7 @@
 			fgColor = display.getSystemColor(SWT.COLOR_INFO_FOREGROUND);
 			fForegroundColorRGB= fgColor.getRGB();
 		} else {
-			fgColor = new Color(display, fForegroundColorRGB);
-			fForegroundColor= fgColor;
+			fgColor = new Color(fForegroundColorRGB);
 		}
 		setForeground(fgColor);
 
@@ -404,8 +397,7 @@
 			bgColor= display.getSystemColor(SWT.COLOR_INFO_BACKGROUND);
 			fBackgroundColorRGB= bgColor.getRGB();
 		} else {
-			bgColor= new Color(display, fBackgroundColorRGB);
-			fBackgroundColor= bgColor;
+			bgColor= new Color(fBackgroundColorRGB);
 		}
 		setBackground(bgColor);
 	}
@@ -669,16 +661,8 @@
 
 		JFaceResources.getColorRegistry().removeListener(this);
 		fBackgroundColorRGB= null;
-		if (fBackgroundColor != null) {
-			fBackgroundColor.dispose();
-			fBackgroundColor= null;
-		}
 
 		fForegroundColorRGB= null;
-		if (fForegroundColor != null) {
-			fForegroundColor.dispose();
-			fForegroundColor= null;
-		}
 
 		internalDispose();
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
index aa336bc..0bc4217 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/infoviews/JavadocView.java
@@ -1189,9 +1189,7 @@
 				int offset= ((ITextSelection)selection).getOffset();
 				String partition= ((IDocumentExtension3)document).getContentType(IJavaPartitions.JAVA_PARTITIONING, offset, false);
 				return !IJavaPartitions.JAVA_DOC.equals(partition);
-			} catch (BadPartitioningException ex) {
-				return false;
-			} catch (BadLocationException ex) {
+			} catch (BadPartitioningException | BadLocationException ex) {
 				return false;
 			}
 
@@ -1252,9 +1250,7 @@
 				}
 			}
 
-		} catch (JavaModelException e) {
-			return null;
-		} catch (BadLocationException e) {
+		} catch (JavaModelException | BadLocationException e) {
 			return null;
 		}
 		return element;
@@ -1429,9 +1425,7 @@
 			public void handleDeclarationLink(IJavaElement target) {
 				try {
 					JavadocHover.openDeclaration(target);
-				} catch (PartInitException e) {
-					JavaPlugin.log(e);
-				} catch (JavaModelException e) {
+				} catch (PartInitException | JavaModelException e) {
 					JavaPlugin.log(e);
 				}
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java
index d022e19..0e97424 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarFileExportOperation.java
@@ -1085,9 +1085,7 @@
 		if (fJarPackage.areGeneratedFilesExported() && fJarPackage.isManifestGenerated() && fJarPackage.isManifestSaved()) {
 			try {
 				saveManifest();
-			} catch (CoreException ex) {
-				addError(JarPackagerMessages.JarFileExportOperation_errorSavingManifest, ex);
-			} catch (IOException ex) {
+			} catch (CoreException | IOException ex) {
 				addError(JarPackagerMessages.JarFileExportOperation_errorSavingManifest, ex);
 			}
 		}
@@ -1096,9 +1094,7 @@
 		if (fJarPackage.isDescriptionSaved()) {
 			try {
 				saveDescription();
-			} catch (CoreException ex) {
-				addError(JarPackagerMessages.JarFileExportOperation_errorSavingDescription, ex);
-			} catch (IOException ex) {
+			} catch (CoreException | IOException ex) {
 				addError(JarPackagerMessages.JarFileExportOperation_errorSavingDescription, ex);
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java
index b7231f7..ec9e199 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackageWizardPage.java
@@ -165,7 +165,7 @@
 		restoreResourceSpecificationWidgetValues(); // superclass API defines this hook
 		restoreWidgetValues();
 		if (fInitialSelection != null)
-			BusyIndicator.showWhile(parent.getDisplay(), () -> setupBasedOnInitialSelections());
+			BusyIndicator.showWhile(parent.getDisplay(), this::setupBasedOnInitialSelections);
 
 		setControl(composite);
 		update();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java
index 34384aa..83966b2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/JarPackagerUtil.java
@@ -25,7 +25,6 @@
 import java.util.List;
 import java.util.zip.CRC32;
 import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 
 import org.eclipse.swt.widgets.Display;
@@ -51,6 +50,7 @@
 import org.eclipse.jdt.core.IType;
 import org.eclipse.jdt.core.JavaModelException;
 
+import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.corext.util.Messages;
 
@@ -59,7 +59,6 @@
 
 import org.eclipse.jdt.internal.ui.IJavaStatusConstants;
 import org.eclipse.jdt.internal.ui.JavaPlugin;
-import org.eclipse.jdt.internal.core.manipulation.util.BasicElementLabels;
 
 /**
  * Utility methods for JAR Import/Export.
@@ -312,8 +311,6 @@
 
 		try {
 			return new ZipFile(localFile);
-		} catch (ZipException e) {
-			throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, e.getLocalizedMessage(), e));
 		} catch (IOException e) {
 			throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, e.getLocalizedMessage(), e));
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/OpenJarExportWizardEditorLauncher.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/OpenJarExportWizardEditorLauncher.java
index a3e471b..5ac460d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/OpenJarExportWizardEditorLauncher.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackager/OpenJarExportWizardEditorLauncher.java
@@ -67,10 +67,7 @@
 				if (reader != null)
 					reader.close();
 			}
-		} catch (IOException ex) {
-			openErrorDialog(ex.getLocalizedMessage());
-			return;
-		} catch (CoreException ex) {
+		} catch (IOException | CoreException ex) {
 			openErrorDialog(ex.getLocalizedMessage());
 			return;
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java
index 6d3d1ec..02f531b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarpackagerfat/FatJarRsrcUrlBuilder.java
@@ -19,7 +19,6 @@
 import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.FileInputStream;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.HashSet;
@@ -118,8 +117,6 @@
 			if (!fJarPackage.isCompressed())
 				JarPackagerUtil.calculateCrcAndSize(newEntry, new FileInputStream(jarPathFile), readBuffer);
 			getJarWriter().addZipEntryStream(newEntry, new FileInputStream(jarPathFile), jarName);
-		} catch (FileNotFoundException e) {
-			throw new RuntimeException(e);
 		} catch (IOException e) {
 			throw new RuntimeException(e);
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java
index 5a06e1a..2dd0792 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javadocexport/JavadocConsoleLineTracker.java
@@ -76,11 +76,7 @@
 						return;
 					}
 				}
-			} catch (BadLocationException e) {
-				JavaPlugin.log(e);
-			} catch (PartInitException e) {
-				JavaPlugin.log(e);
-			} catch (JavaModelException e) {
+			} catch (BadLocationException | PartInitException | JavaModelException e) {
 				JavaPlugin.log(e);
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java
index 218fda3..44fd185 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/ClassFileEditor.java
@@ -169,7 +169,6 @@
 			fComposite.addDisposeListener(e -> {
 				JFaceResources.getFontRegistry().removeListener(SourceAttachmentForm.this);
 				fComposite= null;
-				fSeparatorColor.dispose();
 				fSeparatorColor= null;
 				fBannerLabels.clear();
 				fHeaderLabels.clear();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java
index 989f287..dec2d28 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitDocumentProvider.java
@@ -1429,11 +1429,7 @@
 					// convert JavaModelException to CoreException
 					throw new CoreException(new Status(IStatus.WARNING, JavaUI.ID_PLUGIN, IResourceStatus.OUT_OF_SYNC_LOCAL, JavaEditorMessages.CompilationUnitDocumentProvider_error_outOfSync, null));
 				throw x;
-			} catch (CoreException x) {
-				// inform about the failure
-				fireElementStateChangeFailed(element);
-				throw x;
-			} catch (RuntimeException x) {
+			} catch (CoreException | RuntimeException x) {
 				// inform about the failure
 				fireElementStateChangeFailed(element);
 				throw x;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
index 18f27ae..9ae1be8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/CompilationUnitEditor.java
@@ -578,9 +578,7 @@
 
 				event.doit= false;
 
-			} catch (BadLocationException e) {
-				JavaPlugin.log(e);
-			} catch (BadPositionCategoryException e) {
+			} catch (BadLocationException | BadPositionCategoryException e) {
 				JavaPlugin.log(e);
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
index 42454bf..1d084ff 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaEditor.java
@@ -2324,8 +2324,7 @@
 					markInNavigationHistory();
 				}
 
-			} catch (JavaModelException x) {
-			} catch (IllegalArgumentException x) {
+			} catch (JavaModelException | IllegalArgumentException x) {
 			}
 
 		} else if (moveCursor) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
index 244c229..1a06c1e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaOutlinePage.java
@@ -641,11 +641,7 @@
 					TextEdit edit= CodeFormatterUtil.reformat(kind, content, regions, 0, lineDelimiter, formatterSettings);
 					edit.apply(javaSourceViewer.getDocument());
 
-				} catch (CoreException e) {
-					JavaPlugin.log(e);
-				} catch (MalformedTreeException e) {
-					JavaPlugin.log(e);
-				} catch (BadLocationException e) {
+				} catch (CoreException | MalformedTreeException | BadLocationException e) {
 					JavaPlugin.log(e);
 				} finally {
 					javaSourceViewer.setRedraw(true);
@@ -712,9 +708,7 @@
 					return new Region(document.getLineOffset(lineAtSourceOffset), sourceLength);
 				else
 					return new Region(beginningOfWSOffset, sourceLength);
-			} catch (JavaModelException e) {
-				JavaPlugin.log(e);
-			} catch (BadLocationException e) {
+			} catch (JavaModelException | BadLocationException e) {
 				JavaPlugin.log(e);
 			}
 			return null;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java
index 9e6507b..c9cabf7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/JavaSourceViewer.java
@@ -58,11 +58,13 @@
 import org.eclipse.jdt.core.JavaCore;
 
 import org.eclipse.jdt.ui.JavaUI;
+import org.eclipse.jdt.ui.PreferenceConstants;
 import org.eclipse.jdt.ui.text.IJavaColorConstants;
 import org.eclipse.jdt.ui.text.IJavaPartitions;
 import org.eclipse.jdt.ui.text.JavaSourceViewerConfiguration;
 
 import org.eclipse.jdt.internal.ui.text.SmartBackspaceManager;
+import org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerRegistry;
 import org.eclipse.jdt.internal.ui.text.java.JavaFormattingContext;
 
 
@@ -94,26 +96,6 @@
 	private IInformationPresenter fHierarchyPresenter;
 
 	/**
-	 * This viewer's foreground color.
-	 * @since 3.0
-	 */
-	private Color fForegroundColor;
-	/**
-	 * The viewer's background color.
-	 * @since 3.0
-	 */
-	private Color fBackgroundColor;
-	/**
-	 * This viewer's selection foreground color.
-	 * @since 3.0
-	 */
-	private Color fSelectionForegroundColor;
-	/**
-	 * The viewer's selection background color.
-	 * @since 3.0
-	 */
-	private Color fSelectionBackgroundColor;
-	/**
 	 * The preference store.
 	 *
 	 * @since 3.0
@@ -272,43 +254,24 @@
 			: createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_FOREGROUND, styledText.getDisplay());
 			styledText.setForeground(color);
 
-			if (fForegroundColor != null)
-				fForegroundColor.dispose();
-
-			fForegroundColor= color;
-
 			// ---------- background color ----------------------
 			color= fPreferenceStore.getBoolean(AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND_SYSTEM_DEFAULT)
 			? null
 			: createColor(fPreferenceStore, AbstractTextEditor.PREFERENCE_COLOR_BACKGROUND, styledText.getDisplay());
 			styledText.setBackground(color);
 
-			if (fBackgroundColor != null)
-				fBackgroundColor.dispose();
-
-			fBackgroundColor= color;
-
 			// ----------- selection foreground color --------------------
 			color= fPreferenceStore.getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_FOREGROUND_DEFAULT_COLOR)
 				? null
 				: createColor(fPreferenceStore, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_FOREGROUND_COLOR, styledText.getDisplay());
 			styledText.setSelectionForeground(color);
 
-			if (fSelectionForegroundColor != null)
-				fSelectionForegroundColor.dispose();
-
-			fSelectionForegroundColor= color;
-
 			// ---------- selection background color ----------------------
 			color= fPreferenceStore.getBoolean(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_BACKGROUND_DEFAULT_COLOR)
 				? null
 				: createColor(fPreferenceStore, AbstractDecoratedTextEditorPreferenceConstants.EDITOR_SELECTION_BACKGROUND_COLOR, styledText.getDisplay());
 			styledText.setSelectionBackground(color);
 
-			if (fSelectionBackgroundColor != null)
-				fSelectionBackgroundColor.dispose();
-
-			fSelectionBackgroundColor= color;
 		}
     }
 
@@ -360,10 +323,6 @@
 
 		if (Math.abs(defaultBgHSB[2] - javaDefaultHSB[2]) >= 0.5f) {
 			getTextWidget().setBackground(defaultColor);
-			if (fBackgroundColor != null) {
-				fBackgroundColor.dispose();
-				fBackgroundColor= null;
-			}
 		}
 	}
 
@@ -386,14 +345,6 @@
 			fHierarchyPresenter.uninstall();
 			fHierarchyPresenter= null;
 		}
-		if (fForegroundColor != null) {
-			fForegroundColor.dispose();
-			fForegroundColor= null;
-		}
-		if (fBackgroundColor != null) {
-			fBackgroundColor.dispose();
-			fBackgroundColor= null;
-		}
 
 		if (fPreferenceStore != null)
 			fPreferenceStore.removePropertyChangeListener(this);
@@ -720,4 +671,13 @@
 	void resetCodeMinings() {
 		super.setCodeMiningProviders(null);
 	}
+
+	/**
+	 * Check if async completion is supported for this source viewer or not.
+	 *
+	 * @return <code>true</code> if async completion is supported, otherwise <code>false</code>.
+	 */
+	public final boolean isAsyncCompletionActive() {
+		return fPreferenceStore.getBoolean(PreferenceConstants.CODEASSIST_NONUITHREAD_COMPUTATION) && !CompletionProposalComputerRegistry.getDefault().computingCompletionRequiresUIThread();
+	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
index b17d70e..2a1bf1c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/NLSKeyHyperlink.java
@@ -197,9 +197,7 @@
 							offset= region.getOffset();
 					}
 				}
-			} catch (BadLocationException ex) {
-				found= false;
-			} catch (BadPartitioningException e1) {
+			} catch (BadLocationException | BadPartitioningException e1) {
 				found= false;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java
index fbbd0ae..3a5bdb0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/SemanticHighlightingPresenter.java
@@ -235,10 +235,7 @@
 				}
 				fPositions= newPositions;
 			}
-		} catch (BadPositionCategoryException e) {
-			// Should not happen
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (BadPositionCategoryException | BadLocationException e) {
 			// Should not happen
 			JavaPlugin.log(e);
 		}
@@ -475,10 +472,7 @@
 		String positionCategory= getPositionCategory();
 		try {
 			document.addPosition(positionCategory, position);
-		} catch (BadLocationException e) {
-			// Should not happen
-			JavaPlugin.log(e);
-		} catch (BadPositionCategoryException e) {
+		} catch (BadLocationException | BadPositionCategoryException e) {
 			// Should not happen
 			JavaPlugin.log(e);
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java
index 6f1da6c..0c13efc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/javaeditor/codemining/JavaReferenceCodeMining.java
@@ -99,8 +99,6 @@
 									textEditor.selectAndReveal(match.getOffset(), match.getLength());
 								}
 							}
-						} catch (JavaModelException e1) {
-							// Should never occur
 						} catch (CoreException e1) {
 							// Should never occur
 						}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java
index a7a9651..632a6e6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/PackageExplorerActionGroup.java
@@ -127,7 +127,7 @@
 		fFrameActionsShown= false;
 		TreeViewer viewer= part.getTreeViewer();
 
-		IPropertyChangeListener workingSetListener= event -> doWorkingSetChanged(event);
+		IPropertyChangeListener workingSetListener= this::doWorkingSetChanged;
 
 		IWorkbenchPartSite site = fPart.getSite();
 		setGroups(new ActionGroup[] {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java
index f87d415..fb3619c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/packageview/WorkingSetAwareContentProvider.java
@@ -50,7 +50,7 @@
 	public WorkingSetAwareContentProvider(boolean provideMembers, WorkingSetModel model) {
 		super(provideMembers);
 		fWorkingSetModel= model;
-		fListener= event -> workingSetModelChanged(event);
+		fListener= this::workingSetModelChanged;
 		fWorkingSetModel.addPropertyChangeListener(fListener);
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java
index 10238f7..f1865b6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/EditTemplateDialog.java
@@ -531,7 +531,7 @@
 		// create context menu
 		MenuManager manager= new MenuManager(null, null);
 		manager.setRemoveAllWhenShown(true);
-		manager.addMenuListener(mgr -> fillContextMenu(mgr));
+		manager.addMenuListener(this::fillContextMenu);
 
 		StyledText text= fPatternEditor.getTextWidget();
 		Menu menu= manager.createContextMenu(text);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilterTextControl.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilterTextControl.java
new file mode 100644
index 0000000..2b887cd
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilterTextControl.java
@@ -0,0 +1,293 @@
+/*******************************************************************************
+ * Copyright (c) 2010, 2019 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *     Alexander Fedorov <alexander.fedorov@arsysop.ru> - Bug 549442
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.preferences;
+
+import java.util.Optional;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.accessibility.ACC;
+import org.eclipse.swt.accessibility.AccessibleAdapter;
+import org.eclipse.swt.accessibility.AccessibleControlAdapter;
+import org.eclipse.swt.accessibility.AccessibleControlEvent;
+import org.eclipse.swt.accessibility.AccessibleEvent;
+import org.eclipse.swt.events.MouseAdapter;
+import org.eclipse.swt.events.MouseEvent;
+import org.eclipse.swt.events.MouseMoveListener;
+import org.eclipse.swt.events.MouseTrackListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.ResourceLocator;
+
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * A simple filter text widget.
+ * 
+ * TODO: Remove this class once Bug 293230 is fixed
+ */
+public class FilterTextControl {
+
+	/**
+	 * Image descriptor for enabled clear button.
+	 */
+	private static Optional<ImageDescriptor> fgClearIconDescriptor= ResourceLocator
+			.imageDescriptorFromBundle(PlatformUI.PLUGIN_ID, "$nl$/icons/full/etool16/clear_co.png"); //$NON-NLS-1$
+
+	/**
+	 * Image descriptor for disabled clear button.
+	 */
+	private static Optional<ImageDescriptor> fgDisabledClearIconDescriptor= ResourceLocator.imageDescriptorFromBundle(
+			PlatformUI.PLUGIN_ID, "$nl$/icons/full/dtool16/clear_co.png"); //$NON-NLS-1$
+
+
+	private static Boolean fgUseNativeSearchField;
+
+	private static boolean useNativeSearchField(Composite composite) {
+		if (fgUseNativeSearchField == null) {
+			fgUseNativeSearchField= Boolean.FALSE;
+			Text testText= null;
+			try {
+				testText= new Text(composite, SWT.SEARCH | SWT.ICON_CANCEL);
+				fgUseNativeSearchField= Boolean.valueOf((testText.getStyle() & SWT.ICON_CANCEL) != 0);
+			} finally {
+				if (testText != null) {
+					testText.dispose();
+				}
+			}
+		}
+		return fgUseNativeSearchField.booleanValue();
+	}
+
+	/**
+	 * The text widget.
+	 */
+	private Text fTextControl;
+
+	/**
+	 * The control representing the clear button for the filter text entry.
+	 */
+	private Control fClearButton;
+
+	/**
+	 * The Composite on which the filter controls are created.
+	 */
+	private Composite fComposite;
+
+	public FilterTextControl(Composite parent) {
+		final boolean nativeField= useNativeSearchField(parent);
+		fComposite= new Composite(parent, nativeField ? SWT.NONE : SWT.BORDER);
+		if (!nativeField)
+			fComposite.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+		
+		GridLayout filterLayout= new GridLayout(2, false);
+		filterLayout.marginHeight= 0;
+		filterLayout.marginWidth= 0;
+		fComposite.setLayout(filterLayout);
+		fComposite.setFont(parent.getFont());
+
+		createControls(fComposite);
+		fComposite.setLayoutData(new GridData(SWT.FILL, SWT.BEGINNING, true, false));
+	}
+
+	/**
+	 * Create the filter controls.
+	 * 
+	 * @param parent parent <code>Composite</code> of the filter controls
+	 */
+	private void createControls(Composite parent) {
+		createTextControl(parent);
+		createClearButton(parent);
+		updateClearButtonVisibility(false);
+	}
+
+	/**
+	 * Creates the text control.
+	 * 
+	 * @param parent <code>Composite</code> of the filter text
+	 */
+	private void createTextControl(Composite parent) {
+		if (useNativeSearchField(parent)) {
+			fTextControl= new Text(parent, SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL);
+		} else {
+			fTextControl= new Text(parent, SWT.SINGLE);
+		}
+		fTextControl.setFont(parent.getFont());
+
+		GridData gridData= new GridData(SWT.FILL, SWT.CENTER, true, false);
+		// if the text widget supported cancel then it will have it's own
+		// integrated button. We can take all of the space.
+		if ((fTextControl.getStyle() & SWT.ICON_CANCEL) != 0)
+			gridData.horizontalSpan= 2;
+		fTextControl.setLayoutData(gridData);
+
+		fTextControl.addModifyListener(e -> updateClearButtonVisibility(!(fTextControl.getText().length() == 0)));
+	}
+
+	/**
+	 * Creates the button that clears the text.
+	 * 
+	 * @param parent parent <code>Composite</code> of button
+	 */
+	private void createClearButton(Composite parent) {
+		// only create the button if the text widget doesn't support one natively
+		if ((fTextControl.getStyle() & SWT.ICON_CANCEL) == 0) {
+			final Image inactiveImage= fgDisabledClearIconDescriptor.isPresent() ? fgDisabledClearIconDescriptor.get().createImage() : null;
+			final Image activeImage= fgClearIconDescriptor.isPresent()? fgClearIconDescriptor.get().createImage(): null;
+			final Image pressedImage= activeImage != null ? new Image(parent.getDisplay(), activeImage, SWT.IMAGE_GRAY) : null;
+
+			final Label clearButton= new Label(parent, SWT.NONE);
+			clearButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.CENTER, false, false));
+			clearButton.setImage(inactiveImage);
+			clearButton.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
+			clearButton.setToolTipText(PreferencesMessages.FilterTextControl_Clear);
+			clearButton.addMouseListener(new MouseAdapter() {
+				private MouseMoveListener fMoveListener;
+
+				@Override
+				public void mouseDown(MouseEvent e) {
+					clearButton.setImage(pressedImage);
+					fMoveListener= new MouseMoveListener() {
+						private boolean fMouseInButton= true;
+
+						@Override
+						public void mouseMove(MouseEvent e1) {
+							boolean mouseInButton= isMouseInButton(e1);
+							if (mouseInButton != fMouseInButton) {
+								fMouseInButton= mouseInButton;
+								clearButton.setImage(mouseInButton ? pressedImage : inactiveImage);
+							}
+						}
+					};
+					clearButton.addMouseMoveListener(fMoveListener);
+				}
+
+				@Override
+				public void mouseUp(MouseEvent e) {
+					if (fMoveListener != null) {
+						clearButton.removeMouseMoveListener(fMoveListener);
+						fMoveListener= null;
+						boolean mouseInButton= isMouseInButton(e);
+						clearButton.setImage(mouseInButton ? activeImage : inactiveImage);
+						if (mouseInButton) {
+							fTextControl.setText(""); //$NON-NLS-1$
+							fTextControl.setFocus();
+						}
+					}
+				}
+
+				private boolean isMouseInButton(MouseEvent e) {
+					Point buttonSize= clearButton.getSize();
+					return 0 <= e.x && e.x < buttonSize.x && 0 <= e.y && e.y < buttonSize.y;
+				}
+			});
+			clearButton.addMouseTrackListener(new MouseTrackListener() {
+				@Override
+				public void mouseEnter(MouseEvent e) {
+					clearButton.setImage(activeImage);
+				}
+
+				@Override
+				public void mouseExit(MouseEvent e) {
+					clearButton.setImage(inactiveImage);
+				}
+
+				@Override
+				public void mouseHover(MouseEvent e) {
+				}
+			});
+			clearButton.addDisposeListener(e -> {
+				if (inactiveImage != null) {
+					inactiveImage.dispose();
+				}
+				if (activeImage != null) {
+					activeImage.dispose();
+				}
+				if (pressedImage != null) {
+					pressedImage.dispose();
+				}
+			});
+			clearButton.getAccessible().addAccessibleListener(
+					new AccessibleAdapter() {
+						@Override
+						public void getName(AccessibleEvent e) {
+							e.result= PreferencesMessages.FilterTextControl_ClearFilterField;
+						}
+					});
+			clearButton.getAccessible().addAccessibleControlListener(
+					new AccessibleControlAdapter() {
+						@Override
+						public void getRole(AccessibleControlEvent e) {
+							e.detail= ACC.ROLE_PUSHBUTTON;
+						}
+					});
+			this.fClearButton= clearButton;
+		}
+	}
+
+	/**
+	 * Get the text control for the receiver, if it was created. Otherwise return <code>null</code>.
+	 * 
+	 * @return the Text control, or null if it was not created
+	 */
+	public Text getFilterControl() {
+		return fTextControl;
+	}
+
+	/**
+	 * Convenience method to return the text of the filter control. If the text widget is not
+	 * created, then null is returned.
+	 * 
+	 * @return String in the text, or null if the text does not exist
+	 */
+	public String getFilterString() {
+		return fTextControl != null ? fTextControl.getText() : null;
+	}
+
+	private void updateClearButtonVisibility(boolean visible) {
+		if (fClearButton != null) {
+			fClearButton.setVisible(visible);
+		}
+	}
+	
+	/**
+	 * Enables the filter text control if the argument is <code>true</code>, and disables it
+	 * otherwise.
+	 *
+	 * @param enabled the new enabled state
+	 *
+	 * @since 3.16
+	 */
+	public void setEnabled(boolean enabled) {
+		if (fTextControl != null) {
+			fTextControl.setEnabled(enabled);
+		}
+		if (fClearButton != null) {
+			fClearButton.setEnabled(enabled);
+		}
+		boolean nativeField= fgUseNativeSearchField.booleanValue();
+		if (!nativeField) {
+			// in the case of native field, composite is initialized with blank, we need to manage background to avoid having a blank square on the right when the control is disabled.
+			fComposite.setBackground(enabled ? fComposite.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND) : null);
+		}
+	}
+}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilteredPreferenceTree.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilteredPreferenceTree.java
index 8f697bd..ba82b65 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilteredPreferenceTree.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/FilteredPreferenceTree.java
@@ -286,12 +286,14 @@
 	 */
 	private Label fDescription;
 
+	/**
+	 * The filter text control.
+	 */
+	private FilterTextControl fFilterTextControl;
 
 	private ToolItem fExpandAllItem;
 	private ToolItem fCollapseAllItem;
 
-	private Text fFilterBox;
-
 
 	public FilteredPreferenceTree(Composite parentComposite, String label, String hint) {
 		this(parentComposite, label, hint, true);
@@ -331,16 +333,18 @@
 		composite.setLayout(layout);
 		composite.setFont(fParentComposite.getFont());
 
-		fFilterBox = new Text(composite, SWT.SINGLE | SWT.BORDER | SWT.SEARCH | SWT.ICON_CANCEL);
+		//TODO: Directly use the hint flags once Bug 293230 is fixed
+		fFilterTextControl= new FilterTextControl(composite);
 
-		fFilterBox.setMessage(hint);
+		Text filterBox= fFilterTextControl.getFilterControl();
+		filterBox.setMessage(hint);
 
-		fFilterBox.addModifyListener(new ModifyListener() {
+		filterBox.addModifyListener(new ModifyListener() {
 			private String fPrevFilterText;
 
 			@Override
 			public void modifyText(ModifyEvent e) {
-				String input= fFilterBox.getText();
+				String input= filterBox.getText();
 				fExpandAllItem.setEnabled(input.isEmpty());
 				fCollapseAllItem.setEnabled(input.isEmpty());
 				if (!input.equalsIgnoreCase(fPrevFilterText)) {
@@ -543,7 +547,7 @@
 		if (fDescription != null) {
 			fDescription.setEnabled(enabled);
 		}
-		fFilterBox.setEnabled(enabled);
+		fFilterTextControl.setEnabled(enabled);
 		fCollapseAllItem.setEnabled(enabled);
 		fExpandAllItem.setEnabled(enabled);
 		fRoot.getChildren().forEach(node -> node.setEnabled(enabled));
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
index 82073af..df3fd64 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/JavadocConfigurationBlock.java
@@ -440,11 +440,9 @@
 					// just read
 				}
 			}
-		} catch (IllegalArgumentException e) {
-			return false; // workaround for bug 91072
-		} catch (NullPointerException e) {
-			return false; // workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6536522
-		} catch (IOException e) {
+		} catch (IllegalArgumentException | NullPointerException | IOException e) {
+			// workaround for bug 91072
+			// workaround for http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6536522
 			return false;
 		}
 		return res < 400;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
index 2bbf502..7ea4947 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/PreferencesMessages.properties
@@ -601,8 +601,8 @@
 ComplianceConfigurationBlock_versionCLDC11=CLDC 1.1
 
 ComplianceConfigurationBlock_needsbuild_title=Compiler Settings Changed
-ComplianceConfigurationBlock_needsfullbuild_message=The compiler settings have changed. A full rebuild is required for changes to take effect. Do the full build now?
-ComplianceConfigurationBlock_needsprojectbuild_message=The compiler settings have changed. A rebuild of the project is required for changes to take effect. Build the project now?
+ComplianceConfigurationBlock_needsfullbuild_message=The compiler settings have changed. Rebuild to apply these changes?
+ComplianceConfigurationBlock_needsprojectbuild_message=The compiler settings have changed.  Rebuild the project to apply the changes?
 
 ComplianceConfigurationBlock_variable_attr_label=Add varia&ble attributes to generated class files (used by the debugger)
 ComplianceConfigurationBlock_line_number_attr_label=Add &line number attributes to generated class files (used by the debugger)
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
index c80779b..0490ad3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java
@@ -74,7 +74,6 @@
 	public static String CodeStyleTabPage_RadioName_NeverUseBlocks;
 	public static String CodeStyleTabPage_RadioName_NeverUseParantheses;
 
-	public static String CodeStyleTabPage_CheckboxName_UseLazyLogicalOperator;
 	public static String CodeStyleTabPage_RadioName_UseBlocksSpecial;
 
 	public static String CodeStyleTabPage_GroupName_FunctionalInterfaces;
@@ -83,9 +82,10 @@
 	public static String CodeStyleTabPage_RadioName_UseAnonymous;
 	public static String CodeStyleTabPage_CheckboxName_SimplifyLambdaExpressionAndMethodRefSyntax;
 
-	public static String CodeStyleTabPage_GroupName_Optimization;
+	public static String OptimizationTabPage_GroupName_Optimization;
 
-	public static String CodeStyleTabPage_CheckboxName_PrecompileRegEx;
+	public static String OptimizationTabPage_CheckboxName_UseLazyLogicalOperator;
+	public static String OptimizationTabPage_CheckboxName_PrecompileRegEx;
 
 	public static String ContributedCleanUpTabPage_ErrorPage_message;
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
index dc4ab34..d57fe00 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties
@@ -54,14 +54,15 @@
 CodeStyleTabPage_GroupName_ControlStatments=Control statements
 CodeStyleTabPage_RadioName_UseBlocksSpecial=Always &except for single 'return' or 'throw' statements
 CodeStyleTabPage_CheckboxName_UseParentheses=Use parent&heses in expressions
-CodeStyleTabPage_CheckboxName_UseLazyLogicalOperator=Use la&zy logical operator
 CodeStyleTabPage_GroupName_FunctionalInterfaces=Functional interface instances
 CodeStyleTabPage_CheckboxName_ConvertFunctionalInterfaces=Con&vert functional interface instances
 CodeStyleTabPage_RadioName_UseLambdaWherePossible=Use lambda where possible
 CodeStyleTabPage_CheckboxName_SimplifyLambdaExpressionAndMethodRefSyntax=Simplify &lambda expression and method reference syntax
 CodeStyleTabPage_RadioName_UseAnonymous=Use anonymous class
-CodeStyleTabPage_GroupName_Optimization=Optimization
-CodeStyleTabPage_CheckboxName_PrecompileRegEx=Precompile reused regular e&xpressions
+
+OptimizationTabPage_GroupName_Optimization=Optimization
+OptimizationTabPage_CheckboxName_UseLazyLogicalOperator=Use la&zy logical operator
+OptimizationTabPage_CheckboxName_PrecompileRegEx=Precompile reused regular e&xpressions
 
 ContributedCleanUpTabPage_ErrorPage_message=An error occurred while creating this page. See the error log for details
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
index a3e6979..0c9ee2a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeStyleTabPage.java
@@ -26,10 +26,8 @@
 import org.eclipse.jdt.internal.ui.fix.ExpressionsCleanUp;
 import org.eclipse.jdt.internal.ui.fix.LambdaExpressionAndMethodRefCleanUp;
 import org.eclipse.jdt.internal.ui.fix.LambdaExpressionsCleanUp;
-import org.eclipse.jdt.internal.ui.fix.LazyLogicalCleanUp;
 import org.eclipse.jdt.internal.ui.fix.NumberSuffixCleanUp;
 import org.eclipse.jdt.internal.ui.fix.VarCleanUp;
-import org.eclipse.jdt.internal.ui.fix.PatternCleanUp;
 import org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp;
 
 public final class CodeStyleTabPage extends AbstractCleanUpTabPage {
@@ -42,12 +40,10 @@
 				new ConvertLoopCleanUp(values),
 				new ExpressionsCleanUp(values),
 				new NumberSuffixCleanUp(values),
-				new LazyLogicalCleanUp(values),
 				new VariableDeclarationCleanUp(values),
 				new VarCleanUp(values),
 				new LambdaExpressionsCleanUp(values),
-				new LambdaExpressionAndMethodRefCleanUp(values),
-				new PatternCleanUp(values)
+				new LambdaExpressionAndMethodRefCleanUp(values)
 		};
 	}
 
@@ -77,9 +73,6 @@
 		final RadioPreference useParenthesesAlwaysPref= createRadioPref(expressionsGroup, 1, CleanUpMessages.CodeStyleTabPage_RadioName_AlwaysUseParantheses, CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_ALWAYS, CleanUpModifyDialog.FALSE_TRUE);
 		final RadioPreference useParenthesesNeverPref= createRadioPref(expressionsGroup, 1, CleanUpMessages.CodeStyleTabPage_RadioName_NeverUseParantheses, CleanUpConstants.EXPRESSIONS_USE_PARENTHESES_NEVER, CleanUpModifyDialog.FALSE_TRUE);
 		registerSlavePreference(useParenthesesPref, new RadioPreference[] {useParenthesesAlwaysPref, useParenthesesNeverPref});
-		final CheckboxPreference useLazyLogicalPref= createCheckboxPref(expressionsGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_UseLazyLogicalOperator,
-				CleanUpConstants.USE_LAZY_LOGICAL_OPERATOR, CleanUpModifyDialog.FALSE_TRUE);
-		registerPreference(useLazyLogicalPref);
 
 		Group numberSuffixGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_NumberLiteral);
 
@@ -109,11 +102,5 @@
 
 		CheckboxPreference simplifyLambdaExpressionAndMethodRef= createCheckboxPref(functionalInterfacesGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_SimplifyLambdaExpressionAndMethodRefSyntax, CleanUpConstants.SIMPLIFY_LAMBDA_EXPRESSION_AND_METHOD_REF, CleanUpModifyDialog.FALSE_TRUE);
 		registerPreference(simplifyLambdaExpressionAndMethodRef);
-
-		Group optimizationGroup= createGroup(numColumns, composite, CleanUpMessages.CodeStyleTabPage_GroupName_Optimization);
-
-		final CheckboxPreference precompileRegExPref= createCheckboxPref(optimizationGroup, numColumns, CleanUpMessages.CodeStyleTabPage_CheckboxName_PrecompileRegEx, CleanUpConstants.PRECOMPILE_REGEX,
-				CleanUpModifyDialog.FALSE_TRUE);
-		registerPreference(precompileRegExPref);
 	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/OptimizationTabPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/OptimizationTabPage.java
new file mode 100644
index 0000000..223d63f
--- /dev/null
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/OptimizationTabPage.java
@@ -0,0 +1,50 @@
+/*******************************************************************************
+ * Copyright (c) 2020 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
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.jdt.internal.ui.preferences.cleanup;
+
+import java.util.Map;
+
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+
+import org.eclipse.jdt.internal.corext.fix.CleanUpConstants;
+
+import org.eclipse.jdt.internal.ui.fix.AbstractCleanUp;
+import org.eclipse.jdt.internal.ui.fix.LazyLogicalCleanUp;
+import org.eclipse.jdt.internal.ui.fix.PatternCleanUp;
+
+public final class OptimizationTabPage extends AbstractCleanUpTabPage {
+	public static final String ID= "org.eclipse.jdt.ui.cleanup.tabpage.optimization"; //$NON-NLS-1$
+
+	@Override
+	protected AbstractCleanUp[] createPreviewCleanUps(Map<String, String> values) {
+		return new AbstractCleanUp[] {
+				new LazyLogicalCleanUp(values),
+				new PatternCleanUp(values)
+		};
+	}
+
+	@Override
+	protected void doCreatePreferences(Composite composite, int numColumns) {
+		Group optimizationGroup= createGroup(numColumns, composite, CleanUpMessages.OptimizationTabPage_GroupName_Optimization);
+
+		final CheckboxPreference useLazyLogicalPref= createCheckboxPref(optimizationGroup, numColumns, CleanUpMessages.OptimizationTabPage_CheckboxName_UseLazyLogicalOperator,
+				CleanUpConstants.USE_LAZY_LOGICAL_OPERATOR, CleanUpModifyDialog.FALSE_TRUE);
+		registerPreference(useLazyLogicalPref);
+
+		final CheckboxPreference precompileRegExPref= createCheckboxPref(optimizationGroup, numColumns, CleanUpMessages.OptimizationTabPage_CheckboxName_PrecompileRegEx, CleanUpConstants.PRECOMPILE_REGEX,
+				CleanUpModifyDialog.FALSE_TRUE);
+		registerPreference(precompileRegExPref);
+	}
+}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
index 9c625a8..7073ca3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/formatter/FormatterProfileStore.java
@@ -88,9 +88,7 @@
 				file.delete(); // remove after successful write
 				return res;
 			}
-		} catch (CoreException e) {
-			JavaPlugin.log(e); // log but ignore
-		} catch (IOException e) {
+		} catch (CoreException | IOException e) {
 			JavaPlugin.log(e); // log but ignore
 		}
 		return null;
@@ -118,9 +116,7 @@
 			}
 			uiPreferences.putInt(PREF_FORMATTER_PROFILES + VERSION_KEY_SUFFIX, profileVersioner.getCurrentVersion());
 			savePreferences(instanceScope);
-		} catch (CoreException e) {
-			JavaPlugin.log(e);
-		} catch (BackingStoreException e) {
+		} catch (CoreException | BackingStoreException e) {
 			JavaPlugin.log(e);
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionProcessor.java
index ec140b6..e891466 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesCorrectionProcessor.java
@@ -88,10 +88,7 @@
 					proposals.addAll(Arrays.asList(assists));
 				}
 				res= proposals.toArray(new ICompletionProposal[proposals.size()]);
-			} catch (BadLocationException e) {
-				fErrorMessage= PropertiesFileEditorMessages.PropertiesCorrectionProcessor_error_quickassist_message;
-				JavaPlugin.log(e);
-			} catch (BadPartitioningException e) {
+			} catch (BadLocationException | BadPartitioningException e) {
 				fErrorMessage= PropertiesFileEditorMessages.PropertiesCorrectionProcessor_error_quickassist_message;
 				JavaPlugin.log(e);
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileHover.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileHover.java
index e516bb2..8babfef 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileHover.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesFileHover.java
@@ -153,9 +153,7 @@
 			}
 			if (escapedString.equals(unescapedString))
 				return null;
-		} catch (BadLocationException e) {
-			JavaPlugin.log(e);
-		} catch (BadPartitioningException e) {
+		} catch (BadLocationException | BadPartitioningException e) {
 			JavaPlugin.log(e);
 		}
 		return unescapedString;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java
index e3acb13..2c93a55 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertiesQuickAssistProcessor.java
@@ -75,9 +75,7 @@
 					getCreateFieldsInAccessorClassProposals(invocationContext, null) ||
 					getRemovePropertiesProposals(invocationContext, null) ||
 					getRenameKeysProposals(invocationContext, null);
-		} catch (BadLocationException e) {
-			JavaPlugin.log(e);
-		} catch (BadPartitioningException e) {
+		} catch (BadLocationException | BadPartitioningException e) {
 			JavaPlugin.log(e);
 		}
 		return false;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java
index b20cc19..22819ab 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyKeyHyperlinkDetector.java
@@ -106,11 +106,7 @@
 
 			return new PropertyKeyHyperlink[] { new PropertyKeyHyperlink(new Region(partition.getOffset() + delta, realKey.length()), realKey, textEditor) };
 
-		} catch (BadLocationException ex) {
-			return null;
-		} catch (BadPartitioningException ex) {
-			return null;
-		} catch (IOException ex) {
+		} catch (BadLocationException | BadPartitioningException | IOException ex) {
 			return null;
 		} catch (IllegalArgumentException ex) {
 			showErrorInStatusLine(ex.getLocalizedMessage(), textEditor);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java
index 7a219e7..70f90a7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/propertiesfileeditor/PropertyValueScanner.java
@@ -66,9 +66,7 @@
 				if (fDocument instanceof IDocumentExtension3)
 					partition= ((IDocumentExtension3)fDocument).getPartition(IPropertiesFilePartitions.PROPERTIES_FILE_PARTITIONING, i, false);
 				return partition != null && IDocument.DEFAULT_CONTENT_TYPE.equals(partition.getType());
-			} catch (BadLocationException ex) {
-				return false;
-			} catch (BadPartitioningException e) {
+			} catch (BadLocationException | BadPartitioningException e) {
 				return false;
 			}
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java
index e8bfa82..ea2c9a7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/MethodExitsFinder.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -29,6 +29,7 @@
 import org.eclipse.jdt.core.dom.Expression;
 import org.eclipse.jdt.core.dom.IMethodBinding;
 import org.eclipse.jdt.core.dom.ITypeBinding;
+import org.eclipse.jdt.core.dom.LambdaExpression;
 import org.eclipse.jdt.core.dom.MethodDeclaration;
 import org.eclipse.jdt.core.dom.MethodInvocation;
 import org.eclipse.jdt.core.dom.Name;
@@ -178,6 +179,12 @@
 	}
 
 	@Override
+	public boolean visit(LambdaExpression node) {
+		// Don't dive into a Lambda Expression.
+		return false;
+	}
+
+	@Override
 	public boolean visit(ReturnStatement node) {
 		fResult.add(new OccurrenceLocation(node.getStartPosition(), node.getLength(), 0, fExitDescription));
 		return super.visit(node);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java
index cf7640d..96d6c88 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/OccurrencesSearchResultPage.java
@@ -243,9 +243,7 @@
 			// activating at the end avoids an outdated selection event from JavaUI.openInEditor(..):
 			if (editor != null && activate)
 				editor.getEditorSite().getPage().activate(editor);
-		} catch (PartInitException e1) {
-			return;
-		} catch (JavaModelException e1) {
+		} catch (PartInitException | JavaModelException e1) {
 			return;
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java
index a5f8a61..6da9db9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/search/SearchLabelProvider.java
@@ -78,7 +78,7 @@
 		fLabelProviderMap= new HashMap<>(5);
 
 		fSearchPreferences= new ScopedPreferenceStore(InstanceScope.INSTANCE, NewSearchUI.PLUGIN_ID);
-		fSearchPropertyListener= event -> doSearchPropertyChange(event);
+		fSearchPropertyListener= this::doSearchPropertyChange;
 		fSearchPreferences.addPropertyChangeListener(fSearchPropertyListener);
 	}
 
@@ -173,7 +173,6 @@
 	@Override
 	public void dispose() {
 		if (fPotentialMatchFgColor != null) {
-			fPotentialMatchFgColor.dispose();
 			fPotentialMatchFgColor= null;
 		}
 		fSearchPreferences.removePropertyChangeListener(fSearchPropertyListener);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java
index 5025d4c..4756b01 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/JavaOutlineInformationControl.java
@@ -741,9 +741,7 @@
 			IProgressMonitor monitor = getProgressMonitor();
 			try {
 				th= SuperTypeHierarchyCache.getTypeHierarchy(type, monitor);
-			} catch (JavaModelException e) {
-				return null;
-			} catch (OperationCanceledException e) {
+			} catch (JavaModelException | OperationCanceledException e) {
 				return null;
 			} finally {
 				monitor.done();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java
index 38b62ab..adba68b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/SmartBackspaceManager.java
@@ -125,10 +125,7 @@
 						fViewer.setSelectedRange(spec.selection.getOffset(), spec.selection.getLength());
 						if (spec.child != null)
 							register(spec.child);
-					} catch (MalformedTreeException e) {
-						// fall back to standard bs
-						return;
-					} catch (BadLocationException e) {
+					} catch (MalformedTreeException | BadLocationException e) {
 						// fall back to standard bs
 						return;
 					} finally {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultModulepathFixProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultModulepathFixProcessor.java
index 6bdfc30..45b4d56 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultModulepathFixProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/DefaultModulepathFixProcessor.java
@@ -90,9 +90,7 @@
 		SearchParticipant[] participants= new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
 		try {
 			new SearchEngine().search(searchPattern, participants, scope, requestor, null);
-		} catch (CoreException e) {
-			//do nothing
-		} catch (OperationCanceledException e) {
+		} catch (CoreException | OperationCanceledException e) {
 			//do nothing
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java
index b76836a..3a451df 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ModuleCorrectionsSubProcessor.java
@@ -215,9 +215,7 @@
 		SearchParticipant[] participants= new SearchParticipant[] { SearchEngine.getDefaultSearchParticipant() };
 		try {
 			new SearchEngine().search(searchPattern, participants, scope, requestor, null);
-		} catch (CoreException e) {
-			//do nothing
-		} catch (OperationCanceledException e) {
+		} catch (CoreException | OperationCanceledException e) {
 			//do nothing
 		}
 
@@ -386,9 +384,7 @@
 			if (projectModule == null) {
 				projectModule= JavaModelAccess.getAutomaticModuleDescription(element);
 			}
-		} catch (JavaModelException e) {
-			JavaPlugin.log(e);
-		} catch (IllegalArgumentException e) {
+		} catch (JavaModelException | IllegalArgumentException e) {
 			JavaPlugin.log(e);
 		}
 		return projectModule;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java
index 81bdf1c..d93838c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistLightBulbUpdater.java
@@ -265,9 +265,7 @@
 					}
 				}
 			}
-		} catch (BadLocationException e) {
-			// ignore
-		} catch (IndexOutOfBoundsException | ConcurrentModificationException e) {
+		} catch (BadLocationException | IndexOutOfBoundsException | ConcurrentModificationException e) {
 			// concurrent modification - too bad, ignore
 		}
 		return false;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
index ee199d1..2c40ac7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/QuickAssistProcessor.java
@@ -1820,7 +1820,20 @@
 		if (methodReferenceNode == null) {
 			return false;
 		}
+		boolean addStaticModifier= false;
 		TypeDeclaration typeDeclaration= ASTNodes.getParent(methodReferenceNode, TypeDeclaration.class);
+
+		if (isTypeReferenceToInstanceMethod(methodReferenceNode)) {
+			String methodReferenceQualifiedName= ((Name) methodReferenceNode.getExpression()).getFullyQualifiedName();
+			String typeDeclarationName= astRoot.getPackage().getName().getFullyQualifiedName() + '.' + typeDeclaration.getName().getFullyQualifiedName();
+			if (!(methodReferenceQualifiedName.equals(typeDeclarationName)
+					|| methodReferenceQualifiedName.equals(typeDeclaration.getName().getFullyQualifiedName()))) {
+				// only propose for references in same class
+				return false;
+			}
+			addStaticModifier= true;
+		}
+
 		AST ast= astRoot.getAST();
 		ASTRewrite rewrite= ASTRewrite.create(ast);
 		ListRewrite listRewrite= rewrite.getListRewrite(typeDeclaration, TypeDeclaration.BODY_DECLARATIONS_PROPERTY);
@@ -1840,13 +1853,11 @@
 			/*
 			 * variable declaration
 			 */
-			int modifiers = 0;
 			Type type= null;
 			ReturnType returnType= null;
-			if(variableDeclarationStatement != null) {
+			if (variableDeclarationStatement != null) {
 				type= variableDeclarationStatement.getType();
 				returnType= getReturnType(ast, importRewrite, type);
-				modifiers= variableDeclarationStatement.getModifiers();
 			} else {
 				Expression leftHandSide= variableAssignment.getLeftHandSide();
 				ITypeBinding assignmentTypeBinding= leftHandSide.resolveTypeBinding();
@@ -1857,7 +1868,6 @@
 				returnType= new ReturnType();
 				returnType.type= type;
 				returnType.binding= assignmentTypeBinding;
-				modifiers= Bindings.getAssignedVariable(variableAssignment).getModifiers();
 			}
 			if (returnType.binding == null) {
 				return false;
@@ -1865,7 +1875,7 @@
 			MethodDeclaration newMethodDeclaration= ast.newMethodDeclaration();
 			newMethodDeclaration.setName((SimpleName) rewrite.createCopyTarget(methodReferenceNode.getName()));
 			newMethodDeclaration.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD));
-			if (Modifier.isStatic(modifiers)) {
+			if (addStaticModifier) {
 				newMethodDeclaration.modifiers().add(ast.newModifier(ModifierKeyword.STATIC_KEYWORD));
 			}
 
@@ -1914,42 +1924,31 @@
 		ITypeBinding[] typeArguments= methodBinding.getTypeArguments();
 		ITypeBinding[] parameterTypesFunctionalInterface= parameterTypes[index].getFunctionalInterfaceMethod().getParameterTypes();
 		ITypeBinding returnTypeBindingFunctionalInterface= parameterTypes[index].getFunctionalInterfaceMethod().getReturnType();
-		Type returnTypeFunctionalInterface= importRewrite.addImport(returnTypeBindingFunctionalInterface, ast);
 		MethodDeclaration newMethodDeclaration= ast.newMethodDeclaration();
+		newMethodDeclaration.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD));
+		if (addStaticModifier) {
+			newMethodDeclaration.modifiers().add(ast.newModifier(ModifierKeyword.STATIC_KEYWORD));
+		}
 		Type newReturnType= null;
-		/* if we have a VariableDeclarationStatement we can try to extract the return Type more accurate */
-		if (variableDeclarationStatement != null) {
-			ReturnType returnType= getReturnType(ast, importRewrite, variableDeclarationStatement.getType());
-			newReturnType= returnType.type;
-			if (returnType.binding == null || returnType.binding.isTypeVariable() ||
-					returnTypeBindingFunctionalInterface.isClass() || returnTypeBindingFunctionalInterface.isPrimitive()) {
-				newReturnType= returnTypeFunctionalInterface;
-			}
+		if (returnTypeBindingFunctionalInterface.isPrimitive()) {
+			newReturnType= ast.newPrimitiveType(PrimitiveType.toCode(returnTypeBindingFunctionalInterface.getName()));
 		} else {
-			if (returnTypeBindingFunctionalInterface.isPrimitive()) {
-				newReturnType= ast.newPrimitiveType(PrimitiveType.toCode(returnTypeBindingFunctionalInterface.getName()));
-			} else {
-				newReturnType= importRewrite.addImport(returnTypeBindingFunctionalInterface, ast);
-				ITypeBinding[] typeParameters= typeDeclaration.resolveBinding().getTypeParameters();
-				bIf: if (returnTypeBindingFunctionalInterface.isTypeVariable() || returnTypeBindingFunctionalInterface.isParameterizedType()) {
-					for (ITypeBinding typeParameter : typeParameters) {
-						// check if parameter type is a Type parameter of the class
-						if (Bindings.equals(typeParameter, returnTypeBindingFunctionalInterface)) {
-							break bIf;
-						}
+			newReturnType= importRewrite.addImport(returnTypeBindingFunctionalInterface, ast);
+			ITypeBinding[] typeParameters= typeDeclaration.resolveBinding().getTypeParameters();
+			bIf: if (returnTypeBindingFunctionalInterface.isTypeVariable() || returnTypeBindingFunctionalInterface.isParameterizedType()) {
+				for (ITypeBinding typeParameter : typeParameters) {
+					// check if parameter type is a Type parameter of the class
+					if (Bindings.equals(typeParameter, returnTypeBindingFunctionalInterface)) {
+						break bIf;
 					}
-					TypeParameter newTypeParameter= ast.newTypeParameter();
-					newTypeParameter.setName(ast.newSimpleName(returnTypeBindingFunctionalInterface.getName()));
-					addIfMissing(newMethodDeclaration, newTypeParameter);
 				}
+				TypeParameter newTypeParameter= ast.newTypeParameter();
+				newTypeParameter.setName(ast.newSimpleName(returnTypeBindingFunctionalInterface.getName()));
+				addIfMissing(newMethodDeclaration, newTypeParameter);
 			}
 		}
 		newMethodDeclaration.setName((SimpleName) rewrite.createCopyTarget(methodReferenceNode.getName()));
 		newMethodDeclaration.setReturnType2(newReturnType);
-		newMethodDeclaration.modifiers().add(ast.newModifier(ModifierKeyword.PRIVATE_KEYWORD));
-		if (Modifier.isStatic(methodBinding.getModifiers())) {
-			newMethodDeclaration.modifiers().add(ast.newModifier(ModifierKeyword.STATIC_KEYWORD));
-		}
 		pLoop: for (int i= 0; i < parameterTypesFunctionalInterface.length; i++) {
 			ITypeBinding parameterType2= parameterTypesFunctionalInterface[i];
 			SingleVariableDeclaration newSingleVariableDeclaration= ast.newSingleVariableDeclaration();
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java
index b758379..a43f42e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/AnonymousTypeCompletionProposal.java
@@ -262,9 +262,7 @@
 				int bodyStart= trackedDeclaration.getStartPosition() + dummyClassContent.indexOf('{');
 				int bodyEnd= trackedDeclaration.getStartPosition() + trackedDeclaration.getLength();
 				return document.get(bodyStart, bodyEnd - bodyStart);
-			} catch (MalformedTreeException exception) {
-				JavaPlugin.log(exception);
-			} catch (BadLocationException exception) {
+			} catch (MalformedTreeException | BadLocationException exception) {
 				JavaPlugin.log(exception);
 			}
 			return null;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java
index 20c2b3e..0d43fc3 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/CompletionProposalComputerDescriptor.java
@@ -44,6 +44,7 @@
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
+import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer;
 
 /**
  * The description of an extension to the
@@ -155,6 +156,8 @@
 	private final boolean fRequiresUIThread;
 
 
+
+
 	/**
 	 * Creates a new descriptor.
 	 *
@@ -350,7 +353,8 @@
 					return proposals;
 				}
 			} finally {
-				fIsReportingDelay= true;
+				// If computers are using non-ui thread, don't report delays.
+				fIsReportingDelay= !((context.getViewer() instanceof JavaSourceViewer) && ((JavaSourceViewer) context.getViewer()).isAsyncCompletionActive());
 			}
 			status= createAPIViolationStatus(COMPUTE_COMPLETION_PROPOSALS);
 		} catch (InvalidRegistryObjectException x) {
@@ -425,6 +429,7 @@
 		if (!isEnabled())
 			return;
 
+
 		IStatus status;
 		try {
 			IJavaCompletionProposalComputer computer= getComputer(true);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java
index b4992e0..925f2a8 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ImportCompletionProposal.java
@@ -149,9 +149,7 @@
 					fLengthOfImportsAddedBehindReplacementOffset= 0;
 				setReplacementOffset(getReplacementOffset() + document.getLength() - oldLen);
 			}
-		} catch (CoreException e) {
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (CoreException | BadLocationException e) {
 			JavaPlugin.log(e);
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java
index 1e4695d..610a427 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaAutoIndentStrategy.java
@@ -1398,9 +1398,7 @@
 			int tokenLength= fgScanner.getCurrentTokenEndPosition() + 1 - tokenOffset; // inclusive end
 			return new Region(tokenOffset + scanRegion.getOffset(), tokenLength);
 
-		} catch (InvalidInputException x) {
-			return null;
-		} catch (BadLocationException x) {
+		} catch (InvalidInputException | BadLocationException x) {
 			return null;
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java
index ad5201f..66c36d2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaCompletionProposalComputer.java
@@ -25,6 +25,7 @@
 import org.eclipse.swt.widgets.Display;
 
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.OperationCanceledException;
 
 import org.eclipse.jface.dialogs.ErrorDialog;
@@ -53,6 +54,7 @@
 import org.eclipse.jdt.ui.text.java.IJavaCompletionProposalComputer;
 import org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext;
 
+import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer;
 import org.eclipse.jdt.internal.ui.text.CompletionTimeoutProgressMonitor;
 import org.eclipse.jdt.internal.ui.text.JavaHeuristicScanner;
 import org.eclipse.jdt.internal.ui.text.Symbols;
@@ -133,10 +135,7 @@
 
 	private String fErrorMessage;
 
-	private final IProgressMonitor fTimeoutProgressMonitor;
-
 	public JavaCompletionProposalComputer() {
-		fTimeoutProgressMonitor= new CompletionTimeoutProgressMonitor();
 	}
 
 	protected int guessContextInformationPosition(ContentAssistInvocationContext context) {
@@ -254,7 +253,7 @@
 			if (selection != null && selection.getLength() > 0) {
 				collector.setReplacementLength(selection.getLength());
 			}
-			unit.codeComplete(offset, collector, fTimeoutProgressMonitor);
+			unit.codeComplete(offset, collector, createProgressMonitor(context));
 		} catch (OperationCanceledException x) {
 			IBindingService bindingSvc= PlatformUI.getWorkbench().getAdapter(IBindingService.class);
 			String keyBinding= bindingSvc.getBestActiveBindingFormattedFor(IWorkbenchCommandConstants.EDIT_CONTENT_ASSIST);
@@ -349,4 +348,11 @@
 	public void sessionEnded() {
 		fErrorMessage= null;
 	}
+
+	private IProgressMonitor createProgressMonitor(JavaContentAssistInvocationContext context) {
+		if (context.getViewer() instanceof JavaSourceViewer && ((JavaSourceViewer) context.getViewer()).isAsyncCompletionActive()) {
+			return new NullProgressMonitor();
+		}
+		return new CompletionTimeoutProgressMonitor();
+	}
 }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java
index 948d646..ac9e44b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaFormattingStrategy.java
@@ -80,9 +80,7 @@
 					edit.apply(document);
 				}
 
-			} catch (MalformedTreeException exception) {
-				JavaPlugin.log(exception);
-			} catch (BadLocationException exception) {
+			} catch (MalformedTreeException | BadLocationException exception) {
 				// Can only happen on concurrent document modification - log and bail out
 				JavaPlugin.log(exception);
 			} finally {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java
index ce68cb1..df87ecb 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaStringAutoIndentStrategy.java
@@ -83,23 +83,17 @@
 					token = tokenizer.nextToken();
 					if (token.equals("\n")) { //$NON-NLS-1$
 						buffer.append("\\n"); //$NON-NLS-1$
-						buffer.append("\" + " + delimiter); //$NON-NLS-1$
-						buffer.append(indentation);
-						buffer.append("\""); //$NON-NLS-1$
+						appendToBuffer(buffer, indentation, delimiter);
 						continue;
 					} else {
-						buffer.append("\" + " + delimiter); //$NON-NLS-1$
-						buffer.append(indentation);
-						buffer.append("\""); //$NON-NLS-1$
+						appendToBuffer(buffer, indentation, delimiter);
 					}
 				} else {
 					continue;
 				}
 			} else if (token.equals("\n")) { //$NON-NLS-1$
 				buffer.append("\\n"); //$NON-NLS-1$
-				buffer.append("\" + " + delimiter); //$NON-NLS-1$
-				buffer.append(indentation);
-				buffer.append("\""); //$NON-NLS-1$
+				appendToBuffer(buffer, indentation, delimiter);
 				continue;
 			}
 
@@ -148,7 +142,20 @@
 		return buffer.toString();
 	}
 
-	/**
+	private void appendToBuffer(StringBuilder buffer, String indentation, String delimiter) {
+		if (buffer != null) {
+			if (isWrappingBeforeBinaryOperator()) {
+				buffer.append("\"" + delimiter); //$NON-NLS-1$
+				buffer.append(indentation + "+ \""); //$NON-NLS-1$
+			} else {
+				buffer.append("\" + " + delimiter); //$NON-NLS-1$
+				buffer.append(indentation);
+				buffer.append("\""); //$NON-NLS-1$
+			}
+		}
+	}
+
+ 	/**
 	 * Creates a new Java string auto indent strategy for the given document partitioning.
 	 *
 	 * @param partitioning the document partitioning
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java
index e7844e7..ce45fec 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposal.java
@@ -116,9 +116,7 @@
 				impRewrite.rewriteImports(new NullProgressMonitor()).apply(document, TextEdit.UPDATE_REGIONS);
 				setReplacementOffset(getReplacementOffset() + document.getLength() - oldLen);
 			}
-		} catch (CoreException e) {
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (CoreException | BadLocationException e) {
 			JavaPlugin.log(e);
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java
index a145a28..aa8ae0e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/JavaTypeCompletionProposalComputer.java
@@ -104,10 +104,7 @@
 					}
 				}
 			}
-		} catch (BadLocationException x) {
-			// log & ignore
-			JavaPlugin.log(x);
-		} catch (JavaModelException x) {
+		} catch (BadLocationException | JavaModelException x) {
 			// log & ignore
 			JavaPlugin.log(x);
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java
index 0019614..f788bb0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/LazyJavaTypeCompletionProposal.java
@@ -215,9 +215,7 @@
 				setUpLinkedMode(document, ')');
 
 			rememberSelection();
-		} catch (CoreException e) {
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (CoreException | BadLocationException e) {
 			JavaPlugin.log(e);
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
index 410761f..0132c3a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/OverrideCompletionProposal.java
@@ -182,9 +182,7 @@
 						setReplacementLength(replacementLength + 1);
 					}
 
-				} catch (MalformedTreeException exception) {
-					JavaPlugin.log(exception);
-				} catch (BadLocationException exception) {
+				} catch (MalformedTreeException | BadLocationException exception) {
 					JavaPlugin.log(exception);
 				}
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java
index fa73e06..31ba274 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/ParameterGuessingProposal.java
@@ -212,11 +212,7 @@
 				fSelectedRegion= new Region(baseOffset + replacement.length(), 0);
 			}
 
-		} catch (BadLocationException e) {
-			ensurePositionCategoryRemoved(document);
-			JavaPlugin.log(e);
-			openErrorDialog(e);
-		} catch (BadPositionCategoryException e) {
+		} catch (BadLocationException | BadPositionCategoryException e) {
 			ensurePositionCategoryRemoved(document);
 			JavaPlugin.log(e);
 			openErrorDialog(e);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SmartSemicolonAutoEditStrategy.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SmartSemicolonAutoEditStrategy.java
index f8b9a6d..a01035f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SmartSemicolonAutoEditStrategy.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/SmartSemicolonAutoEditStrategy.java
@@ -180,9 +180,7 @@
 			command.text= insertion;
 			command.doit= true;
 			command.owner= null;
-		} catch (MalformedTreeException e) {
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
+		} catch (MalformedTreeException | BadLocationException e) {
 			JavaPlugin.log(e);
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java
index ceab1e4..fec1b3a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/JavadocHover.java
@@ -292,9 +292,7 @@
 			try {
 				//FIXME: add hover location to editor navigation history?
 				openDeclaration(infoInput.getElement());
-			} catch (PartInitException e) {
-				JavaPlugin.log(e);
-			} catch (JavaModelException e) {
+			} catch (PartInitException | JavaModelException e) {
 				JavaPlugin.log(e);
 			}
 		}
@@ -620,9 +618,7 @@
 				try {
 					//FIXME: add hover location to editor navigation history?
 					openDeclaration(linkTarget);
-				} catch (PartInitException e) {
-					JavaPlugin.log(e);
-				} catch (JavaModelException e) {
+				} catch (PartInitException | JavaModelException e) {
 					JavaPlugin.log(e);
 				}
 			}
@@ -1159,10 +1155,7 @@
 					}
 				}
 			}
-		} catch (JavaModelException e) {
-			// no annotations this time...
-			buf.append("<br>"); //$NON-NLS-1$
-		} catch (URISyntaxException e) {
+		} catch (JavaModelException | URISyntaxException e) {
 			// no annotations this time...
 			buf.append("<br>"); //$NON-NLS-1$
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java
index 13b3929..69e5383 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/java/hover/SourceViewerInformationControl.java
@@ -108,12 +108,7 @@
 	 * @since 3.0
 	 */
 	private Font fStatusTextFont;
-	/**
-	 * The color of the optional status text label or <code>null</code> if none.
-	 *
-	 * @since 3.6
-	 */
-	private Color fStatusTextForegroundColor;
+
 	/**
 	 * The width size constraint.
 	 * @since 3.2
@@ -131,7 +126,6 @@
 	private final int fOrientation;
 
 	private Color fBackgroundColor;
-	private boolean fIsSystemBackgroundColor= true;
 
 	private JavaSourceViewerConfiguration fViewerConfiguration;
 	private Map<String, JavaSourceViewerConfiguration> fKindToViewerConfiguration= new HashMap<>();
@@ -232,8 +226,8 @@
 			fStatusField.setLayoutData(gd2);
 
 			RGB javaDefaultColor= JavaUI.getColorManager().getColor(IJavaColorConstants.JAVA_DEFAULT).getRGB();
-			fStatusTextForegroundColor= new Color(fStatusField.getDisplay(), blend(fBackgroundColor.getRGB(), javaDefaultColor, 0.56f));
-			fStatusField.setForeground(fStatusTextForegroundColor);
+			Color statusTextForegroundColor= new Color(fStatusField.getDisplay(), blend(fBackgroundColor.getRGB(), javaDefaultColor, 0.56f));
+			fStatusField.setForeground(statusTextForegroundColor);
 			fStatusField.setBackground(fBackgroundColor);
 		}
 
@@ -276,10 +270,8 @@
 		}
 		if (bgRGB != null) {
 			fBackgroundColor= new Color(fShell.getDisplay(), bgRGB);
-			fIsSystemBackgroundColor= false;
 		} else {
 			fBackgroundColor= fShell.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND);
-			fIsSystemBackgroundColor= true;
 		}
 	}
 
@@ -394,10 +386,6 @@
 			fStatusTextFont.dispose();
 		fStatusTextFont= null;
 
-		if (fStatusTextForegroundColor != null && !fStatusTextForegroundColor.isDisposed())
-			fStatusTextForegroundColor.dispose();
-		fStatusTextForegroundColor= null;
-
 		fTextFont= null;
 		fShell= null;
 		fText= null;
@@ -405,8 +393,6 @@
 
 	@Override
 	public final void dispose() {
-		if (!fIsSystemBackgroundColor)
-			fBackgroundColor.dispose();
 		if (fShell != null && !fShell.isDisposed())
 			fShell.dispose();
 		else
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java
index 5630ee2..2a3de7a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/JavaSpellingEngine.java
@@ -59,9 +59,7 @@
 						checker.execute(listener, new SpellCheckIterator(document, partition, checker.getLocale()));
 				}
 			}
-		} catch (BadLocationException x) {
-			// ignore: the document has been changed in another thread and will be checked again
-		} catch (AssertionFailedException x) {
+		} catch (BadLocationException | AssertionFailedException x) {
 			// ignore: the document has been changed in another thread and will be checked again
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java
index fce4d06..0f1e0fc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/spelling/PropertiesFileSpellingEngine.java
@@ -85,9 +85,7 @@
 					checker.execute(listener, new PropertiesFileSpellCheckIterator(document, partition, locale));
 				}
 			}
-		} catch (BadLocationException x) {
-			// ignore: the document has been changed in another thread and will be checked again
-		} catch (AssertionFailedException x) {
+		} catch (BadLocationException | AssertionFailedException x) {
 			// ignore: the document has been changed in another thread and will be checked again
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java
index 3ab5097..bd82d93 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/SurroundWithTemplateProposal.java
@@ -186,13 +186,7 @@
 
 			return document.get();
 
-		} catch (MalformedTreeException e) {
-			JavaPlugin.log(e);
-		} catch (IllegalArgumentException e) {
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
-			JavaPlugin.log(e);
-		} catch (CoreException e) {
+		} catch (MalformedTreeException | IllegalArgumentException | BadLocationException | CoreException e) {
 			JavaPlugin.log(e);
 		}
 		return null;
@@ -215,13 +209,7 @@
 			//Evaluate the template within the new context
 			fProposal= new TemplateProposal(fTemplate, context, region, null);
 			fProposal.apply(viewer, trigger, stateMask, context.getCompletionOffset());
-		} catch (MalformedTreeException e) {
-			handleException(viewer, e, fRegion);
-		} catch (IllegalArgumentException e) {
-			handleException(viewer, e, fRegion);
-		} catch (BadLocationException e) {
-			handleException(viewer, e, fRegion);
-		} catch (CoreException e) {
+		} catch (MalformedTreeException | IllegalArgumentException | BadLocationException | CoreException e) {
 			handleException(viewer, e, fRegion);
 		} finally {
 			setRedraw(viewer, true);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateProposal.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateProposal.java
index cf4d698..7a32de4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateProposal.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/template/contentassist/TemplateProposal.java
@@ -306,11 +306,7 @@
 				fSelectedRegion= new Region(getCaretOffset(templateBuffer) + start, 0);
 			}
 
-		} catch (BadLocationException e) {
-			JavaPlugin.log(e);
-			openErrorDialog(viewer.getTextWidget().getShell(), e);
-			fSelectedRegion= fRegion;
-		} catch (BadPositionCategoryException e) {
+		} catch (BadLocationException | BadPositionCategoryException e) {
 			JavaPlugin.log(e);
 			openErrorDialog(viewer.getTextWidget().getShell(), e);
 			fSelectedRegion= fRegion;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
index 9f577a5..a4c706d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/viewsupport/LinkedProposalModelPresenter.java
@@ -150,9 +150,7 @@
 						if (edit != null) {
 							edit.apply(position.getDocument(), 0);
 						}
-					} catch (MalformedTreeException e) {
-						throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, IStatus.ERROR, "Unexpected exception applying edit", e)); //$NON-NLS-1$
-					} catch (BadLocationException e) {
+					} catch (MalformedTreeException | BadLocationException e) {
 						throw new CoreException(new Status(IStatus.ERROR, JavaUI.ID_PLUGIN, IStatus.ERROR, "Unexpected exception applying edit", e)); //$NON-NLS-1$
 					}
 				} catch (CoreException e) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java
index e179140..6b006cb 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/JavaProjectWizard.java
@@ -93,14 +93,11 @@
 			BasicNewProjectResourceWizard.updatePerspective(fConfigElement);
 			selectAndReveal(fSecondPage.getJavaProject().getProject());
 
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					IWorkbenchPart activePart= getActivePart();
-					if (activePart instanceof IPackagesViewPart) {
-						PackageExplorerPart view= PackageExplorerPart.openInActivePerspective();
-						view.tryToReveal(newElement);
-					}
+			Display.getDefault().asyncExec(() -> {
+				IWorkbenchPart activePart= getActivePart();
+				if (activePart instanceof IPackagesViewPart) {
+					PackageExplorerPart view= PackageExplorerPart.openInActivePerspective();
+					view.tryToReveal(newElement);
 				}
 			});
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java
index cbdc0e1..582f951 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewElementWizard.java
@@ -66,14 +66,11 @@
 		if (activePage != null) {
 			final Display display= getShell().getDisplay();
 			if (display != null) {
-				display.asyncExec(new Runnable() {
-					@Override
-					public void run() {
-						try {
-							IDE.openEditor(activePage, resource, true);
-						} catch (PartInitException e) {
-							JavaPlugin.log(e);
-						}
+				display.asyncExec(() -> {
+					try {
+						IDE.openEditor(activePage, resource, true);
+					} catch (PartInitException e) {
+						JavaPlugin.log(e);
 					}
 				});
 			}
@@ -116,14 +113,11 @@
 	 */
 	@Override
 	public boolean performFinish() {
-		IWorkspaceRunnable op= new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
-				try {
-					finishPage(monitor);
-				} catch (InterruptedException e) {
-					throw new OperationCanceledException(e.getMessage());
-				}
+		IWorkspaceRunnable op= monitor -> {
+			try {
+				finishPage(monitor);
+			} catch (InterruptedException e) {
+				throw new OperationCanceledException(e.getMessage());
 			}
 		};
 		try {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewModuleInfoWizard.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewModuleInfoWizard.java
index e506209..9700d5c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewModuleInfoWizard.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/NewModuleInfoWizard.java
@@ -136,14 +136,11 @@
 		if (activePage != null) {
 			final Display display= getDisplay();
 			if (display != null) {
-				display.asyncExec(new Runnable() {
-					@Override
-					public void run() {
-						try {
-							IDE.openEditor(activePage, file, true);
-						} catch (PartInitException e) {
-							JavaPlugin.log(e);
-						}
+				display.asyncExec(() -> {
+					try {
+						IDE.openEditor(activePage, file, true);
+					} catch (PartInitException e) {
+						JavaPlugin.log(e);
 					}
 				});
 			}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
index 9f8a6a4..dda9eb4 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/AddSourceFolderWizardPage.java
@@ -109,12 +109,7 @@
 
 			fVariables= new SelectionButtonDialogField(SWT.PUSH);
 			fVariables.setLabelText(NewWizardMessages.LinkFolderDialog_dependenciesGroup_variables_desc);
-			fVariables.setDialogFieldListener(new IDialogFieldListener() {
-				@Override
-				public void dialogFieldChanged(DialogField field) {
-					handleVariablesButtonPressed();
-				}
-			});
+			fVariables.setDialogFieldListener(field -> handleVariablesButtonPressed());
 		}
 
 		public void setDialogFieldListener(RootFieldAdapter adapter) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
index 7842a50..9e2361f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathBasePage.java
@@ -26,9 +26,7 @@
 import org.eclipse.swt.widgets.TabFolder;
 import org.eclipse.swt.widgets.TabItem;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.core.resources.IWorkspaceRunnable;
 
@@ -126,15 +124,12 @@
 		IJavaElement[] selectedJavaElements;
 		IJavaProject javaProject= element.getJavaProject();
 		IClasspathEntry newEntry= element.getClasspathEntry();
-		IWorkspaceRunnable runnable= new IWorkspaceRunnable() {
-			@Override
-			public void run(IProgressMonitor monitor) throws CoreException {
-				IClasspathEntry[] oldClasspath= javaProject.getRawClasspath();
-				int nEntries= oldClasspath.length;
-				IClasspathEntry[] newEntries= Arrays.copyOf(oldClasspath, nEntries+1);
-				newEntries[nEntries]= newEntry;
-				javaProject.setRawClasspath(newEntries, monitor);
-			}
+		IWorkspaceRunnable runnable= monitor -> {
+			IClasspathEntry[] oldClasspath= javaProject.getRawClasspath();
+			int nEntries= oldClasspath.length;
+			IClasspathEntry[] newEntries= Arrays.copyOf(oldClasspath, nEntries+1);
+			newEntries[nEntries]= newEntry;
+			javaProject.setRawClasspath(newEntries, monitor);
 		};
 		PlatformUI.getWorkbench().getProgressService().run(true, true, new WorkbenchRunnableAdapter(runnable));
 		selectedJavaElements= ModuleEncapsulationDetail.getTargetJavaElements(element.getJavaProject(), element.getPath());
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
index 2219ae2..c61d57d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathSupport.java
@@ -284,13 +284,10 @@
 		}
 
 		final boolean[] result= new boolean[1];
-		shell.getDisplay().syncExec(new Runnable() {
-			@Override
-			public void run() {
-				String title= NewWizardMessages.BuildPathSupport_putoncpdialog_title;
-				String message= NewWizardMessages.BuildPathSupport_putoncpdialog_message;
-				result[0]= MessageDialog.openQuestion(shell, title, message);
-			}
+		shell.getDisplay().syncExec(() -> {
+			String title= NewWizardMessages.BuildPathSupport_putoncpdialog_title;
+			String message= NewWizardMessages.BuildPathSupport_putoncpdialog_message;
+			result[0]= MessageDialog.openQuestion(shell, title, message);
 		});
 		return result[0];
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
index 878b2b4..e3da831 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildPathsBlock.java
@@ -380,14 +380,11 @@
 		if (Display.getCurrent() != null) {
 			doUpdateUI();
 		} else {
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					if (fSWTWidget == null || fSWTWidget.isDisposed()) {
-						return;
-					}
-					doUpdateUI();
+			Display.getDefault().asyncExec(() -> {
+				if (fSWTWidget == null || fSWTWidget.isDisposed()) {
+					return;
 				}
+				doUpdateUI();
 			});
 		}
 	}
@@ -973,33 +970,27 @@
 	}
 
 	public static IRemoveOldBinariesQuery getRemoveOldBinariesQuery(final Shell shell) {
-		return new IRemoveOldBinariesQuery() {
-			@Override
-			public boolean doQuery(final boolean removeFolder, final IPath oldOutputLocation) throws OperationCanceledException {
-				final int[] res= new int[] { 1 };
-				Display.getDefault().syncExec(new Runnable() {
-					@Override
-					public void run() {
-						Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
-						String title= NewWizardMessages.BuildPathsBlock_RemoveBinariesDialog_title;
-						String message;
-						String pathLabel= BasicElementLabels.getPathLabel(oldOutputLocation, false);
-						if (removeFolder) {
-							message= Messages.format(NewWizardMessages.BuildPathsBlock_RemoveOldOutputFolder_description, pathLabel);
-						} else {
-							message= Messages.format(NewWizardMessages.BuildPathsBlock_RemoveBinariesDialog_description, pathLabel);
-						}
-						MessageDialog dialog= new MessageDialog(sh, title, null, message, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 0);
-						res[0]= dialog.open();
-					}
-				});
-				if (res[0] == 0) {
-					return true;
-				} else if (res[0] == 1) {
-					return false;
+		return (removeFolder, oldOutputLocation) -> {
+			final int[] res= new int[] { 1 };
+			Display.getDefault().syncExec(() -> {
+				Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
+				String title= NewWizardMessages.BuildPathsBlock_RemoveBinariesDialog_title;
+				String message;
+				String pathLabel= BasicElementLabels.getPathLabel(oldOutputLocation, false);
+				if (removeFolder) {
+					message= Messages.format(NewWizardMessages.BuildPathsBlock_RemoveOldOutputFolder_description, pathLabel);
+				} else {
+					message= Messages.format(NewWizardMessages.BuildPathsBlock_RemoveBinariesDialog_description, pathLabel);
 				}
-				throw new OperationCanceledException();
+				MessageDialog dialog= new MessageDialog(sh, title, null, message, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL }, 0);
+				res[0]= dialog.open();
+			});
+			if (res[0] == 0) {
+				return true;
+			} else if (res[0] == 1) {
+				return false;
 			}
+			throw new OperationCanceledException();
 		};
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildpathProblemMarkerResolutionGenerator.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildpathProblemMarkerResolutionGenerator.java
index a82422b..3958325 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildpathProblemMarkerResolutionGenerator.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/BuildpathProblemMarkerResolutionGenerator.java
@@ -23,14 +23,12 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Path;
 
 import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.resources.IProject;
 
 import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 
 import org.eclipse.ui.IMarkerResolution;
 import org.eclipse.ui.IMarkerResolution2;
@@ -185,14 +183,11 @@
 			if (context == null) {
 				context= PlatformUI.getWorkbench().getProgressService();
 			}
-			context.run(true, true, new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					try {
-						project.setRawClasspath(newEntries, project.getOutputLocation(), monitor);
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e);
-					}
+			context.run(true, true, monitor -> {
+				try {
+					project.setRawClasspath(newEntries, project.getOutputLocation(), monitor);
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
 				}
 			});
 		} catch (JavaModelException e) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
index 0e30444..b46fb9b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerDefaultPage.java
@@ -38,8 +38,6 @@
 import org.eclipse.jdt.internal.ui.JavaPluginImages;
 import org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
 import org.eclipse.jdt.internal.ui.wizards.NewWizardMessages;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.StringDialogField;
 
@@ -63,12 +61,7 @@
 
 		fEntryField= new StringDialogField();
 		fEntryField.setLabelText(NewWizardMessages.ClasspathContainerDefaultPage_path_label);
-		fEntryField.setDialogFieldListener(new IDialogFieldListener() {
-			@Override
-			public void dialogFieldChanged(DialogField field) {
-				validatePath();
-			}
-		});
+		fEntryField.setDialogFieldListener(field -> validatePath());
 		validatePath();
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java
index 607b6a0..00940e0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathContainerSelectionPage.java
@@ -21,13 +21,9 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.IDialogSettings;
 import org.eclipse.jface.viewers.ArrayContentProvider;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.ViewerComparator;
 import org.eclipse.jface.wizard.WizardPage;
 
@@ -87,18 +83,8 @@
 		fListViewer.setContentProvider(ArrayContentProvider.getInstance());
 		fListViewer.setComparator(new ViewerComparator());
 		fListViewer.setInput(Arrays.asList(fContainers));
-		fListViewer.addSelectionChangedListener(new ISelectionChangedListener() {
-			@Override
-			public void selectionChanged(SelectionChangedEvent event) {
-				validatePage();
-			}
-		});
-		fListViewer.addDoubleClickListener(new IDoubleClickListener() {
-			@Override
-			public void doubleClick(DoubleClickEvent event) {
-				doDoubleClick();
-			}
-		});
+		fListViewer.addSelectionChangedListener(event -> validatePage());
+		fListViewer.addDoubleClickListener(event -> doDoubleClick());
 
 		int selectionIndex= fDialogSettings.getInt(DIALOGSTORE_CONTAINER_IDX);
 		if (selectionIndex >= fContainers.length) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java
index cb9a21d..542453f 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ClasspathFixSelectionDialog.java
@@ -30,7 +30,6 @@
 import org.eclipse.swt.widgets.Table;
 
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.MultiStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
@@ -40,7 +39,6 @@
 import org.eclipse.jface.dialogs.Dialog;
 import org.eclipse.jface.dialogs.StatusDialog;
 import org.eclipse.jface.operation.IRunnableContext;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.DoubleClickEvent;
 import org.eclipse.jface.viewers.IDoubleClickListener;
@@ -80,14 +78,11 @@
 	public static boolean openClasspathFixSelectionDialog(Shell parent, final IJavaProject project, final String missingType, IRunnableContext context) {
 		final ClasspathFixProposal[][] classPathFixProposals= { null };
 		try {
-			context.run(true, true, new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, IStatus.OK, NewWizardMessages.ClasspathFixSelectionDialog_eval_proposals_error_message, null);
-					classPathFixProposals[0]= ClasspathFixProcessorDescriptor.getProposals(project, missingType, status);
-					if (!status.isOK()) {
-						JavaPlugin.log(status);
-					}
+			context.run(true, true, monitor -> {
+				MultiStatus status= new MultiStatus(JavaUI.ID_PLUGIN, IStatus.OK, NewWizardMessages.ClasspathFixSelectionDialog_eval_proposals_error_message, null);
+				classPathFixProposals[0]= ClasspathFixProcessorDescriptor.getProposals(project, missingType, status);
+				if (!status.isOK()) {
+					JavaPlugin.log(status);
 				}
 			});
 		} catch (InvocationTargetException e) {
@@ -98,27 +93,24 @@
 		final ClasspathFixSelectionDialog dialog= new ClasspathFixSelectionDialog(parent, project, missingType, classPathFixProposals[0]);
 		if (dialog.open() == Window.OK) {
 			try {
-				context.run(false, true, new IRunnableWithProgress() { // don't fork, because change execution must be in UI thread
-					@Override
-					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-						if (monitor == null) {
-							monitor= new NullProgressMonitor();
-						}
-						monitor.beginTask(NewWizardMessages.ClasspathFixSelectionDialog_process_fix_description, 4);
-						try {
-							ClasspathFixProposal fix= dialog.getSelectedClasspathFix();
-							Change change= fix.createChange(new SubProgressMonitor(monitor, 1));
+				context.run(false, true, monitor -> {
+					if (monitor == null) {
+						monitor= new NullProgressMonitor();
+					}
+					monitor.beginTask(NewWizardMessages.ClasspathFixSelectionDialog_process_fix_description, 4);
+					try {
+						ClasspathFixProposal fix= dialog.getSelectedClasspathFix();
+						Change change= fix.createChange(new SubProgressMonitor(monitor, 1));
 
-							PerformChangeOperation op= new PerformChangeOperation(change);
-							op.setUndoManager(RefactoringCore.getUndoManager(), change.getName());
-							op.run(new SubProgressMonitor(monitor, 1));
-						} catch (OperationCanceledException e) {
-							throw new InterruptedException();
-						} catch (CoreException e) {
-							throw new InvocationTargetException(e);
-						} finally {
-							monitor.done();
-						}
+						PerformChangeOperation op= new PerformChangeOperation(change);
+						op.setUndoManager(RefactoringCore.getUndoManager(), change.getName());
+						op.run(new SubProgressMonitor(monitor, 1));
+					} catch (OperationCanceledException e1) {
+						throw new InterruptedException();
+					} catch (CoreException e2) {
+						throw new InvocationTargetException(e2);
+					} finally {
+						monitor.done();
 					}
 				});
 				return true;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
index c3b534f..fc8cb13 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/CreateMultipleSourceFoldersDialog.java
@@ -37,8 +37,6 @@
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.dialogs.TrayDialog;
-import org.eclipse.jface.util.IPropertyChangeListener;
-import org.eclipse.jface.util.PropertyChangeEvent;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ITreeContentProvider;
 import org.eclipse.jface.viewers.Viewer;
@@ -170,15 +168,12 @@
 						return wizard;
 					}
 				};
-				action.addPropertyChangeListener(new IPropertyChangeListener() {
-					@Override
-					public void propertyChange(PropertyChangeEvent event) {
-						if (event.getProperty().equals(IAction.RESULT)) {
-							if (event.getNewValue().equals(Boolean.TRUE)) {
-								result[0]= addFakeFolder(fJavaProject.getProject(), newElement);
-							} else {
-								wizard.cancel();
-							}
+				action.addPropertyChangeListener(event -> {
+					if (event.getProperty().equals(IAction.RESULT)) {
+						if (event.getNewValue().equals(Boolean.TRUE)) {
+							result[0]= addFakeFolder(fJavaProject.getProject(), newElement);
+						} else {
+							wizard.cancel();
 						}
 					}
 				});
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentBlock.java
index 700acbf..ec5b731 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentBlock.java
@@ -33,7 +33,6 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
@@ -53,7 +52,6 @@
 import org.eclipse.jface.window.Window;
 
 import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.dialogs.ISelectionStatusValidator;
 import org.eclipse.ui.model.WorkbenchContentProvider;
 import org.eclipse.ui.model.WorkbenchLabelProvider;
 
@@ -418,16 +416,13 @@
 		dialog.setMessage(NewWizardMessages.AnnotationsAttachmentBlock_intjardialog_message);
 		dialog.setInput(fWorkspaceRoot);
 		dialog.setInitialSelection(initSel);
-		dialog.setValidator(new ISelectionStatusValidator() {
-			@Override
-			public IStatus validate(Object[] selection) {
-				if (selection != null && selection.length == 1) {
-					Object selectedObject= selection[0];
-					if (selectedObject instanceof IResource && ((IResource) selectedObject).isVirtual())
-						return new StatusInfo(IStatus.ERROR, NewWizardMessages.AnnotationsAttachmentBlock_filename_error_virtual);
-				}
-				return new Status(IStatus.OK, PlatformUI.PLUGIN_ID, IStatus.OK, "", null); //$NON-NLS-1$
+		dialog.setValidator(selection -> {
+			if (selection != null && selection.length == 1) {
+				Object selectedObject= selection[0];
+				if (selectedObject instanceof IResource && ((IResource) selectedObject).isVirtual())
+					return new StatusInfo(IStatus.ERROR, NewWizardMessages.AnnotationsAttachmentBlock_filename_error_virtual);
 			}
+			return new Status(IStatus.OK, PlatformUI.PLUGIN_ID, IStatus.OK, "", null); //$NON-NLS-1$
 		});
 		if (dialog.open() == Window.OK) {
 			IResource res= (IResource) dialog.getFirstResult();
@@ -453,15 +448,12 @@
 	 * @return return the runnable
 	 */
 	public static IRunnableWithProgress getRunnable(final Shell shell, final IClasspathEntry newEntry, final IJavaProject jproject, final IPath containerPath, final boolean isReferencedEntry) {
-		return new IRunnableWithProgress() {
-			@Override
-			public void run(IProgressMonitor monitor) throws InvocationTargetException {
-				try {
-					String[] changedAttributes= { IClasspathAttribute.EXTERNAL_ANNOTATION_PATH };
-					BuildPathSupport.modifyClasspathEntry(shell, newEntry, changedAttributes, jproject, containerPath, isReferencedEntry, monitor);
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
-				}
+		return monitor -> {
+			try {
+				String[] changedAttributes= { IClasspathAttribute.EXTERNAL_ANNOTATION_PATH };
+				BuildPathSupport.modifyClasspathEntry(shell, newEntry, changedAttributes, jproject, containerPath, isReferencedEntry, monitor);
+			} catch (CoreException e) {
+				throw new InvocationTargetException(e);
 			}
 		};
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentDialog.java
index c6730ad..2b00956 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ExternalAnnotationsAttachmentDialog.java
@@ -19,7 +19,6 @@
 import org.eclipse.swt.widgets.Shell;
 
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IStatus;
 
 import org.eclipse.jface.dialogs.StatusDialog;
 
@@ -48,12 +47,7 @@
 	public ExternalAnnotationsAttachmentDialog(Shell parent, IPath entry) {
 		super(parent);
 
-		IStatusChangeListener listener= new IStatusChangeListener() {
-			@Override
-			public void statusChanged(IStatus status) {
-				updateStatus(status);
-			}
-		};
+		IStatusChangeListener listener= this::updateStatus;
 		fAnnotationsAttachmentBlock= new ExternalAnnotationsAttachmentBlock(listener, entry);
 
 		setTitle(NewWizardMessages.ExternalAnnotationsDialog_title);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java
index b18805a..5fa6f3e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/JavadocLocationDialog.java
@@ -20,8 +20,6 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 
-import org.eclipse.core.runtime.IStatus;
-
 import org.eclipse.jface.dialogs.StatusDialog;
 
 import org.eclipse.ui.PlatformUI;
@@ -51,12 +49,7 @@
 	public JavadocLocationDialog(Shell parent, String libraryName, URL initialURL) {
 		super(parent);
 
-		IStatusChangeListener listener= new IStatusChangeListener() {
-			@Override
-			public void statusChanged(IStatus status) {
-				updateStatus(status);
-			}
-		};
+		IStatusChangeListener listener= this::updateStatus;
 
 		setTitle(Messages.format(NewWizardMessages.LibrariesWorkbookPage_JavadocPropertyDialog_title, libraryName));
 		fJavadocConfigurationBlock= new JavadocConfigurationBlock(parent, listener, initialURL, false);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
index dbb9fa7..2b46f02 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/LibrariesWorkbookPage.java
@@ -36,9 +36,7 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 
-import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
@@ -159,12 +157,7 @@
 		if (Display.getCurrent() != null) {
 			updateLibrariesList();
 		} else {
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					updateLibrariesList();
-				}
-			});
+			Display.getDefault().asyncExec(this::updateLibrariesList);
 		}
 	}
 
@@ -864,12 +857,7 @@
 
 	private void updateContainerEntry(final IClasspathEntry newEntry, final String[] changedAttributes, final IJavaProject jproject, final IPath containerPath) {
 		try {
-			IWorkspaceRunnable runnable= new IWorkspaceRunnable() {
-				@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-					BuildPathSupport.modifyClasspathEntry(null, newEntry, changedAttributes, jproject, containerPath, false, monitor);
-				}
-			};
+			IWorkspaceRunnable runnable= monitor -> BuildPathSupport.modifyClasspathEntry(null, newEntry, changedAttributes, jproject, containerPath, false, monitor);
 			PlatformUI.getWorkbench().getProgressService().run(true, true, new WorkbenchRunnableAdapter(runnable));
 
 		} catch (InvocationTargetException e) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsDialog.java
index 3b3f25f..a34704b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddExportsDialog.java
@@ -55,12 +55,7 @@
 	public ModuleAddExportsDialog(Shell parent, IJavaElement[] sourceJavaElements, Collection<String> possibleTargetModules, ModuleAddExpose value) {
 		super(parent);
 
-		IStatusChangeListener listener= new IStatusChangeListener() {
-			@Override
-			public void statusChanged(IStatus status) {
-				updateStatus(status);
-			}
-		};
+		IStatusChangeListener listener= this::updateStatus;
 		fAddExportsBlock= new ModuleAddExportsBlock(listener, sourceJavaElements, possibleTargetModules, value);
 
 		setTitle(NewWizardMessages.AddExportsDialog_title);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsDialog.java
index 5d38c0e..40420cf 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleAddReadsDialog.java
@@ -52,12 +52,7 @@
 	public ModuleAddReadsDialog(Shell parent, IJavaElement[] sourceJavaElements, ModuleAddReads value) {
 		super(parent);
 
-		IStatusChangeListener listener= new IStatusChangeListener() {
-			@Override
-			public void statusChanged(IStatus status) {
-				updateStatus(status);
-			}
-		};
+		IStatusChangeListener listener= this::updateStatus;
 		fAddReadsBlock= new ModuleAddReadsBlock(listener, sourceJavaElements, value);
 
 		setTitle(NewWizardMessages.AddReadsDialog_title);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java
index 33be4dc..5d6623c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ModuleDependenciesPage.java
@@ -267,12 +267,7 @@
 		if (Display.getCurrent() != null) {
 			scanModules();
 		} else {
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					scanModules();
-				}
-			});
+			Display.getDefault().asyncExec(this::scanModules);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java
index 1533050..3c55296 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/MultipleFolderSelectionDialog.java
@@ -36,7 +36,6 @@
 
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTreeViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
 import org.eclipse.jface.viewers.IStructuredSelection;
@@ -151,23 +150,20 @@
 	@Override
 	public void create() {
 
-		BusyIndicator.showWhile(null, new Runnable() {
-			@Override
-			public void run() {
-				access$superCreate();
+		BusyIndicator.showWhile(null, () -> {
+			access$superCreate();
 
-				fViewer.setCheckedElements(
-					getInitialElementSelections().toArray());
+			fViewer.setCheckedElements(
+				getInitialElementSelections().toArray());
 
-				fViewer.expandToLevel(2);
-				if (fExisting != null) {
-					for (Object object : fExisting) {
-						fViewer.reveal(object);
-					}
+			fViewer.expandToLevel(2);
+			if (fExisting != null) {
+				for (Object object : fExisting) {
+					fViewer.reveal(object);
 				}
-
-				updateOKStatus();
 			}
+
+			updateOKStatus();
 		});
 
 	}
@@ -183,12 +179,7 @@
 
 		fViewer.setContentProvider(fContentProvider);
 		fViewer.setLabelProvider(fLabelProvider);
-		fViewer.addCheckStateListener(new ICheckStateListener() {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				updateOKStatus();
-			}
-		});
+		fViewer.addCheckStateListener(event -> updateOKStatus());
 
 		fViewer.setComparator(new ResourceComparator(ResourceComparator.NAME));
 		if (fFilters != null) {
@@ -251,12 +242,7 @@
 		if (fFocusElement != null) {
 			treeViewer.setSelection(new StructuredSelection(fFocusElement), true);
 		}
-		treeViewer.addCheckStateListener(new ICheckStateListener() {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent event) {
-				forceExistingChecked(event);
-			}
-		});
+		treeViewer.addCheckStateListener(this::forceExistingChecked);
 
 		applyDialogFont(composite);
 		return composite;
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java
index e8acd01..9ae8bf0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/NativeLibrariesDialog.java
@@ -19,8 +19,6 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 
-import org.eclipse.core.runtime.IStatus;
-
 import org.eclipse.jface.dialogs.StatusDialog;
 
 import org.eclipse.jdt.core.IClasspathEntry;
@@ -38,12 +36,7 @@
 		super(parent);
 		setTitle(NewWizardMessages.NativeLibrariesDialog_title);
 
-		IStatusChangeListener listener= new IStatusChangeListener() {
-			@Override
-			public void statusChanged(IStatus status) {
-				updateStatus(status);
-			}
-		};
+		IStatusChangeListener listener= this::updateStatus;
 
 		fConfigurationBlock= new NativeLibrariesConfigurationBlock(listener, parent, nativeLibPath, parentEntry);
 		setHelpAvailable(false);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
index ad250b9..2ff9fae 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/ProjectsWorkbookPage.java
@@ -111,12 +111,7 @@
 		if (Display.getCurrent() != null) {
 			updateProjectsList();
 		} else {
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					updateProjectsList();
-				}
-			});
+			Display.getDefault().asyncExec(this::updateProjectsList);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
index fd8ae66..d019304 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentBlock.java
@@ -33,7 +33,6 @@
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
 
@@ -718,15 +717,12 @@
 	 * @return return the runnable
 	 */
 	public static IRunnableWithProgress getRunnable(final Shell shell, final IClasspathEntry newEntry, final IJavaProject jproject, final IPath containerPath, final boolean isReferencedEntry) {
-		return new IRunnableWithProgress() {
-			@Override
-			public void run(IProgressMonitor monitor) throws InvocationTargetException {
-				try {
-					String[] changedAttributes= { CPListElement.SOURCEATTACHMENT, CPListElement.SOURCE_ATTACHMENT_ENCODING };
-					BuildPathSupport.modifyClasspathEntry(shell, newEntry, changedAttributes, jproject, containerPath, isReferencedEntry, monitor);
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
-				}
+		return monitor -> {
+			try {
+				String[] changedAttributes= { CPListElement.SOURCEATTACHMENT, CPListElement.SOURCE_ATTACHMENT_ENCODING };
+				BuildPathSupport.modifyClasspathEntry(shell, newEntry, changedAttributes, jproject, containerPath, isReferencedEntry, monitor);
+			} catch (CoreException e) {
+				throw new InvocationTargetException(e);
 			}
 		};
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java
index 45dae83..1e710ff 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceAttachmentDialog.java
@@ -18,8 +18,6 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 
-import org.eclipse.core.runtime.IStatus;
-
 import org.eclipse.jface.dialogs.StatusDialog;
 
 import org.eclipse.ui.PlatformUI;
@@ -61,12 +59,7 @@
 	public SourceAttachmentDialog(Shell parent, IClasspathEntry entry, boolean canEditEncoding) {
 		super(parent);
 
-		IStatusChangeListener listener= new IStatusChangeListener() {
-			@Override
-			public void statusChanged(IStatus status) {
-				updateStatus(status);
-			}
-		};
+		IStatusChangeListener listener= this::updateStatus;
 		fSourceAttachmentBlock= new SourceAttachmentBlock(listener, entry, canEditEncoding);
 
 		setTitle(NewWizardMessages.SourceAttachmentDialog_title);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
index 5ce2c02..536c382 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/SourceContainerWorkbookPage.java
@@ -184,12 +184,7 @@
 		if (Display.getCurrent() != null) {
 			updateFoldersList();
 		} else {
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					updateFoldersList();
-				}
-			});
+			Display.getDefault().asyncExec(this::updateFoldersList);
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java
index 43a237a..5525dbf 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddArchiveToBuildpathAction.java
@@ -99,18 +99,15 @@
             	MessageDialog.openWarning(getShell(), NewWizardMessages.AddArchiveToBuildpathAction_InfoTitle, status.getMessage());
             }
 
-        	final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-        		@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-        			try {
-        				List<IJavaElement> result= addExternalJars(selected, javaProject, monitor);
-        				if (result.size() > 0)
-        					selectAndReveal(new StructuredSelection(result));
-        			} catch (CoreException e) {
-        				throw new InvocationTargetException(e);
-        			}
-        		}
-        	};
+        	final IRunnableWithProgress runnable= monitor -> {
+				try {
+					List<IJavaElement> result= addExternalJars(selected, javaProject, monitor);
+					if (result.size() > 0)
+						selectAndReveal(new StructuredSelection(result));
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
+				}
+			};
         	fContext.run(false, false, runnable);
 		} catch (final InvocationTargetException e) {
 			if (e.getCause() instanceof CoreException) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java
index 8d5780b..6f5c3aa 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddFolderToBuildpathAction.java
@@ -172,15 +172,12 @@
 			}
 
 			try {
-				final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-					@Override
-					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-						try {
-							List<IJavaElement> result= addToClasspath(getSelectedElements(), project, newDefaultOutputLocation.makeAbsolute(), removeProjectFromClasspath, removeOldClassFiles, monitor);
-							selectAndReveal(new StructuredSelection(result));
-						} catch (CoreException e) {
-							throw new InvocationTargetException(e);
-						}
+				final IRunnableWithProgress runnable= monitor -> {
+					try {
+						List<IJavaElement> result= addToClasspath(getSelectedElements(), project, newDefaultOutputLocation.makeAbsolute(), removeProjectFromClasspath, removeOldClassFiles, monitor);
+						selectAndReveal(new StructuredSelection(result));
+					} catch (CoreException e) {
+						throw new InvocationTargetException(e);
 					}
 				};
 				fContext.run(false, false, runnable);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
index 764082d..585e78e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddLibraryToBuildpathAction.java
@@ -90,14 +90,11 @@
 			@Override
 			public boolean performFinish() {
 				if (super.performFinish()) {
-					IWorkspaceRunnable op= new IWorkspaceRunnable() {
-						@Override
-						public void run(IProgressMonitor monitor) throws CoreException, OperationCanceledException {
-							try {
-								finishPage(monitor);
-							} catch (InterruptedException e) {
-								throw new OperationCanceledException(e.getMessage());
-							}
+					IWorkspaceRunnable op= monitor -> {
+						try {
+							finishPage(monitor);
+						} catch (InterruptedException e) {
+							throw new OperationCanceledException(e.getMessage());
 						}
 					};
 					try {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
index 88ed5ed..5017ad6 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/AddSelectedLibraryToBuildpathAction.java
@@ -103,16 +103,13 @@
 		try {
 			final IFile[] files= getSelectedElements().toArray(new IFile[getSelectedElements().size()]);
 
-			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					try {
-				        IJavaProject project= JavaCore.create(files[0].getProject());
-				        List<IJavaElement> result= addLibraryEntries(files, project, monitor);
-						selectAndReveal(new StructuredSelection(result));
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e);
-					}
+			final IRunnableWithProgress runnable= monitor -> {
+				try {
+			        IJavaProject project= JavaCore.create(files[0].getProject());
+			        List<IJavaElement> result= addLibraryEntries(files, project, monitor);
+					selectAndReveal(new StructuredSelection(result));
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
 				}
 			};
 			fContext.run(false, false, runnable);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
index 8098be9..7fc6973 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/BuildpathModifierAction.java
@@ -188,12 +188,7 @@
 			if (target != null) {
 				// select and reveal resource
 				final ISetSelectionTarget finalTarget= target;
-				page.getWorkbenchWindow().getShell().getDisplay().asyncExec(new Runnable() {
-					@Override
-					public void run() {
-						finalTarget.selectReveal(selection);
-					}
-				});
+				page.getWorkbenchWindow().getShell().getDisplay().asyncExec(() -> finalTarget.selectReveal(selection));
 			}
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java
index a947481..2a7f1a9 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ClasspathModifierQueries.java
@@ -376,37 +376,34 @@
                 final boolean[] result= { false };
                 fRemoveProject= false;
                 fOutputLocation= project.getOutputLocation();
-				Display.getDefault().syncExec(new Runnable() {
-					@Override
-					public void run() {
-						Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
+				Display.getDefault().syncExec(() -> {
+					Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
 
-						String title= NewWizardMessages.ClasspathModifier_ChangeOutputLocationDialog_title;
+					String title= NewWizardMessages.ClasspathModifier_ChangeOutputLocationDialog_title;
 
-						if (fDesiredOutputLocation.segmentCount() == 1) {
-							String outputFolderName= PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME);
-							IPath newOutputFolder= fDesiredOutputLocation.append(outputFolderName);
-							newOutputFolder= getValidPath(newOutputFolder, validator);
-							String message= Messages.format(NewWizardMessages.ClasspathModifier_ChangeOutputLocationDialog_project_outputLocation, BasicElementLabels.getPathLabel(newOutputFolder, false));
-							fRemoveProject= true;
-							if (MessageDialog.openConfirm(sh, title, message)) {
-								fOutputLocation= newOutputFolder;
-								result[0]= true;
-							}
-						} else {
-							IPath newOutputFolder= fDesiredOutputLocation;
-							newOutputFolder= getValidPath(newOutputFolder, validator);
-							if (editingOutputFolder) {
-								fOutputLocation= newOutputFolder;
-								result[0]= true;
-								return; // show no dialog
-							}
-							String message= NewWizardMessages.ClasspathModifier_ChangeOutputLocationDialog_project_message;
-							fRemoveProject= true;
-							if (MessageDialog.openQuestion(sh, title, message)) {
-								fOutputLocation= newOutputFolder;
-								result[0]= true;
-							}
+					if (fDesiredOutputLocation.segmentCount() == 1) {
+						String outputFolderName= PreferenceConstants.getPreferenceStore().getString(PreferenceConstants.SRCBIN_BINNAME);
+						IPath newOutputFolder1= fDesiredOutputLocation.append(outputFolderName);
+						newOutputFolder1= getValidPath(newOutputFolder1, validator);
+						String message1= Messages.format(NewWizardMessages.ClasspathModifier_ChangeOutputLocationDialog_project_outputLocation, BasicElementLabels.getPathLabel(newOutputFolder1, false));
+						fRemoveProject= true;
+						if (MessageDialog.openConfirm(sh, title, message1)) {
+							fOutputLocation= newOutputFolder1;
+							result[0]= true;
+						}
+					} else {
+						IPath newOutputFolder2= fDesiredOutputLocation;
+						newOutputFolder2= getValidPath(newOutputFolder2, validator);
+						if (editingOutputFolder) {
+							fOutputLocation= newOutputFolder2;
+							result[0]= true;
+							return; // show no dialog
+						}
+						String message2= NewWizardMessages.ClasspathModifier_ChangeOutputLocationDialog_project_message;
+						fRemoveProject= true;
+						if (MessageDialog.openQuestion(sh, title, message2)) {
+							fOutputLocation= newOutputFolder2;
+							result[0]= true;
 						}
 					}
 				});
@@ -454,15 +451,12 @@
 			@Override
 			public boolean doQuery(final CPListElement element, final boolean focusOnExcluded) {
 				final boolean[] result= { false };
-				Display.getDefault().syncExec(new Runnable() {
-					@Override
-					public void run() {
-						Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
-						ExclusionInclusionDialog dialog= new ExclusionInclusionDialog(sh, element, focusOnExcluded);
-						result[0]= dialog.open() == Window.OK;
-						fInclusionPattern= dialog.getInclusionPattern();
-						fExclusionPattern= dialog.getExclusionPattern();
-					}
+				Display.getDefault().syncExec(() -> {
+					Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
+					ExclusionInclusionDialog dialog= new ExclusionInclusionDialog(sh, element, focusOnExcluded);
+					result[0]= dialog.open() == Window.OK;
+					fInclusionPattern= dialog.getInclusionPattern();
+					fExclusionPattern= dialog.getExclusionPattern();
 				});
 				return result[0];
 			}
@@ -490,23 +484,16 @@
      * @see IAddArchivesQuery
      */
     public static IAddArchivesQuery getDefaultArchivesQuery(final Shell shell) {
-        return new IAddArchivesQuery() {
-
-            @Override
-			public IPath[] doQuery() {
-                final IPath[][] selected= {null};
-                Display.getDefault().syncExec(new Runnable() {
-                    @Override
-					public void run() {
-                        Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
-                        selected[0]= BuildPathDialogAccess.chooseExternalJAREntries(sh);
-                    }
-                });
-                if(selected[0] == null)
-                    return new IPath[0];
-                return selected[0];
-            }
-        };
+        return () -> {
+		    final IPath[][] selected= {null};
+		    Display.getDefault().syncExec(() -> {
+			    Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
+			    selected[0]= BuildPathDialogAccess.chooseExternalJAREntries(sh);
+			});
+		    if(selected[0] == null)
+		        return new IPath[0];
+		    return selected[0];
+		};
     }
 
     /**
@@ -518,25 +505,17 @@
 	 * @see IRemoveLinkedFolderQuery
 	 */
 	public static IRemoveLinkedFolderQuery getDefaultRemoveLinkedFolderQuery(final Shell shell) {
-		return new IRemoveLinkedFolderQuery() {
-
-			@Override
-			public final int doQuery(final IFolder folder) {
-				final int[] result= { IRemoveLinkedFolderQuery.REMOVE_BUILD_PATH};
-				Display.getDefault().syncExec(new Runnable() {
-
-					@Override
-					public final void run() {
-						final RemoveLinkedFolderDialog dialog= new RemoveLinkedFolderDialog((shell != null ? shell : JavaPlugin.getActiveWorkbenchShell()), folder);
-						final int status= dialog.open();
-						if (status == 0)
-							result[0]= dialog.getRemoveStatus();
-						else
-							result[0]= IRemoveLinkedFolderQuery.REMOVE_CANCEL;
-					}
-				});
-				return result[0];
-			}
+		return folder -> {
+			final int[] result= { IRemoveLinkedFolderQuery.REMOVE_BUILD_PATH};
+			Display.getDefault().syncExec(() -> {
+				final RemoveLinkedFolderDialog dialog= new RemoveLinkedFolderDialog((shell != null ? shell : JavaPlugin.getActiveWorkbenchShell()), folder);
+				final int status= dialog.open();
+				if (status == 0)
+					result[0]= dialog.getRemoveStatus();
+				else
+					result[0]= IRemoveLinkedFolderQuery.REMOVE_CANCEL;
+			});
+			return result[0];
 		};
 	}
 
@@ -551,23 +530,16 @@
      * been cancelled by the user.
      */
     public static IAddLibrariesQuery getDefaultLibrariesQuery(final Shell shell) {
-        return new IAddLibrariesQuery() {
-
-            @Override
-			public IClasspathEntry[] doQuery(final IJavaProject project, final IClasspathEntry[] entries) {
-                final IClasspathEntry[][] selected= {null};
-                Display.getDefault().syncExec(new Runnable() {
-                    @Override
-					public void run() {
-                        Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
-                        selected[0]= BuildPathDialogAccess.chooseContainerEntries(sh, project, entries);
-                    }
-                });
-                if(selected[0] == null)
-                    return new IClasspathEntry[0];
-                return selected[0];
-            }
-        };
+        return (project, entries) -> {
+		    final IClasspathEntry[][] selected= {null};
+		    Display.getDefault().syncExec(() -> {
+			    Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
+			    selected[0]= BuildPathDialogAccess.chooseContainerEntries(sh, project, entries);
+			});
+		    if(selected[0] == null)
+		        return new IClasspathEntry[0];
+		    return selected[0];
+		};
     }
 
     /**
@@ -585,23 +557,20 @@
 			@Override
 			public boolean doQuery() {
 				final boolean[] isOK= {false};
-                Display.getDefault().syncExec(new Runnable() {
-                    @Override
-					public void run() {
-                        Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
+                Display.getDefault().syncExec(() -> {
+				    Shell sh= shell != null ? shell : JavaPlugin.getActiveWorkbenchShell();
 
-                        NewFolderDialog dialog= new NewFolderDialog(sh, project.getProject());
-                        isOK[0]= dialog.open() == Window.OK;
-                        if (isOK[0]) {
-                        	IResource sourceContainer= (IResource) dialog.getResult()[0];
-                        	if (sourceContainer instanceof IFolder) {
-                        		fNewFolder= (IFolder)sourceContainer;
-                        	} else {
-                        		fNewFolder= null;
-                        	}
-                        }
-                    }
-                });
+				    NewFolderDialog dialog= new NewFolderDialog(sh, project.getProject());
+				    isOK[0]= dialog.open() == Window.OK;
+				    if (isOK[0]) {
+				    	IResource sourceContainer= (IResource) dialog.getResult()[0];
+				    	if (sourceContainer instanceof IFolder) {
+				    		fNewFolder= (IFolder)sourceContainer;
+				    	} else {
+				    		fNewFolder= null;
+				    	}
+				    }
+				});
                 return isOK[0];
 			}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java
index 9736bd5..76fbdac 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/DialogPackageExplorer.java
@@ -18,8 +18,6 @@
 import java.util.List;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.graphics.Color;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
@@ -28,7 +26,6 @@
 import org.eclipse.swt.widgets.Menu;
 
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.NullProgressMonitor;
 
 import org.eclipse.core.resources.IFile;
@@ -41,8 +38,6 @@
 import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.viewers.DoubleClickEvent;
-import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.IPostSelectionProvider;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
@@ -347,34 +342,26 @@
         fPackageViewer.setComparer(WorkingSetModel.COMPARER);
         fPackageViewer.addFilter(new PackageFilter());
         fPackageViewer.setComparator(new ExtendedJavaElementSorter());
-        fPackageViewer.addDoubleClickListener(new IDoubleClickListener() {
-            @Override
-			public void doubleClick(DoubleClickEvent event) {
-                Object element= ((IStructuredSelection)event.getSelection()).getFirstElement();
-                if (fPackageViewer.isExpandable(element)) {
-                    fPackageViewer.setExpandedState(element, !fPackageViewer.getExpandedState(element));
-                } else {
-                	if (element instanceof CPListElementAttribute) {
-						CPListElementAttribute attribute= (CPListElementAttribute)element;
-                		if (attribute.getKey().equals(CPListElement.OUTPUT)) {
-                			fActionGroup.getEditOutputFolderAction().run();
-                		}
-                	}
-                }
-            }
-        });
+        fPackageViewer.addDoubleClickListener(event -> {
+		    Object element= ((IStructuredSelection)event.getSelection()).getFirstElement();
+		    if (fPackageViewer.isExpandable(element)) {
+		        fPackageViewer.setExpandedState(element, !fPackageViewer.getExpandedState(element));
+		    } else {
+		    	if (element instanceof CPListElementAttribute) {
+					CPListElementAttribute attribute= (CPListElementAttribute)element;
+		    		if (attribute.getKey().equals(CPListElement.OUTPUT)) {
+		    			fActionGroup.getEditOutputFolderAction().run();
+		    		}
+		    	}
+		    }
+		});
 
         MenuManager menuMgr= new MenuManager("#PopupMenu"); //$NON-NLS-1$
         menuMgr.setRemoveAllWhenShown(true);
         menuMgr.addMenuListener(this);
         fContextMenu= menuMgr.createContextMenu(fPackageViewer.getTree());
         fPackageViewer.getTree().setMenu(fContextMenu);
-        parent.addDisposeListener(new DisposeListener() {
-            @Override
-			public void widgetDisposed(DisposeEvent e) {
-                fContextMenu.dispose();
-            }
-        });
+        parent.addDisposeListener(e -> fContextMenu.dispose());
 
         return fPackageViewer.getControl();
     }
@@ -461,18 +448,15 @@
         if (elements == null || elements.isEmpty())
             return;
 		try {
-	        ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() {
-	        	@Override
-				public void run(IProgressMonitor monitor) throws CoreException {
-	        		fPackageViewer.refresh();
-	                IStructuredSelection selection= new StructuredSelection(elements);
-	                fPackageViewer.setSelection(selection, true);
-	                fPackageViewer.getTree().setFocus();
+	        ResourcesPlugin.getWorkspace().run((IWorkspaceRunnable) monitor -> {
+				fPackageViewer.refresh();
+			    IStructuredSelection selection= new StructuredSelection(elements);
+			    fPackageViewer.setSelection(selection, true);
+			    fPackageViewer.getTree().setFocus();
 
-	                if (elements.size() == 1 && elements.get(0) instanceof IJavaProject)
-	                    fPackageViewer.expandToLevel(elements.get(0), 1);
-	            }
-	        }, ResourcesPlugin.getWorkspace().getRoot(), IWorkspace.AVOID_UPDATE, new NullProgressMonitor());
+			    if (elements.size() == 1 && elements.get(0) instanceof IJavaProject)
+			        fPackageViewer.expandToLevel(elements.get(0), 1);
+			}, ResourcesPlugin.getWorkspace().getRoot(), IWorkspace.AVOID_UPDATE, new NullProgressMonitor());
         } catch (CoreException e) {
 	        JavaPlugin.log(e);
         }
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
index e3c4041..810ce7e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/EditOutputFolderAction.java
@@ -21,7 +21,6 @@
 
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.SubProgressMonitor;
 
 import org.eclipse.core.resources.IFolder;
@@ -149,24 +148,21 @@
         	}
 
 			try {
-				final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-					@Override
-					public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-						try {
-                        	monitor.beginTask(NewWizardMessages.EditOutputFolderAction_ProgressMonitorDescription, 50 + (folderToDelete == null?0:10));
+				final IRunnableWithProgress runnable= monitor -> {
+					try {
+				    	monitor.beginTask(NewWizardMessages.EditOutputFolderAction_ProgressMonitorDescription, 50 + (folderToDelete == null?0:10));
 
-                        	ClasspathModifier.commitClassPath(cpProject, new SubProgressMonitor(monitor, 50));
-                        	if (folderToDelete != null)
-                                folderToDelete.delete(true, new SubProgressMonitor(monitor, 10));
+				    	ClasspathModifier.commitClassPath(cpProject, new SubProgressMonitor(monitor, 50));
+				    	if (folderToDelete != null)
+				            folderToDelete.delete(true, new SubProgressMonitor(monitor, 10));
 
-                        	informListeners(delta);
-                        	selectAndReveal(new StructuredSelection(JavaCore.create(element.getResource())));
-						} catch (CoreException e) {
-							throw new InvocationTargetException(e);
-						} finally {
-                        	monitor.done();
-                        }
-					}
+				    	informListeners(delta);
+				    	selectAndReveal(new StructuredSelection(JavaCore.create(element.getResource())));
+					} catch (CoreException e) {
+						throw new InvocationTargetException(e);
+					} finally {
+				    	monitor.done();
+				    }
 				};
 				fContext.run(false, false, runnable);
 			} catch (final InvocationTargetException e) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java
index be3ee66..5d6b595 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ExcludeFromBuildpathAction.java
@@ -106,15 +106,12 @@
         }
 
         try {
-			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					try {
-				        List<IResource> result= exclude(getSelectedElements(), project, monitor);
-				        selectAndReveal(new StructuredSelection(result));
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e);
-					}
+			final IRunnableWithProgress runnable= monitor -> {
+				try {
+			        List<IResource> result= exclude(getSelectedElements(), project, monitor);
+			        selectAndReveal(new StructuredSelection(result));
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
 				}
 			};
 			fContext.run(false, false, runnable);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java
index f8744b2..0dd11b5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/GenerateBuildPathActionGroup.java
@@ -18,7 +18,6 @@
 
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.IMenuListener;
 import org.eclipse.jface.action.IMenuManager;
 import org.eclipse.jface.action.MenuManager;
 import org.eclipse.jface.action.Separator;
@@ -225,12 +224,7 @@
         	return;
         String menuText= ActionMessages.BuildPath_label;
         IMenuManager subMenu= new MenuManager(menuText, MENU_ID);
-        subMenu.addMenuListener(new IMenuListener() {
-        	@Override
-			public void menuAboutToShow(IMenuManager manager) {
-        		fillViewSubMenu(manager);
-        	}
-        });
+        subMenu.addMenuListener(this::fillViewSubMenu);
         subMenu.setRemoveAllWhenShown(true);
         subMenu.add(new ConfigureBuildPathAction(fSite));
         menu.appendToGroup(fGroupName, subMenu);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java
index c9b9bf5..0885547 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/HintTextGroup.java
@@ -21,8 +21,6 @@
 import java.util.List;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.layout.GridLayout;
@@ -89,17 +87,14 @@
         fTopComposite.setLayout(gridLayout);
         fTopComposite.setLayoutData(gridData);
         fTopComposite.setData(null);
-        fTopComposite.addDisposeListener(new DisposeListener() {
-            @Override
-			public void widgetDisposed(DisposeEvent e) {
-                Collection<Image> collection= fImageMap.values();
-                Iterator<Image> iterator= collection.iterator();
-                while(iterator.hasNext()) {
-                    Image image= iterator.next();
-                    image.dispose();
-                }
-            }
-        });
+        fTopComposite.addDisposeListener(e -> {
+		    Collection<Image> collection= fImageMap.values();
+		    Iterator<Image> iterator= collection.iterator();
+		    while(iterator.hasNext()) {
+		        Image image= iterator.next();
+		        image.dispose();
+		    }
+		});
         return fTopComposite;
     }
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java
index 70cfe8d..4fb7565 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/IncludeToBuildpathAction.java
@@ -100,15 +100,12 @@
 		final IJavaProject project= JavaCore.create(resource.getProject());
 
 		try {
-			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					try {
-						List<?> result= unExclude(getSelectedElements(), project, monitor);
-						selectAndReveal(new StructuredSelection(result));
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e);
-					}
+			final IRunnableWithProgress runnable= monitor -> {
+				try {
+					List<?> result= unExclude(getSelectedElements(), project, monitor);
+					selectAndReveal(new StructuredSelection(result));
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
 				}
 			};
 			fContext.run(false, false, runnable);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
index 1917b37..1484bb2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/NewSourceContainerWorkbookPage.java
@@ -62,7 +62,6 @@
 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElement;
 import org.eclipse.jdt.internal.ui.wizards.buildpaths.CPListElementAttribute;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField;
-import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.LayoutUtil;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.ListDialogField;
 import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField;
@@ -140,12 +139,7 @@
 		if (Display.getCurrent() != null) {
 			doUpdateUI();
 		} else {
-			Display.getDefault().asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					doUpdateUI();
-				}
-			});
+			Display.getDefault().asyncExec(this::doUpdateUI);
 		}
     }
 
@@ -243,36 +237,28 @@
 
 		fCreateModuleInfoFileButton.doFillIntoGrid(body, 1);
 
-		fCreateModuleInfoFileButton.setDialogFieldListener(new IDialogFieldListener() {
-			@Override
-			public void dialogFieldChanged(DialogField field) {
-				fCreateModuleInfoFile= fCreateModuleInfoFileButton.isSelected();
-			}
-		});
+		fCreateModuleInfoFileButton.setDialogFieldListener(field -> fCreateModuleInfoFile= fCreateModuleInfoFileButton.isSelected());
 
 
         fActionGroup= new DialogPackageExplorerActionGroup(fHintTextGroup, fContext, fPackageExplorer, this);
 		fActionGroup.addBuildpathModifierListener(this);
 
 
-        fUseFolderOutputs.setDialogFieldListener(new IDialogFieldListener() {
-            @Override
-			public void dialogFieldChanged(DialogField field) {
-                boolean isUseFolders= fUseFolderOutputs.isSelected();
-                if (!isUseFolders) {
-                	ResetAllOutputFoldersAction action= new ResetAllOutputFoldersAction(fContext, fJavaProject, fPackageExplorer) {
-                		@Override
-						public void run() {
-                    		commitDefaultOutputFolder();
-                    	    super.run();
-                    	}
-                	};
-                	action.addBuildpathModifierListener(NewSourceContainerWorkbookPage.this);
-                	action.run();
-                }
-				fPackageExplorer.showOutputFolders(isUseFolders);
-            }
-        });
+        fUseFolderOutputs.setDialogFieldListener(field -> {
+		    boolean isUseFolders= fUseFolderOutputs.isSelected();
+		    if (!isUseFolders) {
+		    	ResetAllOutputFoldersAction action= new ResetAllOutputFoldersAction(fContext, fJavaProject, fPackageExplorer) {
+		    		@Override
+					public void run() {
+		        		commitDefaultOutputFolder();
+		        	    super.run();
+		        	}
+		    	};
+		    	action.addBuildpathModifierListener(NewSourceContainerWorkbookPage.this);
+		    	action.run();
+		    }
+			fPackageExplorer.showOutputFolders(isUseFolders);
+		});
 
         Composite outputLocation= new Composite(body, SWT.NONE);
         outputLocation.setLayout(new GridLayout(2, false));
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
index 0625d14..1a92ee0 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/RemoveFromBuildpathAction.java
@@ -128,45 +128,42 @@
 			final List<IFolder> foldersToDelete= new ArrayList<>();
 			queryToRemoveLinkedFolders(elementsToRemove, foldersToDelete);
 
-			final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					try {
-						monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_RemoveFromBuildpath, foldersToDelete.size() + 10);
+			final IRunnableWithProgress runnable= monitor -> {
+				try {
+					monitor.beginTask(NewWizardMessages.ClasspathModifier_Monitor_RemoveFromBuildpath, foldersToDelete.size() + 10);
 
-						CPJavaProject cpProject= CPJavaProject.createFromExisting(project);
-						CPListElement[] toRemove= new CPListElement[elementsToRemove.size()];
-						int i= 0;
-						for (Object element : elementsToRemove) {
-							if (element instanceof IJavaProject) {
-								toRemove[i]= ClasspathModifier.getListElement(((IJavaProject)element).getPath(), cpProject.getCPListElements());
-							} else if (element instanceof IPackageFragmentRoot) {
-								toRemove[i]= CPListElement.createFromExisting(((IPackageFragmentRoot)element).getRawClasspathEntry(), project);
-							} else {
-								toRemove[i]= CPListElement.createFromExisting(((ClassPathContainer)element).getClasspathEntry(), project);
-							}
-							i++;
-						}
-
-						BuildpathDelta delta= ClasspathModifier.removeFromBuildpath(toRemove, cpProject);
-						ClasspathModifier.commitClassPath(cpProject, new SubProgressMonitor(monitor, 10));
-
-						deleteFolders(foldersToDelete, new SubProgressMonitor(monitor, foldersToDelete.size()));
-
-						informListeners(delta);
-
-						if (delta.getDeletedResources().length == foldersToDelete.size()) {
-							selectAndReveal(new StructuredSelection(project));
+					CPJavaProject cpProject= CPJavaProject.createFromExisting(project);
+					CPListElement[] toRemove= new CPListElement[elementsToRemove.size()];
+					int i= 0;
+					for (Object element : elementsToRemove) {
+						if (element instanceof IJavaProject) {
+							toRemove[i]= ClasspathModifier.getListElement(((IJavaProject)element).getPath(), cpProject.getCPListElements());
+						} else if (element instanceof IPackageFragmentRoot) {
+							toRemove[i]= CPListElement.createFromExisting(((IPackageFragmentRoot)element).getRawClasspathEntry(), project);
 						} else {
-							List<IResource> result= new ArrayList<>(Arrays.asList(delta.getDeletedResources()));
-							result.removeAll(foldersToDelete);
-							selectAndReveal(new StructuredSelection(result));
+							toRemove[i]= CPListElement.createFromExisting(((ClassPathContainer)element).getClasspathEntry(), project);
 						}
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e);
-					} finally {
-						monitor.done();
+						i++;
 					}
+
+					BuildpathDelta delta= ClasspathModifier.removeFromBuildpath(toRemove, cpProject);
+					ClasspathModifier.commitClassPath(cpProject, new SubProgressMonitor(monitor, 10));
+
+					deleteFolders(foldersToDelete, new SubProgressMonitor(monitor, foldersToDelete.size()));
+
+					informListeners(delta);
+
+					if (delta.getDeletedResources().length == foldersToDelete.size()) {
+						selectAndReveal(new StructuredSelection(project));
+					} else {
+						List<IResource> result= new ArrayList<>(Arrays.asList(delta.getDeletedResources()));
+						result.removeAll(foldersToDelete);
+						selectAndReveal(new StructuredSelection(result));
+					}
+				} catch (CoreException e) {
+					throw new InvocationTargetException(e);
+				} finally {
+					monitor.done();
 				}
 			};
 			fContext.run(false, false, runnable);
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java
index cacde3d..e810fdc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAction.java
@@ -95,25 +95,22 @@
 
 	@Override
 	public void run() {
-		final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-			@Override
-			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-				try {
-					Object firstElement= getSelectedElements().get(0);
-					IJavaProject project= null;
-					if (firstElement instanceof IJavaProject) {
-						project= (IJavaProject)firstElement;
-					} else if (firstElement instanceof IPackageFragmentRoot) {
-						project= ((IPackageFragmentRoot)firstElement).getJavaProject();
-					} else {
-						project= ((CPListElementAttribute)firstElement).getParent().getJavaProject();
-					}
-
-					List<Object> result= reset(getSelectedElements(), project, monitor);
-					selectAndReveal(new StructuredSelection(result));
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
+		final IRunnableWithProgress runnable= monitor -> {
+			try {
+				Object firstElement= getSelectedElements().get(0);
+				IJavaProject project= null;
+				if (firstElement instanceof IJavaProject) {
+					project= (IJavaProject)firstElement;
+				} else if (firstElement instanceof IPackageFragmentRoot) {
+					project= ((IPackageFragmentRoot)firstElement).getJavaProject();
+				} else {
+					project= ((CPListElementAttribute)firstElement).getParent().getJavaProject();
 				}
+
+				List<Object> result= reset(getSelectedElements(), project, monitor);
+				selectAndReveal(new StructuredSelection(result));
+			} catch (CoreException e) {
+				throw new InvocationTargetException(e);
 			}
 		};
 		try {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
index 7fe9f76..d08f589 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllAction.java
@@ -18,7 +18,6 @@
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
-import org.eclipse.core.runtime.IProgressMonitor;
 
 import org.eclipse.core.resources.IResource;
 
@@ -109,40 +108,37 @@
 	public void run() {
 
 		try {
-	        final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-	        	@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+	        final IRunnableWithProgress runnable= monitor -> {
 
-        			monitor.beginTask("", 3); //$NON-NLS-1$
-	        		try {
-	        			if (!hasChange(fJavaProject))
-	        				return;
+				monitor.beginTask("", 3); //$NON-NLS-1$
+				try {
+					if (!hasChange(fJavaProject))
+						return;
 
-	        			BuildpathDelta delta= new BuildpathDelta(getToolTipText());
+					BuildpathDelta delta= new BuildpathDelta(getToolTipText());
 
-	        			ClasspathModifier.commitClassPath(fEntries, fJavaProject, monitor);
-        				delta.setNewEntries(fEntries.toArray(new CPListElement[fEntries.size()]));
+					ClasspathModifier.commitClassPath(fEntries, fJavaProject, monitor);
+					delta.setNewEntries(fEntries.toArray(new CPListElement[fEntries.size()]));
 
-	        			fJavaProject.setOutputLocation(fOutputLocation, monitor);
-	        			delta.setDefaultOutputLocation(fOutputLocation);
+					fJavaProject.setOutputLocation(fOutputLocation, monitor);
+					delta.setDefaultOutputLocation(fOutputLocation);
 
-						for (IResource resource : fProvider.getCreatedResources()) {
-							resource.delete(false, null);
-							delta.addDeletedResource(resource);
-						}
+					for (IResource resource : fProvider.getCreatedResources()) {
+						resource.delete(false, null);
+						delta.addDeletedResource(resource);
+					}
 
-	        			fProvider.resetCreatedResources();
+					fProvider.resetCreatedResources();
 
-	                    informListeners(delta);
+			        informListeners(delta);
 
-	            		selectAndReveal(new StructuredSelection(fJavaProject));
-	                } catch (CoreException e) {
-	                    showExceptionDialog(e, NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_ClearAll_tooltip);
-                    } finally {
-	                	monitor.done();
-	                }
-	        	}
-	        };
+					selectAndReveal(new StructuredSelection(fJavaProject));
+			    } catch (CoreException e) {
+			        showExceptionDialog(e, NewWizardMessages.NewSourceContainerWorkbookPage_ToolBar_ClearAll_tooltip);
+			    } finally {
+			    	monitor.done();
+			    }
+			};
 	        fContext.run(false, false, runnable);
         } catch (InvocationTargetException e) {
 			if (e.getCause() instanceof CoreException) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
index edd885a..73a945d 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/buildpaths/newsourcepage/ResetAllOutputFoldersAction.java
@@ -70,14 +70,11 @@
 
 	@Override
 	public void run() {
-		final IRunnableWithProgress runnable= new IRunnableWithProgress() {
-			@Override
-			public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-				try {
-					resetOutputFolders(fJavaProject, monitor);
-				} catch (CoreException e) {
-					throw new InvocationTargetException(e);
-				}
+		final IRunnableWithProgress runnable= monitor -> {
+			try {
+				resetOutputFolders(fJavaProject, monitor);
+			} catch (CoreException e) {
+				throw new InvocationTargetException(e);
 			}
 		};
 		try {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
index ff1faac..2452ffa 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/CheckedListDialogField.java
@@ -26,7 +26,6 @@
 
 import org.eclipse.jface.viewers.CheckStateChangedEvent;
 import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ICheckStateListener;
 import org.eclipse.jface.viewers.ILabelProvider;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.TableViewer;
@@ -88,12 +87,7 @@
 		Table table= new Table(parent, SWT.CHECK | getListStyle());
 		table.setFont(parent.getFont());
 		CheckboxTableViewer tableViewer= new CheckboxTableViewer(table);
-		tableViewer.addCheckStateListener(new ICheckStateListener() {
-			@Override
-			public void checkStateChanged(CheckStateChangedEvent e) {
-				doCheckStateChanged(e);
-			}
-		});
+		tableViewer.addCheckStateListener(e -> doCheckStateChanged(e));
 		return tableViewer;
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java
index 65f5460..b9c64bc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ComboDialogField.java
@@ -101,12 +101,7 @@
 	public Combo getComboControl(Composite parent) {
 		if (fComboControl == null) {
 			assertCompositeNotNull(parent);
-			fModifyListener= new ModifyListener() {
-				@Override
-				public void modifyText(ModifyEvent e) {
-					doModifyText(e);
-				}
-			};
+			fModifyListener= this::doModifyText;
 			SelectionListener selectionListener= new SelectionListener() {
 				@Override
 				public void widgetSelected(SelectionEvent e) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/DialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/DialogField.java
index 0fcfbe1..0b34f61 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/DialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/DialogField.java
@@ -98,12 +98,7 @@
 	public void postSetFocusOnDialogField(Display display) {
 		if (display != null) {
 			display.asyncExec(
-				new Runnable() {
-					@Override
-					public void run() {
-						setFocus();
-					}
-				}
+				this::setFocus
 			);
 		}
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java
index 7989014..414181b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/ListDialogField.java
@@ -798,12 +798,9 @@
 	public void postSetSelection(final ISelection selection) {
 		if (isOkToUse(fTableControl)) {
 			Display d= fTableControl.getDisplay();
-			d.asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					if (isOkToUse(fTableControl)) {
-						selectElements(selection);
-					}
+			d.asyncExec(() -> {
+				if (isOkToUse(fTableControl)) {
+					selectElements(selection);
 				}
 			});
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java
index fee3de8..9fd5382 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/StringDialogField.java
@@ -15,7 +15,6 @@
 package org.eclipse.jdt.internal.ui.wizards.dialogfields;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
@@ -128,12 +127,7 @@
 	public Text getTextControl(Composite parent) {
 		if (fTextControl == null) {
 			assertCompositeNotNull(parent);
-			fModifyListener= new ModifyListener() {
-				@Override
-				public void modifyText(ModifyEvent e) {
-					doModifyText();
-				}
-			};
+			fModifyListener= e -> doModifyText();
 
 			fTextControl= createTextControl(parent);
 			// moved up due to 1GEUNW2
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java
index 039aacc..b7f2ba2 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TextBoxDialogField.java
@@ -15,8 +15,6 @@
 package org.eclipse.jdt.internal.ui.wizards.dialogfields;
 
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.TraverseEvent;
-import org.eclipse.swt.events.TraverseListener;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Text;
 
@@ -32,25 +30,22 @@
 	@Override
 	protected Text createTextControl(Composite parent) {
 		Text text= new Text(parent, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
-		text.addTraverseListener(new TraverseListener() {
-			@Override
-			public void keyTraversed(TraverseEvent event) {
-				switch (event.detail) {
-					case SWT.TRAVERSE_ESCAPE:
-					case SWT.TRAVERSE_PAGE_NEXT:
-					case SWT.TRAVERSE_PAGE_PREVIOUS:
+		text.addTraverseListener(event -> {
+			switch (event.detail) {
+				case SWT.TRAVERSE_ESCAPE:
+				case SWT.TRAVERSE_PAGE_NEXT:
+				case SWT.TRAVERSE_PAGE_PREVIOUS:
+					event.doit= true;
+					break;
+				case SWT.TRAVERSE_RETURN:
+				case SWT.TRAVERSE_TAB_NEXT:
+				case SWT.TRAVERSE_TAB_PREVIOUS:
+					if ((event.stateMask & SWT.MODIFIER_MASK) != 0) {
 						event.doit= true;
-						break;
-					case SWT.TRAVERSE_RETURN:
-					case SWT.TRAVERSE_TAB_NEXT:
-					case SWT.TRAVERSE_TAB_PREVIOUS:
-						if ((event.stateMask & SWT.MODIFIER_MASK) != 0) {
-							event.doit= true;
-						}
-						break;
-				}
-
+					}
+					break;
 			}
+
 		});
 		return text;
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java
index 0201592..21b361a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/wizards/dialogfields/TreeListDialogField.java
@@ -712,12 +712,9 @@
 	public void postSetSelection(final ISelection selection) {
 		if (isOkToUse(fTreeControl)) {
 			Display d= fTreeControl.getDisplay();
-			d.asyncExec(new Runnable() {
-				@Override
-				public void run() {
-					if (isOkToUse(fTreeControl)) {
-						selectElements(selection);
-					}
+			d.asyncExec(() -> {
+				if (isOkToUse(fTreeControl)) {
+					selectElements(selection);
 				}
 			});
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
index 3300d11..750d6af 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetFilterActionGroup.java
@@ -82,7 +82,7 @@
 		fSelectWorkingSetAction= new SelectWorkingSetAction(this, site);
 		fEditWorkingSetAction= new EditWorkingSetAction(this, site);
 
-		fWorkingSetListener= event -> doPropertyChange(event);
+		fWorkingSetListener= this::doPropertyChange;
 		fWorkingSetFilter= new WorkingSetFilter();
 
 		IWorkingSetManager manager= PlatformUI.getWorkbench().getWorkingSetManager();
@@ -104,7 +104,7 @@
 		fSelectWorkingSetAction= new SelectWorkingSetAction(this, shell);
 		fEditWorkingSetAction= new EditWorkingSetAction(this, shell);
 
-		fWorkingSetListener= event -> doPropertyChange(event);
+		fWorkingSetListener= this::doPropertyChange;
 
 		fWorkingSetFilter= new WorkingSetFilter();
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
index a89492c..ff0a1b5 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/workingsets/WorkingSetModel.java
@@ -278,7 +278,7 @@
 
 	private void addListenersToWorkingSetManagers() {
 		fListeners= new ListenerList<>(ListenerList.IDENTITY);
-		fWorkingSetManagerListener= event -> workingSetManagerChanged(event);
+		fWorkingSetManagerListener= this::workingSetManagerChanged;
 		PlatformUI.getWorkbench().getWorkingSetManager().addPropertyChangeListener(fWorkingSetManagerListener);
 		fLocalWorkingSetManager.addPropertyChangeListener(fWorkingSetManagerListener);
 	}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java
index 60eb604..a45c46a 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/ExternalizeStringsAction.java
@@ -409,10 +409,7 @@
 				result+= countNonExternalizedStrings(line);
 			}
 			return result;
-		} catch (InvalidInputException e) {
-			throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR,
-					Messages.format(ActionMessages.FindStringsToExternalizeAction_error_cannotBeParsed, BasicElementLabels.getFileName(cu)), e));
-		} catch (BadLocationException e) {
+		} catch (InvalidInputException | BadLocationException e) {
 			throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR, Messages.format(ActionMessages.FindStringsToExternalizeAction_error_cannotBeParsed,
 					BasicElementLabels.getFileName(cu)), e));
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java
index dcface4..cc6b95c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/FindStringsToExternalizeAction.java
@@ -311,11 +311,7 @@
 				result += countNonExternalizedStrings(line);
 			}
 			return result;
-		} catch (InvalidInputException e) {
-			throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR,
-				Messages.format(ActionMessages.FindStringsToExternalizeAction_error_cannotBeParsed, BasicElementLabels.getFileName(cu)),
-				e));
-		} catch (BadLocationException e) {
+		} catch (InvalidInputException | BadLocationException e) {
 			throw new CoreException(new Status(IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR, Messages.format(ActionMessages.FindStringsToExternalizeAction_error_cannotBeParsed,
 					BasicElementLabels.getFileName(cu)), e));
 		}
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java
index 1e81407..eb1720e 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/OrganizeImportsAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2018 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -13,12 +13,20 @@
  *******************************************************************************/
 package org.eclipse.jdt.ui.actions;
 
-import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
 import java.util.Comparator;
+import java.util.List;
 
 import com.ibm.icu.text.Collator;
 
+import org.eclipse.swt.widgets.Display;
+
 import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 
 import org.eclipse.jface.action.IAction;
 import org.eclipse.jface.action.IStatusLineManager;
@@ -66,13 +74,11 @@
 import org.eclipse.jdt.internal.ui.actions.ActionMessages;
 import org.eclipse.jdt.internal.ui.actions.ActionUtil;
 import org.eclipse.jdt.internal.ui.actions.MultiOrganizeImportAction;
-import org.eclipse.jdt.internal.ui.actions.WorkbenchRunnableAdapter;
 import org.eclipse.jdt.internal.ui.dialogs.MultiElementListSelectionDialog;
 import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
 import org.eclipse.jdt.internal.ui.javaeditor.JavaEditor;
 import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
 import org.eclipse.jdt.internal.ui.util.ElementValidator;
-import org.eclipse.jdt.internal.ui.util.ExceptionHandler;
 import org.eclipse.jdt.internal.ui.util.TypeNameMatchLabelProvider;
 
 /**
@@ -242,9 +248,9 @@
 	 */
 	public void run(ICompilationUnit cu) {
 
-		JavaEditor editor= null;
+		JavaEditor[] editor= new JavaEditor[1];
 		if (fEditor != null) {
-			editor= fEditor;
+			editor[0]= fEditor;
 
 			//organize imports from within editor -> editor has focus
 			if (!ElementValidator.check(cu, getShell(), ActionMessages.OrganizeImportsAction_error_title, true))
@@ -256,22 +262,22 @@
 				return;
 			}
 
-			editor= (JavaEditor) openEditor;
+			editor[0]= (JavaEditor) openEditor;
 			//organize imports from package explorer -> editor does not have focus
 			if (!ElementValidator.check(cu, getShell(), ActionMessages.OrganizeImportsAction_error_title, false))
 				return;
 		}
 
-		Assert.isNotNull(editor);
-		if (!ActionUtil.isEditable(editor, getShell(), cu))
+		Assert.isNotNull(editor[0]);
+		if (!ActionUtil.isEditable(editor[0], getShell(), cu))
 			return;
 
 		CompilationUnit astRoot= SharedASTProviderCore.getAST(cu, SharedASTProviderCore.WAIT_ACTIVE_ONLY, null);
 
 		CodeGenerationSettings settings= JavaPreferencesSettings.getCodeGenerationSettings(cu.getJavaProject());
-		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, astRoot, settings.importIgnoreLowercase, !cu.isWorkingCopy(), true, createChooseImportQuery(editor));
+		OrganizeImportsOperation op= new OrganizeImportsOperation(cu, astRoot, settings.importIgnoreLowercase, !cu.isWorkingCopy(), true, createChooseImportQuery(editor[0]));
 
-		IRewriteTarget target= editor.getAdapter(IRewriteTarget.class);
+		IRewriteTarget target= editor[0].getAdapter(IRewriteTarget.class);
 		if (target != null) {
 			target.beginCompoundChange();
 		}
@@ -283,23 +289,34 @@
 		}
 		IEditingSupport helper= createViewerHelper();
 		try {
-			registerHelper(helper, editor);
-			progressService.runInUI(context, new WorkbenchRunnableAdapter(op, op.getScheduleRule()), op.getScheduleRule());
-			IProblem parseError= op.getParseError();
-			if (parseError != null) {
-				String message= Messages.format(ActionMessages.OrganizeImportsAction_single_error_parse, parseError.getMessage());
-				MessageDialog.openInformation(getShell(), ActionMessages.OrganizeImportsAction_error_title, message);
-				if (parseError.getSourceStart() != -1) {
-					editor.selectAndReveal(parseError.getSourceStart(), parseError.getSourceEnd() - parseError.getSourceStart() + 1);
+			registerHelper(helper, editor[0]);
+			Job organizeJob= new Job(ActionMessages.OrganizeImportsAction_selectiondialog_title) {
+				@Override
+				protected IStatus run(IProgressMonitor monitor) {
+					try {
+						op.run(monitor);
+						IProblem parseError= op.getParseError();
+						if (parseError != null) {
+							String message= Messages.format(ActionMessages.OrganizeImportsAction_single_error_parse, parseError.getMessage());
+							MessageDialog.openInformation(getShell(), ActionMessages.OrganizeImportsAction_error_title, message);
+							if (parseError.getSourceStart() != -1) {
+								editor[0].selectAndReveal(parseError.getSourceStart(), parseError.getSourceEnd() - parseError.getSourceStart() + 1);
+							}
+						} else {
+							setStatusBarMessage(getOrganizeInfo(op), editor[0]);
+						}
+					} catch (CoreException e) {
+						IStatus st= e.getStatus();
+						return new Status(st.getSeverity(), st.getPlugin(), st.getCode(), st.getMessage(), e);
+					}
+					return Status.OK_STATUS;
 				}
-			} else {
-				setStatusBarMessage(getOrganizeInfo(op), editor);
-			}
-		} catch (InvocationTargetException e) {
-			ExceptionHandler.handle(e, getShell(), ActionMessages.OrganizeImportsAction_error_title, ActionMessages.OrganizeImportsAction_error_message);
-		} catch (InterruptedException e) {
+			};
+			organizeJob.setRule(op.getScheduleRule());
+			organizeJob.setPriority(Job.SHORT);
+			organizeJob.schedule();
 		} finally {
-			deregisterHelper(helper, editor);
+			deregisterHelper(helper, editor[0]);
 			if (target != null) {
 				target.endCompoundChange();
 			}
@@ -328,42 +345,43 @@
 	}
 
 	private TypeNameMatch[] doChooseImports(TypeNameMatch[][] openChoices, final ISourceRange[] ranges, final JavaEditor editor) {
-		// remember selection
-		ISelection sel= editor.getSelectionProvider().getSelection();
-		TypeNameMatch[] result= null;
-		ILabelProvider labelProvider= new TypeNameMatchLabelProvider(TypeNameMatchLabelProvider.SHOW_FULLYQUALIFIED);
+		List<TypeNameMatch> result= new ArrayList<>();
+		Display.getDefault().syncExec(() -> {
+			// remember selection
+			ISelection sel= editor.getSelectionProvider().getSelection();
+			ILabelProvider labelProvider= new TypeNameMatchLabelProvider(TypeNameMatchLabelProvider.SHOW_FULLYQUALIFIED);
 
-		MultiElementListSelectionDialog dialog= new MultiElementListSelectionDialog(getShell(), labelProvider) {
-			@Override
-			protected void handleSelectionChanged() {
-				super.handleSelectionChanged();
-				// show choices in editor
-				doListSelectionChanged(getCurrentPage(), ranges, editor);
-			}
-		};
-		fIsQueryShowing= true;
-		dialog.setTitle(ActionMessages.OrganizeImportsAction_selectiondialog_title);
-		dialog.setMessage(ActionMessages.OrganizeImportsAction_selectiondialog_message);
-		dialog.setElements(openChoices);
-		dialog.setComparator(ORGANIZE_IMPORT_COMPARATOR);
-		if (dialog.open() == Window.OK) {
-			Object[] res= dialog.getResult();
-			result= new TypeNameMatch[res.length];
-			for (int i= 0; i < res.length; i++) {
-				Object[] array= (Object[]) res[i];
-				if (array.length > 0) {
-					result[i]= (TypeNameMatch) array[0];
-					QualifiedTypeNameHistory.remember(result[i].getFullyQualifiedName());
+			MultiElementListSelectionDialog dialog= new MultiElementListSelectionDialog(getShell(), labelProvider) {
+				@Override
+				protected void handleSelectionChanged() {
+					super.handleSelectionChanged();
+					// show choices in editor
+					doListSelectionChanged(getCurrentPage(), ranges, editor);
+				}
+			};
+			fIsQueryShowing= true;
+			dialog.setTitle(ActionMessages.OrganizeImportsAction_selectiondialog_title);
+			dialog.setMessage(ActionMessages.OrganizeImportsAction_selectiondialog_message);
+			dialog.setElements(openChoices);
+			dialog.setComparator(ORGANIZE_IMPORT_COMPARATOR);
+			if (dialog.open() == Window.OK) {
+				Object[] res= dialog.getResult();
+				for (int i= 0; i < res.length; i++) {
+					Object[] array= (Object[]) res[i];
+					if (array.length > 0) {
+						result.add((TypeNameMatch) array[0]);
+						QualifiedTypeNameHistory.remember(result.get(i).getFullyQualifiedName());
+					}
 				}
 			}
-		}
-		// restore selection
-		if (sel instanceof ITextSelection) {
-			ITextSelection textSelection= (ITextSelection) sel;
-			editor.selectAndReveal(textSelection.getOffset(), textSelection.getLength());
-		}
-		fIsQueryShowing= false;
-		return result;
+			// restore selection
+			if (sel instanceof ITextSelection) {
+				ITextSelection textSelection= (ITextSelection) sel;
+				editor.selectAndReveal(textSelection.getOffset(), textSelection.getLength());
+			}
+			fIsQueryShowing= false;
+		});
+		return result.toArray(new TypeNameMatch[0]);
 	}
 
 	private void doListSelectionChanged(int page, ISourceRange[] ranges, JavaEditor editor) {
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java
index bd5a16b..15cb41b 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryCatchAction.java
@@ -116,10 +116,7 @@
 			ExceptionHandler.handle(e, getDialogTitle(), RefactoringMessages.SurroundWithTryCatchAction_exception);
 		} catch (InvocationTargetException e) {
 			ExceptionHandler.handle(e, getDialogTitle(), RefactoringMessages.SurroundWithTryCatchAction_exception);
-		} catch (InterruptedException e) {
-			// not cancelable
-		} catch (BadLocationException e) {
-			// ignore
+		} catch (/* not cancelable */ InterruptedException | /* ignore */ BadLocationException e) {
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryWithResourcesAction.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryWithResourcesAction.java
index d9ccd79..b93a115 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryWithResourcesAction.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/actions/SurroundWithTryWithResourcesAction.java
@@ -128,10 +128,7 @@
 			ExceptionHandler.handle(e, getDialogTitle(), RefactoringMessages.SurroundWithTryResourcesAction_exception);
 		} catch (InvocationTargetException e) {
 			ExceptionHandler.handle(e, getDialogTitle(), RefactoringMessages.SurroundWithTryResourcesAction_exception);
-		} catch (InterruptedException e) {
-			// not cancelable
-		} catch (BadLocationException e) {
-			// ignore
+		} catch (/* not cancelable */ InterruptedException | /* ignore */ BadLocationException e) {
 		}
 	}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
index 1863131..8220e9c 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/JavaSourceViewerConfiguration.java
@@ -72,6 +72,7 @@
 
 import org.eclipse.jdt.internal.ui.JavaPlugin;
 import org.eclipse.jdt.internal.ui.javaeditor.EditorUtility;
+import org.eclipse.jdt.internal.ui.javaeditor.JavaSourceViewer;
 import org.eclipse.jdt.internal.ui.text.AbstractJavaScanner;
 import org.eclipse.jdt.internal.ui.text.ContentAssistPreference;
 import org.eclipse.jdt.internal.ui.text.HTMLAnnotationHover;
@@ -84,7 +85,6 @@
 import org.eclipse.jdt.internal.ui.text.PreferencesAdapter;
 import org.eclipse.jdt.internal.ui.text.SingleTokenJavaScanner;
 import org.eclipse.jdt.internal.ui.text.correction.JavaCorrectionAssistant;
-import org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerRegistry;
 import org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor;
 import org.eclipse.jdt.internal.ui.text.java.JavaAutoIndentStrategy;
 import org.eclipse.jdt.internal.ui.text.java.JavaCodeScanner;
@@ -433,7 +433,7 @@
 	public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
 
 		if (getEditor() != null) {
-			ContentAssistant assistant= new ContentAssistant(fPreferenceStore.getBoolean(PreferenceConstants.CODEASSIST_NONUITHREAD_COMPUTATION) && !CompletionProposalComputerRegistry.getDefault().computingCompletionRequiresUIThread());
+			ContentAssistant assistant= new ContentAssistant((sourceViewer instanceof JavaSourceViewer) && ((JavaSourceViewer) sourceViewer).isAsyncCompletionActive());
 			assistant.setDocumentPartitioning(getConfiguredDocumentPartitioning(sourceViewer));
 
 			assistant.setRestoreCompletionProposalSize(getSettings("completion_proposal_size")); //$NON-NLS-1$
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
index df11729..a13ba42 100755
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/text/folding/DefaultJavaFoldingStructureProvider.java
@@ -1154,8 +1154,7 @@
 				IRegion[] result= new IRegion[regions.size()];
 				regions.toArray(result);
 				return result;
-		} catch (JavaModelException e) {
-		} catch (InvalidInputException e) {
+		} catch (JavaModelException | InvalidInputException e) {
 		}
 
 		return new IRegion[0];
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
index fba252d..8c9c708 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewJavaProjectWizardPageTwo.java
@@ -373,8 +373,7 @@
 						foldersToKeep.add(canonicalFileStore);
 					}
 				}
-			} catch (IOException e) {
-			} catch (CoreException e) {
+			} catch (IOException | CoreException e) {
 			}
 		}
 
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
index 98d6184..e0382bc 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/ui/wizards/NewTypeWizardPage.java
@@ -2742,11 +2742,7 @@
 			if (template != null) {
 				return TemplateUtils.evaluateTemplate(template, parentCU, pos);
 			}
-		} catch (CoreException e) {
-			JavaPlugin.log(e);
-		} catch (BadLocationException e) {
-			JavaPlugin.log(e);
-		} catch (TemplateException e) {
+		} catch (CoreException | BadLocationException | TemplateException e) {
 			JavaPlugin.log(e);
 		}
 		return null;