Bug 578728 - Use PluginModels of launch-delegates for launch validation
Change-Id: Ie2a7472f1df457ce8dc4a5f1a846fe9b25e56125
Signed-off-by: Hannes Wellmann <wellmann.hannes1@gmx.net>
Reviewed-on: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/190764
Tested-by: PDE Bot <pde-bot@eclipse.org>
diff --git a/features/org.eclipse.pde.unittest.junit-feature/feature.xml b/features/org.eclipse.pde.unittest.junit-feature/feature.xml
index 06b89e1..60cff19 100644
--- a/features/org.eclipse.pde.unittest.junit-feature/feature.xml
+++ b/features/org.eclipse.pde.unittest.junit-feature/feature.xml
@@ -2,7 +2,7 @@
<feature
id="org.eclipse.pde.unittest.junit"
label="%featureName"
- version="1.0.100.qualifier"
+ version="1.0.200.qualifier"
provider-name="%providerName"
license-feature="org.eclipse.license"
license-feature-version="0.0.0">
diff --git a/features/org.eclipse.pde.unittest.junit-feature/pom.xml b/features/org.eclipse.pde.unittest.junit-feature/pom.xml
index 3b5b657..1ebfb42 100644
--- a/features/org.eclipse.pde.unittest.junit-feature/pom.xml
+++ b/features/org.eclipse.pde.unittest.junit-feature/pom.xml
@@ -19,7 +19,7 @@
</parent>
<groupId>org.eclipse.pde.unittest.junit.feature</groupId>
<artifactId>org.eclipse.pde.unittest.junit</artifactId>
- <version>1.0.100-SNAPSHOT</version>
+ <version>1.0.200-SNAPSHOT</version>
<packaging>eclipse-feature</packaging>
<build>
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/EclipsePluginValidationOperation.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/EclipsePluginValidationOperation.java
index 844350f..9e3be67 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/EclipsePluginValidationOperation.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/EclipsePluginValidationOperation.java
@@ -25,16 +25,11 @@
public class EclipsePluginValidationOperation extends LaunchValidationOperation {
public static final int CREATE_EXTENSION_ERROR_CODE = 1000;
- private Map<Object, Object[]> fExtensionErrors = new HashMap<>(2);
- private static Object[] EMPTY = new Object[0];
+ private static final Object[] EMPTY = new Object[0];
+ private final Map<Object, Object[]> fExtensionErrors = new HashMap<>(2);
- public EclipsePluginValidationOperation(ILaunchConfiguration configuration) {
- super(configuration);
- }
-
- @Override
- protected Set<IPluginModelBase> getModels() throws CoreException {
- return BundleLauncherHelper.getMergedBundleMap(fLaunchConfiguration, false).keySet();
+ public EclipsePluginValidationOperation(ILaunchConfiguration configuration, Set<IPluginModelBase> models) {
+ super(configuration, models);
}
@Override
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchValidationOperation.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchValidationOperation.java
index 4fc259e..f896ed5 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchValidationOperation.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/LaunchValidationOperation.java
@@ -36,23 +36,23 @@
import org.osgi.framework.Bundle;
import org.osgi.framework.Constants;
-public abstract class LaunchValidationOperation implements IWorkspaceRunnable {
+public class LaunchValidationOperation implements IWorkspaceRunnable {
private BundleValidationOperation fOperation;
- protected ILaunchConfiguration fLaunchConfiguration;
+ protected final ILaunchConfiguration fLaunchConfiguration;
+ protected final Set<IPluginModelBase> fModels;
- public LaunchValidationOperation(ILaunchConfiguration configuration) {
+ public LaunchValidationOperation(ILaunchConfiguration configuration, Set<IPluginModelBase> models) {
fLaunchConfiguration = configuration;
+ fModels = models;
}
@Override
public void run(IProgressMonitor monitor) throws CoreException {
- fOperation = new BundleValidationOperation(getModels(), getPlatformProperties());
+ fOperation = new BundleValidationOperation(fModels, getPlatformProperties());
fOperation.run(monitor);
}
- protected abstract Set<IPluginModelBase> getModels() throws CoreException;
-
@SuppressWarnings("rawtypes")
protected Dictionary[] getPlatformProperties() throws CoreException {
IExecutionEnvironment[] envs = getMatchingEnvironments();
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/OSGiValidationOperation.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/OSGiValidationOperation.java
deleted file mode 100644
index 6d2f4df..0000000
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/OSGiValidationOperation.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2007, 2022 IBM Corporation and others.
- *
- * This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- * IBM Corporation - initial API and implementation
- * EclipseSource Corporation - ongoing enhancements
- *******************************************************************************/
-package org.eclipse.pde.internal.launching.launcher;
-
-import java.util.Set;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.debug.core.ILaunchConfiguration;
-import org.eclipse.pde.core.plugin.IPluginModelBase;
-
-public class OSGiValidationOperation extends LaunchValidationOperation {
-
- public OSGiValidationOperation(ILaunchConfiguration configuration) {
- super(configuration);
- }
-
- @Override
- protected Set<IPluginModelBase> getModels() throws CoreException {
- return BundleLauncherHelper.getMergedBundleMap(fLaunchConfiguration, true).keySet();
- }
-
-}
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/ProductValidationOperation.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/ProductValidationOperation.java
index 5743621..3cc0f01 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/ProductValidationOperation.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/internal/launching/launcher/ProductValidationOperation.java
@@ -24,16 +24,8 @@
public class ProductValidationOperation extends LaunchValidationOperation {
- private Set<IPluginModelBase> fModels;
-
public ProductValidationOperation(Set<IPluginModelBase> models) {
- super(null);
- fModels = models;
- }
-
- @Override
- protected Set<IPluginModelBase> getModels() throws CoreException {
- return fModels;
+ super(null, models);
}
@Override
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
index ec57649..66915c1 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2018, 2022 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -24,6 +24,7 @@
import org.eclipse.jdt.core.IJavaModelMarker;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.launching.*;
+import org.eclipse.pde.core.plugin.IPluginModelBase;
import org.eclipse.pde.core.plugin.TargetPlatform;
import org.eclipse.pde.internal.core.ICoreConstants;
import org.eclipse.pde.internal.core.TargetPlatformHelper;
@@ -509,7 +510,8 @@
* @since 3.3
*/
protected void validatePluginDependencies(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
- EclipsePluginValidationOperation op = new EclipsePluginValidationOperation(configuration);
+ Set<IPluginModelBase> models = BundleLauncherHelper.getMergedBundleMap(configuration, false).keySet();
+ EclipsePluginValidationOperation op = new EclipsePluginValidationOperation(configuration, models);
LaunchPluginValidator.runValidationOperation(op, monitor);
}
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java
index 5a1e102..a886741 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EclipseApplicationLaunchConfiguration.java
@@ -200,6 +200,12 @@
}
@Override
+ protected void validatePluginDependencies(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
+ EclipsePluginValidationOperation op = new EclipsePluginValidationOperation(configuration, fModels.keySet());
+ LaunchPluginValidator.runValidationOperation(op, monitor);
+ }
+
+ @Override
public String[] getVMArguments(ILaunchConfiguration configuration) throws CoreException {
String[] vmArgs = super.getVMArguments(configuration);
// necessary for PDE to know how to load plugins when target platform = host platform
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java
index bff34e1..a6b6032 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/EquinoxLaunchConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2021 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -171,7 +171,7 @@
@Override
protected void validatePluginDependencies(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
- OSGiValidationOperation op = new OSGiValidationOperation(configuration);
+ LaunchValidationOperation op = new LaunchValidationOperation(configuration, fModels.keySet());
LaunchPluginValidator.runValidationOperation(op, monitor);
}
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
index 73a10db..a017aad 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/JUnitLaunchConfigurationDelegate.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2021 IBM Corporation and others.
+ * Copyright (c) 2006, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -520,7 +520,7 @@
* a progress monitor
*/
protected void validatePluginDependencies(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
- EclipsePluginValidationOperation op = new EclipsePluginValidationOperation(configuration);
+ EclipsePluginValidationOperation op = new EclipsePluginValidationOperation(configuration, fModels.keySet());
LaunchPluginValidator.runValidationOperation(op, monitor);
}
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
index 4c3c1b8..4d29880 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/AbstractPluginBlock.java
@@ -93,8 +93,6 @@
private Label fCounter;
- private LaunchValidationOperation fOperation;
-
private Button fValidateButton;
private HashMap<Object, String> levelColumnCache = new HashMap<>();
@@ -951,10 +949,8 @@
}
public void handleValidate() {
- if (fOperation == null) {
- fOperation = createValidationOperation();
- }
try {
+ LaunchValidationOperation fOperation = createValidationOperation();
fOperation.run(new NullProgressMonitor());
if (fDialog == null) {
@@ -998,7 +994,7 @@
}
}
- protected abstract LaunchValidationOperation createValidationOperation();
+ protected abstract LaunchValidationOperation createValidationOperation() throws CoreException;
/**
* called before the TreeView is refreshed. This allows any subclasses to cache
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
index b4760fc..c6bcc0a 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/FeatureBlock.java
@@ -334,17 +334,12 @@
}
private void handleValidate() {
- if (fOperation == null)
- // Unlike PluginBlock, we don't want to validate the application/product requirements because we will grab them automatically at launch time
- fOperation = new LaunchValidationOperation(fLaunchConfig) {
- @Override
- protected Set<IPluginModelBase> getModels() throws CoreException {
- // The feature block is used in both the OSGi config and Eclipse configs, use the tab id to determine which we are using
- boolean isOSGiTab = fTab.getId().equals(IPDELauncherConstants.TAB_BUNDLES_ID);
- return BundleLauncherHelper.getMergedBundleMap(fLaunchConfiguration, isOSGiTab).keySet();
- }
- };
try {
+ // The feature block is used in both the OSGi config and Eclipse configs, use the tab id to determine which we are using
+ boolean isOSGi = fTab.getId().equals(IPDELauncherConstants.TAB_BUNDLES_ID);
+ Set<IPluginModelBase> models = BundleLauncherHelper.getMergedBundleMap(fLaunchConfig, isOSGi).keySet();
+ // Unlike PluginBlock, we don't want to validate the application/product requirements because we will grab them automatically at launch time
+ LaunchValidationOperation fOperation = new LaunchValidationOperation(fLaunchConfig, models);
fOperation.run(new NullProgressMonitor());
if (fDialog == null) {
if (fOperation.hasErrors()) {
@@ -819,7 +814,6 @@
private ButtonSelectionListener fListener;
private AbstractLauncherTab fTab;
private CachedCheckboxTreeViewer fTree;
- private LaunchValidationOperation fOperation;
private ViewerFilter fSelectedOnlyFilter;
private boolean fIsDisposed = false;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
index 099e2ad..b91f27b 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/OSGiBundleBlock.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2021 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -15,11 +15,13 @@
package org.eclipse.pde.internal.ui.launcher;
import java.util.Map;
+import java.util.Set;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.pde.core.plugin.IPluginModelBase;
-import org.eclipse.pde.internal.launching.launcher.*;
+import org.eclipse.pde.internal.launching.launcher.BundleLauncherHelper;
+import org.eclipse.pde.internal.launching.launcher.LaunchValidationOperation;
import org.eclipse.pde.launching.IPDELauncherConstants;
import org.eclipse.pde.ui.launcher.BundlesTab;
@@ -78,8 +80,9 @@
}
@Override
- protected LaunchValidationOperation createValidationOperation() {
- return new OSGiValidationOperation(fLaunchConfiguration);
+ protected LaunchValidationOperation createValidationOperation() throws CoreException {
+ Set<IPluginModelBase> models = BundleLauncherHelper.getMergedBundleMap(fLaunchConfiguration, true).keySet();
+ return new LaunchValidationOperation(fLaunchConfiguration, models);
}
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
index 3d355a6..f501a43 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/launcher/PluginBlock.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2021 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -207,8 +207,9 @@
}
@Override
- protected LaunchValidationOperation createValidationOperation() {
- return new EclipsePluginValidationOperation(fLaunchConfig);
+ protected LaunchValidationOperation createValidationOperation() throws CoreException {
+ Set<IPluginModelBase> models = BundleLauncherHelper.getMergedBundleMap(fLaunchConfig, false).keySet();
+ return new EclipsePluginValidationOperation(fLaunchConfig, models);
}
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java
index cf36dde..f9da72b 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/ui/launcher/EquinoxLaunchConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2021 IBM Corporation and others.
+ * Copyright (c) 2005, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -174,7 +174,7 @@
@Override
protected void validatePluginDependencies(ILaunchConfiguration configuration, IProgressMonitor monitor) throws CoreException {
- OSGiValidationOperation op = new OSGiValidationOperation(configuration);
+ LaunchValidationOperation op = new LaunchValidationOperation(configuration, fModels.keySet());
LaunchPluginValidator.runValidationOperation(op, monitor);
}
diff --git a/ui/org.eclipse.pde.unittest.junit/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.unittest.junit/META-INF/MANIFEST.MF
index 4e60909..2f560d4 100644
--- a/ui/org.eclipse.pde.unittest.junit/META-INF/MANIFEST.MF
+++ b/ui/org.eclipse.pde.unittest.junit/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.pde.unittest.junit;singleton:=true
-Bundle-Version: 1.0.100.qualifier
+Bundle-Version: 1.0.200.qualifier
Bundle-Activator: org.eclipse.pde.unittest.junit.JUnitPluginTestPlugin
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %providerName
diff --git a/ui/org.eclipse.pde.unittest.junit/pom.xml b/ui/org.eclipse.pde.unittest.junit/pom.xml
index 8446734..48f48b2 100644
--- a/ui/org.eclipse.pde.unittest.junit/pom.xml
+++ b/ui/org.eclipse.pde.unittest.junit/pom.xml
@@ -18,7 +18,7 @@
<relativePath>../../</relativePath>
</parent>
<artifactId>org.eclipse.pde.unittest.junit</artifactId>
- <version>1.0.100-SNAPSHOT</version>
+ <version>1.0.200-SNAPSHOT</version>
<packaging>eclipse-plugin</packaging>
<properties>
<skipAPIAnalysis>true</skipAPIAnalysis>
diff --git a/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java b/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java
index 807e90a..bb8ed51 100644
--- a/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java
+++ b/ui/org.eclipse.pde.unittest.junit/src/org/eclipse/pde/unittest/junit/launcher/JUnitPluginLaunchConfigurationDelegate.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2021 Red Hat Inc. and others.
+ * Copyright (c) 2021, 2022 Red Hat Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -1248,7 +1248,7 @@
*/
protected void validatePluginDependencies(ILaunchConfiguration configuration, IProgressMonitor monitor)
throws CoreException {
- EclipsePluginValidationOperation op = new EclipsePluginValidationOperation(configuration);
+ EclipsePluginValidationOperation op = new EclipsePluginValidationOperation(configuration, fModels.keySet());
LaunchPluginValidator.runValidationOperation(op, monitor);
}
}