Skip to content

Commit cc2fb8c

Browse files
author
Neha Burnwal
committed
Quick fix to add available version for Imported packages
1 parent 6a28c28 commit cc2fb8c

File tree

13 files changed

+129
-25
lines changed

13 files changed

+129
-25
lines changed

ui/org.eclipse.pde.core/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %name
44
Bundle-SymbolicName: org.eclipse.pde.core; singleton:=true
5-
Bundle-Version: 3.21.100.qualifier
5+
Bundle-Version: 3.21.200.qualifier
66
Bundle-Activator: org.eclipse.pde.internal.core.PDECore
77
Bundle-Vendor: %provider-name
88
Bundle-Localization: plugin

ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1517,7 +1517,11 @@ private void validateImportPackageVersion(IHeader header, ManifestElement elemen
15171517
String version = element.getAttribute(Constants.VERSION_ATTRIBUTE);
15181518
int severity = CompilerFlags.getFlag(fProject, CompilerFlags.P_MISSING_VERSION_IMP_PKG);
15191519
if (severity != CompilerFlags.IGNORE && version == null) {
1520-
VirtualMarker marker = report(NLS.bind(PDECoreMessages.BundleErrorReporter_MissingVersion, element.getValue()), getPackageLine(header, element), severity, PDEMarkerFactory.CAT_OTHER);
1520+
VirtualMarker marker = report(
1521+
NLS.bind(PDECoreMessages.BundleErrorReporter_MissingVersion, element.getValue()),
1522+
getPackageLine(header, element), severity, PDEMarkerFactory.M_MISSINGVERSION_IMPORT_PACKAGE,
1523+
PDEMarkerFactory.CAT_OTHER);
1524+
marker.setAttribute("bundleId", element.getValue()); //$NON-NLS-1$
15211525
addMarkerAttribute(marker,PDEMarkerFactory.compilerKey, CompilerFlags.P_MISSING_VERSION_IMP_PKG);
15221526
}
15231527
validateVersionAttribute(header, element, true);

ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/PDEMarkerFactory.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,8 @@ public class PDEMarkerFactory {
8080
public static final int M_SINGLETON_DIR_CHANGE = 0x1033; // other problem
8181
public static final int M_MISSINGVERSION_REQ_BUNDLE = 0x1034; // other
8282
// problem
83+
public static final int M_MISSINGVERSION_IMPORT_PACKAGE = 0x1035; // other
84+
// problem
8385

8486
// build properties fixes
8587
public static final int B_APPEND_SLASH_FOLDER_ENTRY = 0x2001;

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import java.util.List;
2929
import java.util.Map;
3030
import java.util.Map.Entry;
31-
import java.util.Optional;
3231
import java.util.function.Consumer;
3332
import java.util.jar.Attributes;
3433
import java.util.jar.JarFile;
@@ -67,8 +66,6 @@
6766
import org.osgi.framework.Filter;
6867
import org.osgi.framework.FrameworkUtil;
6968
import org.osgi.framework.InvalidSyntaxException;
70-
import org.osgi.framework.Version;
71-
import org.osgi.framework.VersionRange;
7269
import org.osgi.framework.namespace.ExecutionEnvironmentNamespace;
7370
import org.osgi.resource.Namespace;
7471
import org.osgi.resource.Requirement;
@@ -399,16 +396,6 @@ public static void parseRequiredEEsFromFilter(String eeFilter, Consumer<String>
399396
}
400397
}
401398

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 Optional.empty();
410-
}
411-
412399
/**
413400
* Return the value of "Eclipse-SourceReferences" in MANIFEST.MF from the
414401
* given bundle.

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
package org.eclipse.pde.internal.core.util;
1616

1717
import java.util.Comparator;
18+
import java.util.Optional;
1819

1920
import org.eclipse.core.runtime.IStatus;
2021
import org.eclipse.core.runtime.Status;
@@ -120,4 +121,14 @@ public static String computeInitialPluginVersion(String version) {
120121
return version;
121122
}
122123

124+
public static Optional<VersionRange> createConsumerRequirementRange(Version version) {
125+
if (version != null && !Version.emptyVersion.equals(version)) {
126+
return Optional.ofNullable(new VersionRange(VersionRange.LEFT_CLOSED, //
127+
new Version(version.getMajor(), version.getMinor(), 0), //
128+
new Version(version.getMajor() + 1, 0, 0), //
129+
VersionRange.RIGHT_OPEN));
130+
}
131+
return Optional.empty();
132+
}
133+
123134
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
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;
27+
import org.eclipse.pde.internal.core.util.VersionUtil;
2828
import org.osgi.framework.Constants;
2929
import org.osgi.framework.VersionRange;
3030

@@ -33,7 +33,7 @@ public class ImportPackageObject extends PackageObject {
3333
private static final long serialVersionUID = 1L;
3434

3535
private static String getVersion(ExportPackageDescription desc) {
36-
return ManifestUtils.createConsumerRequirementRange(desc.getVersion()).map(VersionRange::toString).orElse(null);
36+
return VersionUtil.createConsumerRequirementRange(desc.getVersion()).map(VersionRange::toString).orElse(null);
3737
}
3838

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

ui/org.eclipse.pde.ui/META-INF/MANIFEST.MF

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
22
Bundle-ManifestVersion: 2
33
Bundle-Name: %name
44
Bundle-SymbolicName: org.eclipse.pde.ui; singleton:=true
5-
Bundle-Version: 3.16.300.qualifier
5+
Bundle-Version: 3.16.400.qualifier
66
Bundle-Activator: org.eclipse.pde.internal.ui.PDEPlugin
77
Bundle-Vendor: %provider-name
88
Bundle-Localization: plugin

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/PDEUIMessages.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3444,6 +3444,6 @@ public class PDEUIMessages extends NLS {
34443444
public static String ProjectUpdateChange_convert_build_to_bnd;
34453445
public static String ProjectUpdateChange_set_pde_preference;
34463446

3447-
public static String AddMatchingVersion_RequireBundle;
3447+
public static String AddMatchingVersion;
34483448

34493449
}

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,6 +158,9 @@ public IMarkerResolution[] getNonConfigSevResolutions(IMarker marker) {
158158
case PDEMarkerFactory.M_NO_SPACE_AFTER_COLON:
159159
return new IMarkerResolution[] {
160160
new AddSpaceBeforeValue(AbstractPDEMarkerResolution.CREATE_TYPE, marker) };
161+
case PDEMarkerFactory.M_MISSINGVERSION_IMPORT_PACKAGE:
162+
return new IMarkerResolution[] {
163+
new VersionMatchImportPackageResolution(AbstractPDEMarkerResolution.CREATE_TYPE, marker) };
161164
}
162165
return NO_RESOLUTIONS;
163166
}
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*******************************************************************************
2+
* Copyright (c) 2025, 2025 IBM Corporation and others.
3+
*
4+
* This program and the accompanying materials
5+
* are made available under the terms of the Eclipse Public License 2.0
6+
* which accompanies this distribution, and is available at
7+
* https://www.eclipse.org/legal/epl-2.0/
8+
*
9+
* SPDX-License-Identifier: EPL-2.0
10+
*
11+
* Contributors:
12+
* IBM Corporation - initial API and implementation
13+
*******************************************************************************/
14+
15+
package org.eclipse.pde.internal.ui.correction;
16+
17+
import java.util.Objects;
18+
import java.util.Optional;
19+
20+
import org.eclipse.core.resources.IMarker;
21+
import org.eclipse.osgi.service.resolver.BundleDescription;
22+
import org.eclipse.osgi.service.resolver.ExportPackageDescription;
23+
import org.eclipse.pde.core.plugin.IPluginModelBase;
24+
import org.eclipse.pde.core.plugin.PluginRegistry;
25+
import org.eclipse.pde.internal.core.text.bundle.Bundle;
26+
import org.eclipse.pde.internal.core.text.bundle.BundleModel;
27+
import org.eclipse.pde.internal.core.text.bundle.ImportPackageHeader;
28+
import org.eclipse.pde.internal.core.text.bundle.ImportPackageObject;
29+
import org.eclipse.pde.internal.core.util.VersionUtil;
30+
import org.eclipse.pde.internal.ui.PDEUIMessages;
31+
import org.osgi.framework.Constants;
32+
import org.osgi.framework.Version;
33+
import org.osgi.framework.VersionRange;
34+
35+
/**
36+
* Resolution to add available matching version for Imported package in MANIFEST
37+
*/
38+
public class VersionMatchImportPackageResolution extends AbstractManifestMarkerResolution {
39+
40+
public VersionMatchImportPackageResolution(int type, IMarker marker) {
41+
super(type, marker);
42+
}
43+
44+
public Version getVersion(Object inputElement) {
45+
IPluginModelBase[] models = PluginRegistry.getActiveModels();
46+
for (IPluginModelBase pluginModel : models) {
47+
BundleDescription desc = pluginModel.getBundleDescription();
48+
49+
String id = desc == null ? null : desc.getSymbolicName();
50+
if (id == null) {
51+
continue;
52+
}
53+
ExportPackageDescription[] exported = desc.getExportPackages();
54+
for (ExportPackageDescription exportedPackage : exported) {
55+
String name = exportedPackage.getName();
56+
if (("java".equals(name) || name.startsWith("java."))) { //$NON-NLS-1$ //$NON-NLS-2$
57+
// $NON-NLS-2$
58+
continue;
59+
}
60+
if (name.equalsIgnoreCase(inputElement.toString())) {
61+
return exportedPackage.getVersion();
62+
}
63+
}
64+
}
65+
return null;
66+
}
67+
68+
@Override
69+
protected void createChange(BundleModel model) {
70+
String bundleId = Objects.requireNonNull(marker.getAttribute("bundleId", (String) null)); //$NON-NLS-1$
71+
Bundle bundle = (Bundle) model.getBundle();
72+
ImportPackageHeader header = (ImportPackageHeader) bundle.getManifestHeader(Constants.IMPORT_PACKAGE);
73+
if (header != null) {
74+
for (ImportPackageObject importPackage : header.getPackages()) {
75+
if (bundleId.equals(importPackage.getName())) {
76+
Version version = getVersion(bundleId);
77+
if (version != null) {
78+
// Sanitize version: Remove a potential qualifier
79+
Optional<VersionRange> versionRange = VersionUtil.createConsumerRequirementRange(version);
80+
importPackage.setVersion(versionRange.map(VersionRange::toString).orElse(null));
81+
}
82+
}
83+
}
84+
}
85+
}
86+
87+
@Override
88+
public String getLabel() {
89+
return PDEUIMessages.AddMatchingVersion;
90+
}
91+
92+
93+
}

0 commit comments

Comments
 (0)