diff --git a/ui/org.eclipse.pde.core/.settings/.api_filters b/ui/org.eclipse.pde.core/.settings/.api_filters index f26c3f1cfb..6afc70c004 100644 --- a/ui/org.eclipse.pde.core/.settings/.api_filters +++ b/ui/org.eclipse.pde.core/.settings/.api_filters @@ -1,5 +1,13 @@ + + + + + + + + diff --git a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF index 423c3028e1..3af6fd09f9 100644 --- a/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF +++ b/ui/org.eclipse.pde.core/META-INF/MANIFEST.MF @@ -2,7 +2,7 @@ Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %name Bundle-SymbolicName: org.eclipse.pde.core; singleton:=true -Bundle-Version: 3.18.0.qualifier +Bundle-Version: 3.19.0.qualifier Bundle-Activator: org.eclipse.pde.internal.core.PDECore Bundle-Vendor: %provider-name Bundle-Localization: plugin diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IMatchRules.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IMatchRules.java index 6c90d2b9c2..ec3fb8e041 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IMatchRules.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/IMatchRules.java @@ -23,6 +23,7 @@ * @noextend This interface is not intended to be extended by clients. */ public interface IMatchRules { + // TODO: convert this to enums? /** * No rule. */ diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java index 8764c950b8..278e589180 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/plugin/PluginRegistry.java @@ -15,19 +15,20 @@ import java.util.ArrayList; import java.util.List; +import java.util.function.Predicate; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.osgi.service.resolver.BundleDescription; -import org.eclipse.osgi.service.resolver.VersionRange; import org.eclipse.pde.core.build.IBuildModel; import org.eclipse.pde.internal.core.PDECore; import org.eclipse.pde.internal.core.build.WorkspaceBuildModel; import org.eclipse.pde.internal.core.project.PDEProject; import org.eclipse.pde.internal.core.util.VersionUtil; import org.osgi.framework.Version; +import org.osgi.framework.VersionRange; import org.osgi.resource.Resource; /** @@ -45,15 +46,21 @@ */ public class PluginRegistry { + private PluginRegistry() { // static use only + } + /** * Filter used when searching for plug-in models. *

* Clients may subclass this class to implement custom filters. *

- * @see PluginRegistry#findModel(String, String, int, PluginFilter) - * @see PluginRegistry#findModel(String, VersionRange, PluginFilter) + * + * @see PluginRegistry#findModel(String, String, int, Predicate) + * @see PluginRegistry#findModel(String, VersionRange, Predicate) * @since 3.6 + * @deprecated Instead use {@link Predicate} */ + @Deprecated(forRemoval = true, since = "3.19") public static class PluginFilter { /** @@ -79,6 +86,10 @@ public static ModelEntry findEntry(String id) { return PDECore.getDefault().getModelManager().findEntry(id); } + // TODO: use stream and optional and remove filters?! + // At least Stream instead of List to be consistent with the existing + // methods returning a single element + /** * Returns the plug-in model for the best match plug-in with the given ID. * A null value is returned if no such bundle is found in the workspace or target platform. @@ -274,10 +285,21 @@ public static IPluginModelBase[] getExternalModels() { * a plug-in filter or null * * @return a matching model or null + * @since 3.19 + */ + public static IPluginModelBase findModel(String id, String version, int match, Predicate filter) { + return getMax(findModels(id, version, match, filter)); + } + + /** + * @see #findModel(String, String, int, Predicate) * @since 3.6 + * @deprecated Instead use + * {@link #findModel(String, String, int, Predicate)} */ + @Deprecated(forRemoval = true, since = "3.19") public static IPluginModelBase findModel(String id, String version, int match, PluginFilter filter) { - return getMax(findModels(id, version, match, filter)); + return findModel(id, version, match, filter::accept); } /** @@ -298,9 +320,10 @@ public static IPluginModelBase findModel(String id, String version, int match, P * @param filter a plug-in filter or null * * @return a matching models, possibly an empty collection - * @since 3.6 + * @since 3.19 */ - public static IPluginModelBase[] findModels(String id, String version, int match, PluginFilter filter) { + public static List findModels(String id, String version, int match, + Predicate filter) { IPluginModelBase[] models = findModels(id); List results = new ArrayList<>(); for (IPluginModelBase model : models) { @@ -308,12 +331,25 @@ public static IPluginModelBase[] findModels(String id, String version, int match if (base == null || base.getId() == null) { continue; // guard against invalid plug-ins } - if ((filter == null || filter.accept(model)) + if ((filter == null || filter.test(model)) && (version == null || VersionUtil.compare(base.getVersion(), version, match))) { results.add(model); } } - return results.toArray(IPluginModelBase[]::new); + return List.copyOf(results); + } + // TODO: translate Version+Match kind into a VersionRange. Provide it as + // method for a IMatchRules enum? + + /** + * @see #findModels(String, String, int, Predicate) + * @since 3.6 + * @deprecated Instead use + * {@link #findModels(String, String, int, Predicate)} + */ + @Deprecated(forRemoval = true, since = "3.19") + public static IPluginModelBase[] findModels(String id, String version, int match, PluginFilter filter) { + return findModels(id, version, match, filter::accept).toArray(IPluginModelBase[]::new); } /** @@ -337,24 +373,36 @@ public static IPluginModelBase[] findModels(String id, String version, int match * @param filter a plug-in filter or null * * @return a matching model or null - * @since 3.6 + * @since 3.19 */ - public static IPluginModelBase findModel(String id, VersionRange range, PluginFilter filter) { + public static IPluginModelBase findModel(String id, VersionRange range, Predicate filter) { return getMax(findModels(id, range, filter)); } + /** + * @see #findModel(String, VersionRange, Predicate) + * @since 3.6 + * @deprecated Instead use + * {@link #findModel(String, VersionRange, Predicate)} + */ + @Deprecated(forRemoval = true, since = "3.19") + public static IPluginModelBase findModel(String id, org.eclipse.osgi.service.resolver.VersionRange range, + PluginFilter filter) { + return findModel(id, range, filter::accept); + } + /** * Returns the plug-in with the highest version, or null if empty. * * @param models models * @return plug-in with the highest version or null */ - private static IPluginModelBase getMax(IPluginModelBase[] models) { - if (models.length == 0) { + private static IPluginModelBase getMax(List models) { + if (models.isEmpty()) { return null; } - if (models.length == 1) { - return models[0]; + if (models.size() == 1) { + return models.get(0); } IPluginModelBase max = null; Version maxV = null; @@ -389,21 +437,33 @@ private static IPluginModelBase getMax(IPluginModelBase[] models) { * @param filter a plug-in filter or null * * @return a matching models, possibly empty - * @since 3.6 + * @since 3.19 */ - public static IPluginModelBase[] findModels(String id, VersionRange range, PluginFilter filter) { + public static List findModels(String id, VersionRange range, Predicate filter) { IPluginModelBase[] models = findModels(id); List results = new ArrayList<>(); for (IPluginModelBase model : models) { - if (filter == null || filter.accept(model)) { + if (filter == null || filter.test(model)) { String versionStr = model.getPluginBase().getVersion(); Version version = VersionUtil.validateVersion(versionStr).isOK() ? new Version(versionStr) : Version.emptyVersion; - if (range == null || range.isIncluded(version)) { + if (range == null || range.includes(version)) { results.add(model); } } } - return results.toArray(IPluginModelBase[]::new); + return List.copyOf(results); + } + + /** + * @see #findModels(String, VersionRange, Predicate) + * @since 3.6 + * @deprecated Instead use + * {@link #findModels(String, VersionRange, Predicate)} + */ + @Deprecated(forRemoval = true, since = "3.19") + public static IPluginModelBase[] findModels(String id, org.eclipse.osgi.service.resolver.VersionRange range, + PluginFilter filter) { + return findModels(id, range, filter::accept).toArray(IPluginModelBase[]::new); } private static IPluginModelBase[] findModels(String id) { diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java index 91cf03579f..3ce0620aab 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IBundleProjectService.java @@ -17,8 +17,8 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.ServiceCaller; -import org.eclipse.osgi.service.resolver.VersionRange; import org.osgi.framework.Version; +import org.osgi.framework.VersionRange; /** * Service used to create and configure bundle project descriptions. @@ -55,9 +55,18 @@ public interface IBundleProjectService { * @param name symbolic name of the host * @param range version constraint or null * @return host description + * @since 3.19 */ IHostDescription newHost(String name, VersionRange range); + /** + * @deprecated Instead use {@link #newHost(String, VersionRange)} + */ + @Deprecated(forRemoval = true, since = "4.19") + default IHostDescription newHost(String name, org.eclipse.osgi.service.resolver.VersionRange range) { + return newHost(name, (VersionRange) range); + } + /** * Creates and returns a new package import description. * @@ -65,9 +74,20 @@ public interface IBundleProjectService { * @param range version constraint or null * @param optional whether the import is optional * @return package import description + * @since 3.19 */ IPackageImportDescription newPackageImport(String name, VersionRange range, boolean optional); + /** + * @deprecated Instead use + * {@link #newPackageImport(String, VersionRange, boolean)} + */ + @Deprecated(forRemoval = true, since = "4.19") + default IPackageImportDescription newPackageImport(String name, + org.eclipse.osgi.service.resolver.VersionRange range, boolean optional) { + return newPackageImport(name, (VersionRange) range, optional); + } + /** * Constructs a new package export description. * @@ -88,9 +108,20 @@ public interface IBundleProjectService { * @param optional whether the required bundle is optional * @param export whether the required bundle is re-exported * @return required bundle description + * @since 3.19 */ IRequiredBundleDescription newRequiredBundle(String name, VersionRange range, boolean optional, boolean export); + /** + * @deprecated Instead use + * {@link #newRequiredBundle(String, VersionRange, boolean, boolean)} + */ + @Deprecated(forRemoval = true, since = "4.19") + default IRequiredBundleDescription newRequiredBundle(String name, + org.eclipse.osgi.service.resolver.VersionRange range, boolean optional, boolean export) { + return newRequiredBundle(name, range, optional, export); + } + /** * Creates and returns a new bundle classpath entry defining the relationship * between a source, binaries, and library on the Bundle-Classpath header. diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IHostDescription.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IHostDescription.java index 73e5bd9a85..fbc2dd45cc 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IHostDescription.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IHostDescription.java @@ -13,7 +13,7 @@ *******************************************************************************/ package org.eclipse.pde.core.project; -import org.eclipse.osgi.service.resolver.VersionRange; +import org.osgi.framework.VersionRange; /** * Describes a fragment host. Instances of this class can be created @@ -30,14 +30,25 @@ public interface IHostDescription { * * @return symbolic name of the host */ - public String getName(); + String getName(); /** * Returns the version constraint of the host or null * if unspecified. * * @return version constraint or null + * @since 3.19 */ - public VersionRange getVersionRange(); + VersionRange getVersion(); + // TODO: alternatively name it getHostVersion() + + /** + * @deprecated Instead use {@link #getVersion()} + */ + @Deprecated(forRemoval = true, since = "4.19") + default org.eclipse.osgi.service.resolver.VersionRange getVersionRange() { + VersionRange version = getVersion(); + return version != null ? new org.eclipse.osgi.service.resolver.VersionRange(version.toString()) : null; + } } diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IPackageImportDescription.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IPackageImportDescription.java index 540927ef60..e75a02b7d6 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IPackageImportDescription.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IPackageImportDescription.java @@ -13,7 +13,7 @@ *******************************************************************************/ package org.eclipse.pde.core.project; -import org.eclipse.osgi.service.resolver.VersionRange; +import org.osgi.framework.VersionRange; /** * Describes a package import. Instances of this class can be created @@ -30,21 +30,31 @@ public interface IPackageImportDescription { * * @return fully qualified name of the imported package */ - public String getName(); + String getName(); /** * Returns the version constraint of the imported package or null * if unspecified. * * @return version constraint or null + * @since 3.19 */ - public VersionRange getVersionRange(); + VersionRange getVersion(); + + /** + * @deprecated Instead use {@link #getVersion()} + */ + @Deprecated(forRemoval = true, since = "4.19") + default org.eclipse.osgi.service.resolver.VersionRange getVersionRange() { + VersionRange version = getVersion(); + return version != null ? new org.eclipse.osgi.service.resolver.VersionRange(version.toString()) : null; + } /** * Returns whether the package import is optional. * * @return whether optional */ - public boolean isOptional(); + boolean isOptional(); } diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IRequiredBundleDescription.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IRequiredBundleDescription.java index 97412d6746..821d6db340 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IRequiredBundleDescription.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/core/project/IRequiredBundleDescription.java @@ -13,7 +13,7 @@ *******************************************************************************/ package org.eclipse.pde.core.project; -import org.eclipse.osgi.service.resolver.VersionRange; +import org.osgi.framework.VersionRange; /** * Describes a required bundle. Instances of this class can be created @@ -30,28 +30,38 @@ public interface IRequiredBundleDescription { * * @return symbolic name of the required bundle */ - public String getName(); + String getName(); /** * Returns the version constraint of the required bundle or null * if unspecified. * * @return version constraint or null + * @since 3.19 */ - public VersionRange getVersionRange(); + VersionRange getVersion(); + + /** + * @deprecated Instead use {@link #getVersion()} + */ + @Deprecated(forRemoval = true, since = "4.19") + default org.eclipse.osgi.service.resolver.VersionRange getVersionRange() { + VersionRange version = getVersion(); + return version != null ? new org.eclipse.osgi.service.resolver.VersionRange(version.toString()) : null; + } /** * Returns whether the required bundle is re-exported. * * @return whether re-exported */ - public boolean isExported(); + boolean isExported(); /** * Returns whether the required bundle is optional. * * @return whether optional */ - public boolean isOptional(); + boolean isOptional(); } diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java index b96231e060..e090d76d39 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/feature/FeatureImport.java @@ -14,6 +14,7 @@ package org.eclipse.pde.internal.core.feature; import java.io.PrintWriter; +import java.util.function.Predicate; import org.eclipse.core.runtime.CoreException; import org.eclipse.pde.core.plugin.IPlugin; @@ -36,7 +37,7 @@ public class FeatureImport extends VersionableObject implements IFeatureImport { public IPlugin getPlugin() { if (id != null && fType == PLUGIN) { - IPluginModelBase model = PluginRegistry.findModel(id, version, fMatch, null); + IPluginModelBase model = PluginRegistry.findModel(id, version, fMatch, (Predicate) null); return model instanceof IPluginModel ? ((IPluginModel) model).getPlugin() : null; } return null; diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/ImportObject.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/ImportObject.java index a3a4296e74..dfc6b01707 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/ImportObject.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/plugin/ImportObject.java @@ -15,6 +15,7 @@ import java.io.PrintWriter; import java.io.Serializable; +import java.util.function.Predicate; import org.eclipse.osgi.service.resolver.VersionRange; import org.eclipse.pde.core.ISourceObject; @@ -89,7 +90,7 @@ public void writeDelimeter(PrintWriter writer) { protected IPluginModelBase findModel() { String version = iimport.getVersion(); VersionRange range = new VersionRange(version); - return PluginRegistry.findModel(getId(), range, null); + return PluginRegistry.findModel(getId(), range, (Predicate) null); } } diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java index 5f6992ba9d..62052a69ee 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/BundleProjectService.java @@ -32,7 +32,6 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Status; -import org.eclipse.osgi.service.resolver.VersionRange; import org.eclipse.osgi.util.ManifestElement; import org.eclipse.osgi.util.NLS; import org.eclipse.pde.core.plugin.IPluginModelBase; @@ -50,6 +49,7 @@ import org.eclipse.team.core.importing.provisional.IBundleImporter; import org.osgi.framework.BundleException; import org.osgi.framework.Version; +import org.osgi.framework.VersionRange; /** * Factory class for creating bundle project descriptions and associated artifacts. diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/HostDescriptoin.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/HostDescriptoin.java index 0939b35ad5..95c2ed497a 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/HostDescriptoin.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/HostDescriptoin.java @@ -13,8 +13,8 @@ *******************************************************************************/ package org.eclipse.pde.internal.core.project; -import org.eclipse.osgi.service.resolver.VersionRange; import org.eclipse.pde.core.project.IHostDescription; +import org.osgi.framework.VersionRange; /** * Describes a host diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/PackageImportDescription.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/PackageImportDescription.java index 59ee7a0259..cb8a886039 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/PackageImportDescription.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/PackageImportDescription.java @@ -13,8 +13,8 @@ *******************************************************************************/ package org.eclipse.pde.internal.core.project; -import org.eclipse.osgi.service.resolver.VersionRange; import org.eclipse.pde.core.project.IPackageImportDescription; +import org.osgi.framework.VersionRange; /** * Describes a package import diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequiredBundleDescription.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequiredBundleDescription.java index a48c3266be..791fedd0ce 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequiredBundleDescription.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequiredBundleDescription.java @@ -13,8 +13,8 @@ *******************************************************************************/ package org.eclipse.pde.internal.core.project; -import org.eclipse.osgi.service.resolver.VersionRange; import org.eclipse.pde.core.project.IRequiredBundleDescription; +import org.osgi.framework.VersionRange; /** * Describes a required bundle. diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequirementSpecification.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequirementSpecification.java index 9b02f94088..d74779d4a0 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequirementSpecification.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/project/RequirementSpecification.java @@ -13,7 +13,9 @@ *******************************************************************************/ package org.eclipse.pde.internal.core.project; -import org.eclipse.osgi.service.resolver.VersionRange; +import java.util.Objects; + +import org.osgi.framework.VersionRange; /** * Common implementation for a requirement specification - host, required bundle, @@ -40,7 +42,7 @@ public String getName() { return fName; } - public VersionRange getVersionRange() { + public VersionRange getVersion() { return fRange; } @@ -50,10 +52,9 @@ public boolean isExported() { @Override public boolean equals(Object obj) { - if (obj instanceof RequirementSpecification spec) { - return getName().equals(spec.getName()) && isExported() == spec.isExported() && isOptional() == spec.isOptional() && equalOrNull(getVersionRange(), spec.getVersionRange()); - } - return false; + return obj instanceof RequirementSpecification spec // + && getName().equals(spec.getName()) && isExported() == spec.isExported() + && isOptional() == spec.isOptional() && Objects.equals(getVersion(), spec.getVersion()); } @Override @@ -71,13 +72,6 @@ public int hashCode() { return code; } - private boolean equalOrNull(Object o1, Object o2) { - if (o1 == null) { - return o2 == null; - } - return o1.equals(o2); - } - public boolean isOptional() { return fOptional; } diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/search/PluginJavaSearchUtil.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/search/PluginJavaSearchUtil.java index f67e02b996..85da9ee792 100644 --- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/search/PluginJavaSearchUtil.java +++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/search/PluginJavaSearchUtil.java @@ -17,6 +17,7 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.List; +import java.util.function.Predicate; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -44,7 +45,7 @@ public class PluginJavaSearchUtil { public static IPluginModelBase[] getPluginImports(IPluginImport dep) { HashSet set = new HashSet<>(); VersionRange range = new VersionRange(dep.getVersion()); - collectAllPrerequisites(PluginRegistry.findModel(dep.getId(), range, null), set); + collectAllPrerequisites(PluginRegistry.findModel(dep.getId(), range, (Predicate) null), set); return set.toArray(new IPluginModelBase[set.size()]); } diff --git a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/PluginRegistryTests.java b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/PluginRegistryTests.java index 32d32468b2..408005f371 100644 --- a/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/PluginRegistryTests.java +++ b/ui/org.eclipse.pde.ui.tests/src/org/eclipse/pde/ui/tests/project/PluginRegistryTests.java @@ -17,6 +17,9 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import java.util.List; +import java.util.function.Predicate; + import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; @@ -27,7 +30,6 @@ import org.eclipse.pde.core.plugin.IPluginBase; import org.eclipse.pde.core.plugin.IPluginModelBase; import org.eclipse.pde.core.plugin.PluginRegistry; -import org.eclipse.pde.core.plugin.PluginRegistry.PluginFilter; import org.eclipse.pde.core.project.IBundleProjectDescription; import org.junit.Test; import org.osgi.framework.FrameworkUtil; @@ -42,7 +44,8 @@ public class PluginRegistryTests { @Test public void testMatchNone() { - IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", null, IMatchRules.NONE, null); + IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", null, IMatchRules.NONE, + (Predicate) null); assertNotNull(model); assertEquals("org.eclipse.jdt.debug", model.getPluginBase().getId()); } @@ -50,21 +53,22 @@ public void testMatchNone() { @Test public void testMatchGreaterOrEqual() { IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", "3.0.0", - IMatchRules.GREATER_OR_EQUAL, null); + IMatchRules.GREATER_OR_EQUAL, (Predicate) null); assertNotNull(model); assertEquals("org.eclipse.jdt.debug", model.getPluginBase().getId()); } @Test public void testMatchPerfect() { - IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", "3.0.0", IMatchRules.PERFECT, null); + IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", "3.0.0", IMatchRules.PERFECT, + (Predicate) null); assertNull(model); } @Test public void testMatchCompatible() { IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", "3.6.0", IMatchRules.COMPATIBLE, - null); + (Predicate) null); assertNotNull(model); assertEquals("org.eclipse.jdt.debug", model.getPluginBase().getId()); } @@ -72,20 +76,22 @@ public void testMatchCompatible() { @Test public void testMatchCompatibleNone() { IPluginModelBase model = PluginRegistry.findModel("org.eclipse.pde.core", "2.6.0", IMatchRules.COMPATIBLE, - null); + (Predicate) null); assertNull(model); } @Test public void testMatchPrefix() { - IPluginModelBase model = PluginRegistry.findModel("org.eclipse", "3.6.0", IMatchRules.PREFIX, null); + IPluginModelBase model = PluginRegistry.findModel("org.eclipse", "3.6.0", IMatchRules.PREFIX, + (Predicate) null); // prefix rule is not supported by this API, should return null assertNull(model); } @Test public void testRangeNone() { - IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", null, null); + IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", null, + (Predicate) null); assertNotNull(model); assertEquals("org.eclipse.jdt.debug", model.getPluginBase().getId()); } @@ -93,14 +99,15 @@ public void testRangeNone() { @Test public void testOverlapRange() { IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", new VersionRange("[2.0.0,4.0.0)"), - null); + (Predicate) null); assertNotNull(model); assertEquals("org.eclipse.jdt.debug", model.getPluginBase().getId()); } @Test public void testMinRange() { - IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", new VersionRange("3.0.0"), null); + IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", new VersionRange("3.0.0"), + (Predicate) null); assertNotNull(model); assertEquals("org.eclipse.jdt.debug", model.getPluginBase().getId()); } @@ -108,58 +115,50 @@ public void testMinRange() { @Test public void testUnmatchedRange() { IPluginModelBase model = PluginRegistry.findModel("org.eclipse.pde.core", new VersionRange("[1.0.0,2.0.0)"), - null); + (Predicate) null); assertNull(model); } @Test public void testRangeWithFilterMatch() { - PluginFilter filter = new PluginFilter() { - @Override - public boolean accept(IPluginModelBase model) { - IPluginBase base = model.getPluginBase(); - if (base != null) { - String id = base.getId(); - if (id != null) { - return id.startsWith("org.eclipse"); - } - } - return false; - } - }; IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", new VersionRange("[2.0.0,4.0.0)"), - filter); + m -> { + IPluginBase base = m.getPluginBase(); + if (base != null) { + String id = base.getId(); + if (id != null) { + return id.startsWith("org.eclipse"); + } + } + return false; + }); assertNotNull(model); assertEquals("org.eclipse.jdt.debug", model.getPluginBase().getId()); } @Test public void testRangeWithFilterNoMatch() { - PluginFilter filter = new PluginFilter() { - @Override - public boolean accept(IPluginModelBase model) { - IPluginBase base = model.getPluginBase(); - if (base != null) { - String id = base.getId(); - if (id != null) { - return id.startsWith("xyz"); - } - } - return false; - } - }; IPluginModelBase model = PluginRegistry.findModel("org.eclipse.jdt.debug", new VersionRange("[2.0.0,4.0.0)"), - filter); + m -> { + IPluginBase base = m.getPluginBase(); + if (base != null) { + String id = base.getId(); + if (id != null) { + return id.startsWith("xyz"); + } + } + return false; + }); assertNull(model); } @Test public void testSingleRangeMatch() { - IPluginModelBase[] models = PluginRegistry.findModels("org.eclipse.jdt.debug", - new VersionRange("[1.0.0,4.0.0)"), null); + List models = PluginRegistry.findModels("org.eclipse.jdt.debug", + new VersionRange("[1.0.0,4.0.0)"), (Predicate) null); assertNotNull(models); - assertEquals(1, models.length); - assertEquals("org.eclipse.jdt.debug", models[0].getPluginBase().getId()); + assertEquals(1, models.size()); + assertEquals("org.eclipse.jdt.debug", models.get(0).getPluginBase().getId()); } @Test @@ -175,11 +174,12 @@ public void testWorkspaceOverTarget() throws CoreException { waitForBuild(); - IPluginModelBase[] models = PluginRegistry.findModels("org.junit", new VersionRange("[3.8.2,4.8.2]"), null); + List models = PluginRegistry.findModels("org.junit", new VersionRange("[3.8.2,4.8.2]"), + (Predicate) null); assertNotNull(models); - assertEquals(1, models.length); - assertEquals("org.junit", models[0].getPluginBase().getId()); - assertEquals(project, models[0].getUnderlyingResource().getProject()); + assertEquals(1, models.size()); + assertEquals("org.junit", models.get(0).getPluginBase().getId()); + assertEquals(project, models.get(0).getUnderlyingResource().getProject()); } finally { if (project.exists()) { @@ -194,8 +194,7 @@ public void testMatchEquivalent() { Version testsVersion = FrameworkUtil.getBundle(PluginRegistryTests.class).getVersion(); IPluginModelBase model = PluginRegistry.findModel("org.eclipse.pde.ui.tests", String.format("%s.%s.%s", testsVersion.getMajor(), testsVersion.getMinor(), testsVersion.getMicro()), - IMatchRules.EQUIVALENT, - null); + IMatchRules.EQUIVALENT, (Predicate) null); assertNotNull("NOTE: This test might also fail because the version of the bundle got changed.", model); assertEquals("org.eclipse.pde.ui.tests", model.getPluginBase().getId()); } diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java index 4f29c9b8ed..2e1c797676 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDELabelProvider.java @@ -17,6 +17,7 @@ package org.eclipse.pde.internal.ui; import java.util.Locale; +import java.util.function.Predicate; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -385,7 +386,8 @@ public String getObjectText(ISiteFeature obj) { } public String getObjectText(ISiteBundle obj) { - IPluginModelBase modelBase = PluginRegistry.findModel(obj.getId(), obj.getVersion(), IMatchRules.COMPATIBLE, null); + IPluginModelBase modelBase = PluginRegistry.findModel(obj.getId(), obj.getVersion(), IMatchRules.COMPATIBLE, + (Predicate) null); if (modelBase != null) return getObjectText(modelBase.getPluginBase()); return preventNull(obj.getId()); diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryLabelProvider.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryLabelProvider.java index c68b13f057..e1c3f195c7 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryLabelProvider.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/category/CategoryLabelProvider.java @@ -16,9 +16,9 @@ ******************************************************************************/ package org.eclipse.pde.internal.ui.editor.category; +import java.util.function.Predicate; import org.eclipse.jface.viewers.LabelProvider; -import org.eclipse.pde.core.plugin.IMatchRules; -import org.eclipse.pde.core.plugin.PluginRegistry; +import org.eclipse.pde.core.plugin.*; import org.eclipse.pde.internal.core.PDECore; import org.eclipse.pde.internal.core.isite.ISiteBundle; import org.eclipse.pde.internal.core.isite.ISiteCategoryDefinition; @@ -65,7 +65,7 @@ public Image getImage(Object element) { } if (element instanceof SiteBundleAdapter) { ISiteBundle bundle = ((SiteBundleAdapter) element).bundle; - if (PluginRegistry.findModel(bundle.getId(), bundle.getVersion(), IMatchRules.COMPATIBLE, null) == null) { + if (PluginRegistry.findModel(bundle.getId(), bundle.getVersion(), IMatchRules.COMPATIBLE, (Predicate) null) == null) { return this.fMissingSiteBundleImage; } return this.fSiteBundleImage; diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginSection.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginSection.java index ab92f75ba5..9120567d8c 100644 --- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginSection.java +++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/editor/product/PluginSection.java @@ -27,6 +27,7 @@ import java.util.Objects; import java.util.Set; import java.util.function.Consumer; +import java.util.function.Predicate; import java.util.stream.Stream; import org.eclipse.core.resources.IFile; @@ -217,7 +218,8 @@ public static void handleAddRequired(IProductPlugin[] plugins, boolean includeOp } List list = Stream.of(plugins).map(plugin -> { String version = VersionUtil.isEmptyVersion(plugin.getVersion()) ? null : plugin.getVersion(); - return PluginRegistry.findModel(plugin.getId(), version, IMatchRules.PERFECT, null); + return PluginRegistry.findModel(plugin.getId(), version, IMatchRules.PERFECT, + (Predicate) null); }).filter(Objects::nonNull).map(IPluginModelBase::getBundleDescription).toList(); DependencyManager.Options[] options = includeOptional 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 482f291377..2d55b7b8db 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 @@ -33,6 +33,7 @@ import java.util.Optional; import java.util.Queue; import java.util.Set; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -364,7 +365,8 @@ private static void addFeaturePlugins(IFeature feature, Set la if (id == null || version == null) { continue; } - IPluginModelBase model = PluginRegistry.findModel(id, version, IMatchRules.EQUIVALENT, null); + IPluginModelBase model = PluginRegistry.findModel(id, version, IMatchRules.EQUIVALENT, + (Predicate) null); if (model == null) { model = PluginRegistry.findModel(id); }