Skip to content

Commit 3cca022

Browse files
committed
Add version-range to bundle requirement when added through quick-fix
In the quick-fix to resolve compiler errors by adding requirements to bundles, add a version range that is restricted to the current minor up to but excluding the next major version. Currently the requirements are added without any version.
1 parent c775927 commit 3cca022

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/util/ManifestUtils.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.List;
2929
import java.util.Map;
3030
import java.util.Map.Entry;
31+
import java.util.Optional;
3132
import java.util.function.Consumer;
3233
import java.util.jar.Attributes;
3334
import java.util.jar.JarFile;
@@ -66,6 +67,8 @@
6667
import org.osgi.framework.Filter;
6768
import org.osgi.framework.FrameworkUtil;
6869
import org.osgi.framework.InvalidSyntaxException;
70+
import org.osgi.framework.Version;
71+
import org.osgi.framework.VersionRange;
6972
import org.osgi.framework.namespace.ExecutionEnvironmentNamespace;
7073
import org.osgi.resource.Namespace;
7174
import org.osgi.resource.Requirement;
@@ -396,6 +399,16 @@ public static void parseRequiredEEsFromFilter(String eeFilter, Consumer<String>
396399
}
397400
}
398401

402+
public static Optional<VersionRange> createConsumerRequirementRange(Version version) {
403+
if (version != null && !Version.emptyVersion.equals(version)) {
404+
return Optional.ofNullable(new VersionRange(VersionRange.LEFT_CLOSED, //
405+
new Version(version.getMajor(), version.getMinor(), 0), //
406+
new Version(version.getMajor() + 1, 0, 0), //
407+
VersionRange.RIGHT_OPEN));
408+
}
409+
return null;
410+
}
411+
399412
/**
400413
* Return the value of "Eclipse-SourceReferences" in MANIFEST.MF from the
401414
* given bundle.

ui/org.eclipse.pde.core/text/org/eclipse/pde/internal/core/text/bundle/ImportPackageObject.java

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,22 +24,16 @@
2424
import org.eclipse.pde.internal.core.PDEState;
2525
import org.eclipse.pde.internal.core.bundle.BundlePluginBase;
2626
import org.eclipse.pde.internal.core.ibundle.IBundleModel;
27+
import org.eclipse.pde.internal.core.util.ManifestUtils;
2728
import org.osgi.framework.Constants;
28-
import org.osgi.framework.Version;
2929
import org.osgi.framework.VersionRange;
3030

3131
public class ImportPackageObject extends PackageObject {
3232

3333
private static final long serialVersionUID = 1L;
3434

3535
private static String getVersion(ExportPackageDescription desc) {
36-
Version version = desc.getVersion();
37-
if (version != null && !Version.emptyVersion.equals(version)) {
38-
return new VersionRange(
39-
"[" + version.getMajor() + "." + version.getMinor() + "," + (version.getMajor() + 1) + ")") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$//$NON-NLS-4$
40-
.toString();
41-
}
42-
return null;
36+
return ManifestUtils.createConsumerRequirementRange(desc.getVersion()).map(VersionRange::toString).orElse(null);
4337
}
4438

4539
public ImportPackageObject(ManifestHeader header, ManifestElement element, String versionAttribute) {

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/correction/java/JavaResolutionFactory.java

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

1616
import java.text.MessageFormat;
1717
import java.util.Arrays;
18+
import java.util.Optional;
1819

1920
import org.eclipse.core.resources.IFile;
2021
import org.eclipse.core.resources.IProject;
@@ -51,6 +52,7 @@
5152
import org.eclipse.pde.internal.core.text.bundle.ExportPackageObject;
5253
import org.eclipse.pde.internal.core.text.bundle.ImportPackageHeader;
5354
import org.eclipse.pde.internal.core.text.bundle.ImportPackageObject;
55+
import org.eclipse.pde.internal.core.util.ManifestUtils;
5456
import org.eclipse.pde.internal.ui.PDEPlugin;
5557
import org.eclipse.pde.internal.ui.PDEPluginImages;
5658
import org.eclipse.pde.internal.ui.PDEUIMessages;
@@ -60,6 +62,7 @@
6062
import org.eclipse.swt.graphics.Point;
6163
import org.eclipse.text.edits.TextEdit;
6264
import org.osgi.framework.Constants;
65+
import org.osgi.framework.VersionRange;
6366

6467
/**
6568
* A factory class used to create resolutions for JDT problem markers which involve modifying a project's MANIFEST.MF (or possibly plugin.xml)
@@ -199,11 +202,18 @@ protected void modifyModel(IBaseModel model, IProgressMonitor monitor) throws Co
199202
}
200203
IPluginImport impt = base.getPluginFactory().createImport();
201204
impt.setId(pluginId);
205+
Optional<String> versionRange = ManifestUtils
206+
.createConsumerRequirementRange(requiredBundle.getVersion())
207+
.map(VersionRange::toString);
208+
if (versionRange.isPresent()) {
209+
impt.setVersion(versionRange.get());
210+
}
202211
base.getPluginBase().add(impt);
203212
} else {
204213
for (IPluginImport pluginImport : imports) {
205214
if (pluginImport.getId().equals(pluginId)) {
206215
base.getPluginBase().remove(pluginImport);
216+
// TODO: Consider version too!
207217
}
208218
}
209219
}

0 commit comments

Comments
 (0)