diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ITestRunListener2.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ITestRunListener2.java
index a8c7229..63d1d06 100644
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ITestRunListener2.java
+++ b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/ITestRunListener2.java
@@ -82,7 +82,7 @@
 	 *  isDynamicTest: true or false
 	 *  parentId: the unique testId of its parent if it is a dynamic test, otherwise can be "-1"
 	 *  displayName: the display name of the test
-	 *  parameterTypes: comma-separated list of fully qualified type names of method parameters if applicable, otherwise an empty string
+	 *  parameterTypes: comma-separated list of method parameter types if applicable, otherwise an empty string
 	 *  uniqueId: the unique ID of the test provided by JUnit launcher, otherwise an empty string
 	 *  
 	 *  Example: 324968,testPass(junit.tests.MyTest),false,1,false,-1,A simple test case,&quot;&quot;,&quot;&quot;
diff --git a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestElement.java b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestElement.java
index d27c535..2062109 100644
--- a/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestElement.java
+++ b/org.eclipse.jdt.junit.core/src/org/eclipse/jdt/internal/junit/model/TestElement.java
@@ -179,8 +179,9 @@
 	private String fDisplayName;
 
 	/**
-	 * The array of fully qualified type names of method parameters if applicable, otherwise
-	 * <code>null</code>.
+	 * The array of method parameter types (as given by
+	 * org.junit.platform.engine.support.descriptor.MethodSource.getMethodParameterTypes()) if
+	 * applicable, otherwise <code>null</code>.
 	 */
 	private String[] fParameterTypes;
 
@@ -213,10 +214,11 @@
 	 * @param id the test id
 	 * @param testName the test name
 	 * @param displayName the test display name, can be <code>null</code>
-	 * @param parameterTypes the array of fully qualified type names of method parameters if
-	 *            applicable, otherwise <code>null</code>
-	 * @param uniqueId the unique ID of the test element, can be <code>null</code> as it is applicable to JUnit 5 and above
-
+	 * @param parameterTypes the array of method parameter types (as given by
+	 *            org.junit.platform.engine.support.descriptor.MethodSource.getMethodParameterTypes())
+	 *            if applicable, otherwise <code>null</code>
+	 * @param uniqueId the unique ID of the test element, can be <code>null</code> as it is applicable
+	 *            to JUnit 5 and above
 	 */
 	public TestElement(TestSuiteElement parent, String id, String testName, String displayName, String[] parameterTypes, String uniqueId) {
 		Assert.isNotNull(id);
@@ -404,8 +406,9 @@
 	}
 
 	/**
-	 * @return the array of fully qualified type names of method parameters if applicable, otherwise
-	 *         <code>null</code>
+	 * @return the array of method parameter types (as given by
+	 *         org.junit.platform.engine.support.descriptor.MethodSource.getMethodParameterTypes()) if
+	 *         applicable, otherwise <code>null</code>
 	 */
 	public String[] getParameterTypes() {
 		return fParameterTypes;
@@ -422,11 +425,10 @@
 	}
 
 	/**
-	 * Creates encoded type signatures from fully qualified type names provided by
-	 * {@link #getParameterTypes()}.
+	 * Creates encoded type signatures from type names provided by {@link #getParameterTypes()}.
 	 * 
-	 * @return the array of parameter type signatures obtained by converting the fully qualified
-	 *         type names from {@link #getParameterTypes()}, can be <code>null</code>
+	 * @return the array of parameter type signatures obtained by converting the type names from
+	 *         {@link #getParameterTypes()}, can be <code>null</code>
 	 */
 	public String[] getParameterTypeSignatures() {
 		// TODO - JUnit5: Create encoded type signatures so that IType.getMethod(String name, String[] parameterTypeSignatures) can find the method 
diff --git a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/MessageIds.java b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/MessageIds.java
index b799921..6564040 100644
--- a/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/MessageIds.java
+++ b/org.eclipse.jdt.junit.runtime/src/org/eclipse/jdt/internal/junit/runner/MessageIds.java
@@ -113,7 +113,7 @@
 	 * isDynamicTest = "true" or "false" <br>
 	 * parentId = the unique id of its parent if it is a dynamic test, otherwise can be "-1" <br>
 	 * displayName = the display name of the test <br>
-	 * parameterTypes = comma-separated list of fully qualified type names of method parameters if applicable, otherwise an empty string <br>
+	 * parameterTypes = comma-separated list of method parameter types if applicable, otherwise an empty string <br>
 	 * See: ITestRunListener2#testTreeEntry
 	 * 
 	 */
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
index 82bdbab..e0e8f08 100644
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/JUnitStubUtility.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2016 IBM Corporation and others.
+ * Copyright (c) 2000, 2017 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -10,6 +10,10 @@
  *******************************************************************************/
 package org.eclipse.jdt.internal.junit.util;
 
+import java.util.ArrayList;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
 import org.eclipse.core.runtime.CoreException;
 
 import org.eclipse.text.edits.MalformedTreeException;
@@ -264,6 +268,71 @@
 		return null;
 	}
 
+	/**
+	 * Returns a comma-separated list of method parameter type names in parentheses or "" if the method
+	 * has no parameters. If fully qualified type names are required, <code>$</code> is used as the
+	 * enclosing type separator in the qualified type name. Type erasure is performed on a parameterized
+	 * type, arrays use the square brackets and a type parameter is resolved while creating the return
+	 * value.
+	 * 
+	 * @param method the method whose parameter types are required
+	 * @param useSimpleNames <code>true</code> if the last segment of the type name should be used
+	 *            instead of the fully qualified type name
+	 * @return a comma-separated list of method parameter type names in parentheses
+	 */
+	public static String getParameterTypes(final IMethod method, final boolean useSimpleNames) {
+		String paramTypes= ""; //$NON-NLS-1$
+
+		int numOfParams= method.getNumberOfParameters();
+		if (numOfParams > 0) {
+			String[] parameterTypeSignatures= method.getParameterTypes();
+			ArrayList<String> parameterTypeNames= new ArrayList<>(numOfParams);
+
+			try {
+				String[] fullNames= null;
+				for (int i= 0; i < parameterTypeSignatures.length; i++) {
+					String paramTypeSign= parameterTypeSignatures[i];
+					StringBuffer buf= new StringBuffer();
+
+					String typeSign= Signature.getTypeErasure(paramTypeSign);
+					String fullName;
+					if (useSimpleNames) {
+						fullName= JavaModelUtil.getResolvedTypeName(typeSign, method.getDeclaringType(), '.');
+					} else {
+						fullName= JavaModelUtil.getResolvedTypeName(typeSign, method.getDeclaringType(), '$');
+					}
+					if (fullName == null) { // e.g. a type parameter "QE;"
+						if (fullNames == null) {
+							fullNames= JUnitStubUtility.getParameterTypeNamesForSeeTag(method);
+						}
+						fullName= fullNames[i];
+					}
+
+					if (fullName != null) {
+						buf.append(fullName);
+						int dim= Signature.getArrayCount(typeSign);
+						while (dim > 0) {
+							buf.append("[]"); //$NON-NLS-1$
+							dim--;
+						}
+					}
+
+					parameterTypeNames.add(buf.toString());
+				}
+			} catch (JavaModelException e) {
+				// ignore
+			}
+
+			Stream<String> stream= parameterTypeNames.stream();
+			if (useSimpleNames) {
+				stream= stream.map(paramTypeName -> paramTypeName.substring(paramTypeName.lastIndexOf('.') + 1));
+			}
+			paramTypes= stream.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$	
+		}
+
+		return paramTypes;
+	}
+
 	/*
 	 * Evaluates if a member (possible from another package) is visible from
 	 * elements in a package.
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
index b9f6a25..99e9ae1 100644
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchConfigurationTab.java
@@ -18,8 +18,6 @@
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
@@ -90,7 +88,6 @@
 import org.eclipse.jdt.core.search.IJavaSearchScope;
 import org.eclipse.jdt.core.search.SearchEngine;
 
-import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
 import org.eclipse.jdt.internal.junit.BasicElementLabels;
 import org.eclipse.jdt.internal.junit.JUnitCorePlugin;
 import org.eclipse.jdt.internal.junit.Messages;
@@ -731,7 +728,7 @@
 			if (!isJUnit3 && !Modifier.isPrivate(flags) && !Modifier.isStatic(flags)) {
 				IAnnotation annotation= method.getAnnotation("Test"); //$NON-NLS-1$
 				if (annotation.exists()) {
-					methodNames.add(methodName + getParameterTypes(method, false));
+					methodNames.add(methodName + JUnitStubUtility.getParameterTypes(method, false));
 				} else if (isJUnit5) {
 					boolean hasAnyTestAnnotation= method.getAnnotation("TestFactory").exists() //$NON-NLS-1$
 							|| method.getAnnotation("Testable").exists() //$NON-NLS-1$
@@ -739,78 +736,13 @@
 							|| method.getAnnotation("ParameterizedTest").exists() //$NON-NLS-1$
 							|| method.getAnnotation("RepeatedTest").exists(); //$NON-NLS-1$
 					if (hasAnyTestAnnotation || isAnnotatedWithTestable(method, type, javaProject)) {
-						methodNames.add(methodName + getParameterTypes(method, false));
+						methodNames.add(methodName + JUnitStubUtility.getParameterTypes(method, false));
 					}
 				}
 			}
 		}
 	}
 
-	/**
-	 * Returns a comma-separated list of method parameter type names in parentheses or "" if the method
-	 * has no parameters. If fully qualified type names are required, <code>$</code> is used as the
-	 * enclosing type separator in the qualified type name. Type erasure is performed on a parameterized
-	 * type, arrays use the square brackets and a type parameter is resolved while creating the return
-	 * value.
-	 * 
-	 * @param method the method whose parameter types are required
-	 * @param useSimpleNames <code>true</code> if the last segment of the type name should be used
-	 *            instead of the fully qualified type name
-	 * @return a comma-separated list of method parameter type names in parentheses
-	 */
-	static String getParameterTypes(final IMethod method, final boolean useSimpleNames) {
-		String paramTypes= ""; //$NON-NLS-1$
-
-		int numOfParams= method.getNumberOfParameters();
-		if (numOfParams > 0) {
-			String[] parameterTypeSignatures= method.getParameterTypes();
-			ArrayList<String> parameterTypeNames= new ArrayList<>(numOfParams);
-
-			try {
-				String[] fullNames= null;
-				for (int i= 0; i < parameterTypeSignatures.length; i++) {
-					String paramTypeSign= parameterTypeSignatures[i];
-					StringBuffer buf= new StringBuffer();
-
-					String typeSign= Signature.getTypeErasure(paramTypeSign);
-					String fullName;
-					if (useSimpleNames) {
-						fullName= JavaModelUtil.getResolvedTypeName(typeSign, method.getDeclaringType(), '.');
-					} else {
-						fullName= JavaModelUtil.getResolvedTypeName(typeSign, method.getDeclaringType(), '$');
-					}
-					if (fullName == null) { // e.g. a type parameter "QE;"
-						if (fullNames == null) {
-							fullNames= JUnitStubUtility.getParameterTypeNamesForSeeTag(method);
-						}
-						fullName= fullNames[i];
-					}
-
-					if (fullName != null) {
-						buf.append(fullName);
-						int dim= Signature.getArrayCount(typeSign);
-						while (dim > 0) {
-							buf.append("[]"); //$NON-NLS-1$
-							dim--;
-						}
-					}
-
-					parameterTypeNames.add(buf.toString());
-				}
-			} catch (JavaModelException e) {
-				// ignore
-			}
-
-			Stream<String> stream= parameterTypeNames.stream();
-			if (useSimpleNames) {
-				stream= stream.map(paramTypeName -> paramTypeName.substring(paramTypeName.lastIndexOf('.') + 1));
-			}
-			paramTypes= stream.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$	
-		}
-
-		return paramTypes;
-	}
-
 	// See JUnit5TestFinder.Annotation#annotates also.
 	private boolean isAnnotatedWithTestable(IMethod method, IType declaringType, IJavaProject javaProject) throws JavaModelException {
 		for (IAnnotation annotation : method.getAnnotations()) {
diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java
index d0702c6..cf432c2 100644
--- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java
+++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/junit/launcher/JUnitLaunchShortcut.java
@@ -69,6 +69,7 @@
 import org.eclipse.jdt.internal.junit.ui.JUnitMessages;
 import org.eclipse.jdt.internal.junit.ui.JUnitPlugin;
 import org.eclipse.jdt.internal.junit.util.ExceptionHandler;
+import org.eclipse.jdt.internal.junit.util.JUnitStubUtility;
 import org.eclipse.jdt.internal.junit.util.TestSearchEngine;
 
 import org.eclipse.jdt.launching.IJavaLaunchConfigurationConstants;
@@ -347,7 +348,7 @@
 			case IJavaElement.METHOD: {
 				IMethod method= (IMethod)element;
 				testName= method.getElementName(); // Test-names can not be specified when launching a Java method.
-				testName+= JUnitLaunchConfigurationTab.getParameterTypes(method, false);
+				testName+= JUnitStubUtility.getParameterTypes(method, false);
 				containerHandleId= EMPTY_STRING;
 				IType declaringType= method.getDeclaringType();
 				mainTypeQualifiedName= declaringType.getFullyQualifiedName('.');
@@ -409,7 +410,7 @@
 			case IJavaElement.METHOD:
 				IMethod method= (IMethod)element;
 				String methodName= method.getElementName();
-				methodName+= JUnitLaunchConfigurationTab.getParameterTypes(method, true); // use simple names of parameter types
+				methodName+= JUnitStubUtility.getParameterTypes(method, true); // use simple names of parameter types
 				return method.getDeclaringType().getElementName() + '.' + methodName;
 			default:
 				throw new IllegalArgumentException("Invalid element type to create a launch configuration: " + element.getClass().getName()); //$NON-NLS-1$
