Skip to content

Commit 3135d4f

Browse files
committed
Minor adjustments to PDECore.findPluginsInHost(String)
- change the names as it no not find one plugin but many - move the version comparator to PDECode so it is reusable - make the version comparator more robust in case of null
1 parent 1d67ed6 commit 3135d4f

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/PDECore.java

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import java.lang.reflect.InvocationTargetException;
1717
import java.net.URI;
1818
import java.util.Arrays;
19+
import java.util.Comparator;
1920
import java.util.HashMap;
2021
import java.util.Hashtable;
2122
import java.util.List;
@@ -39,6 +40,7 @@
3940
import org.eclipse.osgi.service.debug.DebugOptions;
4041
import org.eclipse.osgi.service.debug.DebugOptionsListener;
4142
import org.eclipse.osgi.service.debug.DebugTrace;
43+
import org.eclipse.osgi.service.resolver.BundleDescription;
4244
import org.eclipse.pde.core.IBundleClasspathResolver;
4345
import org.eclipse.pde.core.IClasspathContributor;
4446
import org.eclipse.pde.core.plugin.IPluginModelBase;
@@ -58,6 +60,7 @@
5860
import org.osgi.framework.FrameworkUtil;
5961
import org.osgi.framework.ServiceReference;
6062
import org.osgi.framework.ServiceRegistration;
63+
import org.osgi.framework.Version;
6164
import org.osgi.util.tracker.ServiceTracker;
6265

6366
import aQute.bnd.build.Workspace;
@@ -219,11 +222,28 @@ public static void logException(Throwable e, String message) {
219222

220223
private ServiceTracker<RepositoryListenerPlugin, RepositoryListenerPlugin> repositoryListenerServiceTracker;
221224

225+
public static final Comparator<IPluginModelBase> VERSION = Comparator.comparing(p -> {
226+
BundleDescription description = p.getBundleDescription();
227+
if (description == null) {
228+
return Version.emptyVersion;
229+
}
230+
return description.getVersion();
231+
});
232+
222233
public PDECore() {
223234
inst = this;
224235
}
225236

226-
public Stream<IPluginModelBase> findPluginInHost(String id) {
237+
/**
238+
* Finds plugins from the host OSGi framework, in no particular order.
239+
*
240+
* @param id
241+
* the bundle symbolic name to search for
242+
* @return a Stream of all bundles from the hosting OSGi framework in no
243+
* particular order, if ordering matter use for example
244+
* {@link #VERSION} comparator.
245+
*/
246+
public Stream<IPluginModelBase> findPluginsInHost(String id) {
227247
Map<String, List<IPluginModelBase>> hostPlugins = getHostPlugins();
228248
if (hostPlugins == null) {
229249
return null;

ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/JUnitLaunchRequirements.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
import java.util.ArrayList;
1717
import java.util.Collection;
18-
import java.util.Comparator;
1918
import java.util.LinkedHashSet;
2019
import java.util.List;
2120
import java.util.Map;
@@ -40,8 +39,6 @@ public class JUnitLaunchRequirements {
4039

4140
public static final String JUNIT4_JDT_RUNTIME_PLUGIN = "org.eclipse.jdt.junit4.runtime"; //$NON-NLS-1$
4241
public static final String JUNIT5_JDT_RUNTIME_PLUGIN = "org.eclipse.jdt.junit5.runtime"; //$NON-NLS-1$
43-
private static final Comparator<IPluginModelBase> VERSION = Comparator.comparing(p -> p.getBundleDescription().getVersion());
44-
4542
public static void addRequiredJunitRuntimePlugins(ILaunchConfiguration configuration, Map<String, List<IPluginModelBase>> allBundles, Map<IPluginModelBase, String> allModels) throws CoreException {
4643
Collection<String> runtimePlugins = getRequiredJunitRuntimeEclipsePlugins(configuration);
4744
Set<BundleDescription> addedRuntimeBundles = addAbsentRequirements(runtimePlugins, allBundles, allModels);
@@ -72,7 +69,7 @@ private static Set<BundleDescription> addAbsentRequirements(Collection<String> r
7269
for (String id : requirements) {
7370
List<IPluginModelBase> models = allBundles.computeIfAbsent(id, k -> new ArrayList<>());
7471
if (models.stream().noneMatch(p -> p.getBundleDescription().isResolved())) {
75-
IPluginModelBase model = findRequiredPluginInTargetOrHost(PluginRegistry.findModel(id), plugins -> plugins.max(VERSION), id);
72+
IPluginModelBase model = findRequiredPluginInTargetOrHost(PluginRegistry.findModel(id), plugins -> plugins.max(PDECore.VERSION), id);
7673
models.add(model);
7774
BundleLauncherHelper.addDefaultStartingBundle(allModels, model);
7875
addedRequirements.add(model.getBundleDescription());
@@ -96,7 +93,7 @@ private static void addAbsentRequirements(Set<BundleDescription> requirements, M
9693
private static IPluginModelBase findRequiredPluginInTargetOrHost(IPluginModelBase model, Function<Stream<IPluginModelBase>, Optional<IPluginModelBase>> pluginSelector, String id) throws CoreException {
9794
if (model == null || !model.getBundleDescription().isResolved()) {
9895
// prefer bundle from host over unresolved bundle from target
99-
model = pluginSelector.apply(PDECore.getDefault().findPluginInHost(id)) //
96+
model = pluginSelector.apply(PDECore.getDefault().findPluginsInHost(id)) //
10097
.orElseThrow(() -> new CoreException(Status.error(NLS.bind(PDEMessages.JUnitLaunchConfiguration_error_missingPlugin, id))));
10198
}
10299
return model;

0 commit comments

Comments
 (0)