From 4d3eb320b26935483645af2b5a87e4c3fb25c7c7 Mon Sep 17 00:00:00 2001 From: anna Date: Wed, 28 Dec 2011 12:04:48 +0100 Subject: [PATCH] junit: avoid NoSuchMethodError when multiple junit versions are found in the classpath (IDEA-79383) --- .../intellij/junit4/JUnit4TestRunnerUtil.java | 24 ++++++++++++------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java index a58bc2d06605..822325d1ab13 100644 --- a/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java +++ b/plugins/junit_rt/src/com/intellij/junit4/JUnit4TestRunnerUtil.java @@ -15,7 +15,6 @@ */ package com.intellij.junit4; -import com.intellij.rt.execution.junit.JUnitForkedStarter; import org.junit.Ignore; import org.junit.internal.AssumptionViolatedException; import org.junit.internal.requests.ClassRequest; @@ -82,13 +81,10 @@ public class JUnit4TestRunnerUtil { allClasses = JUnit46ClassesRequestBuilder.getClassesRequest(suiteName, classes); } catch (ClassNotFoundException e) { - try { - Class.forName("org.junit.internal.requests.ClassesRequest"); - allClasses = JUnit4ClassesRequestBuilder.getClassesRequest(suiteName, classes); - } - catch (ClassNotFoundException e1) { - allClasses = JUnit45ClassesRequestBuilder.getClassesRequest(suiteName, classes); - } + allClasses = getClassRequestsUsing44API(suiteName, classes); + } + catch (NoSuchMethodError e) { + allClasses = getClassRequestsUsing44API(suiteName, classes); } return classMethods.isEmpty() ? allClasses : allClasses.filterWith(new Filter() { @@ -160,6 +156,18 @@ public class JUnit4TestRunnerUtil { return result.size() == 1 ? Request.aClass((Class)result.get(0)) : Request.classes(getArrayOfClasses(result)); } + private static Request getClassRequestsUsing44API(String suiteName, Class[] classes) { + Request allClasses; + try { + Class.forName("org.junit.internal.requests.ClassesRequest"); + allClasses = JUnit4ClassesRequestBuilder.getClassesRequest(suiteName, classes); + } + catch (ClassNotFoundException e1) { + allClasses = JUnit45ClassesRequestBuilder.getClassesRequest(suiteName, classes); + } + return allClasses; + } + private static void appendTestClass(Vector result, String className) { final Class aClass = loadTestClass(className); if (!result.contains(aClass)) { //do not append classes twice: rerun failed tests from one test suite