diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java index 45487b312b7..9bd67b371f9 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/RequiredPluginsClasspathContainer.java @@ -13,6 +13,8 @@ *******************************************************************************/ package org.eclipse.pde.internal.core; +import static org.eclipse.pde.internal.core.DependencyManager.Options.INCLUDE_OPTIONAL_DEPENDENCIES; + import java.io.File; import java.util.ArrayDeque; import java.util.ArrayList; @@ -22,6 +24,7 @@ import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import java.util.Queue; import java.util.Set; @@ -60,13 +63,18 @@ public class RequiredPluginsClasspathContainer extends PDEClasspathContainer implements IClasspathContainer { @SuppressWarnings("nls") - private static final Collection JUNIT5_RUNTIME_PLUGINS = Set.of("org.junit", "junit-jupiter-api", - "junit-jupiter-engine", "junit-platform-commons", "junit-platform-engine", "org.hamcrest.core", - "org.opentest4j"); + private static final Set JUNIT5_RUNTIME_PLUGINS = Set.of("org.junit", // + "junit-jupiter-engine", // BSN of the bundle from Maven-Central + "org.junit.jupiter.engine"); // BSN of the bundle from Eclipse-Orbit + @SuppressWarnings("nls") + private static final Set JUNIT5_API_PLUGINS = Set.of( // + "junit-jupiter-api", // BSN of the bundle from Maven-Central + "org.junit.jupiter.api"); // BSN of the bundle from Eclipse-Orbit private final IPluginModelBase fModel; private IBuild fBuild; + private List junit5RuntimeClosure; private IClasspathEntry[] fEntries; private boolean addImportedPackages; @@ -489,18 +497,16 @@ private void addJunit5RuntimeDependencies(Set added, List added, List> rules = Map.of(desc, List.of()); addPlugin(desc, true, rules, entries); } + } + private boolean containsJunit5Dependency(Collection dependencies) { + return dependencies.stream().map(BundleDescription::getSymbolicName).anyMatch(JUNIT5_API_PLUGINS::contains); } - private static boolean containsJunit5Dependency(Collection dependencies) { - return dependencies.stream().anyMatch(desc -> "junit-jupiter-api".equals(desc.getName()) || "org.junit.jupiter.api".equals(desc.getName())); //$NON-NLS-1$ //$NON-NLS-2$ + private static List collectJunit5RuntimeRequirements() { + List roots = JUNIT5_RUNTIME_PLUGINS.stream().map(PluginRegistry::findModel) + .filter(Objects::nonNull).filter(IPluginModelBase::isEnabled) + .map(IPluginModelBase::getBundleDescription).toList(); + Set closure = DependencyManager.findRequirementsClosure(roots, + INCLUDE_OPTIONAL_DEPENDENCIES); + String systemBundleBSN = TargetPlatformHelper.getPDEState().getSystemBundle(); + return closure.stream().filter(b -> !b.getSymbolicName().equals(systemBundleBSN)).toList(); } private void addSecondaryDependencies(BundleDescription desc, Set added,