When calculating resolved requirements, we must special case
fragments since they can have multiple wires for the same host
requirement, so we must avoid duplicates. (FELIX-2950)


git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1149732 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java b/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
index fd508a4..f17cfbc 100644
--- a/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/BundleWiringImpl.java
@@ -193,11 +193,17 @@
         // First add resolved requirements from wires.
         for (BundleWire bw : wires)
         {
-            reqList.add(bw.getRequirement());
-            if (bw.getRequirement().getNamespace().equals(BundleRevision.PACKAGE_NAMESPACE))
+            // Fragments may have multiple wires for the same requirement, so we
+            // need to check for and avoid duplicates in that case.
+            if (!bw.getRequirement().getNamespace().equals(BundleRevision.HOST_NAMESPACE)
+                || !reqList.contains(bw.getRequirement()))
             {
-                imports.add((String)
-                    bw.getCapability().getAttributes().get(BundleRevision.PACKAGE_NAMESPACE));
+                reqList.add(bw.getRequirement());
+                if (bw.getRequirement().getNamespace().equals(BundleRevision.PACKAGE_NAMESPACE))
+                {
+                    imports.add((String)
+                        bw.getCapability().getAttributes().get(BundleRevision.PACKAGE_NAMESPACE));
+                }
             }
         }
         // Next add dynamic requirements from host.
@@ -287,7 +293,6 @@
         }
         m_resolvedCaps = Collections.unmodifiableList(capList);
 
-
         List<R4Library> libList = (m_revision.getDeclaredNativeLibraries() == null)
             ? new ArrayList<R4Library>()
             : new ArrayList<R4Library>(m_revision.getDeclaredNativeLibraries());