Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThomas Watson2012-04-25 18:28:14 +0000
committerThomas Watson2012-04-25 18:28:14 +0000
commit8cab5485f04d3173055f27a4e646df513c151310 (patch)
tree6ef1d276aa534209c4930c8c868ffce7096040e9 /bundles/org.eclipse.osgi/resolver
parentfac8a145e7f2578b725b273cda503c60648100dc (diff)
downloadrt.equinox.framework-8cab5485f04d3173055f27a4e646df513c151310.tar.gz
rt.equinox.framework-8cab5485f04d3173055f27a4e646df513c151310.tar.xz
rt.equinox.framework-8cab5485f04d3173055f27a4e646df513c151310.zip
Bug 377510 - Resolver gives false positives on conflicting constraintsv20120425-1828I20120426-1030I20120426-1000I20120426-0800I20120425-1600
from a fragment
Diffstat (limited to 'bundles/org.eclipse.osgi/resolver')
-rw-r--r--bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java8
-rw-r--r--bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java8
2 files changed, 14 insertions, 2 deletions
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
index 0e6f865d7..544ae47a9 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/module/ResolverBundle.java
@@ -448,7 +448,7 @@ public class ResolverBundle extends VersionSupplier implements Comparable<Resolv
for (int i = 0; i < newImports.length; i++) {
ResolverImport hostImport = getImport(newImports[i].getName());
ResolverExport resolvedExport = (ResolverExport) (hostImport == null ? null : hostImport.getSelectedSupplier());
- if ((resolvedExport == null && isResolved()) || (resolvedExport != null && !newImports[i].isSatisfiedBy(resolvedExport.getExportPackageDescription()))) {
+ if (importPackageConflict(resolvedExport, newImports[i])) {
result = true;
resolver.getState().addResolverError(fragment, ResolverError.FRAGMENT_CONFLICT, newImports[i].toString(), newImports[i]);
}
@@ -474,6 +474,12 @@ public class ResolverBundle extends VersionSupplier implements Comparable<Resolv
return result;
}
+ private boolean importPackageConflict(ResolverExport resolvedExport, ImportPackageSpecification newImport) {
+ if (resolvedExport == null)
+ return isResolved();
+ return !((ImportPackageSpecificationImpl) newImport).isSatisfiedBy(resolvedExport.getExportPackageDescription(), false);
+ }
+
private void setNewFragmentExports(boolean newFragmentExports) {
this.newFragmentExports = newFragmentExports;
}
diff --git a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
index 83a14b124..8d7a4371e 100644
--- a/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
+++ b/bundles/org.eclipse.osgi/resolver/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2003, 2011 IBM Corporation and others.
+ * Copyright (c) 2003, 2012 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -95,6 +95,10 @@ public class ImportPackageSpecificationImpl extends VersionConstraintImpl implem
}
public boolean isSatisfiedBy(BaseDescription supplier) {
+ return isSatisfiedBy(supplier, true);
+ }
+
+ public boolean isSatisfiedBy(BaseDescription supplier, boolean checkEE) {
if (!(supplier instanceof ExportPackageDescription))
return false;
ExportPackageDescriptionImpl pkgDes = (ExportPackageDescriptionImpl) supplier;
@@ -152,6 +156,8 @@ public class ImportPackageSpecificationImpl extends VersionConstraintImpl implem
if (!hasMandatoryAttributes(mandatory))
return false;
// finally check the ee index
+ if (!checkEE)
+ return true;
if (((BundleDescriptionImpl) getBundle()).getEquinoxEE() < 0)
return true;
int eeIndex = ((Integer) pkgDes.getDirective(ExportPackageDescriptionImpl.EQUINOX_EE)).intValue();

Back to the top