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;