diff --git a/bundles/archived/org.eclipse.equinox.console.tests/.classpath b/bundles/archived/org.eclipse.equinox.console.tests/.classpath
index a7d4b62..eca7bdb 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/.classpath
+++ b/bundles/archived/org.eclipse.equinox.console.tests/.classpath
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/.settings/org.eclipse.jdt.core.prefs b/bundles/archived/org.eclipse.equinox.console.tests/.settings/org.eclipse.jdt.core.prefs
index af0f20f..4a1d020 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/bundles/archived/org.eclipse.equinox.console.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,111 @@
 eclipse.preferences.version=1
+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.targetPlatform=1.5
-org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+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
+org.eclipse.jdt.core.compiler.problem.comparingIdentical=warning
+org.eclipse.jdt.core.compiler.problem.deadCode=warning
+org.eclipse.jdt.core.compiler.problem.deprecation=warning
+org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
+org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
+org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.5
+org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=warning
+org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
+org.eclipse.jdt.core.compiler.problem.fatalOptionalError=disabled
+org.eclipse.jdt.core.compiler.problem.fieldHiding=ignore
+org.eclipse.jdt.core.compiler.problem.finalParameterBound=warning
+org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally=warning
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=error
+org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock=warning
+org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
+org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
+org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
+org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
+org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
+org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
+org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
+org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
+org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
+org.eclipse.jdt.core.compiler.problem.noEffectAssignment=warning
+org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
+org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
+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=warning
+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=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
+org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
+org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
+org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
+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=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
+org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
+org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
+org.eclipse.jdt.core.compiler.problem.staticAccessReceiver=warning
+org.eclipse.jdt.core.compiler.problem.suppressOptionalErrors=disabled
+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=enabled
+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=warning
+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=warning
+org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
+org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
+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=warning
+org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
+org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
+org.eclipse.jdt.core.compiler.problem.unusedObjectAllocation=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocCommentReference=enabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract=disabled
+org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete=disabled
+org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
+org.eclipse.jdt.core.compiler.problem.unusedTypeParameter=ignore
+org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
+org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/META-INF/MANIFEST.MF b/bundles/archived/org.eclipse.equinox.console.tests/META-INF/MANIFEST.MF
index aa559b3..6abdf9a 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/META-INF/MANIFEST.MF
+++ b/bundles/archived/org.eclipse.equinox.console.tests/META-INF/MANIFEST.MF
@@ -2,9 +2,9 @@
 Bundle-ManifestVersion: 2
 Bundle-Name: Console tests
 Bundle-SymbolicName: org.eclipse.equinox.console.tests
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.1.0.qualifier
 Bundle-ActivationPolicy: lazy
-Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Import-Package: junit.framework;version="4.8.1",
  org.apache.sshd.client.future,
  org.easymock;version="2.4.0",
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/pom.xml b/bundles/archived/org.eclipse.equinox.console.tests/pom.xml
index 3584b36..2e2ebdf 100644
--- a/bundles/archived/org.eclipse.equinox.console.tests/pom.xml
+++ b/bundles/archived/org.eclipse.equinox.console.tests/pom.xml
@@ -19,6 +19,6 @@
   </parent>
   <groupId>org.eclipse.equinox</groupId>
   <artifactId>org.eclipse.equinox.console.tests</artifactId>
-  <version>1.0.0-SNAPSHOT</version>
+  <version>1.1.0-SNAPSHOT</version>
   <packaging>eclipse-test-plugin</packaging>
 </project>
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/Activator.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/Activator.java
deleted file mode 100755
index e024b14..0000000
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/Activator.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 SAP AG
- * 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
- * http://www.eclipse.org/legal/epl-v10.html
- * 
- * Contributors:
- *     Lazar Kirchev, SAP AG - initial API and implementation
- *******************************************************************************/
-
-package org.eclipse.equinox.console;
-
-import org.osgi.framework.BundleActivator;
-import org.osgi.framework.BundleContext;
-
-/**
- * The activator class controls the plug-in life cycle
- */
-public class Activator implements BundleActivator {
-	private static BundleContext context;
-	
-	public void start(BundleContext context) throws Exception {
-		this.context = context;
-	}
-
-	
-	public void stop(BundleContext context) throws Exception {
-		this.context = null;
-	}
-
-	public static BundleContext getContext() {
-		return context;
-	}
-}
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/ActivatorTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/ActivatorTests.java
index 677fc40..a07cab4 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/ActivatorTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/ActivatorTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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 @@
 
 	@Test
 	public void testGetCommandMethods() {
-		Set<String> commandNames = new HashSet<String>();
+		Set<String> commandNames = new HashSet<>();
 		commandNames.add("_testMethod1");
 		commandNames.add("_testMethod2");
 		commandNames.add("_testMethod3");
@@ -67,10 +67,7 @@
 			
 		}
 		
-		private void _method(CommandInterpreter i) {
-			
-		}
-		
+		@Override
 		public String getHelp() {
 			// TODO Auto-generated method stub
 			return null;
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapterTest.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapterTest.java
index 91ce5f5..153cf08 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapterTest.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapterTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -29,7 +29,7 @@
 	public void testMain() throws Exception {
 		CommandProvider provider = new TestCommandProvider();
 		Method[] methods = TestCommandProvider.class.getMethods();
-		Set<Method> m = new HashSet<Method>();
+		Set<Method> m = new HashSet<>();
 		for (Method method : methods) {
 			if (method.getName().startsWith("_")) {
 				m.add(method);
@@ -54,6 +54,7 @@
         	return i.nextArgument();
         }
         
+		@Override
 		public String getHelp() {
 			return "this is a test command provider";
 		}
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleInputStreamTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleInputStreamTests.java
index b3732bb..815c5bc 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleInputStreamTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleInputStreamTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -18,28 +18,34 @@
 
 public class ConsoleInputStreamTests {
 
-    private static final int DATA_LENGTH = 4;
-    
-    @Test
-    public void addReadBufferTest() throws Exception {
-        ConsoleInputStream in = new ConsoleInputStream();
-        byte[] data = new byte[] { (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd' };
-        in.add(data);
-        byte[] read = new byte[DATA_LENGTH];
-        for (int i = 0; i < DATA_LENGTH; i++) {
-            in.read(read, i, 1);
-            Assert.assertEquals("Incorrect char read; position " + i + " expected: " + data[i] + ", actual: " + read[i], read[i], data[i]);
-        }
-    }
+	private static final int DATA_LENGTH = 4;
 
-    @Test
-    public void addReadTest() throws Exception {
-        ConsoleInputStream in = new ConsoleInputStream();
-        byte[] data = new byte[] { (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd' };
-        in.add(data);
-        for (int i = 0; i < DATA_LENGTH; i++) {
-            byte symbol = (byte) in.read();
-            Assert.assertEquals("Incorrect char read; position " + i + " expected: " + data[i] + ", actual: " + symbol, symbol, data[i]);
-        }
-    }
+	@Test
+	public void addReadBufferTest() throws Exception {
+		try (ConsoleInputStream in = new ConsoleInputStream()) {
+			byte[] data = new byte[] { (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd' };
+			in.add(data);
+			byte[] read = new byte[DATA_LENGTH];
+			for (int i = 0; i < DATA_LENGTH; i++) {
+				in.read(read, i, 1);
+				Assert.assertEquals(
+						"Incorrect char read; position " + i + " expected: " + data[i] + ", actual: " + read[i],
+						read[i], data[i]);
+			}
+		}
+	}
+
+	@Test
+	public void addReadTest() throws Exception {
+		try (ConsoleInputStream in = new ConsoleInputStream()) {
+			byte[] data = new byte[] { (byte) 'a', (byte) 'b', (byte) 'c', (byte) 'd' };
+			in.add(data);
+			for (int i = 0; i < DATA_LENGTH; i++) {
+				byte symbol = (byte) in.read();
+				Assert.assertEquals(
+						"Incorrect char read; position " + i + " expected: " + data[i] + ", actual: " + symbol, symbol,
+						data[i]);
+			}
+		}
+	}
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleOutputStreamTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleOutputStreamTests.java
index c1044ee..4c241d8 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleOutputStreamTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/common/ConsoleOutputStreamTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -23,19 +23,20 @@
     @Test
     public void testWrite() throws Exception {
         ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
-        ConsoleOutputStream out = new ConsoleOutputStream(byteOut);
-        byte[] data = new byte[] { 'a', 'b', 'c', 'd' };
-        for (byte b : data) {
-            out.write(b);
-        }
-        out.flush();
-        byte[] res = byteOut.toByteArray();
+		try (ConsoleOutputStream out = new ConsoleOutputStream(byteOut)) {
+			byte[] data = new byte[] { 'a', 'b', 'c', 'd' };
+			for (byte b : data) {
+				out.write(b);
+			}
+			out.flush();
+			byte[] res = byteOut.toByteArray();
 
-        Assert.assertNotNull("Bytes not written; result null", res);
+			Assert.assertNotNull("Bytes not written; result null", res);
         Assert.assertFalse("Bytes not written; result empty", res.length == 0);
 
         for (int i = 0; i < DATA_LENGTH; i++) {
             Assert.assertEquals("Wrong char read. Position " + i + ", expected " + data[i] + ", read " + res[i], data[i], res[i]);
         }
+        }
     }
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CommandNamesCompleterTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CommandNamesCompleterTests.java
index dcbd19c..f416a21 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CommandNamesCompleterTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CommandNamesCompleterTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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 @@
 
 	@Test
 	public void testGetCandidates() throws Exception {
-		Set<String> commands = new HashSet<String>();
+		Set<String> commands = new HashSet<>();
 		commands.add("equinox:bundles");
 		commands.add("equinox:diag");
 		commands.add("equinox:setprop");
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CompletionHandlerTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CompletionHandlerTests.java
index 07663db..4d2122e 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CompletionHandlerTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/CompletionHandlerTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -72,13 +72,13 @@
 		expect(context.getServiceReferences("org.eclipse.equinox.console.commands.CommandsTracker", null)).andReturn(new ServiceReference[]{}).anyTimes();
 		replay(context);
 		
-		Set<String> variables = new HashSet<String>();
+		Set<String> variables = new HashSet<>();
 		variables.add("SCOPE");
 		variables.add("PROMPT");
 		variables.add("ECHO_ON");
 		variables.add("ECHO");
 		
-		Set<String> commands = new HashSet<String>();
+		Set<String> commands = new HashSet<>();
 		commands.add("equinox:bundles");
 		commands.add("equinox:diag");
 		commands.add("equinox:setprop");
@@ -166,10 +166,10 @@
 	
 	private void createFile(File parentDir, String filename) throws IOException {
 		File file = new File(parentDir.getAbsolutePath() + File.separator + filename);
-		PrintWriter out = new PrintWriter(new FileOutputStream(file));
-		out.write(filename);
-		out.flush();
-		out.close();
+		try (PrintWriter out = new PrintWriter(new FileOutputStream(file))) {
+			out.write(filename);
+			out.flush();
+		}
 	}
 
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/FileNamesCompleterTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/FileNamesCompleterTests.java
index 91540a1..e79a9d4 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/FileNamesCompleterTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/FileNamesCompleterTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -89,9 +89,9 @@
 	
 	private void createFile(File parentDir, String filename) throws IOException {
 		File file = new File(parentDir.getAbsolutePath() + File.separator + filename);
-		PrintWriter out = new PrintWriter(new FileOutputStream(file));
-		out.write(filename);
-		out.flush();
-		out.close();
+		try (PrintWriter out = new PrintWriter(new FileOutputStream(file))) {
+			out.write(filename);
+			out.flush();
+		}
 	}
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/StringsCompleterTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/StringsCompleterTests.java
index 05096ba..0df1581 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/StringsCompleterTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/StringsCompleterTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -23,7 +23,7 @@
 
 	@Test
 	public void testGetCandidates() {
-		Set<String> strings = new HashSet<String>();
+		Set<String> strings = new HashSet<>();
 		strings.add("command");
 		strings.add("SCOPE");
 		strings.add("equinox:bundles");
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/VariableNamesCompleterTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/VariableNamesCompleterTests.java
index 2b6ca52..a753bee 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/VariableNamesCompleterTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/completion/VariableNamesCompleterTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -25,7 +25,7 @@
 
 	@Test
 	public void testGetCandidates() {
-		Set<String> variables = new HashSet<String>();
+		Set<String> variables = new HashSet<>();
 		variables.add("SCOPE");
 		variables.add("PROMPT");
 		variables.add("ECHO_ON");
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputHandlerTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputHandlerTests.java
index e595b62..f04b6cf 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputHandlerTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputHandlerTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -22,35 +22,35 @@
 
 public class ConsoleInputHandlerTests {
 
-    private static final long WAIT_TIME = 10000;
+	private static final long WAIT_TIME = 10000;
 
-    @Test
-    public void testHandler() throws Exception {
-        PipedInputStream input = new PipedInputStream();
-        PipedOutputStream output = new PipedOutputStream(input);
-        ConsoleInputStream in = new ConsoleInputStream();
-        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
-        ConsoleInputHandler handler = new ConsoleInputHandler(input, in, byteOut);
-        byte[] testInput = new byte[] { 'a', 'b', 'c', 'd', 'e', '\r', '\n' };
-        byte[] expected = new byte[] { 'a', 'b', 'c', 'd', 'e', '\n' };
-        output.write(testInput);
-        output.flush();
-        handler.start();
+	@Test
+	public void testHandler() throws Exception {
+		try (PipedInputStream input = new PipedInputStream(); PipedOutputStream output = new PipedOutputStream(input)) {
+			ConsoleInputStream in = new ConsoleInputStream();
+			ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+			ConsoleInputHandler handler = new ConsoleInputHandler(input, in, byteOut);
+			byte[] testInput = new byte[] { 'a', 'b', 'c', 'd', 'e', '\r', '\n' };
+			byte[] expected = new byte[] { 'a', 'b', 'c', 'd', 'e', '\n' };
+			output.write(testInput);
+			output.flush();
+			handler.start();
 
-        try {
-            Thread.sleep(WAIT_TIME);
-        } catch (Exception e) {
-            // do nothing
-        }
+			try {
+				Thread.sleep(WAIT_TIME);
+			} catch (Exception e) {
+				// do nothing
+			}
 
-        byte[] read = new byte[expected.length];
-        in.read(read, 0, expected.length);
-        for (int i = 0; i < expected.length; i++) {
-            Assert.assertEquals("Incorrect char read. Position " + i + ", expected " + expected[i] + ", read " + read[i], expected[i], read[i]);
-        }
+			byte[] read = new byte[expected.length];
+			in.read(read, 0, expected.length);
+			for (int i = 0; i < expected.length; i++) {
+				Assert.assertEquals(
+						"Incorrect char read. Position " + i + ", expected " + expected[i] + ", read " + read[i],
+						expected[i], read[i]);
+			}
 
-        output.close();
-        input.close();
-    }
+		}
+	}
 
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputScannerTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputScannerTests.java
index 5c07ca1..6c9459a 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputScannerTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/supportability/ConsoleInputScannerTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -60,7 +60,7 @@
 
     @Test
     public void test() throws Exception {
-        Set<TerminalTypeMappings> supportedEscapeSequences = new HashSet<TerminalTypeMappings>();
+        Set<TerminalTypeMappings> supportedEscapeSequences = new HashSet<>();
         supportedEscapeSequences.add(new ANSITerminalTypeMappings());
         supportedEscapeSequences.add(new VT100TerminalTypeMappings());
         supportedEscapeSequences.add(new VT220TerminalTypeMappings());
@@ -69,7 +69,7 @@
 
         for (TerminalTypeMappings ttMappings : supportedEscapeSequences) {
             Map<String, KEYS> escapesToKey = ttMappings.getEscapesToKey();
-            Map<KEYS, byte[]> keysToEscapes = new HashMap<KEYS, byte[]>();
+            Map<KEYS, byte[]> keysToEscapes = new HashMap<>();
             for (Entry<String, KEYS> entry : escapesToKey.entrySet()) {
                 keysToEscapes.put(entry.getValue(), entry.getKey().getBytes());
             }
@@ -194,7 +194,7 @@
 		expect(context.getServiceReferences("org.eclipse.equinox.console.commands.CommandsTracker", null)).andReturn(new ServiceReference[]{});
 		replay(context);
 		
-		Set<String> commands = new HashSet<String>();
+		Set<String> commands = new HashSet<>();
 		commands.add("equinox:bundles");
 		commands.add("equinox:bundle");
 		commands.add("gogo:bundlebylocation");
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandTests.java
index 5cd1f9f..ec84f8a 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandTests.java
@@ -37,7 +37,7 @@
 	
 	@Test
 	public void testTelnetCommand() throws Exception {
-		CommandSession session = EasyMock.createMock(CommandSession.class);
+		try (CommandSession session = EasyMock.createMock(CommandSession.class)) {
     	session.put((String)EasyMock.anyObject(), EasyMock.anyObject());
         EasyMock.expectLastCall().times(3);
         EasyMock.expect(session.execute((String)EasyMock.anyObject())).andReturn(new Object());
@@ -58,9 +58,7 @@
         TelnetCommand command = new TelnetCommand(processor, context);
         command.startService();
         
-        Socket socketClient = null;
-        try {
-            socketClient = new Socket(HOST, TELNET_PORT);
+        try (Socket socketClient = new Socket(HOST, TELNET_PORT);){
             OutputStream outClient = socketClient.getOutputStream();
             outClient.write(TEST_CONTENT);
             outClient.write('\n');
@@ -73,11 +71,9 @@
                 // do nothing
             }
         } finally {
-            if (socketClient != null) {
-                socketClient.close();
-            }
             command.telnet(new String[] {STOP_COMMAND});
         }
         EasyMock.verify(context);
+		}
 	}
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandWithConfigAdminTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandWithConfigAdminTests.java
index 15480ef..eaf4b6b 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandWithConfigAdminTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetCommandWithConfigAdminTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -10,35 +10,21 @@
  *******************************************************************************/
 package org.eclipse.equinox.console.telnet;
 
-import java.io.File;
+import static org.junit.Assert.fail;
+
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.PrintStream;
 import java.net.Socket;
-import java.util.Collection;
 import java.util.Dictionary;
 import java.util.Hashtable;
 
-import junit.framework.Assert;
-
 import org.apache.felix.service.command.CommandProcessor;
 import org.apache.felix.service.command.CommandSession;
 import org.easymock.EasyMock;
-import org.easymock.IAnswer;
 import org.eclipse.equinox.console.common.ConsoleInputStream;
-import org.junit.After;
-import org.junit.Before;
 import org.junit.Test;
-import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.BundleException;
-import org.osgi.framework.BundleListener;
-import org.osgi.framework.Filter;
-import org.osgi.framework.FrameworkListener;
-import org.osgi.framework.InvalidSyntaxException;
-import org.osgi.framework.ServiceListener;
-import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 import org.osgi.service.cm.ManagedService;
 
@@ -69,7 +55,7 @@
         EasyMock.replay(processor);
 
         final ServiceRegistration<?> registration = EasyMock.createMock(ServiceRegistration.class);
-        registration.setProperties((Dictionary)EasyMock.anyObject());
+        registration.setProperties((Dictionary<String, ?>)EasyMock.anyObject());
 
         EasyMock.expectLastCall();
         EasyMock.replay(registration);
@@ -81,11 +67,9 @@
         				(String)EasyMock.anyObject(), 
         				(ManagedService)EasyMock.anyObject(), 
         				(Dictionary<String, ?>)EasyMock.anyObject())
-        	).andAnswer((IAnswer<ServiceRegistration<?>>) new IAnswer<ServiceRegistration<?>>() {
-        		public ServiceRegistration<?> answer() {
-        			configurator = (ManagedService) EasyMock.getCurrentArguments()[1];
-        			return registration;
-        		}
+        	).andAnswer(() -> {
+				configurator = (ManagedService) EasyMock.getCurrentArguments()[1];
+				return registration;
 			});
         EasyMock.expect(
         		context.registerService(
@@ -96,15 +80,13 @@
         
         TelnetCommand command = new TelnetCommand(processor, context);
         command.startService();
-        Dictionary props = new Hashtable();
+        Dictionary<String, String> props = new Hashtable<>();
 		props.put("port", TELNET_PORT);
 		props.put("host", HOST);
 		props.put("enabled", TRUE);
 		configurator.updated(props);
 		
-        Socket socketClient = null;
-        try {
-            socketClient = new Socket(HOST, Integer.parseInt(TELNET_PORT));
+        try (Socket socketClient = new Socket(HOST, Integer.parseInt(TELNET_PORT));){
             OutputStream outClient = socketClient.getOutputStream();
             outClient.write(TEST_CONTENT);
             outClient.write('\n');
@@ -117,9 +99,6 @@
                 // do nothing
             }
         } finally {
-            if (socketClient != null) {
-                socketClient.close();
-            }
             command.telnet(new String[] {STOP_COMMAND});
         }
         EasyMock.verify(context);
@@ -149,7 +128,7 @@
         EasyMock.replay(processor);
 
         final ServiceRegistration<?> registration = EasyMock.createMock(ServiceRegistration.class);
-        registration.setProperties((Dictionary)EasyMock.anyObject());
+        registration.setProperties((Dictionary<String, ?>)EasyMock.anyObject());
 
         EasyMock.expectLastCall();
         EasyMock.replay(registration);
@@ -161,11 +140,9 @@
         				(String)EasyMock.anyObject(), 
         				(ManagedService)EasyMock.anyObject(), 
         				(Dictionary<String, ?>)EasyMock.anyObject())
-        	).andAnswer((IAnswer<ServiceRegistration<?>>) new IAnswer<ServiceRegistration<?>>() {
-        		public ServiceRegistration<?> answer() {
-        			configurator = (ManagedService) EasyMock.getCurrentArguments()[1];
-        			return registration;
-        		}
+        	).andAnswer(() -> {
+				configurator = (ManagedService) EasyMock.getCurrentArguments()[1];
+				return registration;
 			});
         EasyMock.expect(
         		context.registerService(
@@ -176,7 +153,7 @@
         
         TelnetCommand command = new TelnetCommand(processor, context);
         command.startService();
-        Dictionary props = new Hashtable();
+        Dictionary<String, String> props = new Hashtable<>();
 		props.put("port", TELNET_PORT);
 		props.put("host", HOST);
 		if (isDefault == false) {
@@ -184,16 +161,12 @@
 		}
 		configurator.updated(props);
 		
-        Socket socketClient = null;
-        try {
-            socketClient = new Socket(HOST, Integer.parseInt(TELNET_PORT));
-            Assert.fail("It should not be possible to open a socket to " + HOST + ":" + TELNET_PORT);
+        try (Socket socketClient = new Socket(HOST, Integer.parseInt(TELNET_PORT))){
+            
+            fail("It should not be possible to open a socket to " + HOST + ":" + TELNET_PORT);
         } catch (IOException e) {
         	// this is ok, there should be an exception
         } finally {
-            if (socketClient != null) {
-                socketClient.close();
-            }
             try {
             	command.telnet(new String[] {STOP_COMMAND});
             } catch (IllegalStateException e) {
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetConnectionTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetConnectionTests.java
index bebcd22..005d9cb 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetConnectionTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetConnectionTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,73 +27,55 @@
 public class TelnetConnectionTests {
 
 	private static final String HOST = "localhost";
-    private static final int TEST_CONTENT = 100;
-    private static final int IAC = 255;
+	private static final int TEST_CONTENT = 100;
+	private static final int IAC = 255;
 
-    @Test
-    public void testTelneConnection() throws Exception {
-        ServerSocket servSocket = null;
-        Socket socketClient = null;
-        Socket socketServer = null;
-        TelnetConnection connection = null;
-        OutputStream outClient = null;
-        OutputStream outServer = null;
+	@Test
+	public void testTelneConnection() throws Exception {
 
-        try {
-            servSocket = new ServerSocket(0);
-            socketClient = new Socket(HOST, servSocket.getLocalPort());
-            socketServer = servSocket.accept();
+		try (ServerSocket servSocket = new ServerSocket(0);
+				Socket socketClient = new Socket(HOST, servSocket.getLocalPort());
+				Socket socketServer = servSocket.accept();
+				CommandSession session = EasyMock.createMock(CommandSession.class)) {
 
-            CommandSession session = EasyMock.createMock(CommandSession.class);
-            session.put((String)EasyMock.anyObject(), EasyMock.anyObject());
-            EasyMock.expectLastCall().times(3);
-            EasyMock.expect(session.execute((String)EasyMock.anyObject())).andReturn(null);
-            session.close();
-    		EasyMock.expectLastCall();
-            EasyMock.replay(session);
-            
-            CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
-            EasyMock.expect(processor.createSession((ConsoleInputStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject())).andReturn(session);
-            EasyMock.replay(processor);
-            
-            connection = new TelnetConnection(socketServer, processor, null);
-            connection.start();
+			session.put((String) EasyMock.anyObject(), EasyMock.anyObject());
+			EasyMock.expectLastCall().times(3);
+			EasyMock.expect(session.execute((String) EasyMock.anyObject())).andReturn(null);
+			session.close();
+			EasyMock.expectLastCall();
+			EasyMock.replay(session);
 
-            outClient = socketClient.getOutputStream();
-            outClient.write(TEST_CONTENT);
-            outClient.write('\n');
-            outClient.flush();
+			CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
+			EasyMock.expect(processor.createSession((ConsoleInputStream) EasyMock.anyObject(),
+					(PrintStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject())).andReturn(session);
+			EasyMock.replay(processor);
 
-            InputStream input = socketServer.getInputStream();
-            int in = input.read();
-            Assert.assertTrue("Server received [" + in + "] instead of " + TEST_CONTENT + " from the telnet client.", in == TEST_CONTENT);
+			try (TelnetConnection connection = new TelnetConnection(socketServer, processor, null)) {
+				connection.start();
 
-            input = socketClient.getInputStream();
-            in = input.read();
-            // here IAC is expected, since when the output stream in TelnetConsoleSession is created, several telnet
-            // commands are written to it, each of them starting with IAC
-            Assert.assertTrue("Client receive telnet responses from the server unexpected value [" + in + "] instead of " + IAC + ".", in == IAC);
-            connection.telnetNegotiationFinished();
-            Thread.sleep(5000);
-            EasyMock.verify(session, processor);
-        } finally {
-        	if (socketClient != null) {
-        		socketClient.close();
-        	}
-        	if (outClient != null) {
-        		outClient.close();
-        	}
-        	if (outServer != null) {
-        		outServer.close();
-        	}
+				try (OutputStream outClient = socketClient.getOutputStream()) {
+					outClient.write(TEST_CONTENT);
+					outClient.write('\n');
+					outClient.flush();
 
-        	if (socketServer != null) {
-        		socketServer.close();
-        	}
+					InputStream input = socketServer.getInputStream();
+					int in = input.read();
+					Assert.assertTrue(
+							"Server received [" + in + "] instead of " + TEST_CONTENT + " from the telnet client.",
+							in == TEST_CONTENT);
 
-        	if (servSocket != null) {
-        		servSocket.close();
-        	} 
-        }
-    }
+					input = socketClient.getInputStream();
+					in = input.read();
+					// here IAC is expected, since when the output stream in TelnetConsoleSession is
+					// created, several telnet
+					// commands are written to it, each of them starting with IAC
+					Assert.assertTrue("Client receive telnet responses from the server unexpected value [" + in
+							+ "] instead of " + IAC + ".", in == IAC);
+					connection.telnetNegotiationFinished();
+					Thread.sleep(5000);
+					EasyMock.verify(session, processor);
+				}
+			}
+		}
+	}
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetDisconnectionTest.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetDisconnectionTest.java
index 066f5c3..84f25cb 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetDisconnectionTest.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetDisconnectionTest.java
@@ -1,7 +1,6 @@
 package org.eclipse.equinox.console.telnet;
 
 import java.io.InputStream;
-import java.io.OutputStream;
 import java.io.PipedInputStream;
 import java.io.PipedOutputStream;
 import java.io.PrintStream;
@@ -19,86 +18,65 @@
 
 public class TelnetDisconnectionTest {
 	private static final String HOST = "localhost";
-    private InputStream in;
+	private InputStream in;
 
-    @Test
-    public void testTelneConnection() throws Exception {
-        ServerSocket servSocket = null;
-        Socket socketClient = null;
-        Socket socketServer = null;
-        TelnetConnection connection = null;
-        OutputStream outClient = null;
-        OutputStream outServer = null;
+	@Test
+	public void testTelneConnection() throws Exception {
+		TelnetConnection connection = null;
 
-        try {
-            servSocket = new ServerSocket(0);
-            socketClient = new Socket(HOST, servSocket.getLocalPort());
-            socketServer = servSocket.accept();
+		try (ServerSocket servSocket = new ServerSocket(0);
+				Socket socketClient = new Socket(HOST, servSocket.getLocalPort());
+				Socket socketServer = servSocket.accept();
+				CommandSession session = EasyMock.createMock(CommandSession.class)) {
 
-            CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
-            connection = new TelnetConnection(socketServer, processor, null);
-            
-            final CommandSession session = EasyMock.createMock(CommandSession.class);
-            EasyMock.makeThreadSafe(session, true);
-            session.put((String)EasyMock.anyObject(), EasyMock.anyObject());
-            EasyMock.expectLastCall().times(3);
-            EasyMock.expect(session.get("CLOSEABLE")).andReturn(connection);
-            EasyMock.expect(session.execute((String)EasyMock.anyObject())).andReturn(null);
-            session.close();
-    		EasyMock.expectLastCall();
-            EasyMock.replay(session);
-            
-            EasyMock.expect(processor.createSession((ConsoleInputStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject())).andReturn(session);
-            EasyMock.replay(processor);
-            
-            connection.start();
-            Thread.sleep(60000);
-            
-            BundleContext context = EasyMock.createMock(BundleContext.class);
-            final DisconnectCommand command = new DisconnectCommand(context);
-            
-            PipedOutputStream outputStream = new PipedOutputStream();
-            PipedInputStream inputStream = new PipedInputStream(outputStream);
-            
-            in = System.in;
-            System.setIn(inputStream);
-            
-            new Thread() {
-            	public void run() {
-            		command.disconnect(session);
-            	}
-            }.start();
-            
-            outputStream.write(new byte[]{'y'});
-            outputStream.write('\n');
-            outputStream.flush();
+			CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
+			connection = new TelnetConnection(socketServer, processor, null);
 
-            Thread.sleep(3000);
-            Assert.assertTrue("Socket is not closed!", socketServer.isClosed());
-           
-            connection.telnetNegotiationFinished();
-            Thread.sleep(5000);
-            EasyMock.verify(session, processor);
-        } finally {
-        	if (socketClient != null) {
-        		socketClient.close();
-        	}
-        	if (outClient != null) {
-        		outClient.close();
-        	}
-        	if (outServer != null) {
-        		outServer.close();
-        	}
+			EasyMock.makeThreadSafe(session, true);
+			session.put((String) EasyMock.anyObject(), EasyMock.anyObject());
+			EasyMock.expectLastCall().times(3);
+			EasyMock.expect(session.get("CLOSEABLE")).andReturn(connection);
+			EasyMock.expect(session.execute((String) EasyMock.anyObject())).andReturn(null);
+			session.close();
+			EasyMock.expectLastCall();
+			EasyMock.replay(session);
 
-        	if (socketServer != null) {
-        		socketServer.close();
-        	}
+			EasyMock.expect(processor.createSession((ConsoleInputStream) EasyMock.anyObject(),
+					(PrintStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject())).andReturn(session);
+			EasyMock.replay(processor);
 
-        	if (servSocket != null) {
-        		servSocket.close();
-        	}
-        	
-        	System.setIn(in);
-        }
-    }
+			connection.start();
+			Thread.sleep(60000);
+
+			BundleContext context = EasyMock.createMock(BundleContext.class);
+			final DisconnectCommand command = new DisconnectCommand(context);
+
+			PipedOutputStream outputStream = new PipedOutputStream();
+			PipedInputStream inputStream = new PipedInputStream(outputStream);
+
+			in = System.in;
+			System.setIn(inputStream);
+
+			new Thread() {
+				@Override
+				public void run() {
+					command.disconnect(session);
+				}
+			}.start();
+
+			outputStream.write(new byte[] { 'y' });
+			outputStream.write('\n');
+			outputStream.flush();
+
+			Thread.sleep(3000);
+			Assert.assertTrue("Socket is not closed!", socketServer.isClosed());
+
+			connection.telnetNegotiationFinished();
+			Thread.sleep(5000);
+			EasyMock.verify(session, processor);
+		} finally {
+
+			System.setIn(in);
+		}
+	}
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputHandlerTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputHandlerTests.java
index f5d3bd6..3a67aec 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputHandlerTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputHandlerTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -11,23 +11,23 @@
 
 package org.eclipse.equinox.console.telnet;
 
+import static org.easymock.EasyMock.createMock;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+
 import org.eclipse.equinox.console.common.ConsoleInputStream;
 import org.eclipse.equinox.console.common.ConsoleOutputStream;
 import org.junit.Assert;
 import org.junit.Test;
 
-import static org.easymock.EasyMock.*;
-
-import java.io.ByteArrayOutputStream;
-import java.io.StringBufferInputStream;
-
 public class TelnetInputHandlerTests {
 
     private static final long WAIT_TIME = 10000;
 
     @Test
     public void testHandler() throws Exception {
-        StringBufferInputStream input = new StringBufferInputStream("abcde");
+        ByteArrayInputStream input = new ByteArrayInputStream("abcde".getBytes());
         ConsoleInputStream in = new ConsoleInputStream();
         ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
         ConsoleOutputStream out = new ConsoleOutputStream(byteOut);
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputScannerTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputScannerTests.java
index 6795973..a0730a6 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputScannerTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetInputScannerTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -96,7 +96,7 @@
 
         try {
             scanner.scan((byte) 'a');
-            scanner.scan((byte) ESC);
+            scanner.scan(ESC);
             scanner.scan((byte) 'b');
         } catch (IOException e) {
             System.out.println("Error while scanning: " + e.getMessage());
@@ -110,7 +110,7 @@
 
     @Test
     public void testTTNegotiations() throws Exception {
-        Map<byte[], TerminalTypeMappings> ttMappings = new HashMap<byte[], TerminalTypeMappings>();
+        Map<byte[], TerminalTypeMappings> ttMappings = new HashMap<>();
         ttMappings.put(new byte[] { 'A', 'N', 'S', 'I' }, new ANSITerminalTypeMappings());
         ttMappings.put(new byte[] { 'V', 'T', '1', '0', '0' }, new VT100TerminalTypeMappings());
         ttMappings.put(new byte[] { 'V', 'T', '2', '2', '0' }, new VT220TerminalTypeMappings());
@@ -211,7 +211,8 @@
 
         private boolean isCalled = false;
 
-        public void finished() {
+        @Override
+		public void finished() {
             isCalled = true;
         }
 
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetOutputStreamTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetOutputStreamTests.java
index f975f4d..8ff848d 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetOutputStreamTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetOutputStreamTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -19,21 +19,26 @@
 public class TelnetOutputStreamTests {
 
 	@Test
-    public void testAutoSend() throws Exception {
-        ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
-        TelnetOutputStream out = new TelnetOutputStream(byteOut);
-        out.autoSend();
-        out.flush();
-        byte[] message = byteOut.toByteArray();
+	public void testAutoSend() throws Exception {
+		ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
+		try (TelnetOutputStream out = new TelnetOutputStream(byteOut)) {
+			out.autoSend();
+			out.flush();
+			byte[] message = byteOut.toByteArray();
 
-        Assert.assertNotNull("Auto message not sent", message);
-        Assert.assertFalse("Auto message not sent", message.length == 0);
-        Assert.assertTrue("Error sending auto message. Expected length: " + TelnetOutputStream.autoMessage.length + ", actual length: "
-            + message.length, message.length == TelnetOutputStream.autoMessage.length);
+			Assert.assertNotNull("Auto message not sent", message);
+			Assert.assertFalse("Auto message not sent", message.length == 0);
+			Assert.assertTrue(
+					"Error sending auto message. Expected length: " + TelnetOutputStream.autoMessage.length
+							+ ", actual length: " + message.length,
+					message.length == TelnetOutputStream.autoMessage.length);
 
-        for (int i = 0; i < message.length; i++) {
-            Assert.assertEquals("Wrong char in auto message. Position: " + i + ", expected: " + TelnetOutputStream.autoMessage[i] + ", read: "
-                + message[i], TelnetOutputStream.autoMessage[i], message[i]);
-        }
-    }
+			for (int i = 0; i < message.length; i++) {
+				Assert.assertEquals(
+						"Wrong char in auto message. Position: " + i + ", expected: "
+								+ TelnetOutputStream.autoMessage[i] + ", read: " + message[i],
+						TelnetOutputStream.autoMessage[i], message[i]);
+			}
+		}
+	}
 }
diff --git a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetServerTests.java b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetServerTests.java
index 21eb4c5..6cf209a 100755
--- a/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetServerTests.java
+++ b/bundles/archived/org.eclipse.equinox.console.tests/src/org/eclipse/equinox/console/telnet/TelnetServerTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,90 +36,84 @@
 
     @Test
     public void testTelnetServer() throws Exception {
+		try (CommandSession session = EasyMock.createMock(CommandSession.class)) {
+			session.put((String) EasyMock.anyObject(), EasyMock.anyObject());
+			EasyMock.expectLastCall().times(3);
+			EasyMock.expect(session.execute((String) EasyMock.anyObject())).andReturn(new Object());
+			session.close();
+			EasyMock.expectLastCall();
+			EasyMock.replay(session);
 
-    	CommandSession session = EasyMock.createMock(CommandSession.class);
-    	session.put((String)EasyMock.anyObject(), EasyMock.anyObject());
-        EasyMock.expectLastCall().times(3);
-        EasyMock.expect(session.execute((String)EasyMock.anyObject())).andReturn(new Object());
-        session.close();
-		EasyMock.expectLastCall();
-        EasyMock.replay(session);
-        
-        CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
-        EasyMock.expect(processor.createSession((ConsoleInputStream)EasyMock.anyObject(), (PrintStream)EasyMock.anyObject(), (PrintStream)EasyMock.anyObject())).andReturn(session);
-        EasyMock.replay(processor);
-        
-        List<CommandProcessor> processors = new ArrayList<CommandProcessor>();
-        processors.add(processor);
-        TelnetServer telnetServer = new TelnetServer(null, processors, HOST, PORT);
-        telnetServer.start();
-        Socket socketClient = null;
+			CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
+			EasyMock.expect(processor.createSession((ConsoleInputStream) EasyMock.anyObject(),
+					(PrintStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject())).andReturn(session);
+			EasyMock.replay(processor);
 
-        try {
-            socketClient = new Socket("localhost", PORT);
-            OutputStream outClient = socketClient.getOutputStream();
-            outClient.write(TEST_CONTENT);
-            outClient.write('\n');
-            outClient.flush();
-            // wait for the accept thread to finish execution
-            try {
-                Thread.sleep(WAIT_TIME);
-            } catch (InterruptedException ie) {
-                // do nothing
-            }
-            verify();
-        } catch(ConnectException e) {
-        	Assert.fail("Telnet port not open");
-        } finally {
-            if (socketClient != null) {
-                socketClient.close();
-            }
-            telnetServer.stopTelnetServer();
-        }
+			List<CommandProcessor> processors = new ArrayList<>();
+			processors.add(processor);
+			TelnetServer telnetServer = new TelnetServer(null, processors, HOST, PORT);
+			telnetServer.start();
+
+			try (Socket socketClient = new Socket("localhost", PORT);) {
+
+				OutputStream outClient = socketClient.getOutputStream();
+				outClient.write(TEST_CONTENT);
+				outClient.write('\n');
+				outClient.flush();
+				// wait for the accept thread to finish execution
+				try {
+					Thread.sleep(WAIT_TIME);
+				} catch (InterruptedException ie) {
+					// do nothing
+				}
+				verify();
+			} catch (ConnectException e) {
+				Assert.fail("Telnet port not open");
+			} finally {
+				telnetServer.stopTelnetServer();
+			}
+		}
     }
 
     @Test
-    public void testTelnetServerWithoutHost() throws Exception {
-    	CommandSession session = EasyMock.createMock(CommandSession.class);
-    	session.put((String)EasyMock.anyObject(), EasyMock.anyObject());
-        EasyMock.expectLastCall().times(4);
-        EasyMock.expect(session.execute((String)EasyMock.anyObject())).andReturn(new Object());
-        session.close();
-		EasyMock.expectLastCall();
-        EasyMock.replay(session);
-        
-        CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
-        EasyMock.expect(processor.createSession((ConsoleInputStream)EasyMock.anyObject(), (PrintStream)EasyMock.anyObject(), (PrintStream)EasyMock.anyObject())).andReturn(session);
-        EasyMock.replay(processor);
-        
-        List<CommandProcessor> processors = new ArrayList<CommandProcessor>();
-        processors.add(processor);
-        TelnetServer telnetServer = new TelnetServer(null, processors, null, PORT);
-        telnetServer.start();
-        Socket socketClient = null;
+	public void testTelnetServerWithoutHost() throws Exception {
+		try (CommandSession session = EasyMock.createMock(CommandSession.class)) {
+			session.put((String) EasyMock.anyObject(), EasyMock.anyObject());
+			EasyMock.expectLastCall().times(4);
+			EasyMock.expect(session.execute((String) EasyMock.anyObject())).andReturn(new Object());
+			session.close();
+			EasyMock.expectLastCall();
+			EasyMock.replay(session);
 
-        try {
-            socketClient = new Socket("localhost", PORT);
-            OutputStream outClient = socketClient.getOutputStream();
-            outClient.write(TEST_CONTENT);
-            outClient.write('\n');
-            outClient.flush();
+			CommandProcessor processor = EasyMock.createMock(CommandProcessor.class);
+			EasyMock.expect(processor.createSession((ConsoleInputStream) EasyMock.anyObject(),
+					(PrintStream) EasyMock.anyObject(), (PrintStream) EasyMock.anyObject())).andReturn(session);
+			EasyMock.replay(processor);
 
-            // wait for the accept thread to finish execution
-            try {
-                Thread.sleep(WAIT_TIME);
-            } catch (InterruptedException ie) {
-                // do nothing
-            }
-        } catch(ConnectException e) {
-        	Assert.fail("Telnet port not open");
-        } finally {
-            if (socketClient != null) {
-                socketClient.close();
-            }
-            telnetServer.stopTelnetServer();
-        }
+			List<CommandProcessor> processors = new ArrayList<>();
+			processors.add(processor);
+			TelnetServer telnetServer = new TelnetServer(null, processors, null, PORT);
+			telnetServer.start();
 
-    }
+			try (Socket socketClient = new Socket("localhost", PORT);) {
+				OutputStream outClient = socketClient.getOutputStream();
+				outClient.write(TEST_CONTENT);
+				outClient.write('\n');
+				outClient.flush();
+
+				// wait for the accept thread to finish execution
+				try {
+					Thread.sleep(WAIT_TIME);
+				} catch (InterruptedException ie) {
+					// do nothing
+				}
+			} catch (ConnectException e) {
+				Assert.fail("Telnet port not open");
+			} finally {
+				telnetServer.stopTelnetServer();
+			}
+		}
+
+	}
 
 }
diff --git a/bundles/org.eclipse.equinox.console.ssh/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.console.ssh/.settings/org.eclipse.jdt.core.prefs
index d8d8453..5c53682 100755
--- a/bundles/org.eclipse.equinox.console.ssh/.settings/org.eclipse.jdt.core.prefs
+++ b/bundles/org.eclipse.equinox.console.ssh/.settings/org.eclipse.jdt.core.prefs
@@ -2,16 +2,21 @@
 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
 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+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
@@ -21,7 +26,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -34,14 +39,14 @@
 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
@@ -49,20 +54,22 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
 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=warning
 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=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 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.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
@@ -71,19 +78,24 @@
 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=warning
+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=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
 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=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeys.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeys.java
index 1e3284d..be0f1a8 100644
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeys.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeys.java
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2011 Gunnar Wagenknecht and others.
+ * Copyright (c) 2011, 2017 Gunnar Wagenknecht and others.
  * All rights reserved.
  *
  * This program and the accompanying materials are made available under the terms of the
@@ -98,12 +98,11 @@
 	public AuthorizedKeys(final String authorizedKeysFile) throws FileNotFoundException, IOException {
 		// read file line-by-line
 		final File file = new File(authorizedKeysFile);
-		final Scanner scanner = new Scanner(file);
-		scanner.useDelimiter(NEWLINE);
-		int lineNumber = 0;
-		final List<PublicKey> keys = new ArrayList<PublicKey>();
+		try (Scanner scanner = new Scanner(file)) {
+			scanner.useDelimiter(NEWLINE);
+			int lineNumber = 0;
+			final List<PublicKey> keys = new ArrayList<>();
 
-		try {
 			while (scanner.hasNext()) {
 				lineNumber++;
 
@@ -122,11 +121,9 @@
 					throw new ParseKeyException("Line " + lineNumber + ": " + e.getMessage(), e);
 				}
 			}
-		} finally {
-			scanner.close();
+			this.keys = Collections.unmodifiableList(keys);
 		}
 
-		this.keys = Collections.unmodifiableList(keys);
 	}
 
 	/**
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeysFileAuthenticator.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeysFileAuthenticator.java
index 5abd2be..2a538cf 100644
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeysFileAuthenticator.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/internal/ssh/AuthorizedKeysFileAuthenticator.java
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2012 Gunnar Wagenknecht and others.
+ * Copyright (c) 2012, 2017 Gunnar Wagenknecht and others.
  * All rights reserved.
  *
  * This program and the accompanying materials are made available under the terms of the
@@ -35,6 +35,7 @@
 		this.authorizedKeysFile = authorizedKeysFile;
 	}
 
+	@Override
 	public boolean authenticate(String username, PublicKey key, ServerSession session) {
 		String authorizedKeysFile = getAuthorizedKeysFile();
 		if(null == authorizedKeysFile) {
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/RolePrincipal.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/RolePrincipal.java
index c5f8c4a..2d03c7b 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/RolePrincipal.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/RolePrincipal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,10 +24,12 @@
 		this.roleName = roleName;
 	}
 
+	@Override
 	public String getName() {
 		return roleName;
 	}
 	
+	@Override
 	public boolean equals(Object role) {
 		
 		if (role == null) {
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/SecureStorageLoginModule.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/SecureStorageLoginModule.java
index 941fb17..b5b39c6 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/SecureStorageLoginModule.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/SecureStorageLoginModule.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG
  * 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,12 +39,14 @@
 	private volatile UserPrincipal userPrincipal;
 	private volatile boolean isSuccess;
 
+	@Override
 	public void initialize(Subject subject, CallbackHandler callbackHandler,
 			Map<String, ?> sharedState, Map<String, ?> options) {
 		this.subject = subject;
 		this.callbackHandler = callbackHandler;
 	}
 
+	@Override
 	public boolean login() throws LoginException {
 		NameCallback nameCallback = new NameCallback("username: ");
 		PasswordCallback passwordCallback = new PasswordCallback("password: ", false);
@@ -74,6 +76,7 @@
 		}
 	}
 
+	@Override
 	public boolean commit() throws LoginException {
 		if (isSuccess == true) {
 			synchronized (this) {
@@ -88,12 +91,14 @@
 		}
 	}
 
+	@Override
 	public boolean abort() throws LoginException {
 		userPrincipal.destroy();
 		userPrincipal = null;
 		return true;
 	}
 
+	@Override
 	public boolean logout() throws LoginException {
 		synchronized (this) {
 			subject.getPrincipals().remove(userPrincipal);
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/UserPrincipal.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/UserPrincipal.java
index 7af4162..b07dab0 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/UserPrincipal.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/jaas/UserPrincipal.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG
  * 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
@@ -22,7 +22,7 @@
 public class UserPrincipal implements Principal {
 	private String username;
 	private char[] password;
-	private Set<RolePrincipal> rolePrincipals = new HashSet<RolePrincipal>();
+	private Set<RolePrincipal> rolePrincipals = new HashSet<>();
 	
 	public UserPrincipal(String username, String password) {
 		this.username = username;
@@ -30,6 +30,7 @@
 		System.arraycopy(password.toCharArray(), 0, this.password, 0, this.password.length);
 	}
 	
+	@Override
 	public String getName() {
 		return username;
 	}
@@ -64,6 +65,7 @@
 		rolePrincipals.add(rolePrincipal);
 	}
 	
+	@Override
 	public boolean equals(Object userPrincipal) {
 		if (userPrincipal == null) {
 			return false;
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/Activator.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/Activator.java
index 84b6568..bf0ca26 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/Activator.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,6 +33,7 @@
 			this.context = context;
 		}
 
+		@Override
 		public SshCommand addingService(ServiceReference<CommandProcessor> reference) {
 			CommandProcessor processor = context.getService(reference);
 			if (processor == null)
@@ -49,12 +50,14 @@
 			return sshConnection;
 		}
 
+		@Override
 		public void modifiedService(
 				ServiceReference<CommandProcessor> reference,
 				SshCommand service) {
 			// nothing
 		}
 
+		@Override
 		public void removedService(ServiceReference<CommandProcessor> reference, SshCommand service) {
 			CommandProcessor processor = context.getService(reference);
 			service.removeCommandProcessor(processor);
@@ -65,20 +68,14 @@
 		return context;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
-	 */
+	@Override
 	public void start(BundleContext bundleContext) throws Exception {
 		context = bundleContext;
-		commandProcessorTracker = new ServiceTracker<CommandProcessor, SshCommand>(context, CommandProcessor.class, new ProcessorCustomizer(context));
+		commandProcessorTracker = new ServiceTracker<>(context, CommandProcessor.class, new ProcessorCustomizer(context));
 		commandProcessorTracker.open();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
-	 */
+	@Override
 	public void stop(BundleContext bundleContext) throws Exception {
 		Activator.context = null;
 		commandProcessorTracker.close();
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshCommand.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshCommand.java
index 80e3c7f..0cf0f2a 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshCommand.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2013 SAP AG and others.
+ * Copyright (c) 2011, 2017 SAP AG 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 @@
 public class SshCommand {
 	private String defaultHost = null;
 	private int defaultPort;
-    private List<CommandProcessor> processors = new ArrayList<CommandProcessor>();
+    private List<CommandProcessor> processors = new ArrayList<>();
     private String host = null;
     private int port;
     private SshServ sshServ;
@@ -59,7 +59,7 @@
         this.context = context;
         
         if ("true".equals(context.getProperty(USE_CONFIG_ADMIN_PROP))) {
-        	Dictionary<String, String> sshProperties = new Hashtable<String, String>();
+        	Dictionary<String, String> sshProperties = new Hashtable<>();
         	sshProperties.put(Constants.SERVICE_PID, SSH_PID);
         	try {
         		synchronized (lock) {
@@ -95,7 +95,7 @@
     }
     
     public synchronized void startService() {
-    	Dictionary<String, Object> properties = new Hashtable<String, Object>();
+    	Dictionary<String, Object> properties = new Hashtable<>();
 		properties.put("osgi.command.scope", "equinox");
 		properties.put("osgi.command.function", new String[] {"ssh"});
 		if ((port > 0 || defaultPort > 0) && isEnabled == true) {
@@ -211,15 +211,9 @@
     }
     
     private void checkPortAvailable(int port) throws Exception {
-    	ServerSocket socket = null;
-    	try {
-    		socket = new ServerSocket(port);
+    	try (ServerSocket socket = new ServerSocket(port)){
     	} catch (BindException e) {
     		throw new Exception ("Port " + port + " already in use");
-    	} finally {
-    		if (socket != null) {
-    			socket.close();
-    		}
     	}
     }
     
@@ -227,7 +221,7 @@
      * Register user administration commands
      */
     private void registerUserAdmin() {
-    	Dictionary<String, Object> properties = new Hashtable<String, Object>();
+    	Dictionary<String, Object> properties = new Hashtable<>();
 		properties.put("osgi.command.scope", "equinox");
 		properties.put("osgi.command.function", new String[] {"addUser", "addUser", "deleteUser", "resetPassword", "setPassword", "addRoles", "removeRoles", "listUsers"});
 		context.registerService(UserAdminCommand.class.getName(), new UserAdminCommand(), properties);
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshServ.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshServ.java
index d41f699..cc9f027 100644
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshServ.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshServ.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,7 +54,8 @@
     	shellFactory = new SshShellFactory(processors, context);
     }
 
-    public void run() throws RuntimeException {
+    @Override
+	public void run() throws RuntimeException {
     	sshServer = SshServer.setUpDefaultServer();
 		if (host != null) {
 			sshServer.setHost(host);
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshSession.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshSession.java
index 2420278..a1bef5f 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshSession.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshSession.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -63,6 +63,7 @@
 		this.currentEscapesToKey = currentExcapesToKey;
 	}
 	
+	@Override
 	public void run() {
 		ConsoleInputStream input = new ConsoleInputStream();
 		ConsoleOutputStream outp = new ConsoleOutputStream(out);
@@ -128,6 +129,7 @@
 
 	}
 	
+	@Override
 	public void close() throws IOException {
 		this.interrupt();
 		sshShell.removeSession(this);
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShell.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShell.java
index 8d03064..ece876c 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShell.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShell.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG
  * 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
@@ -44,7 +44,7 @@
 	private InputStream in;
 	private OutputStream out;
 	private ExitCallback callback;
-	private Map<CommandProcessor, SshSession> commandProcessorToConsoleThreadMap = new HashMap<CommandProcessor, SshSession>();
+	private Map<CommandProcessor, SshSession> commandProcessorToConsoleThreadMap = new HashMap<>();
 	
 	private final Map<String, TerminalTypeMappings> supportedEscapeSequences;
 	private static final String DEFAULT_TTYPE = File.separatorChar == '/' ? "XTERM" : "ANSI";
@@ -55,7 +55,7 @@
 	public SshShell(List<CommandProcessor> processors, BundleContext context) {
 		this.processors = processors;
 		this.context = context;
-		supportedEscapeSequences = new HashMap<String, TerminalTypeMappings> ();
+		supportedEscapeSequences = new HashMap<> ();
         supportedEscapeSequences.put("ANSI", new ANSITerminalTypeMappings());
         supportedEscapeSequences.put("WINDOWS", new ANSITerminalTypeMappings());
         supportedEscapeSequences.put("VT100", new VT100TerminalTypeMappings());
@@ -69,22 +69,27 @@
         currentEscapesToKey = currentMappings.getEscapesToKey();
 	}
 
+	@Override
 	public void setInputStream(InputStream in) {
 		this.in = in;
 	}
 
+	@Override
 	public void setOutputStream(OutputStream out) {
 		this.out = out;
 	}
 
+	@Override
 	public void setErrorStream(OutputStream err) {
 		// do nothing
 	}
 
+	@Override
 	public void setExitCallback(ExitCallback callback) {
 		this.callback = callback;
 	}
 
+	@Override
 	public synchronized void start(Environment env) throws IOException {
 		String term = env.getEnv().get(TERMINAL_PROPERTY);
 		TerminalTypeMappings mapping = supportedEscapeSequences.get(term.toUpperCase());
@@ -114,6 +119,7 @@
 		commandProcessorToConsoleThreadMap.put(processor, consoleSession);
 	}
 
+	@Override
 	public void destroy() {
 		return;
 	}
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShellFactory.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShellFactory.java
index 82b7964..67df36f 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShellFactory.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/ssh/SshShellFactory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG
  * 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,13 +28,14 @@
 	
 	private List<CommandProcessor> processors;
 	private BundleContext context;
-	private Set<SshShell> shells = new HashSet<SshShell>();
+	private Set<SshShell> shells = new HashSet<>();
 	
 	public SshShellFactory(List<CommandProcessor> processors, BundleContext context) {
 		this.processors = processors;
 		this.context = context;
 	}
 	
+	@Override
 	public synchronized Command create() {
 		SshShell shell = new SshShell(processors, context);
 		shells.add(shell);
diff --git a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/storage/SecureUserStore.java b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/storage/SecureUserStore.java
index dc6bde7..132356a 100755
--- a/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/storage/SecureUserStore.java
+++ b/bundles/org.eclipse.equinox.console.ssh/src/org/eclipse/equinox/console/storage/SecureUserStore.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG
  * 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
@@ -45,11 +45,10 @@
 	 * @return String array containing the usernames
 	 */
 	public static String[] getUserNames() {
-		String userFileLoc = null;
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		
 		try {
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null;
 			try {
@@ -57,7 +56,7 @@
 			} catch (IOException e) {
 				throw new IllegalArgumentException("Cannot load properties from file " + userFileLoc);
 			}
-			Set<String> userNames = new HashSet<String>();
+			Set<String> userNames = new HashSet<>();
 			for (Object key : users.keySet()) {
 				if (!(key instanceof String)) {
 					continue;
@@ -102,12 +101,11 @@
 	 * @param roles comma-separated list of the roles of the user
 	 */
 	public static void putUser(String username, String password, String roles) {
-		String userFileLoc = null;
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		OutputStream out = null;
 		
 		try {
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
@@ -164,16 +162,15 @@
 	 * @param roles comma-separated list of new roles for the user 
 	 */
 	public static void addRoles(String username, String roles) {
-		String userFileLoc = null;
+		if (roles == null || roles.length() == 0) {
+			return;
+		}
+		
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		OutputStream out = null;
 		
 		try {
-			if (roles == null || roles.length() == 0) {
-				return;
-			}
-			
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
@@ -185,7 +182,7 @@
 			
 			String userRolesKey = constructPropertyName(username, ROLES_KEY);
 			String currentRoles = (String)users.remove(userRolesKey);
-			Set<String> rolesSet = new HashSet<String>();
+			Set<String> rolesSet = new HashSet<>();
 			
 			if (currentRoles.length() > 0) {
 				for (String role : currentRoles.split(",")) {
@@ -240,16 +237,14 @@
 	 * @param rolesToRemove comma-separated list of roles to be removed
 	 */
 	public static void removeRoles(String username, String rolesToRemove) {
-		String userFileLoc = null;
+		if(rolesToRemove == null || rolesToRemove.length() == 0) {
+			return;
+		}
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		OutputStream out = null;
 		
 		try {
-			if(rolesToRemove == null || rolesToRemove.length() == 0) {
-				return;
-			}
-			
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
@@ -261,7 +256,7 @@
 			
 			String userRolesKey = constructPropertyName(username, ROLES_KEY);
 			String currentRoles = (String)users.remove(userRolesKey);
-			Set<String> rolesSet = new HashSet<String>();
+			Set<String> rolesSet = new HashSet<>();
 			
 			for (String role : currentRoles.split(",")) {
 				rolesSet.add(role);
@@ -313,12 +308,11 @@
 	 * @param username user to be removed
 	 */
 	public static void deleteUser(String username) {
-		String userFileLoc = null;
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		OutputStream out = null;
 		
 		try {
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
@@ -377,12 +371,11 @@
 	 * @param username user to reset the password
 	 */
 	public static void resetPassword(String username) {
-		String userFileLoc = null;
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		OutputStream out = null;
 		
 		try {
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
@@ -437,12 +430,11 @@
 	 * @param password the new password
 	 */
 	public static void setPassword(String username, String password) {
-		String userFileLoc = null;
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		OutputStream out = null;
 		
 		try {
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
@@ -500,10 +492,9 @@
 	 * @return true if there is an entry for this user in the store, false otherwise
 	 */
 	public static boolean existsUser(String username) {
-		String userFileLoc = null;
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		try {
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
@@ -536,24 +527,17 @@
 		String userFileLoc = getFileLocation();
 		File file = new File(userFileLoc);
 		if (!file.exists()) {
-			OutputStream out = null;
-			try {
-				Properties props = new Properties();
-				out = new FileOutputStream(file);
+			Properties props = new Properties();
+			try (OutputStream out = new FileOutputStream(file);) {
 				props.store(out, null);
-			} finally {
-				if (out != null) {
-					out.close();
-				}
 			}
 		}
 	}
 	
 	private static String getProperty(String username, String propertyName) {
-		String userFileLoc = null;
+		String userFileLoc = getFileLocation();
 		InputStream in = null;
 		try {
-			userFileLoc = getFileLocation();
 			in = new FileInputStream(userFileLoc);
 			Properties users = null; 
 			
diff --git a/bundles/org.eclipse.equinox.console/.settings/org.eclipse.jdt.core.prefs b/bundles/org.eclipse.equinox.console/.settings/org.eclipse.jdt.core.prefs
index d8d8453..0cc2336 100755
--- a/bundles/org.eclipse.equinox.console/.settings/org.eclipse.jdt.core.prefs
+++ b/bundles/org.eclipse.equinox.console/.settings/org.eclipse.jdt.core.prefs
@@ -2,8 +2,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.targetPlatform=1.8
@@ -12,6 +15,7 @@
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+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
@@ -21,7 +25,7 @@
 org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode=disabled
 org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod=disabled
 org.eclipse.jdt.core.compiler.problem.discouragedReference=warning
-org.eclipse.jdt.core.compiler.problem.emptyStatement=ignore
+org.eclipse.jdt.core.compiler.problem.emptyStatement=warning
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.explicitlyClosedAutoCloseable=ignore
 org.eclipse.jdt.core.compiler.problem.fallthroughCase=ignore
@@ -34,14 +38,14 @@
 org.eclipse.jdt.core.compiler.problem.includeNullInfoFromAsserts=disabled
 org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod=warning
 org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch=warning
-org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=ignore
+org.eclipse.jdt.core.compiler.problem.indirectStaticAccess=warning
 org.eclipse.jdt.core.compiler.problem.localVariableHiding=ignore
 org.eclipse.jdt.core.compiler.problem.methodWithConstructorName=warning
 org.eclipse.jdt.core.compiler.problem.missingDefaultCase=ignore
-org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingEnumCaseDespiteDefault=disabled
 org.eclipse.jdt.core.compiler.problem.missingHashCodeMethod=ignore
-org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=ignore
+org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation=warning
 org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotationForInterfaceMethodImplementation=enabled
 org.eclipse.jdt.core.compiler.problem.missingSerialVersion=warning
 org.eclipse.jdt.core.compiler.problem.missingSynchronizedOnInheritedMethod=ignore
@@ -49,20 +53,22 @@
 org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion=warning
 org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral=ignore
 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=warning
 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=ignore
+org.eclipse.jdt.core.compiler.problem.pessimisticNullAnalysisForFreeTypeVariables=warning
 org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment=ignore
 org.eclipse.jdt.core.compiler.problem.potentialNullReference=ignore
 org.eclipse.jdt.core.compiler.problem.potentiallyUnclosedCloseable=ignore
 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.redundantSuperinterface=ignore
+org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments=warning
+org.eclipse.jdt.core.compiler.problem.redundantSuperinterface=warning
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBePotentiallyStatic=ignore
 org.eclipse.jdt.core.compiler.problem.reportMethodCanBeStatic=ignore
 org.eclipse.jdt.core.compiler.problem.specialParameterHidingField=disabled
@@ -71,19 +77,24 @@
 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=warning
+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=ignore
+org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck=warning
 org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess=ignore
 org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException=ignore
 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=warning
 org.eclipse.jdt.core.compiler.problem.unusedLabel=warning
 org.eclipse.jdt.core.compiler.problem.unusedLocal=warning
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/Activator.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/Activator.java
index 4be3b5d..09c7d85 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/Activator.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/Activator.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 IBM Corporation, SAP AG.
+ * Copyright (c) 2010, 2017 IBM Corporation, SAP AG 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
@@ -49,9 +49,9 @@
  * The activator class controls the plug-in life cycle
  */
 public class Activator implements BundleActivator {
-	private ServiceTracker<StartLevel, ?> startLevelManagerTracker;
-	private ServiceTracker<ConditionalPermissionAdmin, ?> condPermAdminTracker;
-	private ServiceTracker<PermissionAdmin, ?> permissionAdminTracker;
+	private ServiceTracker<StartLevel, StartLevel> startLevelManagerTracker;
+	private ServiceTracker<ConditionalPermissionAdmin, ConditionalPermissionAdmin> condPermAdminTracker;
+	private ServiceTracker<PermissionAdmin, PermissionAdmin> permissionAdminTracker;
 	private ServiceTracker<PackageAdmin, PackageAdmin> packageAdminTracker;
 	private static boolean isFirstProcessor = true;
 	private static TelnetCommand telnetConnection = null;
@@ -71,6 +71,7 @@
 			this.context = context;
 		}
 
+		@Override
 		public ServiceTracker<ConsoleSession, CommandSession> addingService(
 				ServiceReference<CommandProcessor> reference) {
 			CommandProcessor processor = context.getService(reference);
@@ -85,17 +86,19 @@
 				telnetConnection.addCommandProcessor(processor);
 			}
 			
-			ServiceTracker<ConsoleSession, CommandSession> tracker = new ServiceTracker<ConsoleSession, CommandSession>(context, ConsoleSession.class, new SessionCustomizer(context, processor));
+			ServiceTracker<ConsoleSession, CommandSession> tracker = new ServiceTracker<>(context, ConsoleSession.class, new SessionCustomizer(context, processor));
 			tracker.open();
 			return tracker;
 		}
 
+		@Override
 		public void modifiedService(
 			ServiceReference<CommandProcessor> reference,
 			ServiceTracker<ConsoleSession, CommandSession> service) {
 			// nothing
 		}
 
+		@Override
 		public void removedService(
 			ServiceReference<CommandProcessor> reference,
 			ServiceTracker<ConsoleSession, CommandSession> tracker) {
@@ -116,6 +119,7 @@
 			this.processor = processor;
 		}
 
+		@Override
 		public CommandSession addingService(
 				ServiceReference<ConsoleSession> reference) {
 			final ConsoleSession equinoxSession = context.getService(reference);
@@ -123,31 +127,30 @@
 				return null;
 			PrintStream output = new PrintStream(equinoxSession.getOutput());
 			final CommandSession gogoSession = processor.createSession(equinoxSession.getInput(), output, output);
-			new Thread(new Runnable(){
-				public void run() {
-                    try {
-                    	gogoSession.put("SCOPE", "equinox:*");
-                    	gogoSession.put("prompt", "osgi> ");
-                        gogoSession.execute("gosh --login --noshutdown");
-                    }
-                    catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                    finally {
-                        gogoSession.close();
-                        equinoxSession.close();
-                    }
-				}
-				
+			new Thread((Runnable) () -> {
+			    try {
+			    	gogoSession.put("SCOPE", "equinox:*");
+			    	gogoSession.put("prompt", "osgi> ");
+			        gogoSession.execute("gosh --login --noshutdown");
+			    }
+			    catch (Exception e) {
+			        e.printStackTrace();
+			    }
+			    finally {
+			        gogoSession.close();
+			        equinoxSession.close();
+			    }
 			}, "Equinox Console Session").start();
 			return null;
 		}
 
+		@Override
 		public void modifiedService(ServiceReference<ConsoleSession> reference,
 				CommandSession service) {
 			// nothing
 		}
 
+		@Override
 		public void removedService(ServiceReference<ConsoleSession> reference,
 				CommandSession session) {
 			session.close();
@@ -163,6 +166,7 @@
 			this.context = context;
 		}
 
+		@Override
 		public List<ServiceRegistration<?>> addingService(ServiceReference<CommandProvider> reference) {
 			if (reference.getProperty("osgi.command.function") != null) {
 				// must be a gogo function already; don' track
@@ -173,8 +177,8 @@
 				Method[] commandMethods = getCommandMethods(command);
 
 				if (commandMethods.length > 0) {
-					List<ServiceRegistration<?>> registrations = new ArrayList<ServiceRegistration<?>>();
-					registrations.add(context.registerService(Object.class, new CommandProviderAdapter((CommandProvider) command, commandMethods), getAttributes(commandMethods)));
+					List<ServiceRegistration<?>> registrations = new ArrayList<>();
+					registrations.add(context.registerService(Object.class, new CommandProviderAdapter(command, commandMethods), getAttributes(commandMethods)));
 					return registrations;
 				} else {
 					context.ungetService(reference);
@@ -187,10 +191,12 @@
 		}
 
 
+		@Override
 		public void modifiedService(ServiceReference<CommandProvider> reference, List<ServiceRegistration<?>> service) {
 			// Nothing to do.
 		}
 
+		@Override
 		public void removedService(ServiceReference<CommandProvider> reference, List<ServiceRegistration<?>> registrations) {
 			for (ServiceRegistration<?> serviceRegistration : registrations) {
 				serviceRegistration.unregister();
@@ -199,23 +205,24 @@
 
 	}
 
+	@Override
 	public void start(BundleContext context) throws Exception {
-		commandProviderTracker = new ServiceTracker<CommandProvider, List<ServiceRegistration<?>>>(context, CommandProvider.class.getName(), new CommandCustomizer(context));
+		commandProviderTracker = new ServiceTracker<>(context, CommandProvider.class, new CommandCustomizer(context));
 		commandProviderTracker.open();
-		commandProcessorTracker = new ServiceTracker<CommandProcessor, ServiceTracker<ConsoleSession,CommandSession>>(context, CommandProcessor.class, new ProcessorCustomizer(context));
+		commandProcessorTracker = new ServiceTracker<>(context, CommandProcessor.class, new ProcessorCustomizer(context));
 		commandProcessorTracker.open();
 		
-		condPermAdminTracker = new ServiceTracker<ConditionalPermissionAdmin, Object>(context, ConditionalPermissionAdmin.class.getName(), null);
+		condPermAdminTracker = new ServiceTracker<>(context, ConditionalPermissionAdmin.class, null);
 		condPermAdminTracker.open();
 
 		// grab permission admin
-		permissionAdminTracker = new ServiceTracker<PermissionAdmin, Object>(context, PermissionAdmin.class.getName(), null);
+		permissionAdminTracker = new ServiceTracker<>(context, PermissionAdmin.class, null);
 		permissionAdminTracker.open();
 
-		startLevelManagerTracker = new ServiceTracker<StartLevel, Object>(context, StartLevel.class.getName(), null);
+		startLevelManagerTracker = new ServiceTracker<>(context, StartLevel.class, null);
 		startLevelManagerTracker.open();
 
-		packageAdminTracker = new ServiceTracker<PackageAdmin, PackageAdmin>(context, PackageAdmin.class, null);
+		packageAdminTracker = new ServiceTracker<>(context, PackageAdmin.class, null);
 		packageAdminTracker.open();
 		
 		equinoxCmdProvider = new EquinoxCommandProvider(context, this);
@@ -252,32 +259,32 @@
 	}
 
 	public StartLevel getStartLevel() {
-		return (StartLevel) getServiceFromTracker(startLevelManagerTracker, StartLevel.class.getName());
+		return getServiceFromTracker(startLevelManagerTracker, StartLevel.class);
 	}
 
 	public PermissionAdmin getPermissionAdmin() {
-		return (PermissionAdmin) getServiceFromTracker(permissionAdminTracker, PermissionAdmin.class.getName());
+		return getServiceFromTracker(permissionAdminTracker, PermissionAdmin.class);
 	}
 
 	public ConditionalPermissionAdmin getConditionalPermissionAdmin() {
-		return (ConditionalPermissionAdmin) getServiceFromTracker(condPermAdminTracker, ConditionalPermissionAdmin.class.getName());
+		return getServiceFromTracker(condPermAdminTracker, ConditionalPermissionAdmin.class);
 	}
 
 	public PackageAdmin getPackageAdmin() {
-		return (PackageAdmin) getServiceFromTracker(packageAdminTracker, PackageAdmin.class.getName());
+		return getServiceFromTracker(packageAdminTracker, PackageAdmin.class);
 	}
 
-	private static Object getServiceFromTracker(ServiceTracker<?, ?> tracker, String serviceClass) {
+	private static <T> T getServiceFromTracker(ServiceTracker<?, T> tracker, Class<T> serviceClass) {
 		if (tracker == null)
 			throw new IllegalStateException("Missing service: " + serviceClass);
-		Object result = tracker.getService();
+		T result = tracker.getService();
 		if (result == null)
 			throw new IllegalStateException("Missing service: " + serviceClass);
 		return result;
 	}
 
 	Method[] getCommandMethods(Object command) {
-		ArrayList<Method> names = new ArrayList<Method>();
+		ArrayList<Method> names = new ArrayList<>();
 		Class<?> c = command.getClass();
 		Method[] methods = c.getDeclaredMethods();
 		for (Method method : methods) {
@@ -294,7 +301,7 @@
 	}
 
 	Dictionary<String, Object> getAttributes(Method[] commandMethods) {
-		Dictionary<String, Object> dict = new Hashtable<String, Object>();
+		Dictionary<String, Object> dict = new Hashtable<>();
 		dict.put("osgi.command.scope", "equinox");
 		String[] methodNames = new String[commandMethods.length];
 		for (int i = 0; i < commandMethods.length; i++) {
@@ -306,6 +313,7 @@
 		return dict;
 	}
 
+	@Override
 	public void stop(BundleContext context) throws Exception {
 		commandProviderTracker.close();
 		commandProcessorTracker.close();
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapter.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapter.java
index d6a7ebe..c42e12a 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapter.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CommandProviderAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2012 IBM Corporation, SAP AG.
+ * Copyright (c) 2010, 2017 IBM Corporation, SAP AG.
  * 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 @@
 		try {
 			// first argument is the command
 			Method command = findCommand("_" + args[0]);
-			ArrayList<Object> argList = new ArrayList<Object>();
+			ArrayList<Object> argList = new ArrayList<>();
 			for (int i = 1; i < args.length; i++)
 				argList.add(args[i]);
 			return command.invoke(commandProvider, new CustomCommandInterpreter(commandSession, argList));
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CustomCommandInterpreter.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CustomCommandInterpreter.java
index 5feaeb4..9f86d4e 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CustomCommandInterpreter.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/command/adapter/CustomCommandInterpreter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2017 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
@@ -54,7 +54,8 @@
 	  arguments = args.iterator();
   }
   
-  public Object execute(String cmd) {
+  @Override
+public Object execute(String cmd) {
 	  try {
 		  return commandSession.execute(cmd);
 	  } catch (RuntimeException e) {
@@ -64,7 +65,8 @@
 	  } 
   }
 
-  public String nextArgument() {
+  @Override
+public String nextArgument() {
     if (arguments.hasNext()) {
     	Object next = arguments.next();
     	return next == null ? null : next.toString();
@@ -77,7 +79,8 @@
    *
    * @param o the object to be printed
    */
-  public void print(Object o) {
+  @Override
+public void print(Object o) {
       check4More();
       out.print(o);
       out.flush();    
@@ -86,7 +89,8 @@
   /**
    * Prints a empty line to the outputstream
    */
-  public void println() {
+  @Override
+public void println() {
     println(""); //$NON-NLS-1$
   }
 
@@ -94,7 +98,8 @@
    * Print a stack trace including nested exceptions.
    * @param t The offending exception
    */
-  public void printStackTrace(Throwable t) {
+  @Override
+public void printStackTrace(Throwable t) {
     t.printStackTrace(out);
 
     Method[] methods = t.getClass().getMethods();
@@ -131,7 +136,8 @@
    *
    * @param o the object to be printed
    */
-  public void println(Object o) {
+  @Override
+public void println(Object o) {
     if (o == null) {
       return;
     }
@@ -160,7 +166,8 @@
    * @param dic the dictionary to print
    * @param title the header to print above the key/value pairs
    */
-  public void printDictionary(Dictionary<?,?> dic, String title) {
+  @Override
+public void printDictionary(Dictionary<?,?> dic, String title) {
     if (dic == null)
       return;
 
@@ -188,25 +195,18 @@
    * @param bundle  the bundle containing the resource
    * @param resource  the resource to print
    */
-  public void printBundleResource(Bundle bundle, String resource) {
+  @Override
+public void printBundleResource(Bundle bundle, String resource) {
     URL entry = null;
     entry = bundle.getEntry(resource);
     if (entry != null) {
       try {
         println(resource);
-        InputStream in = entry.openStream();
         byte[] buffer = new byte[1024];
         int read = 0;
-        try {
+        try (InputStream in = entry.openStream()) {
           while ((read = in.read(buffer)) != -1)
             print(new String(buffer, 0, read));
-        } finally {
-          if (in != null) {
-            try {
-              in.close();
-            } catch (IOException e) {
-            }
-          }
         }
       } catch (Exception e) {
         System.err.println(e);
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/CommandsTracker.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/CommandsTracker.java
index 2b5f68c..4a2d436 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/CommandsTracker.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/CommandsTracker.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2013 SAP AG.
+ * Copyright (c) 2013, 2017 SAP AG 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 @@
     	commandNames = Collections.synchronizedSet(new HashSet<String>());
     	try {
 			Filter filter = bundleContext.createFilter(String.format("(&(%s=*)(%s=*))", CommandProcessor.COMMAND_SCOPE, CommandProcessor.COMMAND_FUNCTION));
-			commandsTracker = new ServiceTracker<Object, Set<String>>(bundleContext, filter, new CommandsTrackerCustomizer());
+			commandsTracker = new ServiceTracker<>(bundleContext, filter, new CommandsTrackerCustomizer());
 			commandsTracker.open();
 		} catch (InvalidSyntaxException e) {
 			//do nothing;
@@ -40,12 +40,13 @@
     
     public Set<String> getCommands() {
     	synchronized (lock) {
-    		return new HashSet<String>(commandNames);
+    		return new HashSet<>(commandNames);
     	}
     }
     
     class CommandsTrackerCustomizer implements ServiceTrackerCustomizer<Object, Set<String>> {
-    	public Set<String> addingService(ServiceReference<Object> reference) {
+    	@Override
+		public Set<String> addingService(ServiceReference<Object> reference) {
 			Object scope = reference.getProperty(CommandProcessor.COMMAND_SCOPE);
         	Object function = reference.getProperty(CommandProcessor.COMMAND_FUNCTION);
 
@@ -64,10 +65,12 @@
             return null;
 		}
 
+		@Override
 		public void modifiedService(ServiceReference<Object> reference, Set<String> commandNames) {
 			// nothing to do
 		}
 
+		@Override
 		public void removedService(ServiceReference<Object> reference, Set<String> commandNames) {
 			Object scope = reference.getProperty(CommandProcessor.COMMAND_SCOPE);
             Object function = reference.getProperty(CommandProcessor.COMMAND_FUNCTION);
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/DisconnectCommand.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/DisconnectCommand.java
index 5b79b9a..56f9bc7 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/DisconnectCommand.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/DisconnectCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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 @@
 	}
 	
 	public void startService() {
-		Dictionary<String, Object> props = new Hashtable<String, Object>();
+		Dictionary<String, Object> props = new Hashtable<>();
 		props.put(CommandProcessor.COMMAND_SCOPE, "equinox");
 		props.put(CommandProcessor.COMMAND_FUNCTION, new String[] {"disconnect"});
 		context.registerService(DisconnectCommand.class.getName(), this, props);
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandProvider.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandProvider.java
index bfb11f8..475cc06 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandProvider.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandProvider.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2014 IBM Corporation and others.
+ * Copyright (c) 2003, 2017 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
@@ -65,6 +65,7 @@
 import org.osgi.framework.wiring.BundleWire;
 import org.osgi.framework.wiring.BundleWiring;
 import org.osgi.framework.wiring.FrameworkWiring;
+import org.osgi.resource.Namespace;
 import org.osgi.service.condpermadmin.ConditionalPermissionAdmin;
 import org.osgi.service.condpermadmin.ConditionalPermissionInfo;
 import org.osgi.service.condpermadmin.ConditionalPermissionUpdate;
@@ -133,7 +134,7 @@
 	private final static String newline = "\r\n"; //$NON-NLS-1$
 
 	/** this list contains the bundles known to be lazily awaiting activation */
-	private final List<Bundle> lazyActivation = new ArrayList<Bundle>();
+	private final List<Bundle> lazyActivation = new ArrayList<>();
 	
 	private Activator activator;
 	
@@ -168,7 +169,7 @@
 		EquinoxCommandsConverter converter = new EquinoxCommandsConverter(context);
 		converterReg = context.registerService(Converter.class.getName(), converter, null);
 		
-		Dictionary<String, Object> props = new Hashtable<String, Object>();
+		Dictionary<String, Object> props = new Hashtable<>();
 		props.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE));
 		props.put(CommandProcessor.COMMAND_SCOPE, "equinox");
 		props.put(CommandProcessor.COMMAND_FUNCTION, functions);
@@ -995,7 +996,7 @@
 			System.out.print("unwired"); //$NON-NLS-1$
 			System.out.print(">"); //$NON-NLS-1$
 			System.out.print("<"); //$NON-NLS-1$
-			System.out.print(importReq.getDirectives().get(PackageNamespace.REQUIREMENT_RESOLUTION_DIRECTIVE));
+			System.out.print(importReq.getDirectives().get(Namespace.REQUIREMENT_RESOLUTION_DIRECTIVE));
 			System.out.println(">"); //$NON-NLS-1$
 		}
 		return title;
@@ -1185,7 +1186,7 @@
 	 */
 	@Descriptor(ConsoleMsg.CONSOLE_HELP_HEADERS_COMMAND_DESCRIPTION)
 	public List<Dictionary<String, String>> headers(@Descriptor(ConsoleMsg.CONSOLE_HELP_HEADERS_COMMAND_ARGUMENT_DESCRIPTION) Bundle... bundles) throws Exception {
-		ArrayList<Dictionary<String, String>> headers = new ArrayList<Dictionary<String,String>>();
+		ArrayList<Dictionary<String, String>> headers = new ArrayList<>();
 		
 		if (bundles == null || bundles.length == 0) {
 			System.out.println(ConsoleMsg.CONSOLE_NO_BUNDLE_SPECIFIED_ERROR);
@@ -1602,7 +1603,7 @@
 		} else {
 			names = symbolicName;
 		}
-		List<Bundle> bundles = new ArrayList<Bundle>();
+		List<Bundle> bundles = new ArrayList<>();
 		if (names == null) {
 			bundles.addAll(Arrays.asList(packageAdmin.getBundles(null, null)));
 		} else {
@@ -1706,14 +1707,14 @@
 		}
 	}
 	private Map<String, List<PackageSource>> getPackagesInternal(BundleWiring wiring) {
-		Map<String, List<PackageSource>> packages = new TreeMap<String, List<PackageSource>>();
+		Map<String, List<PackageSource>> packages = new TreeMap<>();
 		// first get the imported packages
 		List<BundleWire> packageWires = wiring.getRequiredWires(PackageNamespace.PACKAGE_NAMESPACE);
-		Set<String> importedPackageNames = new HashSet<String>();
+		Set<String> importedPackageNames = new HashSet<>();
 		for (BundleWire packageWire : packageWires) {
 			String packageName = (String) packageWire.getCapability().getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE);
 			importedPackageNames.add(packageName);
-			List<PackageSource> packageSources = new ArrayList<PackageSource>();
+			List<PackageSource> packageSources = new ArrayList<>();
 			packageSources.add(new PackageSource(packageWire.getCapability(), packageWire));
 			packages.put(packageName, packageSources);
 		}
@@ -1733,7 +1734,7 @@
 				if (!importedPackageNames.contains(packageName)) {
 					List<PackageSource> packageSources = packages.get(packageName);
 					if (packageSources == null) {
-						packageSources = new ArrayList<PackageSource>();
+						packageSources = new ArrayList<>();
 						packages.put(packageName, packageSources);
 					}
 					boolean sourceFound = false;
@@ -1750,7 +1751,7 @@
 			}
 
 			// get substituted packages
-			Set<String> declaredPackageNames = new HashSet<String>();
+			Set<String> declaredPackageNames = new HashSet<>();
 			for (BundleCapability declaredPackage : providerWiring.getRevision().getDeclaredCapabilities(PackageNamespace.PACKAGE_NAMESPACE)) {
 				declaredPackageNames.add((String) declaredPackage.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE));
 			}
@@ -1766,7 +1767,7 @@
 				if (declaredPackageNames.contains(packageName)) {
 					List<PackageSource> packageSources = packages.get(packageName);
 					if (packageSources == null) {
-						packageSources = new ArrayList<PackageSource>();
+						packageSources = new ArrayList<>();
 						packages.put(packageName, packageSources);
 					}
 					packageSources.add(new PackageSource(packageWire.getCapability(), packageWire));
@@ -1893,7 +1894,7 @@
 	@Descriptor(ConsoleMsg.CONSOLE_HELP_GETPROP_COMMAND_DESCRIPTION)
 	public void getprop(@Descriptor(ConsoleMsg.CONSOLE_HELP_GETPROP_COMMAND_ARGUMENT_DESCRIPTION) String... propName) throws Exception {
 		Properties allProperties = System.getProperties();
-		Iterator<?> propertyNames = new TreeSet<Object>(allProperties.keySet()).iterator();
+		Iterator<?> propertyNames = new TreeSet<>(allProperties.keySet()).iterator();
 		while (propertyNames.hasNext()) {
 			String prop = (String) propertyNames.next();
 			if (propName == null || propName.length == 0 || prop.startsWith(propName[0])) {
@@ -1905,7 +1906,7 @@
 	@Descriptor(ConsoleMsg.CONSOLE_HELP_DIAG_COMMAND_DESCRIPTION)
 	public void diag(@Descriptor(ConsoleMsg.CONSOLE_HELP_DIAG_COMMAND_ARGUMENT_DESCRIPTION) Bundle[] bundles) throws Exception {
 		if (bundles.length == 0) {
-			List<Bundle> unresolved = new ArrayList<Bundle>();
+			List<Bundle> unresolved = new ArrayList<>();
 			Bundle[] allBundles = context.getBundles();
 			for (Bundle bundle : allBundles) {
 				BundleRevision revision = bundle.adapt(BundleRevision.class);
@@ -1942,7 +1943,7 @@
 	}
 
 	private static class DiagReportListener implements ResolverHookFactory {
-		private final Collection<BundleRevision> targetTriggers = new ArrayList<BundleRevision>();
+		private final Collection<BundleRevision> targetTriggers = new ArrayList<>();
 		public DiagReportListener(Bundle[] bundles) {
 			for (Bundle bundle : bundles) {
 				BundleRevision revision = bundle.adapt(BundleRevision.class);
@@ -1955,29 +1956,35 @@
 		volatile ResolutionReport report = null;
 		class DiagResolverHook implements ResolverHook, ResolutionReport.Listener {
 
+			@Override
 			public void handleResolutionReport(ResolutionReport report) {
 				DiagReportListener.this.report = report;
 			}
 
+			@Override
 			public void filterResolvable(Collection<BundleRevision> candidates) {
 				// nothing
 			}
 
+			@Override
 			public void filterSingletonCollisions(BundleCapability singleton,
 					Collection<BundleCapability> collisionCandidates) {
 				// nothing
 			}
 
+			@Override
 			public void filterMatches(BundleRequirement requirement,
 					Collection<BundleCapability> candidates) {
 				// nothing
 			}
 
+			@Override
 			public void end() {
 				// nothing
 			}
 			
 		}
+		@Override
 		public ResolverHook begin(Collection<BundleRevision> triggers) {
 			if (triggers.containsAll(targetTriggers)) {
 				return new DiagResolverHook();
@@ -1992,6 +1999,7 @@
 	/**
 	 * This is used to track lazily activated bundles.
 	 */
+	@Override
 	public void bundleChanged(BundleEvent event) {
 		int type = event.getType();
 		Bundle bundle = event.getBundle();
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandsConverter.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandsConverter.java
index d3300c4..feab5d8 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandsConverter.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/EquinoxCommandsConverter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,17 +32,18 @@
 		this.context = context;
 	}
 	
+	@Override
 	public Object convert(Class<?> desiredType, Object in) throws Exception {
 		if(desiredType == Bundle[].class) {
 			if (in instanceof String) {
-				if("*".equals((String) in)) {
+				if("*".equals(in)) {
 					return context.getBundles();
 				}
 			} else if (in instanceof List<?>) {
 				List<?> args = (List<?>) in;
 				if (checkStringElements(args)) {
 					try {
-						ArrayList<Bundle> bundles = new ArrayList<Bundle>();
+						ArrayList<Bundle> bundles = new ArrayList<>();
 						for (Object arg : args) {
 							long id = Long.parseLong((String)arg);
 							bundles.add(context.getBundle(id));
@@ -124,6 +125,7 @@
 		return true;
 	}
 
+	@Override
 	public CharSequence format(Object target, int level, Converter escape) throws Exception {
 		if (target instanceof Dictionary<?, ?>) {
 			Dictionary<?, ?> dic = (Dictionary<?, ?>) target;
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/HelpCommand.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/HelpCommand.java
index eef1fa8..61c5bd6 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/HelpCommand.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/HelpCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,6 +46,7 @@
     		this.context = context;
     	}
     	
+		@Override
 		public Set<CommandProvider> addingService(
 				ServiceReference<CommandProvider> reference) {
 			if (reference.getProperty("osgi.command.function") != null) {
@@ -58,12 +59,14 @@
 			return legacyCommandProviders;
 		}
 
+		@Override
 		public void modifiedService(
 				ServiceReference<CommandProvider> reference,
 				Set<CommandProvider> service) {
 			// nothing to do
 		}
 
+		@Override
 		public void removedService(ServiceReference<CommandProvider> reference,
 				Set<CommandProvider> providers) {
 			CommandProvider provider = context.getService(reference);
@@ -74,15 +77,15 @@
 	
 	public HelpCommand(BundleContext context) {
 		this.context = context;
-		legacyCommandProviders = new HashSet<CommandProvider>();
-		commandProvidersTracker = new ServiceTracker<CommandProvider, Set<CommandProvider>>(context, CommandProvider.class.getName(), new CommandProviderCustomizer(context));
+		legacyCommandProviders = new HashSet<>();
+		commandProvidersTracker = new ServiceTracker<>(context, CommandProvider.class, new CommandProviderCustomizer(context));
 		commandProvidersTracker.open();
-		commandsTrackerTracker = new ServiceTracker<CommandsTracker, CommandsTracker>(context, CommandsTracker.class.getName(), null);
+		commandsTrackerTracker = new ServiceTracker<>(context, CommandsTracker.class, null);
 		commandsTrackerTracker.open();
 	}
 	
 	public void startService() {
-		Dictionary<String, Object> props = new Hashtable<String, Object>();
+		Dictionary<String, Object> props = new Hashtable<>();
 		props.put(Constants.SERVICE_RANKING, new Integer(Integer.MAX_VALUE));
 		props.put(CommandProcessor.COMMAND_SCOPE, "equinox");
 		props.put(CommandProcessor.COMMAND_FUNCTION, new String[] {"help"});
@@ -177,7 +180,7 @@
 				if (method.getName().equals("_" + command)) {
 					try {
 						Method helpMethod = provider.getClass().getMethod("_help", CommandInterpreter.class);
-						ArrayList<Object> argsList = new ArrayList<Object>();
+						ArrayList<Object> argsList = new ArrayList<>();
 						argsList.add(command);
 						retval = helpMethod.invoke(provider, new CustomCommandInterpreter(session, argsList));
 					} catch (Exception e) {
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/ManCommand.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/ManCommand.java
index f17f982..e6d2914 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/ManCommand.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/commands/ManCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011, 2012 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG
  * 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
@@ -25,7 +25,7 @@
 	}
 	
 	public void startService() {
-		Dictionary<String, Object> props = new Hashtable<String, Object>();
+		Dictionary<String, Object> props = new Hashtable<>();
 		props.put(CommandProcessor.COMMAND_SCOPE, "equinox");
 		props.put(CommandProcessor.COMMAND_FUNCTION, new String[] {"man"});
 		context.registerService(ManCommand.class.getName(), this, props);
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputScanner.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputScanner.java
index 3ee1bfe..6bbc934 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputScanner.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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
@@ -60,7 +60,8 @@
     	this.context = context;
     }
     
-    public void scan(int b) throws IOException {
+    @Override
+	public void scan(int b) throws IOException {
         b &= 0xFF;
         if (isCR) {
             isCR = false;
@@ -261,7 +262,7 @@
     }
     
     protected String[] removeCommonPrefix(String [] names, String commonPrefix){
-    	ArrayList<String> result = new ArrayList<String>();
+    	ArrayList<String> result = new ArrayList<>();
     	for (String name : names) {
     		String nameWithoutPrefix = name.substring(commonPrefix.length());
     		if (nameWithoutPrefix.length() > 0) {
@@ -333,7 +334,8 @@
         history.reset();
     }
 
-    protected void scanEsc(final int b) throws IOException {
+    @Override
+	protected void scanEsc(final int b) throws IOException {
         esc += (char) b;
         KEYS key = checkEscape(esc);
         if (key == KEYS.UNFINISHED) {
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputStream.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputStream.java
index 73ab4ec..93f7a69 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputStream.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleInputStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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
@@ -19,12 +19,13 @@
  */
 public class ConsoleInputStream extends InputStream {
 
-    private final ArrayList<byte[]> buffer = new ArrayList<byte[]>();
+    private final ArrayList<byte[]> buffer = new ArrayList<>();
     private byte[] current;
     private int pos;
     private boolean isClosed;
 
-    public synchronized int read() {
+    @Override
+	public synchronized int read() {
         while (current == null && buffer.isEmpty() && !isClosed) {
             try {
                 wait();
@@ -108,7 +109,8 @@
         return readCnt;
     }*/
     
-    public synchronized int read(byte b[], int off, int len) throws IOException {
+    @Override
+	public synchronized int read(byte b[], int off, int len) throws IOException {
         if (len == 0) {
             return len;
         }
@@ -140,7 +142,8 @@
         return readCnt;
     }
 
-    public synchronized void close() throws IOException {
+    @Override
+	public synchronized void close() throws IOException {
         isClosed = true;
         notifyAll();
     }
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleOutputStream.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleOutputStream.java
index 575342c..13ec7cb 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleOutputStream.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/ConsoleOutputStream.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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
@@ -51,7 +51,8 @@
     /**
      * An implementation of the corresponding abstract method in OutputStream.
      */
-    public synchronized void write(int i) throws IOException {
+    @Override
+	public synchronized void write(int i) throws IOException {
 
         if (!queueing) {
             if (isEcho) {
@@ -90,7 +91,8 @@
      *
      * @throws IOException
      */
-    public synchronized void flush() throws IOException {
+    @Override
+	public synchronized void flush() throws IOException {
         if (pos > 0) {
             try {
 				out.write(buffer, 0, pos);
@@ -122,7 +124,8 @@
      *
      * @throws IOException
      */
-    public void close() throws IOException {
+    @Override
+	public void close() throws IOException {
         out.close();
     }
 
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/InputHandler.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/InputHandler.java
index 38451ad..7bfe4ee 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/InputHandler.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/InputHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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,8 @@
         buffer = new byte[MAX_SIZE];
     }
 
-    public void run() {
+    @Override
+	public void run() {
         int count;
         try {
             while ((count = input.read(buffer)) > -1) {
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/Scanner.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/Scanner.java
index 08e6f07..d544120 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/Scanner.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/Scanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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
@@ -51,7 +51,7 @@
     public Scanner(ConsoleInputStream toShell, OutputStream toTelnet) {
         this.toShell = toShell;
         this.toTelnet = toTelnet;
-        supportedEscapeSequences = new HashMap<String, TerminalTypeMappings> ();
+        supportedEscapeSequences = new HashMap<> ();
         supportedEscapeSequences.put("ANSI", new ANSITerminalTypeMappings());
         supportedEscapeSequences.put("VT100", new VT100TerminalTypeMappings());
         VT220TerminalTypeMappings vtMappings = new VT220TerminalTypeMappings();
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/ANSITerminalTypeMappings.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/ANSITerminalTypeMappings.java
index 0396c27..e92d805 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/ANSITerminalTypeMappings.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/ANSITerminalTypeMappings.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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
@@ -22,6 +22,7 @@
         DEL = 127;
 	}
 	
+	@Override
 	public void setKeypadMappings() {
 		escapesToKey.put("[1~", KEYS.HOME); //$NON-NLS-1$
         escapesToKey.put("[4~", KEYS.END); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/TerminalTypeMappings.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/TerminalTypeMappings.java
index 53dc2a6..f7298b2 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/TerminalTypeMappings.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/common/terminal/TerminalTypeMappings.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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 @@
 	protected byte DEL;
 	
 	public TerminalTypeMappings() {
-		escapesToKey = new HashMap<String, KEYS>();
+		escapesToKey = new HashMap<>();
         escapesToKey.put("[A", KEYS.UP); //$NON-NLS-1$
         escapesToKey.put("[B", KEYS.DOWN); //$NON-NLS-1$
         escapesToKey.put("[C", KEYS.RIGHT); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CommandNamesCompleter.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CommandNamesCompleter.java
index f7b496d..07009ed 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CommandNamesCompleter.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CommandNamesCompleter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,10 +34,11 @@
 	
 	public CommandNamesCompleter(BundleContext context, CommandSession session) {
 		this.session = session;
-		commandsTrackerTracker = new ServiceTracker<CommandsTracker, CommandsTracker>(context, CommandsTracker.class.getName(), null);
+		commandsTrackerTracker = new ServiceTracker<>(context, CommandsTracker.class.getName(), null);
 		commandsTrackerTracker.open();
 	}
 	
+	@Override
 	@SuppressWarnings("unchecked")
 	public Map<String, Integer> getCandidates(String buffer, int cursor) {
 		CommandsTracker commandsTracker = commandsTrackerTracker.getService();
@@ -54,7 +55,7 @@
 		// command names are stored in the session in lower case
 		String currentToken = CommandLineParser.getCurrentToken(buffer, cursor).toLowerCase();
 		if(currentToken == null || currentToken.equals("")) {
-			return new HashMap<String, Integer>();
+			return new HashMap<>();
 		}
 		
 		if (!currentToken.contains(":")) {
@@ -66,7 +67,7 @@
 	}
 	
 	private Set<String> clearScopes(Set<String> commandNames) {
-		Set<String> clearedCommandNames = new HashSet<String>();
+		Set<String> clearedCommandNames = new HashSet<>();
 		
 		for(String commandName : commandNames) {
 			clearedCommandNames.add(commandName.substring(commandName.indexOf(":") + 1));
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CompletionHandler.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CompletionHandler.java
index b2f9e3b..ea42907 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CompletionHandler.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/CompletionHandler.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,14 +41,14 @@
 	public CompletionHandler(BundleContext context, CommandSession session) {
 		this.context = context;
 		this.session = session;
-		completers = new HashSet<Completer>();
+		completers = new HashSet<>();
 	}
 	
 	public Map<String, Integer> getCandidates(byte[] buf, int cursor) {
         String currentInput = new String(buf);
         String currentToken = CommandLineParser.getCurrentToken(currentInput, cursor);
         if (currentToken ==  null){
-        	return new HashMap<String, Integer>();
+        	return new HashMap<>();
         }
         if (currentToken.contains(FILE) == true) {
         	completers.add(new FileNamesCompleter());
@@ -61,7 +61,7 @@
         	}
         }
         lookupCustomCompleters();
-		Map<String, Integer> candidates = new TreeMap<String, Integer>();
+		Map<String, Integer> candidates = new TreeMap<>();
 		for (Completer completer : completers) {
 			candidates.putAll(completer.getCandidates(currentInput, cursor));
 		}
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/FileNamesCompleter.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/FileNamesCompleter.java
index a69ab5e..aa2c5b4 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/FileNamesCompleter.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/FileNamesCompleter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,11 +27,12 @@
 public class FileNamesCompleter implements Completer {
 	private static final String FILE = "file:";
 	
+	@Override
 	public Map<String, Integer> getCandidates(String buffer, int cursor) {
-		Map<String, Integer> result = new HashMap<String, Integer>();
+		Map<String, Integer> result = new HashMap<>();
 		String currentToken = CommandLineParser.getCurrentToken(buffer, cursor);
 		if(currentToken == null || currentToken.equals("")) {
-			return new HashMap<String, Integer>();
+			return new HashMap<>();
 		}
 		
 		// if current token contains file:, then use URL class to parse the filename
@@ -90,7 +91,7 @@
 	}
 
 	private Map<String, Integer> checkChildren(File parent, String nameToComplete, int cursor, boolean absolute) {
-		Map<String, Integer> result = new HashMap<String, Integer>();
+		Map<String, Integer> result = new HashMap<>();
 		if(parent.exists()) {
 			File[] children = parent.listFiles();
 			for(File child : children) {
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/StringsCompleter.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/StringsCompleter.java
index 7372379..ca90153 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/StringsCompleter.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/StringsCompleter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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,10 +31,11 @@
 		this.isCaseSensitive = isCaseSensitive;
 	}
 	
+	@Override
 	public Map<String, Integer> getCandidates(String buffer, int cursor) {
 		String currentToken = CommandLineParser.getCurrentToken(buffer, cursor);
 		if (currentToken == null) {
-			return new HashMap<String, Integer>();
+			return new HashMap<>();
 		}
 		if (!isCaseSensitive) {
 			currentToken = currentToken.toLowerCase();
@@ -47,10 +48,10 @@
 		// that a variable name is expected; in this case all strings will be 
 		// returned as candidates
 		if(currentToken.equals("") && buffer.charAt(startIndex - 1) != '$') {
-			return new HashMap<String, Integer>();
+			return new HashMap<>();
 		}
 		
-		Map<String, Integer> result = new HashMap<String, Integer>();
+		Map<String, Integer> result = new HashMap<>();
 
 		for(String candidate : strings) {
 			if (isCaseSensitive) {
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/VariableNamesCompleter.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/VariableNamesCompleter.java
index e72277d..e90940a 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/VariableNamesCompleter.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/completion/VariableNamesCompleter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2011 SAP AG
+ * Copyright (c) 2011, 2017 SAP AG 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
@@ -29,6 +29,7 @@
 		this.session = session;
 	}
 	
+	@Override
 	public Map<String, Integer> getCandidates(String buffer, int cursor) {
 		// CommandSession.get(null) returns the names of all registered varialbes
 		@SuppressWarnings("unchecked")
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/NegotiationFinishedCallback.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/NegotiationFinishedCallback.java
index c468118..852b3f7 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/NegotiationFinishedCallback.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/NegotiationFinishedCallback.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG
+ * Copyright (c) 2010, 2017 SAP AG 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,6 +24,7 @@
 		this.telnetConnection = telnetConnection;
 	}
 	
+	@Override
 	public void finished() {
 		telnetConnection.telnetNegotiationFinished();
 	}
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetCommand.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetCommand.java
index 8829242..fbfe789 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetCommand.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetCommand.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2013 SAP AG and others.
+ * Copyright (c) 2010, 2017 SAP AG 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,7 +33,7 @@
 	
 	private String defaultHost = null;
     private int defaultPort;
-    private List<CommandProcessor> processors = new ArrayList<CommandProcessor>();
+    private List<CommandProcessor> processors = new ArrayList<>();
     private final BundleContext context;
     private String host = null;
     private int port;
@@ -54,7 +54,7 @@
         processors.add(processor);
         this.context = context;
         if ("true".equals(context.getProperty(USE_CONFIG_ADMIN_PROP))) {
-        	Dictionary<String, String> telnetProperties = new Hashtable<String, String>();
+        	Dictionary<String, String> telnetProperties = new Hashtable<>();
         	telnetProperties.put(Constants.SERVICE_PID, TELNET_PID);
         	try {
         		synchronized (lock) {
@@ -90,7 +90,7 @@
     }
     
     public synchronized void startService() {
-    	Dictionary<String, Object> properties = new Hashtable<String, Object>();
+    	Dictionary<String, Object> properties = new Hashtable<>();
 		properties.put("osgi.command.scope", "equinox");
 		properties.put("osgi.command.function", new String[] {"telnet"});
 		if ((port > 0 || defaultPort > 0) && isEnabled == true) {
@@ -215,6 +215,7 @@
     
     class TelnetConfigurator implements ManagedService {
 		private Dictionary<String, Object> properties;
+		@Override
 		public synchronized void updated(Dictionary<String, ?> props) throws ConfigurationException {
 			if (props != null) {
 				@SuppressWarnings("unchecked")
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetConnection.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetConnection.java
index cfdf098..af46bd2 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetConnection.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetConnection.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG and others
+ * Copyright (c) 2010, 2017 SAP AG 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
@@ -50,6 +50,7 @@
 		callback = new NegotiationFinishedCallback(this);
 	}
 	
+	@Override
 	public void run() {
 		try {
 			ConsoleInputStream in = new ConsoleInputStream();
@@ -108,6 +109,7 @@
 		}
 	}
 	
+	@Override
 	public void close() {
 		try {
 			this.interrupt();
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetInputScanner.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetInputScanner.java
index 57f9af3..79f1898 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetInputScanner.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetInputScanner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG and others
+ * Copyright (c) 2010, 2017 SAP AG 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,9 @@
     private boolean shouldFinish = false;
     private boolean tTypeNegotiationStarted = false;
     private int lastRead = -1;
-    private ArrayList<Integer> currentTerminalType = new ArrayList<Integer>();
+    private ArrayList<Integer> currentTerminalType = new ArrayList<>();
     private ArrayList<Integer> lastTerminalType = null;
-    private Set<String> supportedTerminalTypes = new HashSet<String>();
+    private Set<String> supportedTerminalTypes = new HashSet<>();
     private Callback callback;
 
     public TelnetInputScanner(ConsoleInputStream toShell, ConsoleOutputStream toTelnet, Callback callback) {
@@ -64,7 +64,8 @@
         supportedTerminalTypes.add("SCO");     
     }
 
-    public void scan(int b) throws IOException {
+    @Override
+	public void scan(int b) throws IOException {
         b &= 0xFF;
 
         if (isEsc) {
@@ -174,7 +175,7 @@
 					return;
 				}
 				lastTerminalType = currentTerminalType;
-				currentTerminalType = new ArrayList<Integer>();
+				currentTerminalType = new ArrayList<>();
 				if (isLast == true && isMatch == false) {
 					shouldFinish = true;
 					sendRequest();
@@ -263,7 +264,8 @@
         toShell.add(new byte[]{BS});
     }
 
-    protected void scanEsc(int b) throws IOException {
+    @Override
+	protected void scanEsc(int b) throws IOException {
         esc += (char) b;
         toShell.add(new byte[]{(byte) b});
         KEYS key = checkEscape(esc);
diff --git a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetServer.java b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetServer.java
index 9b7dd14..0a70dac 100755
--- a/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetServer.java
+++ b/bundles/org.eclipse.equinox.console/src/org/eclipse/equinox/console/telnet/TelnetServer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2010, 2011 SAP AG and others
+ * Copyright (c) 2010, 2017 SAP AG 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,8 +35,8 @@
     private boolean isRunning = true;
     private List<CommandProcessor> processors = null;
     private BundleContext context;
-    private List<Socket> sockets = new ArrayList<Socket>();
-    private Map<CommandProcessor, List<TelnetConnection>> processorToConnectionsMapping = new HashMap<CommandProcessor, List<TelnetConnection>>();
+    private List<Socket> sockets = new ArrayList<>();
+    private Map<CommandProcessor, List<TelnetConnection>> processorToConnectionsMapping = new HashMap<>();
     
     public TelnetServer(BundleContext context, List<CommandProcessor> processors, String host, int port) throws IOException {
     	this.context = context;
@@ -48,6 +48,7 @@
     	}
     }
     
+	@Override
 	public void run()
     {
         try
@@ -60,7 +61,7 @@
                 	TelnetConnection telnetConnection = new TelnetConnection(socket, processor, context);
                 	List<TelnetConnection> telnetConnections = processorToConnectionsMapping.get(processor);
                 	if (telnetConnections == null) {
-                		telnetConnections = new ArrayList<TelnetConnection>();
+                		telnetConnections = new ArrayList<>();
                 		processorToConnectionsMapping.put(processor, telnetConnections);
                 	}
                 	telnetConnections.add(telnetConnection);
@@ -86,7 +87,7 @@
 	public synchronized void addCommandProcessor(CommandProcessor processor) {
 		processors.add(processor);
 		if (!sockets.isEmpty()) {
-			List<TelnetConnection> telnetConnections = new ArrayList<TelnetConnection>();
+			List<TelnetConnection> telnetConnections = new ArrayList<>();
 			for (Socket socket : sockets) {
 				TelnetConnection telnetConnection = new TelnetConnection(socket, processor, context);
 				telnetConnections.add(telnetConnection);
