Skip to content

Commit 5afdb83

Browse files
committed
Consider multiple versions when finding bundles in host runtime
Extracted from and required by: - #2013
1 parent 9df1530 commit 5afdb83

File tree

3 files changed

+19
-9
lines changed

3 files changed

+19
-9
lines changed

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

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
import java.util.Arrays;
1919
import java.util.HashMap;
2020
import java.util.Hashtable;
21+
import java.util.List;
2122
import java.util.Map;
23+
import java.util.stream.Collectors;
2224
import java.util.stream.Stream;
2325

2426
import org.eclipse.core.resources.IResourceChangeEvent;
@@ -109,7 +111,7 @@ public class PDECore extends Plugin implements DebugOptionsListener {
109111
*/
110112
private static PDEPreferencesManager fPreferenceManager;
111113

112-
private Map<String, IPluginModelBase> fHostPlugins;
114+
private Map<String, List<IPluginModelBase>> fHostPlugins;
113115

114116
public static PDECore getDefault() {
115117
return inst;
@@ -221,7 +223,15 @@ public PDECore() {
221223
inst = this;
222224
}
223225

224-
public synchronized IPluginModelBase findPluginInHost(String id) {
226+
public Stream<IPluginModelBase> findPluginInHost(String id) {
227+
Map<String, List<IPluginModelBase>> hostPlugins = getHostPlugins();
228+
if (hostPlugins == null) {
229+
return null;
230+
}
231+
return hostPlugins.getOrDefault(id, List.of()).stream();
232+
}
233+
234+
private synchronized Map<String, List<IPluginModelBase>> getHostPlugins() {
225235
if (fHostPlugins == null) {
226236
fHostPlugins = new HashMap<>();
227237

@@ -239,12 +249,10 @@ public synchronized IPluginModelBase findPluginInHost(String id) {
239249
PDEState state = new PDEState(pluginPaths, true, false, new NullProgressMonitor());
240250
state.resolveState(false);
241251

242-
for (IPluginModelBase plugin : state.getTargetModels()) {
243-
fHostPlugins.put(plugin.getPluginBase().getId(), plugin);
244-
}
252+
fHostPlugins = Arrays.stream(state.getTargetModels())
253+
.collect(Collectors.groupingBy(p -> p.getPluginBase().getId()));
245254
}
246-
247-
return fHostPlugins.get(id);
255+
return fHostPlugins;
248256
}
249257

250258
public PluginModelManager getModelManager() {

ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ private IPluginModelBase findRequiredPluginInTargetOrHost(String id) throws Core
397397
IPluginModelBase model = PluginRegistry.findModel(id);
398398
if (model == null || !model.getBundleDescription().isResolved()) {
399399
// prefer bundle from host over unresolved bundle from target
400-
model = PDECore.getDefault().findPluginInHost(id);
400+
model = PDECore.getDefault().findPluginInHost(id).max(Comparator.comparing(p -> p.getBundleDescription().getVersion())).orElse(null);
401401
}
402402
if (model == null) {
403403
abort(NLS.bind(PDEMessages.JUnitLaunchConfiguration_error_missingPlugin, id), null, IStatus.OK);

ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import java.util.ArrayList;
2828
import java.util.Arrays;
2929
import java.util.Collection;
30+
import java.util.Comparator;
3031
import java.util.HashSet;
3132
import java.util.LinkedHashMap;
3233
import java.util.LinkedHashSet;
@@ -1089,7 +1090,8 @@ private IPluginModelBase findRequiredPluginInTargetOrHost(String id) throws Core
10891090
IPluginModelBase model = PluginRegistry.findModel(id);
10901091
if (model == null || !model.getBundleDescription().isResolved()) {
10911092
// prefer bundle from host over unresolved bundle from target
1092-
model = PDECore.getDefault().findPluginInHost(id);
1093+
model = PDECore.getDefault().findPluginInHost(id)
1094+
.max(Comparator.comparing(p -> p.getBundleDescription().getVersion())).orElse(null);
10931095
}
10941096
if (model == null) {
10951097
abort(NLS.bind(Messages.JUnitPluginLaunchConfigurationDelegate_error_missingPlugin, id), null, IStatus.OK);

0 commit comments

Comments
 (0)