2424import java .util .Comparator ;
2525import java .util .HashMap ;
2626import java .util .HashSet ;
27+ import java .util .LinkedHashSet ;
2728import java .util .List ;
2829import java .util .Map ;
2930import java .util .Objects ;
3031import java .util .Optional ;
3132import java .util .Queue ;
3233import java .util .Set ;
3334import java .util .TreeMap ;
35+ import java .util .function .Function ;
3436import java .util .stream .Stream ;
3537
3638import org .eclipse .core .resources .IFile ;
@@ -79,6 +81,8 @@ class RequiredPluginsClasspathContainer {
7981 private static final Version JUNIT_5_9 = new Version (5 , 9 , 0 );
8082 private static final VersionRange BELOW_JUNIT_5_9 = new VersionRange ("[1.0,5.9)" ); //$NON-NLS-1$
8183
84+ @ SuppressWarnings ("nls" )
85+ private static final Set <String > JUNIT4_PLUGINS = Set .of ("org.junit" );
8286 @ SuppressWarnings ("nls" )
8387 private static final Set <String > JUNIT5_RUNTIME_PLUGINS = Set .of ("org.junit" , //
8488 "junit-platform-launcher" ,
@@ -594,7 +598,11 @@ private void addJunit5RuntimeDependencies(Set<BundleDescription> added, List<ICl
594598 // JUnit 5.8 and below bundles don't have specific version requirements that we can use
595599 junitRequirements = collectRuntimeRequirementsBelowJunit5_9 ();
596600 } else {
597- junitRequirements = DependencyManager .findRequirementsClosure (List .of (junitBundle ));
601+ junitRequirements = new LinkedHashSet <>();
602+ List <BundleDescription > junit4Requirements = collectRuntimeRequirements (JUNIT4_PLUGINS , PluginRegistry ::findModel );
603+ junitRequirements .addAll (junit4Requirements );
604+ List <BundleDescription > junit5AndAboveRequirements = collectRuntimeRequirements (List .of (junitBundle ));
605+ junitRequirements .addAll (junit5AndAboveRequirements );
598606 }
599607 if (junitRequirements .isEmpty ()) {
600608 return ;
@@ -617,11 +625,17 @@ private void addJunit5RuntimeDependencies(Set<BundleDescription> added, List<ICl
617625 }
618626
619627 private static List <BundleDescription > collectRuntimeRequirementsBelowJunit5_9 () {
620- List <BundleDescription > roots = JUNIT5_RUNTIME_PLUGINS .stream ()
621- .map (id -> PluginRegistry .findModel (id , BELOW_JUNIT_5_9 )).filter (Objects ::nonNull )
628+ return collectRuntimeRequirements (JUNIT5_RUNTIME_PLUGINS , id -> PluginRegistry .findModel (id , BELOW_JUNIT_5_9 ));
629+ }
630+
631+ private static List <BundleDescription > collectRuntimeRequirements (Collection <String > bundleIds , Function <String , IPluginModelBase > findModel ) {
632+ List <BundleDescription > roots = bundleIds .stream ().map (findModel ).filter (Objects ::nonNull )
622633 .filter (IPluginModelBase ::isEnabled ).map (IPluginModelBase ::getBundleDescription ).toList ();
623- Set <BundleDescription > closure = DependencyManager .findRequirementsClosure (roots ,
624- INCLUDE_OPTIONAL_DEPENDENCIES );
634+ return collectRuntimeRequirements (roots );
635+ }
636+
637+ private static List <BundleDescription > collectRuntimeRequirements (List <BundleDescription > roots ) {
638+ Set <BundleDescription > closure = DependencyManager .findRequirementsClosure (roots , INCLUDE_OPTIONAL_DEPENDENCIES );
625639 String systemBundleBSN = TargetPlatformHelper .getPDEState ().getSystemBundle ();
626640 return closure .stream ().filter (b -> !b .getSymbolicName ().equals (systemBundleBSN ))
627641 .sorted (Comparator .comparing (BundleDescription ::getSymbolicName )).toList ();
0 commit comments