diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/CustomHashtable.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/CustomHashtable.java
index a2a5dff..a6d305d 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/CustomHashtable.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/CustomHashtable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -39,6 +39,7 @@
 			value= theValue;
 		}
 
+		@Override
 		public String toString() {
 			StringBuffer buffer= new StringBuffer();
 			appendToStringWithCommaNL(buffer);
@@ -61,7 +62,7 @@
 		}
 	}
 
-	private static final class EmptyEnumerator implements Enumeration {
+	private static final class EmptyEnumerator implements Enumeration<Object> {
 
 		public boolean hasMoreElements() {
 			return false;
@@ -72,7 +73,7 @@
 		}
 	}
 
-	private class HashEnumerator implements Enumeration {
+	private class HashEnumerator implements Enumeration<Object> {
 
 		boolean key;
 
@@ -221,7 +222,7 @@
 	 *
 	 * @return an Enumeration of the values of this Hashtable
 	 */
-	public Enumeration elements() {
+	public Enumeration<?> elements() {
 		if (elementCount == 0)
 			return emptyEnumerator;
 		return new HashEnumerator(false);
@@ -308,7 +309,7 @@
 	 *
 	 * @return an Enumeration of the keys of this Hashtable
 	 */
-	public Enumeration keys() {
+	public Enumeration<?> keys() {
 		if (elementCount == 0)
 			return emptyEnumerator;
 		return new HashEnumerator(true);
@@ -422,6 +423,7 @@
 	 *
 	 * @return the string representation of this Hashtable
 	 */
+	@Override
 	public String toString() {
 		if (size() == 0)
 			return "{}"; //$NON-NLS-1$
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/FailuresFirstPrioritizer.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/FailuresFirstPrioritizer.java
index 5b26f5f..e63fbae 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/FailuresFirstPrioritizer.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/FailuresFirstPrioritizer.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -29,18 +29,18 @@
 import junit.framework.TestSuite;
 
 public class FailuresFirstPrioritizer implements ITestPrioritizer {
-	private HashSet fPriorities;
+	private HashSet<String> fPriorities;
 
 	public FailuresFirstPrioritizer(String[] priorities) {
-		fPriorities= new HashSet(Arrays.asList(priorities));
+		fPriorities= new HashSet<String>(Arrays.asList(priorities));
 	}
 
 	public Test prioritize(Test suite) {
-		doPrioritize(suite, new ArrayList());
+		doPrioritize(suite, new ArrayList<Test>());
 		return suite;
 	}
 
-	private void doPrioritize(Test suite, List path) {
+	private void doPrioritize(Test suite, List<Test> path) {
 		if (suite instanceof TestCase) {
 			TestCase testCase= (TestCase) suite;
 			if (hasPriority(testCase))
@@ -58,21 +58,21 @@
 		}
 	}
 
-	private void loopTests(List path, TestSuite aSuite) {
-		for (Enumeration e= aSuite.tests(); e.hasMoreElements();) {
-			doPrioritize((Test)e.nextElement(), path);
+	private void loopTests(List<Test> path, TestSuite aSuite) {
+		for (Enumeration<Test> e= aSuite.tests(); e.hasMoreElements();) {
+			doPrioritize(e.nextElement(), path);
 		}
 	}
 
 
-	private void reorder(Test test, List path) {
+	private void reorder(Test test, List<Test> path) {
 		doReorder(test, path, path.size()-1);
 	}
 
-	private void doReorder(Test test, List path, int top) {
+	private void doReorder(Test test, List<Test> path, int top) {
 		if (top < 0)
 			return;
-		Test topTest= (Test) path.get(top);
+		Test topTest= path.get(top);
 		// only reorder TestSuites
 		if (topTest instanceof TestSuite) {
 			TestSuite suite= (TestSuite) topTest;
@@ -82,7 +82,8 @@
 	}
 
 	void moveTestToFront(TestSuite suite, Test test) {
-		Vector tests= (Vector)getField(suite, "fTests"); //$NON-NLS-1$
+		@SuppressWarnings("unchecked")
+		Vector<Test> tests= (Vector<Test>)getField(suite, "fTests"); //$NON-NLS-1$
 		for(int i= 0; i < tests.size(); i++) {
 			if (tests.get(i) == test) {
 				tests.remove(i);
@@ -100,7 +101,7 @@
 	    return getFieldInClass(object, fieldName, object.getClass());
 	}
 
-	private static Object getFieldInClass(Object object, String fieldName, Class clazz) {
+	private static Object getFieldInClass(Object object, String fieldName, Class<?> clazz) {
 		Field field= null;
 		if (clazz == null)
 			return null;
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/ITestLoader.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/ITestLoader.java
index b289271..4735476 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/ITestLoader.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/ITestLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2017 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -27,6 +27,6 @@
 	 * @param listener to be notified if tests could not be loaded
 	 * @return the loaded test references
 	 */
-	public abstract ITestReference[] loadTests(Class[] testClasses, String testName, String[] failureNames, String[] packages, String[][] includeExcludeTags, String uniqueId, RemoteTestRunner listener);
+	public abstract ITestReference[] loadTests(Class<?>[] testClasses, String testName, String[] failureNames, String[] packages, String[][] includeExcludeTags, String uniqueId, RemoteTestRunner listener);
 }
 
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java
index ab61086..6c322d3 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RemoteTestRunner.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2017 IBM Corporation and others.
+ * Copyright (c) 2000, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -118,7 +118,7 @@
 	/**
 	 * Queue of rerun requests.
 	 */
-	private Vector fRerunRequests= new Vector(10);
+	private Vector<RerunRequest> fRerunRequests= new Vector<RerunRequest>(10);
 	/**
 	 * Thread reading from the socket
 	 */
@@ -144,6 +144,7 @@
 			super("ReaderThread"); //$NON-NLS-1$
 		}
 
+		@Override
 		public void run(){
 			try {
 				String message= null;
@@ -240,13 +241,13 @@
 	protected final void defaultInit(String[] args) {
 		for(int i= 0; i < args.length; i++) {
 			if(args[i].toLowerCase().equals("-classnames") || args[i].toLowerCase().equals("-classname")){ //$NON-NLS-1$ //$NON-NLS-2$
-				Vector list= new Vector();
+				Vector<String> list= new Vector<String>();
 				for (int j= i+1; j < args.length; j++) {
 					if (args[j].startsWith("-")) //$NON-NLS-1$
 						break;
 					list.add(args[j]);
 				}
-				fTestClassNames= (String[]) list.toArray(new String[list.size()]);
+				fTestClassNames= list.toArray(new String[list.size()]);
 			}
 			else if(args[i].toLowerCase().equals("-test")) { //$NON-NLS-1$
 				String testName= args[i+1];
@@ -376,7 +377,7 @@
 		}
 	}
 
-	protected Class loadTestLoaderClass(String className) throws ClassNotFoundException {
+	protected Class<?> loadTestLoaderClass(String className) throws ClassNotFoundException {
 		return Class.forName(className);
 	}
 
@@ -388,11 +389,11 @@
 		BufferedReader br= new BufferedReader(new InputStreamReader(new FileInputStream(new File(pkgNameFile)), "UTF-8")); //$NON-NLS-1$
 		try {
 			String line;
-			Vector list= new Vector();
+			Vector<String> list= new Vector<String>();
 			while ((line= br.readLine()) != null) {
 				list.add(line);
 			}
-			fPackageNames= (String[]) list.toArray(new String[list.size()]);
+			fPackageNames= list.toArray(new String[list.size()]);
 		}
 		finally {
 			br.close();
@@ -409,11 +410,11 @@
 		BufferedReader br= new BufferedReader(new InputStreamReader(new FileInputStream(new File(testNameFile)), "UTF-8")); //$NON-NLS-1$
 		try {
 			String line;
-			Vector list= new Vector();
+			Vector<String> list= new Vector<String>();
 			while ((line= br.readLine()) != null) {
 				list.add(line);
 			}
-			fTestClassNames= (String[]) list.toArray(new String[list.size()]);
+			fTestClassNames= list.toArray(new String[list.size()]);
 		}
 		finally {
 			br.close();
@@ -430,11 +431,11 @@
 		BufferedReader br= new BufferedReader(new InputStreamReader(new FileInputStream(new File(testFailureFile)), "UTF-8")); //$NON-NLS-1$
 		try {
 			String line;
-			Vector list= new Vector();
+			Vector<String> list= new Vector<String>();
 			while ((line= br.readLine()) != null) {
 				list.add(line);
 			}
-			fFailureNames= (String[]) list.toArray(new String[list.size()]);
+			fFailureNames= list.toArray(new String[list.size()]);
 		}
 		finally {
 			br.close();
@@ -480,7 +481,7 @@
 			try {
 				wait();
 				if (!fStopped && fRerunRequests.size() > 0) {
-					RerunRequest r= (RerunRequest)fRerunRequests.remove(0);
+					RerunRequest r= fRerunRequests.remove(0);
 					rerunTest(r);
 				}
 			} catch (InterruptedException e) {
@@ -495,16 +496,16 @@
 			exception.printStackTrace(System.err);
 	}
 
-	protected Class[] loadClasses(String[] testClassNames) {
-		Vector classes= new Vector();
+	protected Class<?>[] loadClasses(String[] testClassNames) {
+		Vector<Class<?>> classes= new Vector<Class<?>>();
 		for (int i = 0; i < testClassNames.length; i++) {
 			String name = testClassNames[i];
-			Class clazz = loadClass(name, this);
+			Class<?> clazz = loadClass(name, this);
 			if (clazz != null) {
 				classes.add(clazz);
 			}
 		}
-		return (Class[]) classes.toArray(new Class[classes.size()]);
+		return classes.toArray(new Class[classes.size()]);
 	}
 
 	protected void notifyListenersOfTestEnd(TestExecution execution,
@@ -569,7 +570,7 @@
 	 * @param r rerun request
 	 */
 	public void rerunTest(RerunRequest r) {
-		final Class[] classes= loadClasses(new String[] { r.fRerunClassName });
+		final Class<?>[] classes= loadClasses(new String[] { r.fRerunClassName });
 		ITestReference rerunTest1= fLoader.loadTests(classes, r.fRerunTestName, null, null, fIncludeExcludeTags, fUniqueId, this)[0];
 		RerunExecutionListener service= rerunExecutionListener();
 
@@ -767,8 +768,8 @@
 		return fLoader;
 	}
 
-	public Class loadClass(String className, RemoteTestRunner listener) {
-		Class clazz= null;
+	public Class<?> loadClass(String className, RemoteTestRunner listener) {
+		Class<?> clazz= null;
 		try {
 			clazz= getTestClassLoader().loadClass(className);
 		} catch (ClassNotFoundException e) {
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RerunExecutionListener.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RerunExecutionListener.java
index debdc20..7977e0f 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RerunExecutionListener.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/RerunExecutionListener.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -26,6 +26,7 @@
 
 	private String fStatus = RemoteTestRunner.RERAN_OK;
 
+	@Override
 	public void notifyTestFailed(TestReferenceFailure failure) {
 		sendFailure(failure, MessageIds.RTRACE_START, MessageIds.RTRACE_END);
 
@@ -38,10 +39,12 @@
 			throw new IllegalArgumentException(status);
 	}
 
+	@Override
 	public void notifyTestStarted(ITestIdentifier test) {
 		// do nothing
 	}
 
+	@Override
 	public void notifyTestEnded(ITestIdentifier test) {
 		// do nothing
 	}
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestExecution.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestExecution.java
index 8aeb6af..417837c 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestExecution.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestExecution.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -26,7 +26,7 @@
 
 	private IClassifiesThrowables fClassifier;
 
-	private ArrayList fStopListeners = new ArrayList();
+	private ArrayList<IStopListener> fStopListeners = new ArrayList<IStopListener>();
 
 	public TestExecution(IListensToTestExecutions listener,
 			IClassifiesThrowables classifier) {
@@ -48,8 +48,8 @@
 
 	public void stop() {
 		fShouldStop = true;
-		for (Iterator iter = fStopListeners.iterator(); iter.hasNext();) {
-			IStopListener listener = (IStopListener) iter.next();
+		for (Iterator<IStopListener> iter = fStopListeners.iterator(); iter.hasNext();) {
+			IStopListener listener = iter.next();
 			listener.stop();
 		}
 	}
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestIdMap.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestIdMap.java
index d33ee1f..3bfcb41 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestIdMap.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestIdMap.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -19,7 +19,7 @@
 import java.util.HashMap;
 
 public class TestIdMap {
-	private HashMap fIdMap= new HashMap();
+	private HashMap<ITestIdentifier, String> fIdMap= new HashMap<ITestIdentifier, String>();
 
 	private int fNextId= 1;
 
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestReferenceFailure.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestReferenceFailure.java
index 3899e95..395deda 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestReferenceFailure.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/TestReferenceFailure.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2017 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -57,6 +57,7 @@
 		return fTest;
 	}
 
+	@Override
 	public String toString() {
 		return fStatus + " " + RemoteTestRunner.escapeText(fTest.getName())  //$NON-NLS-1$
 			+ " " + RemoteTestRunner.escapeText(fTest.getParameterTypes()); //$NON-NLS-1$ 
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3Identifier.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3Identifier.java
index cfb415d..2c56808 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3Identifier.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3Identifier.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2017 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -32,11 +32,13 @@
 		return ref.getName();
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		JUnit3Identifier id = (JUnit3Identifier) obj;
 		return ref.equals(id.ref);
 	}
 
+	@Override
 	public int hashCode() {
 		return ref.hashCode();
 	}
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java
index 347afc8..39b3a4b 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2017 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -39,7 +39,7 @@
 
 	// WANT: give test loaders a schema
 
-	public ITestReference[] loadTests(Class[] testClasses, String testName, String[] failureNames, String[] packages, String[][] includeExcludeTags, String uniqueId, RemoteTestRunner listener) {
+	public ITestReference[] loadTests(Class<?>[] testClasses, String testName, String[] failureNames, String[] packages, String[][] includeExcludeTags, String uniqueId, RemoteTestRunner listener) {
 		// instantiate all tests
 		ITestReference[] suites= new ITestReference[testClasses.length];
 		ITestPrioritizer prioritizer;
@@ -50,7 +50,7 @@
 			prioritizer= new NullPrioritizer();
 
 		for (int i= 0; i < suites.length; i++) {
-			Class testClassName= testClasses[i];
+			Class<?> testClassName= testClasses[i];
 			Test test= getTest(testClassName, testName, listener);
 			prioritizer.prioritize(test);
 			suites[i]= new JUnit3TestReference(test);
@@ -59,10 +59,10 @@
 		return suites;
 	}
 
-	private Test createTest(String testName, Class testClass) {
-		Class[] classArgs= { String.class };
+	private Test createTest(String testName, Class<?> testClass) {
+		Class<?>[] classArgs= { String.class };
 		Test test;
-		Constructor constructor= null;
+		Constructor<?> constructor= null;
 		try {
 			try {
 				constructor= testClass.getConstructor(classArgs);
@@ -85,7 +85,7 @@
 		return error(testName, "Could not create test \'" + testName + "\' "); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 
-	public Test getTest(Class testClass, String testName, RemoteTestRunner failureListener) {
+	public Test getTest(Class<?> testClass, String testName, RemoteTestRunner failureListener) {
 		if (testName != null) {
 			return setupTest(testClass, createTest(testName, testClass), testName);
 		}
@@ -100,7 +100,7 @@
 			return error(JUnitMessages.getString("RemoteTestRunner.error"), JUnitMessages.getString("RemoteTestRunner.error.suite.notstatic"));//$NON-NLS-1$ //$NON-NLS-2$
 		}
 		try {
-			Test test= (Test) suiteMethod.invoke(null, new Class[0]); // static
+			Test test= (Test) suiteMethod.invoke(null, new Object[0]); // static
 			if (test != null) {
 				return test;
 			}
@@ -129,7 +129,7 @@
 	 * @param testName test name
 	 * @return the reloaded test, or the test wrapped with setUpTest(..) if available
 	 */
-	private Test setupTest(Class reloadedTestClass, Test reloadedTest, String testName) {
+	private Test setupTest(Class<?> reloadedTestClass, Test reloadedTest, String testName) {
 		if (reloadedTestClass == null)
 			return reloadedTest;
 
@@ -168,6 +168,7 @@
 	 */
 	private Test error(String testName, final String message) {
 		return new TestCase(testName) {
+			@Override
 			protected void runTest() {
 				fail(message);
 			}
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestReference.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestReference.java
index 64e9931..0674301 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestReference.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/junit3/JUnit3TestReference.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2017 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -47,7 +47,7 @@
 	private final Test fTest;
 
 	public static Object getField(Object object, String fieldName) {
-		Class clazz= object.getClass();
+		Class<? extends Object> clazz= object.getClass();
 		try {
 			Field field= clazz.getDeclaredField(fieldName);
 			field.setAccessible(true);
@@ -68,6 +68,7 @@
 		return fTest.countTestCases();
 	}
 
+	@Override
 	public boolean equals(Object obj) {
 		if (! (obj instanceof JUnit3TestReference))
 			return false;
@@ -76,6 +77,7 @@
 		return ref.fTest.equals(fTest);
 	}
 
+	@Override
 	public int hashCode() {
 		return fTest.hashCode();
 	}
@@ -84,11 +86,11 @@
 		if (isJUnit4TestCaseAdapter(fTest)) {
 			Method method= (Method) callJUnit4GetterMethod(fTest, "getTestMethod"); //$NON-NLS-1$
 			return MessageFormat.format(
-					MessageIds.TEST_IDENTIFIER_MESSAGE_FORMAT, new String[] { method.getName(), method.getDeclaringClass().getName() });
+					MessageIds.TEST_IDENTIFIER_MESSAGE_FORMAT, new Object[] { method.getName(), method.getDeclaringClass().getName() });
 		}
 		if (fTest instanceof TestCase) {
 			TestCase testCase= (TestCase) fTest;
-			return MessageFormat.format(MessageIds.TEST_IDENTIFIER_MESSAGE_FORMAT, new String[] { testCase.getName(), fTest.getClass().getName() });
+			return MessageFormat.format(MessageIds.TEST_IDENTIFIER_MESSAGE_FORMAT, new Object[] { testCase.getName(), fTest.getClass().getName() });
 		}
 		if (fTest instanceof TestSuite) {
 			TestSuite suite= (TestSuite) fTest;
@@ -101,7 +103,7 @@
 			return decorator.getClass().getName();
 		}
 		if (isJUnit4TestSuiteAdapter(fTest)) {
-			Class testClass= (Class) callJUnit4GetterMethod(fTest, "getTestClass"); //$NON-NLS-1$
+			Class<?> testClass= (Class<?>) callJUnit4GetterMethod(fTest, "getTestClass"); //$NON-NLS-1$
 			return testClass.getName();
 		}
 		return fTest.toString();
@@ -136,9 +138,9 @@
 				sendTreeOfChild(suite.testAt(i), notified);
 			}
 		} else if (isJUnit4TestSuiteAdapter(fTest)) {
-			List tests= (List) callJUnit4GetterMethod(fTest, "getTests"); //$NON-NLS-1$
+			List<?> tests= (List<?>) callJUnit4GetterMethod(fTest, "getTests"); //$NON-NLS-1$
 			notified.visitTreeEntry(getIdentifier(), true, tests.size(), false, "-1"); //$NON-NLS-1$
-			for (Iterator iter= tests.iterator(); iter.hasNext();) {
+			for (Iterator<?> iter= tests.iterator(); iter.hasNext();) {
 				sendTreeOfChild((Test) iter.next(), notified);
 			}
 		} else {
diff --git a/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF b/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF
index fce16bb..dae0ed6 100644
--- a/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.junit4.runtime/META-INF/MANIFEST.MF
@@ -4,9 +4,9 @@
 Bundle-Name: %pluginName
 Bundle-Vendor: %providerName
 Bundle-SymbolicName: org.eclipse.jdt.junit4.runtime;singleton:=true
-Bundle-Version: 1.1.1000.qualifier
+Bundle-Version: 1.1.1100.qualifier
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.internal.junit4.runner;x-internal:=true
 Require-Bundle: org.junit;bundle-version="4.7.0",
- org.eclipse.jdt.junit.runtime;bundle-version="[3.4.200,4.0.0)"
+ org.eclipse.jdt.junit.runtime;bundle-version="[3.5.0,4.0.0)"
 Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/org.eclipse.jdt.junit4.runtime/pom.xml b/org.eclipse.jdt.junit4.runtime/pom.xml
index 0c24048..1410828 100644
--- a/org.eclipse.jdt.junit4.runtime/pom.xml
+++ b/org.eclipse.jdt.junit4.runtime/pom.xml
@@ -18,6 +18,6 @@
   </parent>
   <groupId>org.eclipse.jdt</groupId>
   <artifactId>org.eclipse.jdt.junit4.runtime</artifactId>
-  <version>1.1.1000-SNAPSHOT</version>
+  <version>1.1.1100-SNAPSHOT</version>
   <packaging>eclipse-plugin</packaging>
 </project>
diff --git a/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java b/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java
index f59dbd3..b73811a 100644
--- a/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java
+++ b/org.eclipse.jdt.junit4.runtime/src/org/eclipse/jdt/internal/junit4/runner/JUnit4TestLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006, 2017 IBM Corporation and others.
+ * Copyright (c) 2006, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -35,7 +35,7 @@
 public class JUnit4TestLoader implements ITestLoader {
 
 	public ITestReference[] loadTests(
-			Class[] testClasses,
+			Class<?>[] testClasses,
 			String testName,
 			String[] failureNames,
 			String[] packages,
diff --git a/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF b/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF
index f7f933f..19aca54 100644
--- a/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF
+++ b/org.eclipse.jdt.junit5.runtime/META-INF/MANIFEST.MF
@@ -7,7 +7,7 @@
 Bundle-Version: 1.0.700.qualifier
 Bundle-Localization: plugin
 Export-Package: org.eclipse.jdt.internal.junit5.runner;x-internal:=true
-Require-Bundle: org.eclipse.jdt.junit.runtime;bundle-version="[3.4.600,4.0.0)",
+Require-Bundle: org.eclipse.jdt.junit.runtime;bundle-version="[3.5.0,4.0.0)",
  org.junit.jupiter.api;bundle-version="5.4.0",
  org.junit.jupiter.engine;bundle-version="5.4.0",
  org.junit.jupiter.migrationsupport;bundle-version="5.4.0",
diff --git a/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestLoader.java b/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestLoader.java
index e330446..7ae4068 100644
--- a/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestLoader.java
+++ b/org.eclipse.jdt.junit5.runtime/src/org/eclipse/jdt/internal/junit5/runner/JUnit5TestLoader.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2016, 2017 IBM Corporation and others.
+ * Copyright (c) 2016, 2019 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -36,7 +36,7 @@
 	private RemoteTestRunner fRemoteTestRunner;
 
 	@Override
-	public ITestReference[] loadTests(Class[] testClasses, String testName, String[] failureNames, String[] packages, String[][] includeExcludeTags, String uniqueId, RemoteTestRunner listener) {
+	public ITestReference[] loadTests(Class<?>[] testClasses, String testName, String[] failureNames, String[] packages, String[][] includeExcludeTags, String uniqueId, RemoteTestRunner listener) {
 		fRemoteTestRunner= listener;
 		ITestReference[] refs= new ITestReference[0];
 		if (uniqueId != null && !uniqueId.trim().isEmpty()) {
