You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2010/03/21 09:24:41 UTC

svn commit: r925740 - /felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java

Author: rickhall
Date: Sun Mar 21 08:24:41 2010
New Revision: 925740

URL: http://svn.apache.org/viewvc?rev=925740&view=rev
Log:
When calculating package sources, if a module exports the package more than
once then we must include all corresponding capabilities. (FELIX-2035)

Modified:
    felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java

Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java?rev=925740&r1=925739&r2=925740&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java Sun Mar 21 08:24:41 2010
@@ -1309,9 +1309,23 @@ ex.printStackTrace();
             }
             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)
             {