Modified the resolver to sort candidates when resolving require-bundle
dependencies. (FELIX-775)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@704956 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java b/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
index 1116c83..1179a9a 100755
--- a/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
+++ b/framework/src/main/java/org/apache/felix/framework/searchpolicy/R4SearchPolicyCore.java
@@ -901,8 +901,8 @@
synchronized (m_factory)
{
PackageSource[] candidates = m_emptySources;
- if (req.getNamespace().equals(ICapability.PACKAGE_NAMESPACE) &&
- (((Requirement) req).getPackageName() != null))
+ if (req.getNamespace().equals(ICapability.PACKAGE_NAMESPACE)
+ && (((Requirement) req).getPackageName() != null))
{
String pkgName = ((Requirement) req).getPackageName();
IModule[] modules = (IModule[]) m_resolvedPkgIndexMap.get(pkgName);
@@ -3126,11 +3126,23 @@
{
PackageSource ps = (PackageSource) o;
+ Version thisVersion = null;
+ Version version = null;
if (m_capability.getNamespace().equals(ICapability.PACKAGE_NAMESPACE))
{
- Version thisVersion = ((Capability) m_capability).getPackageVersion();
- Version version = ((Capability) ps.m_capability).getPackageVersion();
+ thisVersion = ((Capability) m_capability).getPackageVersion();
+ version = ((Capability) ps.m_capability).getPackageVersion();
+ }
+ else if (m_capability.getNamespace().equals(ICapability.MODULE_NAMESPACE))
+ {
+ thisVersion = (Version)
+ m_capability.getProperties().get(Constants.BUNDLE_VERSION_ATTRIBUTE);
+ version = (Version)
+ ps.m_capability.getProperties().get(Constants.BUNDLE_VERSION_ATTRIBUTE);
+ }
+ if ((thisVersion != null) && (version != null))
+ {
// Sort in reverse version order.
int cmp = thisVersion.compareTo(version);
if (cmp < 0)
@@ -3550,4 +3562,4 @@
return sb.toString();
}
-}
\ No newline at end of file
+}