Bug 494228 - [patch] Plug-in manifest builder fails with
IllegalArgumentException when using wrong version syntax
Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java
index a225dad..2589c7a 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/builders/BundleErrorReporter.java
@@ -32,6 +32,7 @@
import org.eclipse.pde.internal.core.search.PluginJavaSearchUtil;
import org.eclipse.pde.internal.core.util.*;
import org.osgi.framework.*;
+import org.osgi.framework.VersionRange;
public class BundleErrorReporter extends JarManifestErrorReporter {
@@ -53,7 +54,8 @@
// be paranoid. something could have gone wrong reading the file etc.
if (fModel == null || !validateBundleSymbolicName())
return;
-
+ if (!validateVersionOfRequireBundle())
+ return;
BundleDescription desc = fModel.getBundleDescription();
if (desc == null && fModel.getInstallLocation() != null) {
// There was a problem creating the OSGi bundle description, possibly a bad header
@@ -182,6 +184,30 @@
return true;
}
+ /**
+ * @return boolean false if fatal
+ */
+ private boolean validateVersionOfRequireBundle() {
+ // check the version range of require bundle are ok
+ IHeader header = getHeader(Constants.REQUIRE_BUNDLE);
+ if (header == null)
+ return true;
+ ManifestElement[] required = header.getElements();
+ for (ManifestElement element : required) {
+ String versionRange = element.getAttribute(Constants.BUNDLE_VERSION_ATTRIBUTE);
+ if (versionRange != null) {
+ try {
+ new VersionRange(versionRange);
+ } catch (IllegalArgumentException e) {
+ report(e.getMessage(), getLine(header, element.getValue()), CompilerFlags.ERROR,
+ PDEMarkerFactory.CAT_FATAL);
+ return false;
+ }
+ }
+ }
+ return true;
+ }
+
private boolean validatePluginId(IHeader header, String value) {
if (!IdUtil.isValidCompositeID3_0(value)) {
String message = PDECoreMessages.BundleErrorReporter_InvalidSymbolicName;