Skip to content

Commit 7089fa0

Browse files
author
Neha Burnwal
committed
Quick fix to add available version for Imported packages
1 parent f39c5fd commit 7089fa0

File tree

8 files changed

+130
-5
lines changed

8 files changed

+130
-5
lines changed

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/VersionUtil.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,4 +120,14 @@ public static String computeInitialPluginVersion(String version) {
120120
return version;
121121
}
122122

123+
public static String computeInitialRequirementVersionRange(String version) {
124+
if (version != null && VersionUtil.validateVersion(version).isOK()) {
125+
Version pvi = Version.parseVersion(version);
126+
return new VersionRange(
127+
"[" + pvi.getMajor() + "." + pvi.getMinor() + "," + (pvi.getMajor() + 1) + ")") //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$//$NON-NLS-4$
128+
.toString();
129+
}
130+
return ""; //$NON-NLS-1$
131+
}
132+
123133
}

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: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
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.HashSet;
18+
import java.util.Objects;
19+
import java.util.Set;
20+
21+
import org.eclipse.core.resources.IMarker;
22+
import org.eclipse.osgi.service.resolver.BundleDescription;
23+
import org.eclipse.osgi.service.resolver.ExportPackageDescription;
24+
import org.eclipse.pde.core.plugin.IPluginModelBase;
25+
import org.eclipse.pde.core.plugin.PluginRegistry;
26+
import org.eclipse.pde.core.target.NameVersionDescriptor;
27+
import org.eclipse.pde.internal.core.text.bundle.Bundle;
28+
import org.eclipse.pde.internal.core.text.bundle.BundleModel;
29+
import org.eclipse.pde.internal.core.text.bundle.ImportPackageHeader;
30+
import org.eclipse.pde.internal.core.text.bundle.ImportPackageObject;
31+
import org.eclipse.pde.internal.core.text.bundle.ManifestHeader;
32+
import org.eclipse.pde.internal.core.text.bundle.PackageObject;
33+
import org.eclipse.pde.internal.core.util.VersionUtil;
34+
import org.eclipse.pde.internal.ui.PDEUIMessages;
35+
import org.osgi.framework.Constants;
36+
37+
/**
38+
* Resolution to add available matching version for Imported package in MANIFEST
39+
*/
40+
public class VersionMatchImportPackageResolution extends AbstractManifestMarkerResolution {
41+
42+
public VersionMatchImportPackageResolution(int type, IMarker marker) {
43+
super(type, marker);
44+
}
45+
46+
public String getVersion(Object inputElement) {
47+
IPluginModelBase[] models = PluginRegistry.getActiveModels();
48+
Set<NameVersionDescriptor> nameVersions = new HashSet<>();
49+
for (IPluginModelBase pluginModel : models) {
50+
BundleDescription desc = pluginModel.getBundleDescription();
51+
52+
String id = desc == null ? null : desc.getSymbolicName();
53+
if (id == null) {
54+
continue;
55+
}
56+
ExportPackageDescription[] exported = desc.getExportPackages();
57+
for (ExportPackageDescription exportedPackage : exported) {
58+
String name = exportedPackage.getName();
59+
if (("java".equals(name) || name.startsWith("java."))) { //$NON-NLS-1$ //$NON-NLS-2$
60+
// $NON-NLS-2$
61+
continue;
62+
}
63+
ManifestHeader mHeader = new ManifestHeader("Export-Package", "", //$NON-NLS-1$//$NON-NLS-2$
64+
new org.eclipse.pde.internal.core.bundle.Bundle(), "\n"); //$NON-NLS-1$
65+
PackageObject po = new PackageObject(mHeader, exportedPackage.getName(),
66+
exportedPackage.getVersion().toString(), "version"); //$NON-NLS-1$
67+
68+
NameVersionDescriptor nameVersion = new NameVersionDescriptor(exportedPackage.getName(),
69+
exportedPackage.getVersion().toString(), NameVersionDescriptor.TYPE_PACKAGE);
70+
exportedPackage.getExporter().getBundle();
71+
if (nameVersions.add(nameVersion)) {
72+
if (name.equalsIgnoreCase(inputElement.toString())) {
73+
return po.getVersion();
74+
}
75+
}
76+
}
77+
}
78+
return ""; //$NON-NLS-1$
79+
}
80+
81+
@Override
82+
protected void createChange(BundleModel model) {
83+
String bundleId = Objects.requireNonNull(marker.getAttribute("bundleId", (String) null)); //$NON-NLS-1$
84+
Bundle bundle = (Bundle) model.getBundle();
85+
ImportPackageHeader header = (ImportPackageHeader) bundle.getManifestHeader(Constants.IMPORT_PACKAGE);
86+
if (header != null) {
87+
for (ImportPackageObject importPackage : header.getPackages()) {
88+
if (bundleId.equals(importPackage.getName())) {
89+
String version = getVersion(bundleId);
90+
if (!version.isEmpty()) {
91+
// Sanitize version: Remove a potential qualifier
92+
String versionRange = VersionUtil.computeInitialRequirementVersionRange(version);
93+
importPackage.setVersion(versionRange);
94+
}
95+
}
96+
}
97+
}
98+
}
99+
100+
@Override
101+
public String getLabel() {
102+
return PDEUIMessages.AddMatchingVersion;
103+
}
104+
105+
106+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ protected void createChange(BundleModel model) {
4747
if (modelBase != null) {
4848
String version = modelBase.getPluginBase().getVersion();
4949
// Sanitize version: Remove a potential qualifier
50-
version = VersionUtil.computeInitialPluginVersion(version);
50+
version = VersionUtil.computeInitialRequirementVersionRange(version);
5151
requiredBundle.setVersion(version);
5252
}
5353
}
@@ -57,7 +57,7 @@ protected void createChange(BundleModel model) {
5757

5858
@Override
5959
public String getLabel() {
60-
return PDEUIMessages.AddMatchingVersion_RequireBundle;
60+
return PDEUIMessages.AddMatchingVersion;
6161
}
6262

6363
}

ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/pderesources.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1302,7 +1302,7 @@ UpdateClasspathResolution_label=Update the classpath and compliance settings
13021302
UpdateExecutionEnvironment_label=Update the execution environment based on JRE on the classpath
13031303
UpdateClasspathJob_task = Update classpaths...
13041304
UpdateClasspathJob_title = Updating Plug-in Classpaths
1305-
AddMatchingVersion_RequireBundle = Require latest available version
1305+
AddMatchingVersion = Require latest available version
13061306

13071307
RuntimeWorkbenchShortcut_title=Select Configuration
13081308
RuntimeWorkbenchShortcut_select_debug=Select a launch configuration to debug:

0 commit comments

Comments
 (0)