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)
             {