diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/AllTests.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/AllTests.java
index f13b342..0c4dc13 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/AllTests.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/AllTests.java
@@ -31,14 +31,14 @@
 
 	public static Test suite() {
 		TestSuite suite = new TestSuite(AllTests.class.getName());
-		suite.addTest(EclipsePreferencesTest.suite());
-		suite.addTest(PreferencesServiceTest.suite());
-		suite.addTest(IScopeContextTest.suite());
+		suite.addTestSuite(EclipsePreferencesTest.class);
+		suite.addTestSuite(PreferencesServiceTest.class);
+		suite.addTestSuite(IScopeContextTest.class);
 		suite.addTest(TestBug388004.suite());
 		suite.addTest(TestBug380859.suite());
-		suite.addTest(PreferenceExportTest.suite());
-		suite.addTest(PreferenceForwarderTest.suite());
-		suite.addTest(PreferencesTest.suite());
+		suite.addTestSuite(PreferenceExportTest.class);
+		suite.addTestSuite(PreferenceForwarderTest.class);
+		suite.addTestSuite(PreferencesTest.class);
 		return suite;
 	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/EclipsePreferencesTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/EclipsePreferencesTest.java
index bf0e4d2..606bb48 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/EclipsePreferencesTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/EclipsePreferencesTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2015 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 import java.io.*;
 import java.util.*;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.preferences.EclipsePreferences;
 import org.eclipse.core.internal.preferences.TestHelper;
 import org.eclipse.core.internal.runtime.InternalPlatform;
@@ -57,22 +55,30 @@
 		public StringBuilder log = new StringBuilder();
 
 		private String typeCode(Object value) {
-			if (value == null)
+			if (value == null) {
 				return "";
-			if (value instanceof Boolean)
+			}
+			if (value instanceof Boolean) {
 				return "B";
-			if (value instanceof Integer)
+			}
+			if (value instanceof Integer) {
 				return "I";
-			if (value instanceof Long)
+			}
+			if (value instanceof Long) {
 				return "L";
-			if (value instanceof Float)
+			}
+			if (value instanceof Float) {
 				return "F";
-			if (value instanceof Double)
+			}
+			if (value instanceof Double) {
 				return "D";
-			if (value instanceof String)
+			}
+			if (value instanceof String) {
 				return "S";
-			if (value instanceof byte[])
+			}
+			if (value instanceof byte[]) {
 				return "b";
+			}
 			assertTrue("0.0: " + value, false);
 			return null;
 		}
@@ -95,14 +101,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		// all test methods are named "test..."
-		return new TestSuite(EclipsePreferencesTest.class);
-		//		TestSuite suite = new TestSuite();
-		//		suite.addTest(new EclipsePreferencesTest("testFileFormat"));
-		//		return suite;
-	}
-
 	private IEclipsePreferences getScopeRoot() {
 		return (IEclipsePreferences) Platform.getPreferencesService().getRootNode().node(TestScope.SCOPE);
 	}
@@ -628,8 +626,9 @@
 	public void testRemoveNode() {
 		Preferences root = getScopeRoot();
 		ArrayList<Preferences> list = new ArrayList<>();
-		for (int i = 0; i < 5; i++)
+		for (int i = 0; i < 5; i++) {
 			list.add(root.node(getUniqueString()));
+		}
 
 		// all exist
 		for (Iterator<Preferences> i = list.iterator(); i.hasNext();) {
@@ -757,15 +756,18 @@
 	}
 
 	private void assertEquals(String message, byte[] one, byte[] two) {
-		if (one == null && two == null)
+		if (one == null && two == null) {
 			return;
-		if (one == two)
+		}
+		if (one == two) {
 			return;
+		}
 		assertNotNull(message + ".1", one);
 		assertNotNull(message + ".2", two);
 		assertEquals(message + ".3", one.length, two.length);
-		for (int i = 0; i < one.length; i++)
+		for (int i = 0; i < one.length; i++) {
 			assertEquals(message + ".4." + i, one[i], two[i]);
+		}
 	}
 
 	public void testChildrenNames() {
@@ -782,8 +784,9 @@
 		assertEquals("1.1", 0, result.length);
 
 		// add children
-		for (String childrenName : childrenNames)
+		for (String childrenName : childrenNames) {
 			node.node(childrenName);
+		}
 		try {
 			result = node.childrenNames();
 		} catch (BackingStoreException e) {
@@ -834,21 +837,24 @@
 		// create some more children and check
 		parent = node;
 		Preferences[] nodes = new Preferences[childrenNames.length];
-		for (int i = 0; i < childrenNames.length; i++)
+		for (int i = 0; i < childrenNames.length; i++) {
 			nodes[i] = parent.node(childrenNames[i]);
-		for (String childrenName : childrenNames)
+		}
+		for (String childrenName : childrenNames) {
 			try {
 				assertTrue("4.0", parent.nodeExists(childrenName));
 				assertTrue("4.1", !parent.nodeExists(fake));
 			} catch (BackingStoreException e) {
 				fail("4.99", e);
 			}
-		for (Preferences preferenceNode : nodes)
+		}
+		for (Preferences preferenceNode : nodes) {
 			try {
 				assertTrue("4.2", preferenceNode.nodeExists(""));
 			} catch (BackingStoreException e) {
 				fail("4.100", e);
 			}
+		}
 
 		// remove children and check
 		for (int i = 0; i < nodes.length; i++) {
@@ -876,8 +882,9 @@
 
 		// fill the node up with values
 		try {
-			for (int i = 0; i < keys.length; i++)
+			for (int i = 0; i < keys.length; i++) {
 				node.put(keys[i], values[i]);
+			}
 			assertEquals("2.0", keys.length, node.keys().length);
 			assertEquals("2.1", keys, node.keys(), false);
 		} catch (BackingStoreException e) {
@@ -888,8 +895,9 @@
 		try {
 			node.clear();
 			assertEquals("3.0", 0, node.keys().length);
-			for (int i = 0; i < keys.length; i++)
+			for (int i = 0; i < keys.length; i++) {
 				assertNull("3.1." + i, node.get(keys[i], null));
+			}
 		} catch (BackingStoreException e) {
 			fail("3.99", e);
 		}
@@ -1047,8 +1055,9 @@
 
 		// create fake plug-in and store 2.1 format tests in legacy location
 		Bundle runtimeBundle = Platform.getBundle(Platform.PI_RUNTIME);
-		if (runtimeBundle == null)
+		if (runtimeBundle == null) {
 			return;
+		}
 		String runtimeStateLocation = Platform.getStateLocation(runtimeBundle).toString();
 		IPath pluginStateLocation = new Path(runtimeStateLocation.replaceAll(Platform.PI_RUNTIME, pluginID));
 		IPath oldFile = pluginStateLocation.append(OLD_PREFS_FILENAME);
@@ -1062,12 +1071,13 @@
 		} catch (IOException e) {
 			fail("1.0", e);
 		} finally {
-			if (output != null)
+			if (output != null) {
 				try {
 					output.close();
 				} catch (IOException e) {
 					// ignore
 				}
+			}
 		}
 
 		// access fake plug-in via new preferences APIs which should invoke conversion
@@ -1171,8 +1181,9 @@
 		BufferedReader reader = new BufferedReader(new FileReader(location.toFile()));
 		String line;
 		try {
-			while ((line = reader.readLine()) != null)
+			while ((line = reader.readLine()) != null) {
 				result.add(line);
+			}
 		} finally {
 			reader.close();
 		}
@@ -1256,8 +1267,9 @@
 
 	private Properties loadProperties(IPath location) {
 		Properties result = new Properties();
-		if (!location.toFile().exists())
+		if (!location.toFile().exists()) {
 			return result;
+		}
 		InputStream input = null;
 		try {
 			input = new FileInputStream(location.toFile());
@@ -1265,12 +1277,13 @@
 		} catch (IOException e) {
 			fail("loadProperties", e);
 		} finally {
-			if (input != null)
+			if (input != null) {
 				try {
 					input.close();
 				} catch (IOException e) {
 					// ignore
 				}
+			}
 		}
 		return result;
 	}
@@ -1383,8 +1396,9 @@
 		defaultScope.getNode(TEST_NODE_PATH).putByteArray(TEST_PREF_KEY, testArray);
 		final byte[] returnArray = Platform.getPreferencesService().getByteArray(TEST_NODE_PATH, TEST_PREF_KEY, new byte[] {}, null);
 		assertEquals("1.0 Wrong size", testArray.length, returnArray.length);
-		for (int i = 0; i < testArray.length; i++)
+		for (int i = 0; i < testArray.length; i++) {
 			assertEquals("2.0 Wrong value at: " + i, testArray[i], returnArray[i]);
+		}
 	}
 
 	/*
@@ -1400,8 +1414,9 @@
 			File file = RuntimeTestsPlugin.getTestData("testData/preferences/test3");
 			Collection<String> expectedChildren = Arrays.asList(file.list());
 			String[] children = node.childrenNames();
-			for (String child : children)
+			for (String child : children) {
 				assertTrue("1.1." + child, expectedChildren.contains(child));
+			}
 		} catch (BackingStoreException e) {
 			fail("1.99", e);
 		}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/IScopeContextTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/IScopeContextTest.java
index 37ee2d2..e556c41 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/IScopeContextTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/IScopeContextTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2015 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.internal.preferences;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.preferences.*;
@@ -32,14 +30,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		// all test methods are named "test..."
-		return new TestSuite(IScopeContextTest.class);
-		//		TestSuite suite = new TestSuite();
-		//		suite.addTest(new IScopeContextTest("test"));
-		//		return suite;
-	}
-
 	public void testGetNode() {
 		IScopeContext context = InstanceScope.INSTANCE;
 
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/PreferencesServiceTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/PreferencesServiceTest.java
index e69246f..84eba14 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/PreferencesServiceTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/preferences/PreferencesServiceTest.java
@@ -13,8 +13,6 @@
 
 import java.io.*;
 import java.util.*;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.preferences.EclipsePreferences;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.preferences.*;
@@ -109,14 +107,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		// all test methods are named "test..."
-		return new TestSuite(PreferencesServiceTest.class);
-		//				TestSuite suite = new TestSuite();
-		//				suite.addTest(new PreferencesServiceTest("testValidateVersions"));
-		//				return suite;
-	}
-
 	public void testImportExportBasic() {
 		IPreferencesService service = Platform.getPreferencesService();
 
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/AllTests.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/AllTests.java
index 79b1461..1f542af 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/AllTests.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/AllTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,16 +24,16 @@
 
 	public static Test suite() {
 		TestSuite suite = new TestSuite(AllTests.class.getName());
-		suite.addTest(ExtensionRegistryDynamicTest.suite());
+		suite.addTestSuite(ExtensionRegistryDynamicTest.class);
 		suite.addTest(ExtensionRegistryStaticTest.suite());
 		suite.addTest(NamespaceTest.suite());
 		suite.addTest(AllSimpleRegistryTests.suite());
 		suite.addTestSuite(StaleObjects.class);
-		suite.addTest(ContributorsTest.suite());
+		suite.addTestSuite(ContributorsTest.class);
 		suite.addTest(ExtensionRegistryStaticTest.suite()); // test again
-		suite.addTest(RegistryListenerTest.suite());
-		suite.addTest(InputErrorTest.suite());
-		suite.addTest(MultiLanguageTest.suite());
+		suite.addTestSuite(RegistryListenerTest.class);
+		suite.addTestSuite(InputErrorTest.class);
+		suite.addTestSuite(MultiLanguageTest.class);
 		return suite;
 	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ContributorsTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ContributorsTest.java
index 1d1b664..da2637f 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ContributorsTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ContributorsTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2015 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,24 +13,14 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-
-import org.eclipse.core.runtime.ContributorFactoryOSGi;
-import org.eclipse.core.runtime.ContributorFactorySimple;
-import org.eclipse.core.runtime.IContributor;
-import org.eclipse.core.runtime.IExtension;
-import org.eclipse.core.runtime.IExtensionPoint;
-import org.eclipse.core.runtime.IExtensionRegistry;
-import org.eclipse.core.runtime.RegistryFactory;
+import junit.framework.TestCase;
+import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.spi.IDynamicExtensionRegistry;
 import org.eclipse.core.tests.harness.BundleTestingHelper;
 import org.eclipse.core.tests.runtime.RuntimeTestsPlugin;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleException;
 
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
 /**
  * Tests contributor resolution for Bundle-based contributors.
  *
@@ -67,10 +57,12 @@
 			assertNotNull(contributingFragment);
 			assertTrue(contributingFragment.equals(fragment));
 		} finally {
-			if (bundle != null)
+			if (bundle != null) {
 				bundle.uninstall();
-			if (fragment != null)
+			}
+			if (fragment != null) {
 				fragment.uninstall();
+			}
 		}
 	}
 
@@ -120,12 +112,15 @@
 			assertTrue(extsFragmentA[0].getUniqueIdentifier().equals("org.eclipse.test.registryByContrib.ExtensionFA"));
 
 		} finally {
-			if (bundleA != null)
+			if (bundleA != null) {
 				bundleA.uninstall();
-			if (bundleB != null)
+			}
+			if (bundleB != null) {
 				bundleB.uninstall();
-			if (fragment != null)
+			}
+			if (fragment != null) {
 				fragment.uninstall();
+			}
 		}
 	}
 
@@ -174,9 +169,4 @@
 		IContributor nonBundleContributor = ContributorFactorySimple.createContributor(fileName);
 		return registry.addContribution(is, nonBundleContributor, false, urlA.getFile(), null, null);
 	}
-
-	public static Test suite() {
-		return new TestSuite(ContributorsTest.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ExtensionRegistryDynamicTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ExtensionRegistryDynamicTest.java
index c5a881c..bca97ca 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ExtensionRegistryDynamicTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/ExtensionRegistryDynamicTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2015 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.core.tests.internal.registry;
 
 import java.io.IOException;
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.dynamichelpers.*;
 import org.eclipse.core.tests.harness.BundleTestingHelper;
@@ -47,10 +47,12 @@
 			assertEquals("1.2", IExtensionDelta.ADDED, listener.eventTypeReceived(20000));
 		} finally {
 			listener.unregister();
-			if (bundle01 != null)
+			if (bundle01 != null) {
 				bundle01.uninstall();
-			if (bundle02 != null)
+			}
+			if (bundle02 != null) {
 				bundle02.uninstall();
+			}
 		}
 	}
 
@@ -72,10 +74,12 @@
 			assertEquals("2.2", IExtensionDelta.ADDED, listener.eventTypeReceived(10000));
 		} finally {
 			listener.unregister();
-			if (bundle01 != null)
+			if (bundle01 != null) {
 				bundle01.uninstall();
-			if (bundle02 != null)
+			}
+			if (bundle02 != null) {
 				bundle02.uninstall();
+			}
 		}
 	}
 
@@ -132,17 +136,15 @@
 			assertTrue(removalCalled);
 		} finally {
 			listener.unregister();
-			if (lastListener != null)
+			if (lastListener != null) {
 				lastListener.unregister();
-			if (bundle01 != null)
+			}
+			if (bundle01 != null) {
 				bundle01.uninstall();
-			if (bundle02 != null)
+			}
+			if (bundle02 != null) {
 				bundle02.uninstall();
+			}
 		}
 	}
-
-	public static Test suite() {
-		return new TestSuite(ExtensionRegistryDynamicTest.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/InputErrorTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/InputErrorTest.java
index 1cdc497..982942b 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/InputErrorTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/InputErrorTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2015 IBM Corporation and others.
+ * Copyright (c) 2007, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@
 
 import java.io.*;
 import java.net.URL;
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.tests.runtime.RuntimeTestsPlugin;
@@ -141,9 +141,4 @@
 		String value = configElements[0].getAttribute("testAttr");
 		assertTrue(expectedValue.equals(value));
 	}
-
-	public static Test suite() {
-		return new TestSuite(InputErrorTest.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/MultiLanguageTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/MultiLanguageTest.java
index fd8960f..284fa54 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/MultiLanguageTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/MultiLanguageTest.java
@@ -13,7 +13,7 @@
 
 import java.io.File;
 import java.util.Locale;
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.internal.registry.IRegistryConstants;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.spi.RegistryStrategy;
@@ -332,10 +332,6 @@
 		assertEquals(catsAndDogsFinnish, elementValue.getValue("fi_FI")); // check internal cache
 	}
 
-	public static Test suite() {
-		return new TestSuite(MultiLanguageTest.class);
-	}
-
 	/*
 	 * Return the package admin service, if available.
 	 */
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/RegistryListenerTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/RegistryListenerTest.java
index dccda14..45cb125 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/RegistryListenerTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/RegistryListenerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2012 IBM Corporation and others.
+ * Copyright (c) 2007, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.core.tests.internal.registry;
 
 import java.io.IOException;
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.tests.harness.BundleTestingHelper;
 import org.eclipse.core.tests.runtime.RuntimeTestsPlugin;
@@ -83,10 +83,12 @@
 
 		} finally {
 			listener.unregister();
-			if (bundle01 != null)
+			if (bundle01 != null) {
 				bundle01.uninstall();
-			if (bundle02 != null)
+			}
+			if (bundle02 != null) {
 				bundle02.uninstall();
+			}
 		}
 	}
 
@@ -139,10 +141,12 @@
 
 		} finally {
 			listener.unregister();
-			if (bundle02 != null)
+			if (bundle02 != null) {
 				bundle02.uninstall();
-			if (bundle01 != null)
+			}
+			if (bundle01 != null) {
 				bundle01.uninstall();
+			}
 		}
 	}
 
@@ -218,8 +222,9 @@
 			listenerGlobal.unregister();
 			listener1.unregister();
 			listener2.unregister();
-			if (bundle != null)
+			if (bundle != null) {
 				bundle.uninstall();
+			}
 		}
 	}
 
@@ -265,8 +270,9 @@
 		} finally {
 			// second unregistration should have no effect
 			listener.unregister();
-			if (bundle != null)
+			if (bundle != null) {
 				bundle.uninstall();
+			}
 		}
 	}
 
@@ -286,9 +292,4 @@
 			assertTrue(found);
 		}
 	}
-
-	public static Test suite() {
-		return new TestSuite(RegistryListenerTest.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/AllSimpleRegistryTests.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/AllSimpleRegistryTests.java
index cff6a50..f4e36fa 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/AllSimpleRegistryTests.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/AllSimpleRegistryTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -24,15 +24,15 @@
 
 	public static Test suite() {
 		TestSuite suite = new TestSuite(AllSimpleRegistryTests.class.getName());
-		suite.addTest(XMLExtensionCreate.suite());
-		suite.addTest(DirectExtensionCreate.suite());
-		suite.addTest(XMLExecutableExtension.suite());
-		suite.addTest(DirectExtensionCreateTwoRegistries.suite());
-		suite.addTest(TokenAccess.suite());
-		suite.addTest(XMLExtensionCreateEclipse.suite());
-		suite.addTest(DirectExtensionRemove.suite());
-		suite.addTest(MergeContribution.suite());
-		suite.addTest(DuplicatePoints.suite());
+		suite.addTestSuite(XMLExtensionCreate.class);
+		suite.addTestSuite(DirectExtensionCreate.class);
+		suite.addTestSuite(XMLExecutableExtension.class);
+		suite.addTestSuite(DirectExtensionCreateTwoRegistries.class);
+		suite.addTestSuite(TokenAccess.class);
+		suite.addTestSuite(XMLExtensionCreateEclipse.class);
+		suite.addTestSuite(DirectExtensionRemove.class);
+		suite.addTestSuite(MergeContribution.class);
+		suite.addTestSuite(DuplicatePoints.class);
 		return suite;
 	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreate.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreate.java
index 5a5e068..ba81fd6 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreate.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.internal.registry.simple;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.registry.ExtensionRegistry;
 import org.eclipse.core.internal.registry.spi.ConfigurationElementAttribute;
 import org.eclipse.core.internal.registry.spi.ConfigurationElementDescription;
@@ -132,9 +130,4 @@
 			}
 		}
 	}
-
-	public static Test suite() {
-		return new TestSuite(DirectExtensionCreate.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreateTwoRegistries.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreateTwoRegistries.java
index 7721bc7..e16cbce 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreateTwoRegistries.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionCreateTwoRegistries.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.internal.registry.simple;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.registry.ExtensionRegistry;
 import org.eclipse.core.runtime.*;
 
@@ -99,9 +97,4 @@
 		assertNull(extensionPoint);
 		assertNotNull(extensionPointAlt);
 	}
-
-	public static Test suite() {
-		return new TestSuite(DirectExtensionCreateTwoRegistries.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionRemove.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionRemove.java
index a3a0505..789bcab 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionRemove.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DirectExtensionRemove.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.internal.registry.simple;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.tests.internal.registry.simple.utils.SimpleRegistryListener;
 
@@ -200,9 +198,4 @@
 			assertNotNull(delta.getExtensionPoint());
 		}
 	}
-
-	public static Test suite() {
-		return new TestSuite(DirectExtensionRemove.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DuplicatePoints.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DuplicatePoints.java
index 242930b..f6d110d 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DuplicatePoints.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/DuplicatePoints.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2015 IBM Corporation and others.
+ * Copyright (c) 2006, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
 package org.eclipse.core.tests.internal.registry.simple;
 
 import java.io.File;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.spi.RegistryStrategy;
 import org.eclipse.core.tests.internal.registry.simple.utils.HiddenLogRegistryStrategy;
@@ -94,9 +92,4 @@
 		IExtension[] extensions = simpleRegistry.getExtensions(namespace);
 		assertTrue(extensions.length == 2);
 	}
-
-	public static Test suite() {
-		return new TestSuite(DuplicatePoints.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/MergeContribution.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/MergeContribution.java
index a41046e..9405ed6 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/MergeContribution.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/MergeContribution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2006, 2012 IBM Corporation and others.
+ *  Copyright (c) 2006, 2018 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.internal.registry.simple;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 
 /**
@@ -62,9 +60,4 @@
 		assertNotNull(extensions);
 		assertEquals(expectedExtensions, extensions.length);
 	}
-
-	public static Test suite() {
-		return new TestSuite(MergeContribution.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/TokenAccess.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/TokenAccess.java
index 674f2c6..8fbeaca 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/TokenAccess.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/TokenAccess.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.core.tests.internal.registry.simple;
 
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.RegistryFactory;
 
@@ -66,9 +66,4 @@
 		}
 		assertTrue(bException);
 	}
-
-	public static Test suite() {
-		return new TestSuite(TokenAccess.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExecutableExtension.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExecutableExtension.java
index d3f22b2..b1de3b1 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExecutableExtension.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExecutableExtension.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,11 +11,10 @@
 package org.eclipse.core.tests.internal.registry.simple;
 
 import java.io.File;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.spi.RegistryStrategy;
-import org.eclipse.core.tests.internal.registry.simple.utils.*;
+import org.eclipse.core.tests.internal.registry.simple.utils.ExeExtensionStrategy;
+import org.eclipse.core.tests.internal.registry.simple.utils.ExecutableRegistryObject;
 import org.eclipse.core.tests.runtime.RuntimeTestsPlugin;
 import org.osgi.framework.Bundle;
 
@@ -78,8 +77,4 @@
 			}
 		}
 	}
-
-	public static Test suite() {
-		return new TestSuite(XMLExecutableExtension.class);
-	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreate.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreate.java
index e545b2f..badb169 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreate.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreate.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.internal.registry.simple;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.tests.internal.registry.simple.utils.SimpleRegistryListener;
 
@@ -102,9 +100,4 @@
 			assertTrue(Id1.equals(qualifiedName(namespace, "XMLDirectExtPoint"))); //$NON-NLS-1$
 		}
 	}
-
-	public static Test suite() {
-		return new TestSuite(XMLExtensionCreate.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreateEclipse.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreateEclipse.java
index 8cdb95a..1d4d088 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreateEclipse.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/registry/simple/XMLExtensionCreateEclipse.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2012 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 import java.io.IOException;
 import java.net.URL;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.registry.ExtensionRegistry;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.tests.runtime.RuntimeTestsPlugin;
@@ -55,9 +53,4 @@
 			assertTrue("org.eclipse.core.tests.internal.registry.simple.utils.ExecutableRegistryObject".equals(element.getAttribute("class")));
 		}
 	}
-
-	public static Test suite() {
-		return new TestSuite(XMLExtensionCreateEclipse.class);
-	}
-
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/AllTests.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/AllTests.java
index ae466e6..6ae5d4e 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/AllTests.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/AllTests.java
@@ -31,8 +31,8 @@
 
 	public static Test suite() {
 		TestSuite suite = new TestSuite(AllTests.class.getName());
-		suite.addTest(LogSerializationTest.suite());
-		suite.addTest(PlatformURLLocalTest.suite());
+		suite.addTestSuite(LogSerializationTest.class);
+		suite.addTestSuite(PlatformURLLocalTest.class);
 		suite.addTest(PlatformURLSessionTest.suite());
 		suite.addTest(FileLocatorTest.suite());
 		return suite;
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/LogSerializationTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/LogSerializationTest.java
index df5f14a..b4d3f09 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/LogSerializationTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/LogSerializationTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
 package org.eclipse.core.tests.internal.runtime;
 
 import java.io.*;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.runtime.RuntimeLog;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.tests.runtime.RuntimeTest;
@@ -37,13 +35,6 @@
 		super("");
 	}
 
-	public static Test suite() {
-		return new TestSuite(LogSerializationTest.class);
-		//	TestSuite suite = new TestSuite();
-		//	suite.addTest(new LogSerializationTest("testDeepMultiStatus"));
-		//	return suite;
-	}
-
 	protected void assertEquals(String msg, IStatus[] expected, IStatus[] actual) {
 		if (expected == null) {
 			assertNull(msg + " expected null but got: " + actual, actual);
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/PlatformURLLocalTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/PlatformURLLocalTest.java
index 588c14f..b06a2ac 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/PlatformURLLocalTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/internal/runtime/PlatformURLLocalTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2005, 2015 IBM Corporation and others.
+ * Copyright (c) 2005, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -15,8 +15,6 @@
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.net.URL;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.FileLocator;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.tests.harness.BundleTestingHelper;
@@ -39,10 +37,6 @@
 		}
 	}
 
-	public static Test suite() {
-		return new TestSuite(PlatformURLLocalTest.class);
-	}
-
 	public PlatformURLLocalTest(String name) {
 		super(name);
 	}
@@ -104,8 +98,9 @@
 			InputStream in = test.openStream();
 			in.close();
 		} finally {
-			if (bundle != null)
+			if (bundle != null) {
 				bundle.uninstall();
+			}
 		}
 	}
 
@@ -118,8 +113,9 @@
 			InputStream in = test.openStream();
 			in.close();
 		} finally {
-			if (bundle != null)
+			if (bundle != null) {
 				bundle.uninstall();
+			}
 		}
 	}
 
@@ -132,8 +128,9 @@
 			InputStream in = test.openStream();
 			in.close();
 		} finally {
-			if (bundle != null)
+			if (bundle != null) {
 				bundle.uninstall();
+			}
 		}
 	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AdapterManagerDynamicTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AdapterManagerDynamicTest.java
index 0ec7b1e..c5c5300 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AdapterManagerDynamicTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AdapterManagerDynamicTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2015 IBM Corporation and others.
+ * Copyright (c) 2008, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.core.tests.runtime;
 
 import java.io.IOException;
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.runtime.IAdapterManager;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.tests.harness.BundleTestingHelper;
@@ -43,10 +43,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(AdapterManagerDynamicTest.class);
-	}
-
 	public AdapterManagerDynamicTest() {
 		super("");
 	}
@@ -123,10 +119,12 @@
 		} finally {
 			listener.unregister();
 			// in case of exception in the process
-			if (bundle01 != null)
+			if (bundle01 != null) {
 				bundle01.uninstall();
-			if (bundle02 != null)
+			}
+			if (bundle02 != null) {
 				bundle02.uninstall();
+			}
 		}
 	}
 
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AllTests.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AllTests.java
index c3f41f7..95c4602 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AllTests.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/AllTests.java
@@ -24,23 +24,23 @@
 
 	public static Test suite() {
 		TestSuite suite = new TestSuite(AllTests.class.getName());
-		suite.addTest(CoreExceptionTest.suite());
-		suite.addTest(IAdapterManagerTest.suite());
-		suite.addTest(IAdapterManagerServiceTest.suite());
-		suite.addTest(AdapterManagerDynamicTest.suite());
-		suite.addTest(OperationCanceledExceptionTest.suite());
-		suite.addTest(PathTest.suite());
-		suite.addTest(PlatformTest.suite());
+		suite.addTestSuite(CoreExceptionTest.class);
+		suite.addTestSuite(IAdapterManagerTest.class);
+		suite.addTestSuite(IAdapterManagerServiceTest.class);
+		suite.addTestSuite(AdapterManagerDynamicTest.class);
+		suite.addTestSuite(OperationCanceledExceptionTest.class);
+		suite.addTestSuite(PathTest.class);
+		suite.addTestSuite(PlatformTest.class);
 		suite.addTest(PluginVersionIdentifierTest.suite());
 		suite.addTestSuite(SubMonitorTest.class);
 		suite.addTestSuite(SubProgressTest.class);
 		suite.addTestSuite(SubMonitorSmallTicksTest.class);
-		suite.addTest(ProgressMonitorWrapperTest.suite());
+		suite.addTestSuite(ProgressMonitorWrapperTest.class);
 		suite.addTest(QualifiedNameTest.suite());
-		suite.addTest(SafeRunnerTest.suite());
+		suite.addTestSuite(SafeRunnerTest.class);
 		suite.addTest(StatusTest.suite());
-		suite.addTest(URIUtilTest.suite());
-		suite.addTest(URLTest.suite());
+		suite.addTestSuite(URIUtilTest.class);
+		suite.addTestSuite(URLTest.class);
 		return suite;
 	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/CoreExceptionTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/CoreExceptionTest.java
index 1f5ecab..f319e18 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/CoreExceptionTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/CoreExceptionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 
 /**
@@ -31,10 +29,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(CoreExceptionTest.class);
-	}
-
 	public void testCoreException() {
 		final String MESSAGE_STRING = "An exception has occurred";
 		IStatus status = new Status(IStatus.ERROR, "org.eclipse.core.tests.runtime", 31415, MESSAGE_STRING, new NumberFormatException());
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerServiceTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerServiceTest.java
index cf7faab..3d2aa9a 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerServiceTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerServiceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2007, 2015 IBM Corporation and others.
+ * Copyright (c) 2007, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime;
 
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.runtime.IAdapterFactory;
 import org.eclipse.core.runtime.IAdapterManager;
 import org.osgi.framework.BundleContext;
@@ -33,10 +33,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(IAdapterManagerServiceTest.class);
-	}
-
 	public IAdapterManagerServiceTest() {
 		super("");
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java
index 88be609..ed65696 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/IAdapterManagerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2015 IBM Corporation and others.
+ *  Copyright (c) 2004, 2018 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@
 
 import java.io.IOException;
 import java.net.MalformedURLException;
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.tests.harness.BundleTestingHelper;
 import org.osgi.framework.Bundle;
@@ -59,10 +59,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(IAdapterManagerTest.class);
-	}
-
 	public IAdapterManagerTest() {
 		super("");
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/OperationCanceledExceptionTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/OperationCanceledExceptionTest.java
index a97fffa..37177ba 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/OperationCanceledExceptionTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/OperationCanceledExceptionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.OperationCanceledException;
 
 /**
@@ -31,10 +29,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(OperationCanceledExceptionTest.class);
-	}
-
 	public void testCoreException() {
 		final String MESSAGE_STRING = "An exception has occurred";
 		OperationCanceledException e = new OperationCanceledException(MESSAGE_STRING);
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PathTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PathTest.java
index ff6c569..ca8761f 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PathTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PathTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2000, 2015 IBM Corporation and others.
+ *  Copyright (c) 2000, 2018 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 package org.eclipse.core.tests.runtime;
 
 import java.util.ArrayList;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 
@@ -34,15 +32,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-
-		return new TestSuite(PathTest.class);
-
-		//		TestSuite suite= new TestSuite();
-		//		suite.addTest(new PathTest("testCanonicalize"));
-		//		return suite;
-	}
-
 	public void testAddTrailingSeparator() {
 
 		IPath with = new Path("/first/second/third/");
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PlatformTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PlatformTest.java
index 27faf46..60b0efb 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PlatformTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PlatformTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 import java.io.*;
 import java.util.*;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 import org.eclipse.osgi.framework.log.FrameworkLog;
 import org.osgi.framework.ServiceReference;
@@ -60,10 +58,6 @@
 		RuntimeTestsPlugin.getContext().ungetService(logRef);
 	}
 
-	public static Test suite() {
-		return new TestSuite(PlatformTest.class);
-	}
-
 	public void testGetCommandLine() {
 		assertNotNull("1.0", Platform.getCommandLineArgs());
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceExportTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceExportTest.java
index 76106a9..1dda21b 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceExportTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceExportTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 
 /**
@@ -21,9 +19,6 @@
  */
 @Deprecated
 public class PreferenceExportTest extends RuntimeTest {
-	public static Test suite() {
-		return new TestSuite(PreferenceExportTest.class);
-	}
 
 	public PreferenceExportTest() {
 		super("");
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceForwarderTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceForwarderTest.java
index d053a95..8e32df5 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceForwarderTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferenceForwarderTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2004, 2015 IBM Corporation and others.
+ *  Copyright (c) 2004, 2018 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 import java.io.*;
 import java.util.*;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.preferences.legacy.PreferenceForwarder;
 import org.eclipse.core.internal.runtime.RuntimeLog;
 import org.eclipse.core.runtime.*;
@@ -28,6 +26,7 @@
  * @deprecated This class tests intentionally tests deprecated functionality, so tag
  * added to hide deprecation reference warnings.
  */
+@Deprecated
 public class PreferenceForwarderTest extends RuntimeTest {
 
 	class Tracer implements Preferences.IPropertyChangeListener {
@@ -35,19 +34,33 @@
 
 		private String typeCode(Object value) {
 			if (value == null)
+			 {
 				return ""; //$NON-NLS-1$
+			}
 			if (value instanceof Boolean)
+			 {
 				return "B"; //$NON-NLS-1$
+			}
 			if (value instanceof Integer)
+			 {
 				return "I"; //$NON-NLS-1$
+			}
 			if (value instanceof Long)
+			 {
 				return "L"; //$NON-NLS-1$
+			}
 			if (value instanceof Float)
+			 {
 				return "F"; //$NON-NLS-1$
+			}
 			if (value instanceof Double)
+			 {
 				return "D"; //$NON-NLS-1$
+			}
 			if (value instanceof String)
+			 {
 				return "S"; //$NON-NLS-1$
+			}
 			assertTrue("0.0", false); //$NON-NLS-1$
 			return null;
 		}
@@ -70,15 +83,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		// all test methods are named "test..."
-		return new TestSuite(PreferenceForwarderTest.class);
-
-		//				TestSuite suite = new TestSuite();
-		//				suite.addTest(new PreferenceForwarderTest("testListenerOnRemove"));
-		//				return suite;
-	}
-
 	@Override
 	protected void setUp() {
 		// do nothing
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferencesTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferencesTest.java
index eb645f9..2b3d305 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferencesTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/PreferencesTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 import java.io.*;
 import java.util.*;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.Preferences;
 
 /**
@@ -71,14 +69,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		// all test methods are named "test..."
-		return new TestSuite(PreferencesTest.class);
-		//		TestSuite suite = new TestSuite();
-		//		suite.addTest(new PreferencesTest("testListeners2"));
-		//		return suite;
-	}
-
 	@Override
 	protected void setUp() {
 		// do nothing
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/ProgressMonitorWrapperTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/ProgressMonitorWrapperTest.java
index 7aa2740..a405575 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/ProgressMonitorWrapperTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/ProgressMonitorWrapperTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 
 /**
@@ -31,13 +29,10 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(ProgressMonitorWrapperTest.class);
-	}
-
 	/**
 	 * @deprecated to suppress deprecation warnings
 	 */
+	@Deprecated
 	public void testProgressMonitorWrapper() {
 		NullProgressMonitor nullMonitor = new NullProgressMonitor();
 		SubProgressMonitor wrapped = new SubProgressMonitor(nullMonitor, 10);
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/SafeRunnerTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/SafeRunnerTest.java
index 841dbc2..ee60dc4 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/SafeRunnerTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/SafeRunnerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2015 IBM Corporation and others.
+ * Copyright (c) 2009, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,17 +10,12 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 
 /**
  * Tests for {@link SafeRunner}.
  */
 public class SafeRunnerTest extends RuntimeTest {
-	public static Test suite() {
-		return new TestSuite(SafeRunnerTest.class);
-	}
 
 	/**
 	 * Ensures that cancelation exceptions are handled
@@ -126,8 +121,9 @@
 			SafeRunner.run(new ISafeRunnable() {
 				@Override
 				public void handleException(Throwable exception) {
-					if (exception instanceof IllegalArgumentException)
+					if (exception instanceof IllegalArgumentException) {
 						throw (IllegalArgumentException) exception;
+					}
 				}
 
 				@Override
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URIUtilTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URIUtilTest.java
index d43b149..801daa0 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URIUtilTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URIUtilTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2012 IBM Corporation and others.
+ * Copyright (c) 2008, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 import java.io.*;
 import java.net.*;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 
 /**
@@ -25,10 +23,6 @@
 
 	private static final String[] testPaths = new String[] {"abc", "with spaces", "with%percent"};
 
-	public static Test suite() {
-		return new TestSuite(URIUtilTest.class);
-	}
-
 	// re-enable once bug 331314 is fixed
 	public void testBug331314() {
 		doTestBug331314("File with spaces");
@@ -90,15 +84,17 @@
 	 * @throws URISyntaxException
 	 */
 	public void testToFileUNC() throws URISyntaxException {
-		if (!WINDOWS)
+		if (!WINDOWS) {
 			return;
+		}
 		//UNC paths
 		URI path = new URI("file://HOST/some/path");
 		File result = URIUtil.toFile(path);
-		if (File.pathSeparatorChar == '/')
+		if (File.pathSeparatorChar == '/') {
 			assertTrue("2.0", result.getAbsolutePath().startsWith("//"));
-		else
+		} else {
 			assertTrue("2.1", result.getAbsolutePath().startsWith("\\\\"));
+		}
 		assertTrue("2.2", new Path(result.toString()).isUNC());
 	}
 
@@ -194,8 +190,9 @@
 	 * relative URIs (file:c:/tmp).
 	 */
 	public void testWindowsPathsFromURI() throws MalformedURLException, URISyntaxException {
-		if (!WINDOWS)
+		if (!WINDOWS) {
 			return;
+		}
 		assertEquals("1.1", new URI("file:/c:/foo/bar.txt"), URIUtil.toURI(new URL("file:c:/foo/bar.txt")));
 		assertEquals("1.2", new URI("file:/c:/foo/bar.txt"), URIUtil.toURI(new URL("file:/c:/foo/bar.txt")));
 	}
@@ -205,8 +202,9 @@
 	 * relative URIs (file:c:/tmp).
 	 */
 	public void testWindowsPathsFromString() throws URISyntaxException {
-		if (!WINDOWS)
+		if (!WINDOWS) {
 			return;
+		}
 		assertEquals("1.1", new URI("file:/c:/foo/bar.txt"), URIUtil.fromString("file:c:/foo/bar.txt"));
 		assertEquals("1.2", new URI("file:/c:/foo/bar.txt"), URIUtil.fromString("file:/c:/foo/bar.txt"));
 	}
@@ -336,8 +334,9 @@
 	}
 
 	public void testAppendWindows() throws URISyntaxException {
-		if (!WINDOWS)
+		if (!WINDOWS) {
 			return;
+		}
 		URI base = new URI("file:/C:/a%20b");
 		URI result = URIUtil.append(base, "file.txt");
 		assertEquals("1.0", "file:/C:/a%20b/file.txt", result.toString());
@@ -402,8 +401,9 @@
 	}
 
 	public void testSameURIWindows() throws URISyntaxException {
-		if (!WINDOWS)
+		if (!WINDOWS) {
 			return;
+		}
 		//device and case variants
 		assertTrue("1.0", URIUtil.sameURI(new URI("file:C:/a"), new URI("file:c:/a")));
 		assertTrue("1.1", URIUtil.sameURI(new URI("file:/C:/a"), new URI("file:/c:/a")));
@@ -447,8 +447,9 @@
 		}
 
 		// run some Windows-specific tests with drive letters
-		if (!WINDOWS)
+		if (!WINDOWS) {
 			return;
+		}
 		data = new URI[][] {
 				// simple path
 				new URI[] {new URI("b"), new URI("file:/c:/a/"), new URI("file:/c:/a/b")}, //
@@ -519,8 +520,9 @@
 		}
 
 		// test some Windows-specific paths with drive letters
-		if (!WINDOWS)
+		if (!WINDOWS) {
 			return;
+		}
 		data = new URI[][] {
 				// simple path
 				new URI[] {new URI("file:/c:/a/b"), new URI("file:/c:/a/x"), new URI("../b")},
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URLTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URLTest.java
index 39ddc2d..ac04907 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URLTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/URLTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2012 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -13,15 +13,9 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 
 public class URLTest extends RuntimeTest {
 
-	public static Test suite() {
-		return new TestSuite(URLTest.class);
-	}
-
 	public URLTest(String name) {
 		super(name);
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/DeadlockDetectionTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/DeadlockDetectionTest.java
index 39d1ebc..dc16fd2 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/DeadlockDetectionTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/DeadlockDetectionTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2015 IBM Corporation and others.
+ * Copyright (c) 2003, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,7 +11,7 @@
 package org.eclipse.core.tests.runtime.jobs;
 
 import java.util.*;
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.core.internal.jobs.*;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.*;
@@ -32,13 +32,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(DeadlockDetectionTest.class);
-		//		TestSuite suite = new TestSuite();
-		//		suite.addTest(new DeadlockDetectionTest("testImplicitRules"));
-		//		return suite;
-	}
-
 	/**
 	 * Creates n runnables on the given lock and adds them to the given list.
 	 */
@@ -61,8 +54,9 @@
 	 * Asks all threads to stop executing
 	 */
 	private void kill(ArrayList<RandomTestRunnable> allRunnables) {
-		for (RandomTestRunnable r : allRunnables)
+		for (RandomTestRunnable r : allRunnables) {
 			r.kill();
+		}
 	}
 
 	/**
@@ -224,8 +218,9 @@
 		assertTrue("3.0", !first.isAlive());
 		assertTrue("4.0", !second.isAlive());
 		//the underlying array has to be empty
-		if (!getLockManager().isEmpty())
+		if (!getLockManager().isEmpty()) {
 			assertTrue("Jobs not removed from graph.", getLockManager().isEmpty());
+		}
 	}
 
 	/**
@@ -795,8 +790,9 @@
 			assertTrue("Timeout waiting for job to end: " + elapsed, elapsed < 30000);
 		}
 		//wait until all jobs are done
-		for (Job job : jobs)
+		for (Job job : jobs) {
 			waitForCompletion(job);
+		}
 
 		for (int i = 0; i < jobs.length; i++) {
 			assertEquals("10." + i, Job.NONE, jobs[i].getState());
@@ -1246,7 +1242,8 @@
 	}
 
 	private void start(ArrayList<RandomTestRunnable> allRunnables) {
-		for (RandomTestRunnable r : allRunnables)
+		for (RandomTestRunnable r : allRunnables) {
 			r.start();
+		}
 	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/IJobManagerTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/IJobManagerTest.java
index e255b85..3d8ea6f 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/IJobManagerTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/IJobManagerTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2015 IBM Corporation and others.
+ * Copyright (c) 2003, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,7 +12,7 @@
 
 import java.util.*;
 import java.util.concurrent.Semaphore;
-import junit.framework.*;
+import junit.framework.AssertionFailedError;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.*;
 import org.eclipse.core.tests.harness.*;
@@ -65,13 +65,6 @@
 
 	protected int scheduledJobs;
 
-	public static Test suite() {
-		return new TestSuite(IJobManagerTest.class);
-		//		TestSuite suite = new TestSuite();
-		//		suite.addTest(new IJobManagerTest("testTransferJobToJob"));
-		//		return suite;
-	}
-
 	public IJobManagerTest() {
 		super("");
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobTest.java
index a45571d..7c29bca 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/JobTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2003, 2015 IBM Corporation and others.
+ *  Copyright (c) 2003, 2018 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -16,8 +16,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime.jobs;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.internal.jobs.JobManager;
 import org.eclipse.core.internal.jobs.Worker;
 import org.eclipse.core.runtime.*;
@@ -37,14 +35,6 @@
 		super(name);
 	}
 
-	public static Test suite() {
-		return new TestSuite(JobTest.class);
-		//		TestSuite suite = new TestSuite();
-		//		for (int i = 0; i < 1000; i++)
-		//			suite.addTest(new JobTest("testSetProgressGroup"));
-		//		return suite;
-	}
-
 	//see bug #43591
 	public void _testDone() {
 		//calling the done method on a job that is not executing asynchronously should have no effect
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/MultiRuleTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/MultiRuleTest.java
index 6bd1e12..f60b626 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/MultiRuleTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/MultiRuleTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2008, 2012 IBM Corporation and others.
+ * Copyright (c) 2008, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime.jobs;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.eclipse.core.runtime.jobs.MultiRule;
 
@@ -19,9 +17,6 @@
  * Tests for {@link MultiRule}.
  */
 public class MultiRuleTest extends AbstractJobTest {
-	public static Test suite() {
-		return new TestSuite(MultiRuleTest.class);
-	}
 
 	public void testCombine() {
 		ISchedulingRule child1 = new PathRule("/a");
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/YieldTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/YieldTest.java
index bd84632..2361355 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/YieldTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/jobs/YieldTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2009, 2015 IBM Corporation and others.
+ * Copyright (c) 2009, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -12,8 +12,6 @@
 
 import java.util.*;
 import java.util.concurrent.Semaphore;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.*;
 import org.eclipse.core.runtime.jobs.*;
 import org.eclipse.core.tests.harness.TestBarrier;
@@ -63,15 +61,6 @@
 
 	protected int scheduledJobs;
 
-	public static Test suite() {
-		return new TestSuite(YieldTest.class);
-		//		TestSuite suite = new TestSuite();
-		//		for (int i = 0; i < 100; i++) {
-		//			suite.addTest(new YieldTest("testYieldJobToJobsInterleaved"));
-		//		}
-		//		return suite;
-	}
-
 	public YieldTest(String name) {
 		super(name);
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/AllTests.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/AllTests.java
index 53beba4..c11e7d4 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/AllTests.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/AllTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2012 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -41,9 +41,9 @@
 		}
 
 		suite.addTest(new UIPerformanceSessionTestSuite(RuntimeTestsPlugin.PI_RUNTIME_TESTS, 5, UIStartupTest.class));
-		suite.addTest(BenchPath.suite());
+		suite.addTestSuite(BenchPath.class);
 		suite.addTest(ContentTypePerformanceTest.suite());
-		suite.addTest(PreferencePerformanceTest.suite());
+		suite.addTestSuite(PreferencePerformanceTest.class);
 		return suite;
 	}
 }
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/BenchPath.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/BenchPath.java
index 4682d2e..c707e2f 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/BenchPath.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/BenchPath.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2015 IBM Corporation and others.
+ * Copyright (c) 2000, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
 package org.eclipse.core.tests.runtime.perf;
 
 import java.util.HashMap;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.tests.harness.PerformanceTestRunner;
@@ -27,13 +25,6 @@
 		super(testName);
 	}
 
-	public static Test suite() {
-		return new TestSuite(BenchPath.class);
-		//	TestSuite suite = new TestSuite(BenchPath.class.getName());
-		//	suite.addTest(new BenchPath("testToString"));
-		//	return suite;
-	}
-
 	/**
 	 * Tests performance of equals and hashCode by using paths
 	 * as keys in a hash map.
@@ -42,14 +33,16 @@
 		final int REPEAT = 500000;
 		final IPath[] paths = generateVariousPaths();
 		final HashMap<IPath, String> map = new HashMap<>(32);
-		for (IPath path : paths)
+		for (IPath path : paths) {
 			map.put(path, "");
+		}
 		final int numPaths = paths.length;
 		new PerformanceTestRunner() {
 			@Override
 			protected void test() {
-				for (int p = 0; p < numPaths; p++)
+				for (int p = 0; p < numPaths; p++) {
 					map.get(paths[p]);
+				}
 			}
 		}.run(this, 10, REPEAT);
 	}
@@ -98,8 +91,9 @@
 		new PerformanceTestRunner() {
 			@Override
 			protected void test() {
-				for (int p = paths.length; --p >= 0;)
+				for (int p = paths.length; --p >= 0;) {
 					paths[p].toOSString();
+				}
 			}
 		}.run(this, 10, REPEAT);
 	}
@@ -113,8 +107,9 @@
 		new PerformanceTestRunner() {
 			@Override
 			protected void test() {
-				for (int p = paths.length; --p >= 0;)
+				for (int p = paths.length; --p >= 0;) {
 					paths[p].toString();
+				}
 			}
 		}.run(this, 10, REPEAT);
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/PreferencePerformanceTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/PreferencePerformanceTest.java
index 3338fa8..b913c00 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/PreferencePerformanceTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/PreferencePerformanceTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- *  Copyright (c) 2005, 2015 IBM Corporation and others.
+ *  Copyright (c) 2005, 2018 IBM Corporation and others.
  *  All rights reserved. This program and the accompanying materials
  *  are made available under the terms of the Eclipse Public License v1.0
  *  which accompanies this distribution, and is available at
@@ -11,8 +11,6 @@
 package org.eclipse.core.tests.runtime.perf;
 
 import java.util.ArrayList;
-import junit.framework.Test;
-import junit.framework.TestSuite;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.tests.harness.PerformanceTestRunner;
@@ -25,13 +23,6 @@
 	private static final int INNER_LOOP = 10000;
 	private static final int KEYS_PER_NODE = 1000;
 
-	public static Test suite() {
-		return new TestSuite(PreferencePerformanceTest.class);
-		//		TestSuite suite = new TestSuite(PreferencePerformanceTest.class.getName());
-		//		suite.addTest(new PreferencePerformanceTest("testPutStringKeys"));
-		//		return suite;
-	}
-
 	public PreferencePerformanceTest() {
 		super();
 	}
@@ -115,8 +106,9 @@
 			@Override
 			protected void setUp() {
 				prefs = getScopeRoot().node(qualifier);
-				for (int i = 0; i < keys.length; i++)
+				for (int i = 0; i < keys.length; i++) {
 					prefs.put(keys[i], values[i]);
+				}
 			}
 
 			//  clean-up
@@ -132,8 +124,9 @@
 			// test retrieval
 			@Override
 			protected void test() {
-				for (String key : keys)
+				for (String key : keys) {
 					prefs.get(key, null);
+				}
 			}
 		};
 		runner.setFingerprintName("Retrieve preference values");
@@ -160,8 +153,9 @@
 			@Override
 			protected void setUp() {
 				prefs = getScopeRoot().node(qualifier);
-				for (int i = 0; i < keys.length; i++)
+				for (int i = 0; i < keys.length; i++) {
 					prefs.put(keys[i], values[i]);
+				}
 			}
 
 			// clean-up
@@ -177,8 +171,9 @@
 			// how long to get the values?
 			@Override
 			protected void test() {
-				for (int i = 0; i < keys.length; i++)
+				for (int i = 0; i < keys.length; i++) {
 					prefs.get(missingKeys[i], null);
+				}
 			}
 		}.run(this, 10, INNER_LOOP);
 	}
@@ -202,8 +197,9 @@
 			@Override
 			protected void setUp() {
 				prefs = getScopeRoot().node(qualifier);
-				for (int i = 0; i < keys.length; i++)
+				for (int i = 0; i < keys.length; i++) {
 					prefs.put(keys[i], values[i]);
+				}
 			}
 
 			// clean-up
@@ -219,8 +215,9 @@
 			// how long to get the values?
 			@Override
 			protected void test() {
-				for (String key : keys)
+				for (String key : keys) {
 					prefs.get(key, null);
+				}
 			}
 		}.run(this, 10, INNER_LOOP);
 	}
@@ -243,8 +240,9 @@
 			@Override
 			protected void setUp() {
 				prefs = getScopeRoot().node(qualifier);
-				for (int i = 0; i < keys.length; i++)
+				for (int i = 0; i < keys.length; i++) {
 					prefs.put(keys[i], values[i]);
+				}
 			}
 
 			// clean-up
@@ -260,8 +258,9 @@
 			// how long to get the values?
 			@Override
 			protected void test() {
-				for (String key : keys)
+				for (String key : keys) {
 					prefs.get(key, null);
+				}
 			}
 		}.run(this, 10, INNER_LOOP);
 	}
@@ -304,8 +303,9 @@
 			// how long to set the values?
 			@Override
 			protected void test() {
-				for (int i = 0; i < keys.length; i++)
+				for (int i = 0; i < keys.length; i++) {
 					prefs.put(keys[i], values[i]);
+				}
 			}
 		}.run(this, 10, INNER_LOOP);
 	}
@@ -334,8 +334,9 @@
 			@Override
 			protected void setUp() {
 				prefs = getScopeRoot().node(qualifier);
-				for (int i = 0; i < keys.length; i++)
+				for (int i = 0; i < keys.length; i++) {
 					prefs.put(keys[i], values[i]);
+				}
 			}
 
 			// clean-up at the end of each run
@@ -353,8 +354,9 @@
 			// the test is how long it takes to remove all the values
 			@Override
 			protected void test() {
-				for (String key : keys)
+				for (String key : keys) {
 					prefs.remove(key);
+				}
 			}
 		}.run(this, 50, 1);
 	}
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/StartupTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/StartupTest.java
index cc7dd66..29fd2ed 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/StartupTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/StartupTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2012 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,15 +10,11 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime.perf;
 
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.test.performance.*;
 
 public class StartupTest extends TestCase {
 
-	public static Test suite() {
-		return new TestSuite(StartupTest.class);
-	}
-
 	public StartupTest(String methodName) {
 		super(methodName);
 	}
@@ -32,8 +28,9 @@
 			performance.tagAsGlobalSummary(meter, "Core Headless Startup", Dimension.ELAPSED_PROCESS);
 			String reportOption = System.getProperty("eclipseTest.ReportResults");
 			boolean bReport = (reportOption == null) ? true : !("false".equalsIgnoreCase(reportOption));
-			if (bReport)
+			if (bReport) {
 				meter.commit();
+			}
 			Performance.getDefault().assertPerformanceInRelativeBand(meter, Dimension.ELAPSED_PROCESS, -100, 5);
 		} finally {
 			meter.dispose();
diff --git a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/UIStartupTest.java b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/UIStartupTest.java
index a2c6677..9102552 100644
--- a/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/UIStartupTest.java
+++ b/tests/org.eclipse.core.tests.runtime/src/org/eclipse/core/tests/runtime/perf/UIStartupTest.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004, 2012 IBM Corporation and others.
+ * Copyright (c) 2004, 2018 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,15 +10,11 @@
  *******************************************************************************/
 package org.eclipse.core.tests.runtime.perf;
 
-import junit.framework.*;
+import junit.framework.TestCase;
 import org.eclipse.test.performance.*;
 
 public class UIStartupTest extends TestCase {
 
-	public static Test suite() {
-		return new TestSuite(UIStartupTest.class);
-	}
-
 	public UIStartupTest(String methodName) {
 		super(methodName);
 	}
