Bug 367187 - [patch] Product validation doesn't find plugin needed in
two versions
Signed-off-by: George Suaridze <suag@1c.ru>
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ProductValidateAction.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ProductValidateAction.java
index 8693c8c..20ab180 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ProductValidateAction.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/ProductValidateAction.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2012 EclipseSource Corporation and others.
+ * Copyright (c) 2009, 2014 EclipseSource Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -20,6 +20,7 @@
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.core.plugin.IMatchRules;
import org.eclipse.pde.internal.core.*;
import org.eclipse.pde.internal.core.ifeature.*;
import org.eclipse.pde.internal.core.iproduct.*;
@@ -37,25 +38,25 @@
}
public void run() {
- HashMap<String, IPluginModelBase> map = new HashMap<String, IPluginModelBase>();
+ Set<IPluginModelBase> launchPlugins = new HashSet<IPluginModelBase>();
if (fProduct.useFeatures()) {
IFeatureModel[] features = getUniqueFeatures();
for (int i = 0; i < features.length; i++) {
- addFeaturePlugins(features[i].getFeature(), map);
+ addFeaturePlugins(features[i].getFeature(), launchPlugins);
}
} else {
IProductPlugin[] plugins = fProduct.getPlugins();
for (int i = 0; i < plugins.length; i++) {
String id = plugins[i].getId();
- if (id == null || map.containsKey(id))
+ if (id == null)
continue;
IPluginModelBase model = PluginRegistry.findModel(id);
- if (model != null && TargetPlatformHelper.matchesCurrentEnvironment(model))
- map.put(id, model);
+ if (model != null && !launchPlugins.contains(model) && TargetPlatformHelper.matchesCurrentEnvironment(model))
+ launchPlugins.add(model);
}
}
try {
- IPluginModelBase[] models = map.values().toArray(new IPluginModelBase[map.size()]);
+ IPluginModelBase[] models = launchPlugins.toArray(new IPluginModelBase[launchPlugins.size()]);
LaunchValidationOperation operation = new ProductValidationOperation(models);
LaunchPluginValidator.runValidationOperation(operation, new NullProgressMonitor());
if (!operation.hasErrors()) {
@@ -66,15 +67,18 @@
}
}
- private void addFeaturePlugins(IFeature feature, HashMap<String, IPluginModelBase> map) {
+ private void addFeaturePlugins(IFeature feature, Set<IPluginModelBase> launchPlugins) {
IFeaturePlugin[] plugins = feature.getPlugins();
for (int i = 0; i < plugins.length; i++) {
String id = plugins[i].getId();
- if (id == null || map.containsKey(id))
+ String version = plugins[i].getVersion();
+ if (id == null || version == null)
continue;
- IPluginModelBase model = PluginRegistry.findModel(id);
- if (model != null && TargetPlatformHelper.matchesCurrentEnvironment(model))
- map.put(id, model);
+ IPluginModelBase model = PluginRegistry.findModel(id, version, IMatchRules.EQUIVALENT, null);
+ if (model == null)
+ model = PluginRegistry.findModel(id);
+ if (model != null && !launchPlugins.contains(model) && TargetPlatformHelper.matchesCurrentEnvironment(model))
+ launchPlugins.add(model);
}
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
index edbe486..0c6f7a7 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/LaunchAction.java
@@ -23,6 +23,7 @@
import org.eclipse.jface.window.Window;
import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.PluginRegistry;
+import org.eclipse.pde.core.plugin.IMatchRules;
import org.eclipse.pde.internal.core.*;
import org.eclipse.pde.internal.core.ifeature.*;
import org.eclipse.pde.internal.core.iproduct.*;
@@ -173,24 +174,24 @@
}
private IPluginModelBase[] getModels() {
- HashMap<String, IPluginModelBase> map = new HashMap<String, IPluginModelBase>();
+ Set<IPluginModelBase> launchPlugins = new HashSet<IPluginModelBase>();
if (fProduct.useFeatures()) {
IFeatureModel[] features = getUniqueFeatures();
for (int i = 0; i < features.length; i++) {
- addFeaturePlugins(features[i].getFeature(), map);
+ addFeaturePlugins(features[i].getFeature(), launchPlugins);
}
} else {
IProductPlugin[] plugins = fProduct.getPlugins();
for (int i = 0; i < plugins.length; i++) {
String id = plugins[i].getId();
- if (id == null || map.containsKey(id))
+ if (id == null)
continue;
IPluginModelBase model = PluginRegistry.findModel(id);
if (model != null && TargetPlatformHelper.matchesCurrentEnvironment(model))
- map.put(id, model);
+ launchPlugins.add(model);
}
}
- return map.values().toArray(new IPluginModelBase[map.size()]);
+ return launchPlugins.toArray(new IPluginModelBase[launchPlugins.size()]);
}
private IFeatureModel[] getUniqueFeatures() {
@@ -218,15 +219,18 @@
}
}
- private void addFeaturePlugins(IFeature feature, HashMap<String, IPluginModelBase> map) {
+ private void addFeaturePlugins(IFeature feature, Set<IPluginModelBase> launchPlugins) {
IFeaturePlugin[] plugins = feature.getPlugins();
for (int i = 0; i < plugins.length; i++) {
String id = plugins[i].getId();
- if (id == null || map.containsKey(id))
+ String version = plugins[i].getVersion();
+ if (id == null || version == null)
continue;
- IPluginModelBase model = PluginRegistry.findModel(id);
- if (model != null && TargetPlatformHelper.matchesCurrentEnvironment(model))
- map.put(id, model);
+ IPluginModelBase model = PluginRegistry.findModel(id, version, IMatchRules.EQUIVALENT, null);
+ if (model == null)
+ model = PluginRegistry.findModel(id);
+ if (model != null && !launchPlugins.contains(model) && TargetPlatformHelper.matchesCurrentEnvironment(model))
+ launchPlugins.add(model);
}
}