diff --git a/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs
index 1d1c1c0..59d5c90 100644
--- a/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.core.externaltools/.settings/org.eclipse.jdt.core.prefs
@@ -27,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -91,7 +92,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -101,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java b/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
index 8385553..268ccaa 100644
--- a/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
+++ b/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/launchConfigurations/ProgramLaunchDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -111,7 +111,7 @@
 		IProcess process = null;
 
 		// add process type to process attributes
-		Map<String, String> processAttributes = new HashMap<String, String>();
+		Map<String, String> processAttributes = new HashMap<>();
 		String programName = location.lastSegment();
 		String extension = location.getFileExtension();
 		if (extension != null) {
diff --git a/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java b/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java
index 75ad019..63bdac7 100644
--- a/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java
+++ b/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/model/BuilderCoreUtils.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2014 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -149,7 +149,7 @@
 		if(!isfull && isinc) {
 			Map<String, String> args = newCommand.getArguments();
 			if(args == null) {
-				args = new HashMap<String, String>();
+				args = new HashMap<>();
 			}
 			newCommand.setBuilding(IncrementalProjectBuilder.FULL_BUILD, true);
 			args.put(INC_CLEAN, Boolean.TRUE.toString());
@@ -211,7 +211,7 @@
 					temp = workingCopy.getOriginal();
 				}
 			}
-			args = new HashMap<String, String>();
+			args = new HashMap<>();
 			// Launch configuration builders are stored with a project-relative
 			// path
 			StringBuilder buffer = new StringBuilder(PROJECT_TAG);
diff --git a/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/registry/ExternalToolMigration.java b/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/registry/ExternalToolMigration.java
index c7887fb..285d808 100644
--- a/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/registry/ExternalToolMigration.java
+++ b/org.eclipse.core.externaltools/src/org/eclipse/core/externaltools/internal/registry/ExternalToolMigration.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -247,7 +247,7 @@
 			String targetNames = null;
 			if (arguments != null) {
 				int start = 0;
-				ArrayList<String> targets = new ArrayList<String>();
+				ArrayList<String> targets = new ArrayList<>();
 				StringBuilder buffer = new StringBuilder();
 				VariableDefinition varDef = extractVariableDefinition(arguments, start);
 				while (varDef.end != -1) {
diff --git a/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs
index c0ad3ff..59d5c90 100644
--- a/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.core.variables/.settings/org.eclipse.jdt.core.prefs
@@ -27,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -77,19 +78,21 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -99,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs
index 537a43d..044bb4c 100644
--- a/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.debug.core/.settings/org.eclipse.jdt.core.prefs
@@ -27,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -91,7 +92,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -101,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/org.eclipse.debug.examples.core/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.debug.examples.core/.settings/org.eclipse.jdt.core.prefs
index 854ba02..d7f6071 100644
--- a/org.eclipse.debug.examples.core/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.debug.examples.core/.settings/org.eclipse.jdt.core.prefs
@@ -11,8 +11,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 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
@@ -24,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -74,19 +78,21 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -96,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/org.eclipse.debug.examples.core/pdavm/src/org/eclipse/debug/examples/pdavm/PDAVirtualMachine.java b/org.eclipse.debug.examples.core/pdavm/src/org/eclipse/debug/examples/pdavm/PDAVirtualMachine.java
index d8ee82b..1e6109a 100644
--- a/org.eclipse.debug.examples.core/pdavm/src/org/eclipse/debug/examples/pdavm/PDAVirtualMachine.java
+++ b/org.eclipse.debug.examples.core/pdavm/src/org/eclipse/debug/examples/pdavm/PDAVirtualMachine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2015 Wind River Systems and others.
+ * Copyright (c) 2005, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -62,7 +62,7 @@
         String fName;
         String fGroup = "<no_group>"; //$NON-NLS-1$
         boolean fIsWriteable = true;
-		Map<String, BitField> fBitFields = new LinkedHashMap<String, BitField>(0);
+		Map<String, BitField> fBitFields = new LinkedHashMap<>(0);
         int fValue;
     }
 
@@ -73,10 +73,10 @@
         String fName;
         int fBitOffset;
         int fBitCount;
-		Map<String, Integer> fMnemonics = new LinkedHashMap<String, Integer>(0);
+		Map<String, Integer> fMnemonics = new LinkedHashMap<>(0);
     }
 
-	Map<String, Register> fRegisters = new LinkedHashMap<String, Register>(0);
+	Map<String, Register> fRegisters = new LinkedHashMap<>(0);
 
     class Args {
         final String[] fArgs;
@@ -147,7 +147,7 @@
 		Map<String, Integer> fThreadLabels;
 
         /** The stack of stack frames (the control stack) */
-		final List<Frame> fFrames = new LinkedList<Frame>();
+		final List<Frame> fFrames = new LinkedList<>();
 
         /** Current stack frame (not includced in fFrames) */
         Frame fCurrentFrame;
@@ -176,7 +176,7 @@
         }
     }
 
-	final Map<Integer, PDAThread> fThreads = new LinkedHashMap<Integer, PDAThread>();
+	final Map<Integer, PDAThread> fThreads = new LinkedHashMap<>();
 
     int fNextThreadId = 1;
 
@@ -192,7 +192,7 @@
 
     /** Each stack frame is a mapping of variable names to values. */
     class Frame {
-		final Map<String, Object> fLocalVariables = new LinkedHashMap<String, Object>();
+		final Map<String, Object> fLocalVariables = new LinkedHashMap<>();
 
         /**
          * The name of the function in this frame
@@ -278,7 +278,7 @@
      * Breakpoints are stored per each each line of code.  The boolean indicates
      * whether the whole VM should suspend or just the triggering thread.
      */
-	final Map<Integer, Boolean> fBreakpoints = new HashMap<Integer, Boolean>();
+	final Map<Integer, Boolean> fBreakpoints = new HashMap<>();
 
     /**
      * The suspend flag is true if the VM should suspend running the program and
@@ -324,7 +324,7 @@
     OutputStream fEventStream;
 
     /** The eventstops table holds which events cause suspends and which do not. */
-	final Map<String, Boolean> fEventStops = new HashMap<String, Boolean>();
+	final Map<String, Boolean> fEventStops = new HashMap<>();
     {
         fEventStops.put("unimpinstr", Boolean.FALSE); //$NON-NLS-1$
         fEventStops.put("nosuchlabel", Boolean.FALSE); //$NON-NLS-1$
@@ -340,7 +340,7 @@
      * <li>N = 2 is write watch</li>
      * <li>N = 3 is both, etc.</li>
      */
-	final Map<String, Integer> fWatchpoints = new HashMap<String, Integer>();
+	final Map<String, Integer> fWatchpoints = new HashMap<>();
 
     public static void main(String[] args) {
         String programFile = args.length >= 1 ? args[0] : null;
@@ -388,7 +388,7 @@
 
         // Load all the code into memory
         StringWriter stringWriter = new StringWriter();
-		List<String> code = new LinkedList<String>();
+		List<String> code = new LinkedList<>();
 		try (FileReader fileReader = new FileReader(inputFile)) {
 	        int c = fileReader.read();
 	        while (c != -1) {
@@ -416,7 +416,7 @@
      * Initializes the labels map
      */
 	Map<String, Integer> mapLabels(String[] code) {
-		Map<String, Integer> labels = new HashMap<String, Integer>();
+		Map<String, Integer> labels = new HashMap<>();
         for (int i = 0; i < code.length; i++) {
             if (code[i].length() != 0 && code[i].charAt(0) == ':') {
                 labels.put(code[i].substring(1), Integer.valueOf(i));
@@ -551,7 +551,7 @@
     void doOneInstruction(PDAThread thread, String instr) {
         StringTokenizer tokenizer = new StringTokenizer(instr);
         String op = tokenizer.nextToken();
-		List<String> tokens = new LinkedList<String>();
+		List<String> tokens = new LinkedList<>();
         while (tokenizer.hasMoreTokens()) {
             tokens.add(tokenizer.nextToken());
         }
@@ -698,7 +698,7 @@
         }
 
         String command = tokenizer.nextToken();
-		List<String> tokens = new LinkedList<String>();
+		List<String> tokens = new LinkedList<>();
         while (tokenizer.hasMoreTokens()) {
             tokens.add(tokenizer.nextToken());
         }
@@ -779,7 +779,7 @@
             ? thread.fCurrentFrame : (Frame)thread.fFrames.get(sfnumber);
 
         String varDot = var + "."; //$NON-NLS-1$
-		List<String> children = new ArrayList<String>();
+		List<String> children = new ArrayList<>();
 		for (Iterator<String> itr = frame.fLocalVariables.keySet().iterator(); itr.hasNext();) {
             String localVar = itr.next();
             if (localVar.startsWith(varDot) && localVar.indexOf('.', varDot.length() + 1) == -1) {
@@ -933,7 +933,7 @@
      * @param args
      */
     void debugGroups(Args args) {
-		TreeSet<String> groups = new TreeSet<String>();
+		TreeSet<String> groups = new TreeSet<>();
 		for (Iterator<Register> itr = fRegisters.values().iterator(); itr.hasNext();) {
             Register reg = itr.next();
             groups.add(reg.fGroup);
diff --git a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/launcher/PDALaunchDelegate.java b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/launcher/PDALaunchDelegate.java
index b1bc4d6..077e771 100644
--- a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/launcher/PDALaunchDelegate.java
+++ b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/launcher/PDALaunchDelegate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,9 +41,6 @@
  * Launches PDA program on a PDA interpreter written in Perl
  */
 public class PDALaunchDelegate extends LaunchConfigurationDelegate {
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ILaunchConfigurationDelegate#launch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.debug.core.ILaunch, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void launch(ILaunchConfiguration configuration, String mode, ILaunch launch, IProgressMonitor monitor) throws CoreException {
 		//#ifdef ex1
@@ -53,7 +50,7 @@
 //#		new RuntimeProcess(launch, process, "Hello", null);
 		//#else
 
-		List<String> commandList = new ArrayList<String>();
+		List<String> commandList = new ArrayList<>();
 
         // Get Java VM path
         String javaVMHome = System.getProperty("java.home"); //$NON-NLS-1$
@@ -135,9 +132,6 @@
 		return -1;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.LaunchConfigurationDelegate#buildForLaunch(org.eclipse.debug.core.ILaunchConfiguration, java.lang.String, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public boolean buildForLaunch(ILaunchConfiguration configuration, String mode, IProgressMonitor monitor) throws CoreException {
 		return false;
diff --git a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDABitFieldData.java b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDABitFieldData.java
index b36e3db..da15cf0 100644
--- a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDABitFieldData.java
+++ b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDABitFieldData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@
         fOffset = Integer.parseInt(st.nextToken());
         fCount = Integer.parseInt(st.nextToken());
 
-		fMnemonics = new LinkedHashMap<String, String>(0);
+		fMnemonics = new LinkedHashMap<>(0);
         while (st.hasMoreTokens()) {
             fMnemonics.put(st.nextToken(), st.nextToken());
         }
diff --git a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAFrameData.java b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAFrameData.java
index d3c5ab8..560a820 100644
--- a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAFrameData.java
+++ b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAFrameData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -38,7 +38,7 @@
         fPC = Integer.parseInt(st.nextToken());
         fFunction = st.nextToken();
 
-		List<String> variablesList = new ArrayList<String>();
+		List<String> variablesList = new ArrayList<>();
         while (st.hasMoreTokens()) {
             variablesList.add(st.nextToken());
         }
diff --git a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAListResult.java b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAListResult.java
index e2b9a38..e9aae8e 100644
--- a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAListResult.java
+++ b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAListResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -27,7 +27,7 @@
     PDAListResult(String response) {
         super(response);
         StringTokenizer st = new StringTokenizer(response, "|"); //$NON-NLS-1$
-		List<String> valuesList = new ArrayList<String>();
+		List<String> valuesList = new ArrayList<>();
 
         while (st.hasMoreTokens()) {
             String token = st.nextToken();
diff --git a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegisterData.java b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegisterData.java
index 27c1874..a94db40 100644
--- a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegisterData.java
+++ b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegisterData.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -35,7 +35,7 @@
         fName = regSt.nextToken();
         fWritable = Boolean.getBoolean(regSt.nextToken());
 
-		List<PDABitFieldData> bitFieldsList = new ArrayList<PDABitFieldData>();
+		List<PDABitFieldData> bitFieldsList = new ArrayList<>();
         while (st.hasMoreTokens()) {
             bitFieldsList.add(new PDABitFieldData(st.nextToken()));
         }
diff --git a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegistersCommandResult.java b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegistersCommandResult.java
index 7eabe8a..d5a56be 100644
--- a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegistersCommandResult.java
+++ b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDARegistersCommandResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,7 +30,7 @@
     PDARegistersCommandResult(String response) {
         super(response);
         StringTokenizer st = new StringTokenizer(response, "#"); //$NON-NLS-1$
-		List<PDARegisterData> regList = new ArrayList<PDARegisterData>();
+		List<PDARegisterData> regList = new ArrayList<>();
 
         while (st.hasMoreTokens()) {
             regList.add(new PDARegisterData(st.nextToken()));
diff --git a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAStackCommandResult.java b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAStackCommandResult.java
index dfc5832..7489121 100644
--- a/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAStackCommandResult.java
+++ b/org.eclipse.debug.examples.core/src/org/eclipse/debug/examples/core/pda/protocol/PDAStackCommandResult.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -31,7 +31,7 @@
     PDAStackCommandResult(String response) {
         super(response);
         StringTokenizer st = new StringTokenizer(response, "#"); //$NON-NLS-1$
-		List<PDAFrameData> framesList = new ArrayList<PDAFrameData>();
+		List<PDAFrameData> framesList = new ArrayList<>();
 
         while (st.hasMoreTokens()) {
             framesList.add(new PDAFrameData(st.nextToken()));
diff --git a/org.eclipse.debug.examples.core/src_ant/org/eclipse/debug/examples/ant/tasks/PreProcessor.java b/org.eclipse.debug.examples.core/src_ant/org/eclipse/debug/examples/ant/tasks/PreProcessor.java
index 3f6f993..483e9ec 100644
--- a/org.eclipse.debug.examples.core/src_ant/org/eclipse/debug/examples/ant/tasks/PreProcessor.java
+++ b/org.eclipse.debug.examples.core/src_ant/org/eclipse/debug/examples/ant/tasks/PreProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -46,9 +46,9 @@
  */
 public class PreProcessor extends Task {
 
-	private Vector<FileSet> fFileSets = new Vector<FileSet>();
+	private Vector<FileSet> fFileSets = new Vector<>();
 	private File fDestDir = null;
-	private Set<String> fSymbols = new HashSet<String>();
+	private Set<String> fSymbols = new HashSet<>();
 	private FileUtils fUtils = FileUtils.getFileUtils();
 
 	// possible states
diff --git a/org.eclipse.debug.examples.memory/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.debug.examples.memory/.settings/org.eclipse.jdt.core.prefs
index 854ba02..d7f6071 100644
--- a/org.eclipse.debug.examples.memory/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.debug.examples.memory/.settings/org.eclipse.jdt.core.prefs
@@ -11,8 +11,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 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
@@ -24,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -74,19 +78,21 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -96,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleDebugTarget.java b/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleDebugTarget.java
index 8b3ff93..3f79627 100644
--- a/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleDebugTarget.java
+++ b/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleDebugTarget.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2015 IBM Corporation and others.
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,7 @@
 
 	protected ILaunch fLaunch;
 	protected SampleEngine fEngine = new SampleEngine();
-	protected ArrayList<IMemoryBlockExtension> fMemoryBlocks = new ArrayList<IMemoryBlockExtension>();
+	protected ArrayList<IMemoryBlockExtension> fMemoryBlocks = new ArrayList<>();
 	protected IThread fThread;
 	protected boolean fBusy;
 
@@ -56,113 +56,63 @@
 		fireEvent(new DebugEvent(this, DebugEvent.CREATE));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDebugTarget#getProcess()
-	 */
 	@Override
 	public IProcess getProcess() {
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDebugTarget#hasThreads()
-	 */
 	@Override
 	public boolean hasThreads() throws DebugException {
 		return true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IDebugTarget#supportsBreakpoint(org.eclipse
-	 * .debug.core.model.IBreakpoint)
-	 */
 	@Override
 	public boolean supportsBreakpoint(IBreakpoint breakpoint) {
 
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDebugElement#getDebugTarget()
-	 */
 	@Override
 	public IDebugTarget getDebugTarget() {
 		return this;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDebugElement#getLaunch()
-	 */
 	@Override
 	public ILaunch getLaunch() {
 		return fLaunch;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ITerminate#canTerminate()
-	 */
 	@Override
 	public boolean canTerminate() {
 		return !fTerminate;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ITerminate#isTerminated()
-	 */
 	@Override
 	public boolean isTerminated() {
 		return fTerminate;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ITerminate#terminate()
-	 */
 	@Override
 	public void terminate() throws DebugException {
 		fTerminate = true;
 		fireEvent(new DebugEvent(this, DebugEvent.TERMINATE));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ISuspendResume#canResume()
-	 */
 	@Override
 	public boolean canResume() {
 		return fSuspend && !fTerminate;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ISuspendResume#canSuspend()
-	 */
 	@Override
 	public boolean canSuspend() {
 		return !fSuspend && !fTerminate;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ISuspendResume#isSuspended()
-	 */
 	@Override
 	public boolean isSuspended() {
 		return fSuspend;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ISuspendResume#resume()
-	 */
 	@Override
 	public void resume() throws DebugException {
 		fSuspend = false;
@@ -170,81 +120,41 @@
 		fireEvent(new DebugEvent(this, DebugEvent.RESUME));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.ISuspendResume#suspend()
-	 */
 	@Override
 	public void suspend() throws DebugException {
 		fSuspend = true;
 		fireEvent(new DebugEvent(getEngine().getThreads(this)[0], DebugEvent.SUSPEND));
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.IBreakpointListener#breakpointAdded(org.eclipse
-	 * .debug.core.model.IBreakpoint)
-	 */
 	@Override
 	public void breakpointAdded(IBreakpoint breakpoint) {
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.IBreakpointListener#breakpointRemoved(org.eclipse
-	 * .debug.core.model.IBreakpoint, org.eclipse.core.resources.IMarkerDelta)
-	 */
 	@Override
 	public void breakpointRemoved(IBreakpoint breakpoint, IMarkerDelta delta) {
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.IBreakpointListener#breakpointChanged(org.eclipse
-	 * .debug.core.model.IBreakpoint, org.eclipse.core.resources.IMarkerDelta)
-	 */
 	@Override
 	public void breakpointChanged(IBreakpoint breakpoint, IMarkerDelta delta) {
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDisconnect#canDisconnect()
-	 */
 	@Override
 	public boolean canDisconnect() {
 
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDisconnect#disconnect()
-	 */
 	@Override
 	public void disconnect() throws DebugException {
 
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDisconnect#isDisconnected()
-	 */
 	@Override
 	public boolean isDisconnected() {
 
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockRetrieval#supportsStorageRetrieval
-	 * ()
-	 */
 	@Override
 	public boolean supportsStorageRetrieval() {
 		return true;
@@ -266,12 +176,6 @@
 		fMemoryBlocks.remove(memBlk);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockRetrieval#getMemoryBlock(long,
-	 * long)
-	 */
 	@Override
 	public IMemoryBlock getMemoryBlock(long startAddress, long length) throws DebugException {
 
@@ -308,11 +212,6 @@
 		return MemoryViewSamplePlugin.PLUGIN_ID;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlockRetrievalExtension#
-	 * getExtendedMemoryBlock(java.lang.String, java.lang.Object)
-	 */
 	@Override
 	public IMemoryBlockExtension getExtendedMemoryBlock(String expression, Object context) throws DebugException {
 
diff --git a/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleMemoryBlock.java b/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleMemoryBlock.java
index 6a93b4d..06317a2 100644
--- a/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleMemoryBlock.java
+++ b/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/core/SampleMemoryBlock.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013, 2015 IBM Corporation and others.
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,7 +41,7 @@
 	private boolean isEnabled = true;
 	private BigInteger fBaseAddress;
 
-	private ArrayList<Object> fConnections = new ArrayList<Object>();
+	private ArrayList<Object> fConnections = new ArrayList<>();
 
 	/**
 	 * Creates memory block
@@ -57,33 +57,17 @@
 		fBaseAddress = address;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#getBigBaseAddress()
-	 */
 	@Override
 	public BigInteger getBigBaseAddress() throws DebugException {
 		fBaseAddress = fDebugTarget.getEngine().evaluateExpression(fExpression, null);
 		return fBaseAddress;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlockExtension#
-	 * supportBaseAddressModification()
-	 */
 	@Override
 	public boolean supportBaseAddressModification() throws DebugException {
 		return fDebugTarget.getEngine().suppostsBaseAddressModification(this);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#setBaseAddress(java
-	 * .math.BigInteger)
-	 */
 	@Override
 	public void setBaseAddress(BigInteger address) throws DebugException {
 		try {
@@ -93,24 +77,12 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#getBytesFromOffset
-	 * (long, long)
-	 */
 	@Override
 	synchronized public MemoryByte[] getBytesFromOffset(BigInteger offset, long length) throws DebugException {
 		BigInteger address = fBaseAddress.subtract(offset);
 		return getBytesFromAddress(address, length);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#getBytesFromAddress
-	 * (java.math.BigInteger, long)
-	 */
 	@Override
 	public MemoryByte[] getBytesFromAddress(BigInteger address, long length) throws DebugException {
 
@@ -139,12 +111,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#connect(java.lang.
-	 * Object)
-	 */
 	@Override
 	public void connect(Object object) {
 
@@ -164,12 +130,6 @@
 		isEnabled = true;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#disconnect(java.lang
-	 * .Object)
-	 */
 	@Override
 	public void disconnect(Object object) {
 
@@ -182,10 +142,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getConnected()
-	 */
 	@Override
 	public Object[] getConnections() {
 		return fConnections.toArray();
@@ -198,50 +154,29 @@
 		isEnabled = false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlock#getStartAddress()
-	 */
 	@Override
 	public long getStartAddress() {
 		// no need to implement this method as it belongs to IMemoryBlock
 		return 0;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlock#getLength()
-	 */
 	@Override
 	public long getLength() {
 		// no need to implement this method as it belongs to IMemoryBlock
 		return 0;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlock#getBytes()
-	 */
 	@Override
 	public byte[] getBytes() throws DebugException {
 		// no need to implement this method as it belongs to IMemoryBlock
 		return new byte[0];
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlock#supportsValueModification()
-	 */
 	@Override
 	public boolean supportsValueModification() {
 		return fDebugTarget.getEngine().supportsValueModification(this);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlock#setValue(long, byte[])
-	 */
 	@Override
 	public void setValue(BigInteger offset, byte[] bytes) throws DebugException {
 		try {
@@ -255,37 +190,21 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDebugElement#getModelIdentifier()
-	 */
 	@Override
 	public String getModelIdentifier() {
 		return getDebugTarget().getModelIdentifier();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDebugElement#getDebugTarget()
-	 */
 	@Override
 	public IDebugTarget getDebugTarget() {
 		return fDebugTarget;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IDebugElement#getLaunch()
-	 */
 	@Override
 	public ILaunch getLaunch() {
 		return fDebugTarget.getLaunch();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
-	 */
 	@SuppressWarnings("unchecked")
 	@Override
 	public <T> T getAdapter(Class<T> adapter) {
@@ -301,19 +220,11 @@
 		return super.getAdapter(adapter);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getExpression()
-	 */
 	@Override
 	public String getExpression() {
 		return fExpression;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlockExtension#dispose()
-	 */
 	@Override
 	public void dispose() throws DebugException {
 		// remove this memory block from debug target
@@ -327,48 +238,26 @@
 		return isEnabled;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * com.ibm.debug.extended.ui.IMemoryBlockExtension#getMemoryBlockRetrieval()
-	 */
 	@Override
 	public IMemoryBlockRetrieval getMemoryBlockRetrieval() {
 		return getDebugTarget();
 	}
 
-	/**
-	 *
-	 */
 	private void fireContentChangeEvent() {
 		DebugEvent evt = new DebugEvent(this, DebugEvent.CHANGE);
 		fireEvent(evt);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * com.ibm.debug.extended.ui.IMemoryBlockExtension#isMemoryChangesManaged()
-	 */
 	@Override
 	public boolean supportsChangeManagement() {
 		return false;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#getAddressableSize()
-	 */
 	@Override
 	public int getAddressableSize() throws DebugException {
 		return fDebugTarget.getEngine().getAddressableSize();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getAddressSize()
-	 */
 	@Override
 	public int getAddressSize() throws DebugException {
 		try {
@@ -378,12 +267,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#getMemoryBlockStartAddress
-	 * ()
-	 */
 	@Override
 	public BigInteger getMemoryBlockStartAddress() throws DebugException {
 
@@ -395,12 +278,6 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see
-	 * org.eclipse.debug.core.model.IMemoryBlockExtension#getMemoryBlockEndAddress
-	 * ()
-	 */
 	@Override
 	public BigInteger getMemoryBlockEndAddress() throws DebugException {
 
@@ -412,19 +289,11 @@
 		return null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlock#setValue(long, byte[])
-	 */
 	@Override
 	public void setValue(long offset, byte[] bytes) throws DebugException {
 		// do not need to implement for IMemoryBlockExtension
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.eclipse.debug.core.model.IMemoryBlockExtension#getBigLength()
-	 */
 	@Override
 	public BigInteger getBigLength() throws DebugException {
 		// return -1 by default and default length is calculated
diff --git a/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/engine/SampleEngine.java b/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/engine/SampleEngine.java
index 7416b35..e10870f 100644
--- a/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/engine/SampleEngine.java
+++ b/org.eclipse.debug.examples.memory/src/org/eclipse/debug/examples/internal/memory/engine/SampleEngine.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 IBM Corporation and others.
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -33,9 +33,9 @@
 	Random fRandom = new Random();
 	byte[] fMemory;
 	Hashtable<BigInteger, SampleMemoryUnit> memoryBlockTable;
-	Hashtable<String, BigInteger> expressionAddressTable = new Hashtable<String, BigInteger>();
-	Hashtable<SampleDebugTarget, Object> threadTable = new Hashtable<SampleDebugTarget, Object>();
-	Hashtable<SampleThread, Object> stackframeTable = new Hashtable<SampleThread, Object>();
+	Hashtable<String, BigInteger> expressionAddressTable = new Hashtable<>();
+	Hashtable<SampleDebugTarget, Object> threadTable = new Hashtable<>();
+	Hashtable<SampleThread, Object> stackframeTable = new Hashtable<>();
 
 	Random random = new Random();
 
@@ -51,7 +51,7 @@
 
 		if (memoryBlockTable == null) {
 			// create new memoryBlock table
-			memoryBlockTable = new Hashtable<BigInteger, SampleMemoryUnit>();
+			memoryBlockTable = new Hashtable<>();
 			byte[] bytes = new byte[(int) length * getAddressableSize()];
 			BigInteger addressKey = address;
 
diff --git a/org.eclipse.debug.examples.mixedmode/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.debug.examples.mixedmode/.settings/org.eclipse.jdt.core.prefs
index 854ba02..d7f6071 100644
--- a/org.eclipse.debug.examples.mixedmode/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.debug.examples.mixedmode/.settings/org.eclipse.jdt.core.prefs
@@ -11,8 +11,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 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
@@ -24,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -74,19 +78,21 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -96,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/AntExtraTab.java b/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/AntExtraTab.java
index a3edf39..399b0db 100755
--- a/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/AntExtraTab.java
+++ b/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/AntExtraTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 IBM Corporation and others.
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,17 +15,11 @@
 
 public class AntExtraTab extends DoNothingMainTab {
 
-	/**
-	 * @see org.eclipse.debug.internal.examples.mixedmode.DoNothingMainTab#getName()
-	 */
 	@Override
 	public String getName() {
 		return Messages.AntExtraTab_0;
 	}
 
-	/**
-	 * @see org.eclipse.debug.internal.examples.mixedmode.DoNothingMainTab#getId()
-	 */
 	@Override
 	public String getId() {
 		return "org.eclipse.debug.examples.mixedmode.ant.tab"; //$NON-NLS-1$
@@ -37,7 +31,7 @@
 	@Override
 	public Set<String> getModes() {
 		if (fOptions == null) {
-			fOptions = new HashSet<String>();
+			fOptions = new HashSet<>();
 			fOptions.add("ant"); //$NON-NLS-1$
 			fOptions.add("test"); //$NON-NLS-1$
 		}
diff --git a/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/DoNothingMainTab.java b/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/DoNothingMainTab.java
index dbcabf4..59550e2 100755
--- a/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/DoNothingMainTab.java
+++ b/org.eclipse.debug.examples.mixedmode/src/org/eclipse/debug/internal/examples/mixedmode/DoNothingMainTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 IBM Corporation and others.
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,9 +34,6 @@
 	protected Button fButton = null;
 	protected Set<String> fOptions = null;
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
-	 */
 	@Override
 	public void createControl(Composite parent) {
 		Composite comp = SWTFactory.createComposite(parent, parent.getFont(), 1, 1, GridData.FILL_BOTH);
@@ -56,9 +53,6 @@
 		getLaunchManager().addLaunchConfigurationListener(this);
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
-	 */
 	@Override
 	public String getName() {
 		return Messages.DoNothingMainTab_1;
@@ -68,23 +62,17 @@
 	 * @return the set of modes this tab works with
 	 */
 	protected Set<String> getModes() {
-		Set<String> set = new HashSet<String>();
+		Set<String> set = new HashSet<>();
 		set.add("profile"); //$NON-NLS-1$
 		return set;
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#dispose()
-	 */
 	@Override
 	public void dispose() {
 		getLaunchManager().removeLaunchConfigurationListener(this);
 		super.dispose();
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
-	 */
 	@Override
 	public void initializeFrom(ILaunchConfiguration configuration) {
 		try {
@@ -99,9 +87,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
-	 */
 	@Override
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
 		if (fButton.getSelection()) {
@@ -111,24 +96,15 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
-	 */
 	@Override
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.AbstractLaunchConfigurationTab#getId()
-	 */
 	@Override
 	public String getId() {
 		return "org.eclipse.debug.examples.mixedmode.main.tab"; //$NON-NLS-1$
 	}
 
-	/**
-	 * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationChanged(org.eclipse.debug.core.ILaunchConfiguration)
-	 */
 	@Override
 	public void launchConfigurationChanged(ILaunchConfiguration configuration) {
 		try {
diff --git a/org.eclipse.debug.examples.ui/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.debug.examples.ui/.settings/org.eclipse.jdt.core.prefs
index 854ba02..d7f6071 100644
--- a/org.eclipse.debug.examples.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.debug.examples.ui/.settings/org.eclipse.jdt.core.prefs
@@ -11,8 +11,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 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
@@ -24,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -74,19 +78,21 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -96,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/adapters/MidiEventModelProxy.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/adapters/MidiEventModelProxy.java
index 26d89d8..df51587 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/adapters/MidiEventModelProxy.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/adapters/MidiEventModelProxy.java
@@ -1,5 +1,5 @@
 /*****************************************************************
- * Copyright (c) 2009, 2013 Texas Instruments and others
+ * Copyright (c) 2009, 2018 Texas Instruments and others
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -20,12 +20,9 @@
 import org.eclipse.jface.viewers.TreePath;
 
 public class MidiEventModelProxy extends AbstractModelProxy implements ICheckboxModelProxy {
-	static Map<TreePath, Boolean> gChecked = new HashMap<TreePath, Boolean>();
+	static Map<TreePath, Boolean> gChecked = new HashMap<>();
 
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.internal.ui.viewers.model.provisional.ICheckboxModelProxy#setChecked(org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, java.lang.Object, org.eclipse.jface.viewers.TreePath, boolean)
-	 */
 	@Override
 	public boolean setChecked(IPresentationContext context, Object viewerInput, TreePath path, boolean checked) {
 		System.out.println("TrackCheckListener.setChecked() element = " + path.getLastSegment() + " checked = " + checked); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/detailpanes/ControlDetailPaneFactory.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/detailpanes/ControlDetailPaneFactory.java
index 25cf833..c6dc263 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/detailpanes/ControlDetailPaneFactory.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/detailpanes/ControlDetailPaneFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 IBM Corporation and others.
+ * Copyright (c) 2008, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,9 +36,6 @@
 	 */
 	public static final String ID_CLOCK_SLIDER = "CLOCK_SLIDER"; //$NON-NLS-1$
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.IDetailPaneFactory#createDetailPane(java.lang.String)
-	 */
 	@Override
 	public IDetailPane createDetailPane(String paneID) {
 		if (ID_TEMPO_SLIDER.equals(paneID)) {
@@ -50,9 +47,6 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.IDetailPaneFactory#getDefaultDetailPane(org.eclipse.jface.viewers.IStructuredSelection)
-	 */
 	@Override
 	public String getDefaultDetailPane(IStructuredSelection selection) {
 		if (selection.size() == 1) {
@@ -67,9 +61,6 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.IDetailPaneFactory#getDetailPaneDescription(java.lang.String)
-	 */
 	@Override
 	public String getDetailPaneDescription(String paneID) {
 		if (ID_TEMPO_SLIDER.equals(paneID)) {
@@ -81,9 +72,6 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.IDetailPaneFactory#getDetailPaneName(java.lang.String)
-	 */
 	@Override
 	public String getDetailPaneName(String paneID) {
 		if (ID_TEMPO_SLIDER.equals(paneID)) {
@@ -95,12 +83,9 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.IDetailPaneFactory#getDetailPaneTypes(org.eclipse.jface.viewers.IStructuredSelection)
-	 */
 	@Override
 	public Set<String> getDetailPaneTypes(IStructuredSelection selection) {
-		Set<String> set = new HashSet<String>();
+		Set<String> set = new HashSet<>();
 		if (selection.size() == 1) {
 			Object element = selection.getFirstElement();
 			if (element instanceof TempoControl) {
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/launcher/MidiLaunchShortcut.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/launcher/MidiLaunchShortcut.java
index ea72138..549b7e2 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/launcher/MidiLaunchShortcut.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/midi/launcher/MidiLaunchShortcut.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 IBM Corporation and others.
+ * Copyright (c) 2008, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -39,9 +39,6 @@
  */
 public class MidiLaunchShortcut implements ILaunchShortcut {
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.jface.viewers.ISelection, java.lang.String)
-	 */
 	@Override
 	public void launch(ISelection selection, String mode) {
 		if (selection instanceof IStructuredSelection) {
@@ -68,7 +65,7 @@
 	 * @return associated launch configuration or <code>null</code>
 	 */
 	private ILaunchConfiguration getConfiguration(IFile file) {
-		List<ILaunchConfiguration> candiates = new ArrayList<ILaunchConfiguration>();
+		List<ILaunchConfiguration> candiates = new ArrayList<>();
 		try {
 			ILaunchConfiguration[] configurations = getLaunchManager().getLaunchConfigurations(getLaunchType());
 			for (int i = 0; i < configurations.length; i++) {
@@ -155,9 +152,6 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.ILaunchShortcut#launch(org.eclipse.ui.IEditorPart, java.lang.String)
-	 */
 	@Override
 	public void launch(IEditorPart editor, String mode) {
 		// nothing - currently no editor
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/DebugUIPlugin.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/DebugUIPlugin.java
index 1ea844c..7494932 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/DebugUIPlugin.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/DebugUIPlugin.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2013 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -84,7 +84,7 @@
     /**
      * Managed colors
      */
-	private final Map<RGB, Color> fColors = new HashMap<RGB, Color>();
+	private final Map<RGB, Color> fColors = new HashMap<>();
 
 	/**
 	 * The constructor.
@@ -156,10 +156,6 @@
 		return resourceBundle;
 	}
 
-
-	/* (non-Javadoc)
-	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#initializeImageRegistry(org.eclipse.jface.resource.ImageRegistry)
-	 */
 	@Override
 	protected void initializeImageRegistry(ImageRegistry reg) {
 		declareImage(IMG_OBJ_PDA, PATH_OBJECT + "pda.gif"); //$NON-NLS-1$
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAViewActionProvider.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAViewActionProvider.java
index 9af6fc9..fed26eb 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAViewActionProvider.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAViewActionProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012, 2013 Wind River Systems and others.
+ * Copyright (c) 2012, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -28,11 +28,8 @@
  */
 public class PDAViewActionProvider implements IViewActionProvider {
 
-	Map<IPresentationContext, Action> fActions = new HashMap<IPresentationContext, Action>();
+	Map<IPresentationContext, Action> fActions = new HashMap<>();
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.internal.ui.viewers.model.provisional.IViewActionProvider#getAction(org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext, java.lang.String)
-	 */
 	@Override
 	public IAction getAction(IPresentationContext presentationContext, String actionID) {
 		if (presentationContext.getId().equals(IDebugUIConstants.ID_VARIABLE_VIEW) &&
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAVirtualFindAction.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAVirtualFindAction.java
index 2042279..41ddfd7 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAVirtualFindAction.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/adapters/PDAVirtualFindAction.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2013 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -130,7 +130,7 @@
 
 	private static class FindLabelProvider extends LabelProvider {
 		private final VirtualTreeModelViewer fVirtualViewer;
-		private final Map<VirtualItem, String> fTextCache = new HashMap<VirtualItem, String>();
+		private final Map<VirtualItem, String> fTextCache = new HashMap<>();
 
 		public FindLabelProvider(VirtualTreeModelViewer viewer, List<VirtualItem> items) {
 		    fVirtualViewer = viewer;
@@ -247,7 +247,7 @@
 
 		VirtualItem root = virtualViewer.getTree();
 		if (!monitor.isCanceled()) {
-			List<VirtualItem> list = new ArrayList<VirtualItem>();
+			List<VirtualItem> list = new ArrayList<>();
 			collectAllChildren(root, list);
 			FindLabelProvider labelProvider = new FindLabelProvider(virtualViewer, list);
 			VirtualItem result = performFind(list, labelProvider);
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/breakpoints/PDAToggleWatchpointsTargetFactory.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/breakpoints/PDAToggleWatchpointsTargetFactory.java
index 65d1ee0..2823bf7 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/breakpoints/PDAToggleWatchpointsTargetFactory.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/breakpoints/PDAToggleWatchpointsTargetFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -32,9 +32,9 @@
 	private static final String TOGGLE_WATCHPOINT_TARGET_MODIFICATION = "org.eclipse.debug.examples.ui.pda.watchpoint_modification"; //$NON-NLS-1$
 	private static final String TOGGLE_WATCHPOINT_TARGET_BOTH = "org.eclipse.debug.examples.ui.pda.watchpoint_both"; //$NON-NLS-1$
 
-	private static Set<String> TOGGLE_WATCHPOINTS_TARGETS = new LinkedHashSet<String>();
+	private static Set<String> TOGGLE_WATCHPOINTS_TARGETS = new LinkedHashSet<>();
 
-	private final Map<String, IToggleBreakpointsTarget> fToggleWatchpointTargets = new HashMap<String, IToggleBreakpointsTarget>(3);
+	private final Map<String, IToggleBreakpointsTarget> fToggleWatchpointTargets = new HashMap<>(3);
 
     static {
         TOGGLE_WATCHPOINTS_TARGETS.add(TOGGLE_WATCHPOINT_TARGET_BOTH);
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/editor/PDAContentAssistProcessor.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/editor/PDAContentAssistProcessor.java
index 0e0d4ad..5a95dca 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/editor/PDAContentAssistProcessor.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/editor/PDAContentAssistProcessor.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2013 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,7 +42,7 @@
             }
         }
 
-		List<CompletionProposal> proposals = new ArrayList<CompletionProposal>();
+		List<CompletionProposal> proposals = new ArrayList<>();
         String[] keywords = PDAScanner.fgKeywords;
         if (prefix.length() > 0) {
             String word = prefix.toString();
@@ -65,44 +65,28 @@
         return null;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#computeContextInformation(org.eclipse.jface.text.ITextViewer, int)
-     */
     @Override
 	public IContextInformation[] computeContextInformation(ITextViewer viewer, int offset) {
         return null;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getCompletionProposalAutoActivationCharacters()
-     */
     @Override
 	public char[] getCompletionProposalAutoActivationCharacters() {
         return null;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationAutoActivationCharacters()
-     */
     @Override
 	public char[] getContextInformationAutoActivationCharacters() {
         return null;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getErrorMessage()
-     */
     @Override
 	public String getErrorMessage() {
         return null;
     }
 
-    /* (non-Javadoc)
-     * @see org.eclipse.jface.text.contentassist.IContentAssistProcessor#getContextInformationValidator()
-     */
     @Override
 	public IContextInformationValidator getContextInformationValidator() {
         return null;
     }
-
 }
diff --git a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/views/PopHandler.java b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/views/PopHandler.java
index 1c7f6b4..c4b1a42 100644
--- a/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/views/PopHandler.java
+++ b/org.eclipse.debug.examples.ui/src/org/eclipse/debug/examples/ui/pda/views/PopHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 Wind River Systems and others.
+ * Copyright (c) 2008, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -36,7 +36,7 @@
         if (popee != null) {
             try {
                 IValue[] stack = thread.getDataStack();
-				List<IValue> restore = new ArrayList<IValue>();
+				List<IValue> restore = new ArrayList<>();
                 for (int i = 0; i < stack.length; i++) {
                     Object value = stack[i];
                     if (popee.equals(value)) {
diff --git a/org.eclipse.debug.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.debug.tests/.settings/org.eclipse.jdt.core.prefs
index 89f76db..4cdc29f 100644
--- a/org.eclipse.debug.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.debug.tests/.settings/org.eclipse.jdt.core.prefs
@@ -27,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -91,7 +92,7 @@
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -101,6 +102,7 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/expressions/ExpressionManagerTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/expressions/ExpressionManagerTests.java
index 626466e..0490555 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/expressions/ExpressionManagerTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/expressions/ExpressionManagerTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 IBM Corporation and others.
+ * Copyright (c) 2010, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -30,34 +30,25 @@
 
 	class SinlgeListener implements IExpressionListener {
 
-		List<IExpression> added = new ArrayList<IExpression>();
-		List<IExpression> removed = new ArrayList<IExpression>();
-		List<IExpression> changed = new ArrayList<IExpression>();
+		List<IExpression> added = new ArrayList<>();
+		List<IExpression> removed = new ArrayList<>();
+		List<IExpression> changed = new ArrayList<>();
 		int addedCallbacks = 0;
 		int removedCallbacks = 0;
 		int changedCallbacks = 0;
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.IExpressionListener#expressionAdded(org.eclipse.debug.core.model.IExpression)
-		 */
 		@Override
 		public void expressionAdded(IExpression expression) {
 			added.add(expression);
 			addedCallbacks++;
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.IExpressionListener#expressionRemoved(org.eclipse.debug.core.model.IExpression)
-		 */
 		@Override
 		public void expressionRemoved(IExpression expression) {
 			removed.add(expression);
 			removedCallbacks++;
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.IExpressionListener#expressionChanged(org.eclipse.debug.core.model.IExpression)
-		 */
 		@Override
 		public void expressionChanged(IExpression expression) {
 			changed.add(expression);
@@ -68,16 +59,13 @@
 
 	class MultiListener implements IExpressionsListener {
 
-		List<IExpression> added = new ArrayList<IExpression>();
-		List<IExpression> removed = new ArrayList<IExpression>();
-		List<IExpression> changed = new ArrayList<IExpression>();
+		List<IExpression> added = new ArrayList<>();
+		List<IExpression> removed = new ArrayList<>();
+		List<IExpression> changed = new ArrayList<>();
 		int addedCallbacks = 0;
 		int removedCallbacks = 0;
 		int changedCallbacks = 0;
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.IExpressionsListener#expressionsAdded(org.eclipse.debug.core.model.IExpression[])
-		 */
 		@Override
 		public void expressionsAdded(IExpression[] expressions) {
 			for (int i = 0; i < expressions.length; i++) {
@@ -86,9 +74,6 @@
 			addedCallbacks++;
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.IExpressionsListener#expressionsRemoved(org.eclipse.debug.core.model.IExpression[])
-		 */
 		@Override
 		public void expressionsRemoved(IExpression[] expressions) {
 			for (int i = 0; i < expressions.length; i++) {
@@ -97,9 +82,6 @@
 			removedCallbacks++;
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.IExpressionsListener#expressionsChanged(org.eclipse.debug.core.model.IExpression[])
-		 */
 		@Override
 		public void expressionsChanged(IExpression[] expressions) {
 			for (int i = 0; i < expressions.length; i++) {
@@ -112,15 +94,12 @@
 
 	class InsertMoveListener extends MultiListener implements IExpressionsListener2 {
 
-		List<IExpression> moved = new ArrayList<IExpression>();
-		List<IExpression> inserted = new ArrayList<IExpression>();
+		List<IExpression> moved = new ArrayList<>();
+		List<IExpression> inserted = new ArrayList<>();
 		int insertIndex = -1;
 		int movedCallbacks = 0;
 		int insertedCallbacks = 0;
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.internal.core.IExpressionsListener2#expressionsMoved(org.eclipse.debug.core.model.IExpression[], int)
-		 */
 		@Override
 		public void expressionsMoved(IExpression[] expressions, int index) {
 			for (int i = 0; i < expressions.length; i++) {
@@ -130,9 +109,6 @@
 			insertIndex = index;
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.internal.core.IExpressionsListener2#expressionsInserted(org.eclipse.debug.core.model.IExpression[], int)
-		 */
 		@Override
 		public void expressionsInserted(IExpression[] expressions, int index) {
 			for (int i = 0; i < expressions.length; i++) {
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/ArgumentParsingTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/ArgumentParsingTests.java
index a662ef3..a0230f8 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/ArgumentParsingTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/ArgumentParsingTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2012, 2013 IBM Corporation and others.
+ * Copyright (c) 2012, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -114,7 +114,7 @@
 		Process process = DebugPlugin.exec(execArgs, null);
 		BufferedReader procOut = new BufferedReader(new InputStreamReader(process.getInputStream()));
 
-		ArrayList<String> procArgs = new ArrayList<String>();
+		ArrayList<String> procArgs = new ArrayList<>();
 		String procArg;
 		while ((procArg = procOut.readLine()) != null) {
 			procArgs.add(procArg);
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileStore.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileStore.java
index 9936e82..a14b759 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileStore.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 IBM Corporation and others.
+ * Copyright (c) 2008, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,9 +42,6 @@
 	 */
 	class DebugOutputStream extends  ByteArrayOutputStream {
 
-		/* (non-Javadoc)
-		 * @see java.io.ByteArrayOutputStream#close()
-		 */
 		@Override
 		public void close() throws IOException {
 			super.close();
@@ -59,13 +56,10 @@
 		uri = id;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#childNames(int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public String[] childNames(int options, IProgressMonitor monitor) throws CoreException {
 		URI[] uris = DebugFileSystem.getDefault().getFileURIs();
-		List<String> children = new ArrayList<String>();
+		List<String> children = new ArrayList<>();
 		IPath me = getPath();
 		for (int i = 0; i < uris.length; i++) {
 			URI id = uris[i];
@@ -79,9 +73,6 @@
 		return children.toArray(new String[children.size()]);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#fetchInfo(int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileInfo fetchInfo(int options, IProgressMonitor monitor) throws CoreException {
 		byte[] contents = DebugFileSystem.getDefault().getContents(toURI());
@@ -102,9 +93,6 @@
 		return info;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#getChild(java.lang.String)
-	 */
 	@Override
 	public IFileStore getChild(String name) {
 		try {
@@ -114,9 +102,6 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#getName()
-	 */
 	@Override
 	public String getName() {
 		IPath path = getPath();
@@ -126,18 +111,12 @@
 		return ""; //$NON-NLS-1$
 	}
 
-	/**
-	 * @return
-	 */
 	private IPath getPath() {
 		URI me = toURI();
 		IPath path = new Path(me.getPath());
 		return path;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#getParent()
-	 */
 	@Override
 	public IFileStore getParent() {
 		IPath path = getPath();
@@ -150,9 +129,6 @@
 		return null;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#openInputStream(int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public InputStream openInputStream(int options, IProgressMonitor monitor) throws CoreException {
 		byte[] contents = DebugFileSystem.getDefault().getContents(toURI());
@@ -163,17 +139,11 @@
 		"File does not exist: " + toURI())); //$NON-NLS-1$
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#openOutputStream(int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public OutputStream openOutputStream(int options, IProgressMonitor monitor) throws CoreException {
 		return new DebugOutputStream();
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#mkdir(int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public IFileStore mkdir(int options, IProgressMonitor monitor) throws CoreException {
 		IFileInfo info = fetchInfo();
@@ -198,17 +168,11 @@
 		return this;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#toURI()
-	 */
 	@Override
 	public URI toURI() {
 		return uri;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileStore#delete(int, org.eclipse.core.runtime.IProgressMonitor)
-	 */
 	@Override
 	public void delete(int options, IProgressMonitor monitor) throws CoreException {
 		DebugFileSystem.getDefault().delete(toURI());
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileSystem.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileSystem.java
index fbe5798..b0ad81d 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileSystem.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/DebugFileSystem.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2013 IBM Corporation and others.
+ * Copyright (c) 2008, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -34,7 +34,7 @@
 	/**
 	 * Keys URIs to file stores for existing files
 	 */
-	private final Map<URI, byte[]> files = new HashMap<URI, byte[]>();
+	private final Map<URI, byte[]> files = new HashMap<>();
 
 	/**
 	 * Constructs the singleton
@@ -56,25 +56,16 @@
 		return system;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#getStore(java.net.URI)
-	 */
 	@Override
 	public IFileStore getStore(URI uri) {
 		return new DebugFileStore(uri);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#canDelete()
-	 */
 	@Override
 	public boolean canDelete() {
 		return true;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.core.filesystem.provider.FileSystem#canWrite()
-	 */
 	@Override
 	public boolean canWrite() {
 		return true;
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchConfigurationTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchConfigurationTests.java
index df3819c..3e0490a 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchConfigurationTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchConfigurationTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -97,29 +97,20 @@
 
 	class Listener implements ILaunchConfigurationListener {
 
-		private final List<ILaunchConfiguration> addedList = new ArrayList<ILaunchConfiguration>();
-		private final List<ILaunchConfiguration> removedList = new ArrayList<ILaunchConfiguration>();
-		private final List<ILaunchConfiguration> changedList = new ArrayList<ILaunchConfiguration>();
+		private final List<ILaunchConfiguration> addedList = new ArrayList<>();
+		private final List<ILaunchConfiguration> removedList = new ArrayList<>();
+		private final List<ILaunchConfiguration> changedList = new ArrayList<>();
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationAdded(org.eclipse.debug.core.ILaunchConfiguration)
-		 */
 		@Override
 		public void launchConfigurationAdded(ILaunchConfiguration configuration) {
 			addedList.add(configuration);
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationChanged(org.eclipse.debug.core.ILaunchConfiguration)
-		 */
 		@Override
 		public void launchConfigurationChanged(ILaunchConfiguration configuration) {
 			changedList.add(configuration);
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.debug.core.ILaunchConfigurationListener#launchConfigurationRemoved(org.eclipse.debug.core.ILaunchConfiguration)
-		 */
 		@Override
 		public void launchConfigurationRemoved(ILaunchConfiguration configuration) {
 			removedList.add(configuration);
@@ -402,7 +393,7 @@
 	 */
 	public void testSetAttributes() throws CoreException {
 		 ILaunchConfigurationWorkingCopy wc = newConfiguration(null, "config1"); //$NON-NLS-1$
-		Map<String, Object> map = new HashMap<String, Object>();
+		Map<String, Object> map = new HashMap<>();
 		 map.put("ATTR1", "ONE"); //$NON-NLS-1$ //$NON-NLS-2$
 		 map.put("ATTR2", "TWO"); //$NON-NLS-1$ //$NON-NLS-2$
 		 wc.setAttributes(map);
@@ -1163,7 +1154,7 @@
 			 // should be 5 added
 			List<?> added = listener.getAdded();
 			assertEquals("Should be 5 added configs", 5, added.size()); //$NON-NLS-1$
-			Set<String> names = new HashSet<String>();
+			Set<String> names = new HashSet<>();
 			Iterator<?> iterator = added.iterator();
 			 while (iterator.hasNext()) {
 				ILaunchConfiguration lc = (ILaunchConfiguration) iterator.next();
@@ -1220,7 +1211,7 @@
 	 */
 	public void testMapAttributePersistence() throws CoreException, IOException {
 		ILaunchConfigurationWorkingCopy c1 = newEmptyConfiguration(getProject(), "testMapAttributes1"); //$NON-NLS-1$
-		HashMap<String, String> map = new HashMap<String, String>();
+		HashMap<String, String> map = new HashMap<>();
 		map.put("Z", "z-value"); //$NON-NLS-1$ //$NON-NLS-2$
 		map.put("Y", "y-value"); //$NON-NLS-1$ //$NON-NLS-2$
 		map.put("X", "x-value"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -1251,7 +1242,7 @@
 		c1.doSave();
 
 		ILaunchConfigurationWorkingCopy c2 = newEmptyConfiguration(getProject(), "testMapAttributes2"); //$NON-NLS-1$
-		map = new HashMap<String, String>();
+		map = new HashMap<>();
 		map.put("A", "a-value"); //$NON-NLS-1$ //$NON-NLS-2$
 		map.put("Z", "z-value"); //$NON-NLS-1$ //$NON-NLS-2$
 		map.put("B", "b-value"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -1298,7 +1289,7 @@
 	 */
 	public void testSetAttributePersistence() throws CoreException, IOException {
 		ILaunchConfigurationWorkingCopy c1 = newEmptyConfiguration(getProject(), "testSetAttributes1"); //$NON-NLS-1$
-		Set<String> set = new HashSet<String>();
+		Set<String> set = new HashSet<>();
 		set.add("z-value"); //$NON-NLS-1$
 		set.add("y-value"); //$NON-NLS-1$
 		set.add("x-value"); //$NON-NLS-1$
@@ -1329,7 +1320,7 @@
 		c1.doSave();
 
 		ILaunchConfigurationWorkingCopy c2 = newEmptyConfiguration(getProject(), "testSetAttributes2"); //$NON-NLS-1$
-		set = new HashSet<String>();
+		set = new HashSet<>();
 		set.add("a-value"); //$NON-NLS-1$
 		set.add("z-value"); //$NON-NLS-1$
 		set.add("b-value"); //$NON-NLS-1$
@@ -1583,8 +1574,8 @@
 		List/* <String> */<String> types = null;
 		int size = resources.length;
 		if(resources != null && size > 0) {
-			paths = new ArrayList<String>(size);
-			types = new ArrayList<String>(size);
+			paths = new ArrayList<>(size);
+			types = new ArrayList<>(size);
 			for(int i = 0; i < size; i++) {
 				paths.add(resources[i].path);
 				types.add(resources[i].type.toString());
@@ -1636,7 +1627,7 @@
 		ILaunchConfiguration prototype = wc.doSave();
 		assertTrue("Should be a prototype", prototype.isPrototype()); //$NON-NLS-1$
 		ILaunchConfiguration[] prototypes = wc.getType().getPrototypes();
-		List<ILaunchConfiguration> list = new ArrayList<ILaunchConfiguration>();
+		List<ILaunchConfiguration> list = new ArrayList<>();
 		for (int i = 0; i < prototypes.length; i++) {
 			list.add(prototypes[i]);
 		}
@@ -1663,7 +1654,7 @@
 		ILaunchConfiguration s2 = r2.doSave();
 
 		Iterable<ILaunchConfiguration> children = prototype.getPrototypeChildren();
-		List<ILaunchConfiguration> list = new ArrayList<ILaunchConfiguration>();
+		List<ILaunchConfiguration> list = new ArrayList<>();
 		for (ILaunchConfiguration child : children) {
 			list.add(child);
 		}
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchFavoriteTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchFavoriteTests.java
index 6ddbf21..e9886cc 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchFavoriteTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/launching/LaunchFavoriteTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 IBM Corporation and others.
+ * Copyright (c) 2010, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -57,9 +57,6 @@
 		return getLaunchConfigurationManager().getLaunchHistory(IDebugUIConstants.ID_DEBUG_LAUNCH_GROUP);
 	}
 
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#setUp()
-	 */
 	@Override
 	protected void setUp() throws Exception {
 		super.setUp();
@@ -69,9 +66,6 @@
 		fConfig = getLaunchConfiguration(getName());
 	}
 
-	/* (non-Javadoc)
-	 * @see junit.framework.TestCase#tearDown()
-	 */
 	@Override
 	protected void tearDown() throws Exception {
 		// delete the configuration used during this test
@@ -104,7 +98,7 @@
 		ILaunchConfigurationWorkingCopy wc = getWorkingCopy(config);
 		List<String> list = config.getAttribute(IDebugUIConstants.ATTR_FAVORITE_GROUPS, (List<String>) null);
 		if (list == null) {
-			list = new ArrayList<String>();
+			list = new ArrayList<>();
 		}
 		list.add(groupId);
 		wc.setAttribute(IDebugUIConstants.ATTR_FAVORITE_GROUPS, list);
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/ContentTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/ContentTests.java
index aef5d9f..8a85dd6 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/ContentTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/ContentTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2015 Wind River Systems and others.
+ * Copyright (c) 2009, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -290,7 +290,7 @@
     }
 
 	private boolean areCapturedChildrenUpdatesComplete(List<IViewerUpdate> capturedUpdates, int childCount) {
-		List<Integer> expectedChildren = new ArrayList<Integer>();
+		List<Integer> expectedChildren = new ArrayList<>();
         for (int i = 0; i < childCount; i++) {
             expectedChildren.add(Integer.valueOf(i));
         }
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/PopupTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/PopupTests.java
index 4ad73eb..f1c0a97 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/PopupTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/PopupTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2013 Wind River Systems and others.
+ * Copyright (c) 2009, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -195,10 +195,10 @@
     }
 
     private boolean areTreeSelectionsEqual(ITreeSelection sel1, ITreeSelection sel2) {
-		Set<TreePath> sel1Set = new HashSet<TreePath>();
+		Set<TreePath> sel1Set = new HashSet<>();
         sel1Set.addAll( Arrays.asList(sel1.getPaths()) );
 
-		Set<TreePath> sel2Set = new HashSet<TreePath>();
+		Set<TreePath> sel2Set = new HashSet<>();
         sel2Set.addAll( Arrays.asList(sel2.getPaths()) );
 
         return sel1Set.equals(sel2Set);
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/SelectionTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/SelectionTests.java
index 9d04884..56d35dd 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/SelectionTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/SelectionTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2013 Wind River Systems and others.
+ * Copyright (c) 2009, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -40,7 +40,7 @@
 	}
 
     private static class SelectionListener implements ISelectionChangedListener {
-		private final List<SelectionChangedEvent> fEvents = new ArrayList<SelectionChangedEvent>(1);
+		private final List<SelectionChangedEvent> fEvents = new ArrayList<>(1);
 
         @Override
 		public void selectionChanged(SelectionChangedEvent event) {
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/StateTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/StateTests.java
index 9e5437e..8583605 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/StateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/StateTests.java
@@ -162,10 +162,10 @@
     }
 
     static boolean areTreeSelectionsEqual(ITreeSelection sel1, ITreeSelection sel2) {
-		Set<TreePath> sel1Set = new HashSet<TreePath>();
+		Set<TreePath> sel1Set = new HashSet<>();
         sel1Set.addAll( Arrays.asList(sel1.getPaths()) );
 
-		Set<TreePath> sel2Set = new HashSet<TreePath>();
+		Set<TreePath> sel2Set = new HashSet<>();
         sel2Set.addAll( Arrays.asList(sel2.getPaths()) );
 
         return sel1Set.equals(sel2Set);
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModel.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModel.java
index 7ec7094..fedfbc9 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModel.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModel.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2015 Wind River Systems and others.
+ * Copyright (c) 2009, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -175,7 +175,7 @@
     private IModelSelectionPolicy fModelSelectionPolicy;
     private boolean fQueueingUpdates = false;
     private boolean fDelayUpdates = false;
-	private List<IViewerUpdate> fQueuedUpdates = new LinkedList<IViewerUpdate>();
+	private List<IViewerUpdate> fQueuedUpdates = new LinkedList<>();
 
     /**
      * Constructor private.  Use static factory methods instead.
@@ -241,7 +241,7 @@
     }
 
     public void processQueuedUpdates() {
-		List<IViewerUpdate> updates = new ArrayList<IViewerUpdate>(fQueuedUpdates);
+		List<IViewerUpdate> updates = new ArrayList<>(fQueuedUpdates);
         fQueuedUpdates.clear();
         for (int i = 0; i < updates.size(); i++) {
             processUpdate(updates.get(i));
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModelUpdatesListener.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModelUpdatesListener.java
index 4c570ad..9139290 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModelUpdatesListener.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TestModelUpdatesListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2016 Wind River Systems and others.
+ * Copyright (c) 2009, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -54,30 +54,30 @@
 
 	private boolean fFailOnRedundantUpdates;
 	private boolean fFailOnRedundantLabelUpdates;
-	private Set<IViewerUpdate> fRedundantUpdates = new HashSet<IViewerUpdate>();
-	private Set<ILabelUpdate> fRedundantLabelUpdates = new HashSet<ILabelUpdate>();
-	private Set<TreePath> fRedundantHasChildrenUpdateExceptions = new HashSet<TreePath>();
-	private Set<TreePath> fRedundantChildCountUpdateExceptions = new HashSet<TreePath>();
-	private Set<TreePath> fRedundantChildrenUpdateExceptions = new HashSet<TreePath>();
-	private Set<TreePath> fRedundantLabelUpdateExceptions = new HashSet<TreePath>();
+	private Set<IViewerUpdate> fRedundantUpdates = new HashSet<>();
+	private Set<ILabelUpdate> fRedundantLabelUpdates = new HashSet<>();
+	private Set<TreePath> fRedundantHasChildrenUpdateExceptions = new HashSet<>();
+	private Set<TreePath> fRedundantChildCountUpdateExceptions = new HashSet<>();
+	private Set<TreePath> fRedundantChildrenUpdateExceptions = new HashSet<>();
+	private Set<TreePath> fRedundantLabelUpdateExceptions = new HashSet<>();
 
 	private boolean fFailOnMultipleModelUpdateSequences;
 	private boolean fFailOnMultipleLabelUpdateSequences;
 
-	private Set<TreePath> fHasChildrenUpdatesScheduled = new HashSet<TreePath>();
-	private Set<IViewerUpdate> fHasChildrenUpdatesRunning = new HashSet<IViewerUpdate>();
-	private Set<IViewerUpdate> fHasChildrenUpdatesCompleted = new HashSet<IViewerUpdate>();
-	private Map<TreePath, Set<Integer>> fChildrenUpdatesScheduled = new HashMap<TreePath, Set<Integer>>();
-	private Set<IViewerUpdate> fChildrenUpdatesRunning = new HashSet<IViewerUpdate>();
-	private Set<IViewerUpdate> fChildrenUpdatesCompleted = new HashSet<IViewerUpdate>();
-	private Set<TreePath> fChildCountUpdatesScheduled = new HashSet<TreePath>();
-	private Set<IViewerUpdate> fChildCountUpdatesRunning = new HashSet<IViewerUpdate>();
-	private Set<IViewerUpdate> fChildCountUpdatesCompleted = new HashSet<IViewerUpdate>();
-	private Set<TreePath> fLabelUpdates = new HashSet<TreePath>();
-	private Set<ILabelUpdate> fLabelUpdatesRunning = new HashSet<ILabelUpdate>();
-	private Set<ILabelUpdate> fLabelUpdatesCompleted = new HashSet<ILabelUpdate>();
-	private Set<TestModel> fProxyModels = new HashSet<TestModel>();
-	private Set<TreePath> fStateUpdates = new HashSet<TreePath>();
+	private Set<TreePath> fHasChildrenUpdatesScheduled = new HashSet<>();
+	private Set<IViewerUpdate> fHasChildrenUpdatesRunning = new HashSet<>();
+	private Set<IViewerUpdate> fHasChildrenUpdatesCompleted = new HashSet<>();
+	private Map<TreePath, Set<Integer>> fChildrenUpdatesScheduled = new HashMap<>();
+	private Set<IViewerUpdate> fChildrenUpdatesRunning = new HashSet<>();
+	private Set<IViewerUpdate> fChildrenUpdatesCompleted = new HashSet<>();
+	private Set<TreePath> fChildCountUpdatesScheduled = new HashSet<>();
+	private Set<IViewerUpdate> fChildCountUpdatesRunning = new HashSet<>();
+	private Set<IViewerUpdate> fChildCountUpdatesCompleted = new HashSet<>();
+	private Set<TreePath> fLabelUpdates = new HashSet<>();
+	private Set<ILabelUpdate> fLabelUpdatesRunning = new HashSet<>();
+	private Set<ILabelUpdate> fLabelUpdatesCompleted = new HashSet<>();
+	private Set<TestModel> fProxyModels = new HashSet<>();
+	private Set<TreePath> fStateUpdates = new HashSet<>();
 	private int fViewerUpdatesStarted = 0;
 	private int fViewerUpdatesComplete = 0;
 	private int fViewerUpdatesStartedAtReset;
@@ -260,7 +260,7 @@
 	public void addChildreUpdate(TreePath path, int index) {
 		Set<Integer> childrenIndexes = fChildrenUpdatesScheduled.get(path);
 		if (childrenIndexes == null) {
-			childrenIndexes = new TreeSet<Integer>();
+			childrenIndexes = new TreeSet<>();
 			fChildrenUpdatesScheduled.put(path, childrenIndexes);
 		}
 		childrenIndexes.add(Integer.valueOf(index));
@@ -352,7 +352,7 @@
 	 * @return corresponding tree path
 	 */
 	private TreePath getViewerTreePath(IModelDelta node) {
-		ArrayList<Object> list = new ArrayList<Object>();
+		ArrayList<Object> list = new ArrayList<>();
 		IModelDelta parentDelta = node.getParentDelta();
 		while (parentDelta != null) {
 			list.add(0, node.getElement());
@@ -404,7 +404,7 @@
 					fChildCountUpdatesScheduled.add(path);
 				}
 				if ((flags & CHILDREN_UPDATES) != 0) {
-					Set<Integer> childrenIndexes = new HashSet<Integer>();
+					Set<Integer> childrenIndexes = new HashSet<>();
 					for (int i = 0; i < children.length; i++) {
 						if (!isFiltered(children[i], filters)) {
 							childrenIndexes.add(Integer.valueOf(i));
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TreeModelViewerAutopopulateAgent.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TreeModelViewerAutopopulateAgent.java
index 198ea9b..11e17d1 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TreeModelViewerAutopopulateAgent.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/TreeModelViewerAutopopulateAgent.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2013 Wind River Systems and others.
+ * Copyright (c) 2009, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,9 +24,6 @@
 import org.eclipse.swt.widgets.TreeItem;
 import org.eclipse.swt.widgets.Widget;
 
-/**
- *
- */
 public class TreeModelViewerAutopopulateAgent implements IViewerUpdateListener {
 
     private TreeModelViewer fViewer;
@@ -81,7 +78,7 @@
     private TreePath getTreePath(Widget w) {
         if (w instanceof TreeItem) {
             TreeItem item = (TreeItem)w;
-			LinkedList<Object> segments = new LinkedList<Object>();
+			LinkedList<Object> segments = new LinkedList<>();
             while (item != null) {
                 Object segment = item.getData();
                 Assert.isNotNull(segment);
diff --git a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/UpdateTests.java b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/UpdateTests.java
index b665215..0989273 100644
--- a/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/UpdateTests.java
+++ b/org.eclipse.debug.tests/src/org/eclipse/debug/tests/viewer/model/UpdateTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2013 Wind River Systems and others.
+ * Copyright (c) 2009, 2018 Wind River Systems and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -428,7 +428,7 @@
 
         }
 
-		ArrayList<IViewerUpdate> updates = new ArrayList<IViewerUpdate>(model.getQueuedUpdates());
+		ArrayList<IViewerUpdate> updates = new ArrayList<>(model.getQueuedUpdates());
         model.getQueuedUpdates().clear();
         for (int i = updates.size() - 1; i >= 0; i--) {
             model.processUpdate(updates.get(i));
@@ -518,7 +518,7 @@
 
         }
 
-		ArrayList<IViewerUpdate> updates = new ArrayList<IViewerUpdate>(model.getQueuedUpdates());
+		ArrayList<IViewerUpdate> updates = new ArrayList<>(model.getQueuedUpdates());
         model.getQueuedUpdates().clear();
         for (int i = updates.size() - 1; i >= 0; i--) {
             model.processUpdate(updates.get(i));
@@ -638,7 +638,7 @@
     }
 
 	private void completeQueuedUpdatesOfType(TestModel model, Class<?> updateClass) {
-		List<IViewerUpdate> updatesToComplete = new LinkedList<IViewerUpdate>();
+		List<IViewerUpdate> updatesToComplete = new LinkedList<>();
 
 		for (Iterator<IViewerUpdate> itr = model.getQueuedUpdates().iterator(); itr.hasNext();) {
             IViewerUpdate update = itr.next();
diff --git a/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs
index 98f0b7e..129d9d8 100644
--- a/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs
+++ b/org.eclipse.ui.externaltools/.settings/org.eclipse.jdt.core.prefs
@@ -11,8 +11,11 @@
 org.eclipse.jdt.core.compiler.annotation.inheritNullAnnotations=disabled
 org.eclipse.jdt.core.compiler.annotation.missingNonNullByDefaultAnnotation=ignore
 org.eclipse.jdt.core.compiler.annotation.nonnull=org.eclipse.jdt.annotation.NonNull
+org.eclipse.jdt.core.compiler.annotation.nonnull.secondary=
 org.eclipse.jdt.core.compiler.annotation.nonnullbydefault=org.eclipse.jdt.annotation.NonNullByDefault
+org.eclipse.jdt.core.compiler.annotation.nonnullbydefault.secondary=
 org.eclipse.jdt.core.compiler.annotation.nullable=org.eclipse.jdt.annotation.Nullable
+org.eclipse.jdt.core.compiler.annotation.nullable.secondary=
 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
@@ -24,6 +27,7 @@
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.doc.comment.support=enabled
 org.eclipse.jdt.core.compiler.maxProblemPerUnit=100
+org.eclipse.jdt.core.compiler.problem.APILeak=warning
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -74,19 +78,21 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=error
 org.eclipse.jdt.core.compiler.problem.nonnullParameterAnnotationDropped=warning
+org.eclipse.jdt.core.compiler.problem.nonnullTypeVariableFromLegacyInvocation=warning
 org.eclipse.jdt.core.compiler.problem.nullAnnotationInferenceConflict=error
 org.eclipse.jdt.core.compiler.problem.nullReference=error
 org.eclipse.jdt.core.compiler.problem.nullSpecViolation=error
 org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=warning
 org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod=warning
 org.eclipse.jdt.core.compiler.problem.parameterAssignment=warning
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=warning
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=warning
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.rawTypeReference=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.redundantNullCheck=ignore
-org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
 org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
@@ -96,12 +102,16 @@
 org.eclipse.jdt.core.compiler.problem.suppressWarnings=enabled
 org.eclipse.jdt.core.compiler.problem.syntacticNullAnalysisForFields=disabled
 org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation=ignore
+org.eclipse.jdt.core.compiler.problem.terminalDeprecation=warning
 org.eclipse.jdt.core.compiler.problem.typeParameterHiding=warning
 org.eclipse.jdt.core.compiler.problem.unavoidableGenericTypeProblems=disabled
 org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation=warning
 org.eclipse.jdt.core.compiler.problem.unclosedCloseable=warning
 org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock=ignore
 org.eclipse.jdt.core.compiler.problem.unhandledWarningToken=error
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentType=warning
+org.eclipse.jdt.core.compiler.problem.unlikelyCollectionMethodArgumentTypeStrict=disabled
+org.eclipse.jdt.core.compiler.problem.unlikelyEqualsArgumentType=info
 org.eclipse.jdt.core.compiler.problem.unnecessaryElse=ignore
 org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=error
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
@@ -110,6 +120,7 @@
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionExemptExceptionAndThrowable=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionIncludeDocCommentReference=enabled
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding=disabled
+org.eclipse.jdt.core.compiler.problem.unusedExceptionParameter=ignore
 org.eclipse.jdt.core.compiler.problem.unusedImport=error
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
diff --git a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java
index 6b5596b..1adcaf8 100644
--- a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java
+++ b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/launchConfigurations/ExternalToolsBuildTab.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -73,28 +73,19 @@
 	private Button fReferencedProjects;
 
 	// projects to build (empty if none)
-	private List<IProject> fProjects = new ArrayList<IProject>();
+	private List<IProject> fProjects = new ArrayList<>();
 
 	class ProjectsContentProvider implements IStructuredContentProvider {
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
-		 */
 		@Override
 		public Object[] getElements(Object inputElement) {
 			return ((IWorkspace)inputElement).getRoot().getProjects();
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IContentProvider#dispose()
-		 */
 		@Override
 		public void dispose() {
 		}
 
-		/* (non-Javadoc)
-		 * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object)
-		 */
 		@Override
 		public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
 		}
@@ -108,9 +99,6 @@
 		setHelpContextId(IExternalToolsHelpContextIds.EXTERNAL_TOOLS_LAUNCH_CONFIGURATION_DIALOG_BUILD_TAB);
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite)
-	 */
 	@Override
 	public void createControl(Composite parent) {
 		Composite mainComposite = new Composite(parent, SWT.NONE);
@@ -193,23 +181,17 @@
 			return;
 		}
 		Object[] res = dialog.getResult();
-		fProjects = new ArrayList<IProject>(res.length);
+		fProjects = new ArrayList<>(res.length);
 		for (int i = 0; i < res.length; i++) {
 			fProjects.add((IProject) res[i]);
 		}
 		updateLaunchConfigurationDialog();
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
-	 */
 	@Override
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration)
-	 */
 	@Override
 	public void initializeFrom(ILaunchConfiguration configuration) {
 		updateScope(configuration);
@@ -254,16 +236,13 @@
 			} else if (scope.startsWith("${projects:")) { //$NON-NLS-1$
 				fSpecificProjectsButton.setSelection(true);
 				IProject[] projects = getBuildProjects(configuration, IExternalToolConstants.ATTR_BUILD_SCOPE);
-				fProjects = new ArrayList<IProject>(projects.length);
+				fProjects = new ArrayList<>(projects.length);
 				for (int i = 0; i < projects.length; i++) {
 					fProjects.add(projects[i]);
 				}
 			}
 		}
 	}
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
-	 */
 	@Override
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
 		String scope = generateScopeMemento();
@@ -296,9 +275,6 @@
 		return "${none}"; //$NON-NLS-1$
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
-	 */
 	@Override
 	public String getName() {
 		return ExternalToolsLaunchConfigurationMessages.ExternalToolsBuildTab_8;
@@ -326,9 +302,6 @@
 		fReferencedProjects.setEnabled(fBuildButton.getSelection() && (fProjectButton.getSelection() || fSpecificProjectsButton.getSelection()));
 	}
 
-	/**
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
-	 */
 	@Override
 	public Image getImage() {
 		return ExternalToolsImages.getImage(org.eclipse.ui.externaltools.internal.model.IExternalToolConstants.IMG_TAB_BUILD);
@@ -391,17 +364,11 @@
 		return buf.toString();
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#activated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
-	 */
 	@Override
 	public void activated(ILaunchConfigurationWorkingCopy workingCopy) {
 		// do nothing on activation
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#deactivated(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy)
-	 */
 	@Override
 	public void deactivated(ILaunchConfigurationWorkingCopy workingCopy) {
 		// do nothing on deactivation
diff --git a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
index a0bd3a0..551c092 100644
--- a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
+++ b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/BuilderPropertyPage.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -129,7 +129,7 @@
 	 * Collection of configurations created while the page is open.
 	 * Stored here so they can be deleted if the page is cancelled.
 	 */
-	private List<ILaunchConfiguration> newConfigList = new ArrayList<ILaunchConfiguration>();
+	private List<ILaunchConfiguration> newConfigList = new ArrayList<>();
 
 	private SelectionListener buttonListener= new SelectionAdapter() {
 		@Override
@@ -296,9 +296,6 @@
 		return button;
 	}
 
-	/* (non-Javadoc)
-	 * Method declared on PreferencePage.
-	 */
 	@Override
 	protected Control createContents(Composite parent) {
 
@@ -429,9 +426,6 @@
 		viewer.getTable().setFocus();
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent)
-	 */
 	@Override
 	public void checkStateChanged(CheckStateChangedEvent event) {
 		Object element= event.getElement();
@@ -491,7 +485,7 @@
 	private void enableCommand(ICommand command, boolean enable) {
 		Map<String, String> args = command.getArguments();
 		if (args == null) {
-			args = new HashMap<String, String>(1);
+			args = new HashMap<>(1);
 		}
 		args.put(COMMAND_ENABLED, Boolean.toString(enable));
 		command.setArguments(args);
@@ -505,7 +499,7 @@
 	private void handleImportButtonPressed() {
 		ILaunchManager manager= DebugPlugin.getDefault().getLaunchManager();
 		List<ILaunchConfigurationType> toolTypes = getConfigurationTypes(IExternalToolConstants.ID_EXTERNAL_TOOLS_LAUNCH_CATEGORY);
-		List<ILaunchConfiguration> configurations = new ArrayList<ILaunchConfiguration>();
+		List<ILaunchConfiguration> configurations = new ArrayList<>();
 		for (ILaunchConfigurationType type : toolTypes) {
 			try {
 				ILaunchConfiguration[] configs = manager.getLaunchConfigurations(type);
@@ -569,12 +563,12 @@
 				Object item= iterator.next();
 				if (item instanceof ILaunchConfiguration) {
 					if (configsToBeDeleted == null) {
-						configsToBeDeleted = new ArrayList<ILaunchConfiguration>(numSelected);
+						configsToBeDeleted = new ArrayList<>(numSelected);
 					}
 					configsToBeDeleted.add((ILaunchConfiguration) item);
 				} else if (item instanceof ICommand) {
 					if (commandsToBeDeleted == null) {
-						commandsToBeDeleted = new ArrayList<ICommand>(numSelected);
+						commandsToBeDeleted = new ArrayList<>(numSelected);
 					}
 					commandsToBeDeleted.add((ICommand) item);
 				}
@@ -682,7 +676,7 @@
 	 */
 	private List<ILaunchConfigurationType> getConfigurationTypes(String category) {
 		ILaunchConfigurationType types[] = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurationTypes();
-		List<ILaunchConfigurationType> externalToolTypes = new ArrayList<ILaunchConfigurationType>();
+		List<ILaunchConfigurationType> externalToolTypes = new ArrayList<>();
 		for (int i = 0; i < types.length; i++) {
 			ILaunchConfigurationType configurationType = types[i];
 			if (category.equals(configurationType.getCategory())) {
@@ -982,7 +976,7 @@
 		//get all the build commands
 		int numCommands = itemData.length;
 		monitor.beginTask(ExternalToolsUIMessages.BuilderPropertyPage_3, numCommands + 1);
-		List<ICommand> possibleCommands = new ArrayList<ICommand>(numCommands);
+		List<ICommand> possibleCommands = new ArrayList<>(numCommands);
 		for (int i = 0; i < numCommands; i++) {
 			Object data = itemData[i];
 			if (data instanceof ICommand) {
@@ -1086,7 +1080,7 @@
 			newCommand.setBuilderName(builderName);
 			newCommand.setArguments(args);
 			if (configsToBeDeleted == null) {
-				configsToBeDeleted = new ArrayList<ILaunchConfiguration>();
+				configsToBeDeleted = new ArrayList<>();
 			}
 			configsToBeDeleted.add(config);
 			return newCommand;
@@ -1215,9 +1209,6 @@
 		return false;
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.preference.IPreferencePage#performCancel()
-	 */
 	@Override
 	public boolean performCancel() {
 		for (ILaunchConfiguration config : newConfigList) {
diff --git a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/FileSelectionDialog.java b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/FileSelectionDialog.java
index db51b49..f91f368 100644
--- a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/FileSelectionDialog.java
+++ b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/FileSelectionDialog.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -102,9 +102,6 @@
 	    }
 	}
 
-	/*
-	 * (non-Javadoc) Method declared in Window.
-	 */
 	@Override
 	protected void configureShell(Shell shell) {
 		super.configureShell(shell);
@@ -117,9 +114,6 @@
 		initializeDialog();
 	}
 
-	/*
-	 * (non-Javadoc) Method declared on Dialog.
-	 */
 	@Override
 	protected Control createDialogArea(Composite parent) {
 		// page group
@@ -172,7 +166,7 @@
 					IResource[] members = null;
 					try {
 						members = ((IContainer) o).members();
-						List<IResource> accessibleMembers = new ArrayList<IResource>(members.length);
+						List<IResource> accessibleMembers = new ArrayList<>(members.length);
 						for (int i = 0; i < members.length; i++) {
 							IResource resource = members[i];
 							if (resource.isAccessible()) {
@@ -186,7 +180,7 @@
 					}
 
 					//filter out the desired resource types
-					ArrayList<IResource> results = new ArrayList<IResource>();
+					ArrayList<IResource> results = new ArrayList<>();
 					for (int i = 0; i < members.length; i++) {
 						//And the test bits with the resource types to see if
 						// they are what we want
diff --git a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/TreeAndListGroup.java b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/TreeAndListGroup.java
index 4b50ef9..58cb325 100644
--- a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/TreeAndListGroup.java
+++ b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/ui/TreeAndListGroup.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2013 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -42,8 +42,8 @@
 public class TreeAndListGroup implements ISelectionChangedListener {
 	private Object root;
 	private Object currentTreeSelection;
-	private List<ISelectionChangedListener> selectionChangedListeners = new ArrayList<ISelectionChangedListener>();
-	private List<IDoubleClickListener> doubleClickListeners = new ArrayList<IDoubleClickListener>();
+	private List<ISelectionChangedListener> selectionChangedListeners = new ArrayList<>();
+	private List<IDoubleClickListener> doubleClickListeners = new ArrayList<>();
 
 	private ITreeContentProvider treeContentProvider;
 	private IStructuredContentProvider listContentProvider;
@@ -243,9 +243,6 @@
 		treeViewer.setInput(root);
 	}
 
-	/* (non-Javadoc)
-	 * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
-	 */
 	@Override
 	public void selectionChanged(SelectionChangedEvent event) {
 		IStructuredSelection selection = (IStructuredSelection) event.getSelection();
diff --git a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/variables/BuildFilesResolver.java b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/variables/BuildFilesResolver.java
index 53e1892..bdcdc5e 100644
--- a/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/variables/BuildFilesResolver.java
+++ b/org.eclipse.ui.externaltools/External Tools Base/org/eclipse/ui/externaltools/internal/variables/BuildFilesResolver.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2013 Matthew Conway and others.
+ * Copyright (c) 2007, 2018 Matthew Conway and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -43,7 +43,7 @@
         if (buildDelta != null)
         {
             final StringBuffer fileList = new StringBuffer();
-			final Set<String> changedResources = new LinkedHashSet<String>();
+			final Set<String> changedResources = new LinkedHashSet<>();
 
             // Use the argument to determine which deltas to visit - if none,
             // then defaults to all
