diff --git a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java index 634f27d2910..766ab63eae1 100644 --- a/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java +++ b/org.eclipse.jdt.junit/src/org/eclipse/jdt/internal/junit/util/TestSearchEngine.java @@ -18,7 +18,6 @@ import java.util.Set; import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.jface.operation.IRunnableContext; @@ -64,9 +63,19 @@ public static Set findTestMethods(IRunnableContext context, IJavaProject var result= new HashSet(); context.run(true, true, (progressMonitor) -> { String message= Messages.format(JUnitMessages.TestSearchEngine_search_message_progress_monitor, type.getElementName()); - SubMonitor subMonitor= SubMonitor.convert(progressMonitor, message, 1); + SubMonitor subMonitor= SubMonitor.convert(progressMonitor, message, 2); try { - collectMethodNames(type, javaProject, testKind.getId(), result, subMonitor); + IType[] types= type.newSupertypeHierarchy(subMonitor.split(1)).getAllTypes(); + + subMonitor= subMonitor.split(1); + subMonitor.setWorkRemaining(types.length); + + for (IType it : types) { + if (!"java.lang.Object".equals(it.getFullyQualifiedName())) {//$NON-NLS-1$ + collectDeclaredMethodNames(it, javaProject, testKind.getId(), result); + } + subMonitor.worked(1); + } } catch (CoreException e) { throw new InvocationTargetException(e); } @@ -74,28 +83,6 @@ public static Set findTestMethods(IRunnableContext context, IJavaProject return result; } - private static void collectMethodNames(IType type, IJavaProject javaProject, String testKindId, Set methodNames, IProgressMonitor monitor) throws JavaModelException { - if (type == null) { - return; - } - - SubMonitor subMonitor= SubMonitor.convert(monitor, 3); - - collectDeclaredMethodNames(type, javaProject, testKindId, methodNames); - subMonitor.split(1); - - String superclassName= type.getSuperclassName(); - IType superType= getResolvedType(superclassName, type, javaProject); - collectMethodNames(superType, javaProject, testKindId, methodNames, subMonitor.split(1)); - - String[] superInterfaceNames= type.getSuperInterfaceNames(); - subMonitor.setWorkRemaining(superInterfaceNames.length); - for (String interfaceName : superInterfaceNames) { - superType= getResolvedType(interfaceName, type, javaProject); - collectMethodNames(superType, javaProject, testKindId, methodNames, subMonitor.split(1)); - } - } - private static IType getResolvedType(String typeName, IType type, IJavaProject javaProject) throws JavaModelException { IType resolvedType= null; if (typeName != null) {