When calculating package sources, if a module exports the package more than
once then we must include all corresponding capabilities. (FELIX-2035)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@925740 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java b/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
index da3cd6a..473d91e 100644
--- a/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
@@ -1309,9 +1309,23 @@
}
cycleMap.add(cap);
- Packages pkgs = modulePkgMap.get(cap.getModule());
- sources.add(cap);
+ // Get the package name associated with the capability.
String pkgName = cap.getAttribute(Capability.PACKAGE_ATTR).getValue().toString();
+
+ // Since a module can export the same package more than once, get
+ // all package capabilities for the specified package name.
+ List<Capability> caps = cap.getModule().getCapabilities();
+ for (int capIdx = 0; capIdx < caps.size(); capIdx++)
+ {
+ if (caps.get(capIdx).getNamespace().equals(Capability.PACKAGE_NAMESPACE)
+ && caps.get(capIdx).getAttribute(Capability.PACKAGE_ATTR).getValue().equals(pkgName))
+ {
+ sources.add(caps.get(capIdx));
+ }
+ }
+
+ // Then get any addition sources for the package from required bundles.
+ Packages pkgs = modulePkgMap.get(cap.getModule());
List<Blame> required = pkgs.m_requiredPkgs.get(pkgName);
if (required != null)
{