[FELIX-4914] Resolution problem with fragments and identity requirements

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1685100 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
index 2264826..7b08d04 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -1798,32 +1798,20 @@
                         if (!cand.getNamespace().startsWith("osgi.wiring.")
                             || !resource.equals(cand.getResource()))
                         {
-                            // If we don't already have wires for the candidate,
-                            // then recursively populate them.
-                            if (!rc.getWirings().containsKey(cand.getResource()))
-                            {
-                                // Need to special case the candidate for identity
-                                // capabilities since it may be from a fragment and
-                                // we don't want to populate wires for the fragment,
-                                // but rather the host to which it is attached.
-                                Resource targetCand = cand.getResource();
-                                if (IdentityNamespace.IDENTITY_NAMESPACE.equals(cand.getNamespace())
-                                    && Util.isFragment(targetCand))
-                                {
-                                    targetCand = allCandidates.getFirstCandidate(
-                                            targetCand.getRequirements(HostNamespace.HOST_NAMESPACE).get(0))
-                                            .getResource();
-                                    targetCand = allCandidates.getWrappedHost(targetCand);
-                                }
-
-                                populateWireMap(rc, targetCand,
+                            // Populate wires for the candidate
+                            populateWireMap(rc, cand.getResource(),
                                     resourcePkgMap, wireMap, allCandidates);
-                            }
 
+                            Resource provider;
+                            if (req.getNamespace().equals(IdentityNamespace.IDENTITY_NAMESPACE)) {
+                                provider = getDeclaredCapability(cand).getResource();
+                            } else {
+                                provider = getDeclaredResource(cand.getResource());
+                            }
                             Wire wire = new WireImpl(
                                 unwrappedResource,
                                 getDeclaredRequirement(req),
-                                getDeclaredResource(cand.getResource()),
+                                provider,
                                 getDeclaredCapability(cand));
                             if (req.getNamespace().equals(PackageNamespace.PACKAGE_NAMESPACE))
                             {
diff --git a/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java b/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
index e37d234..3f80ae3 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/WrappedResource.java
@@ -70,13 +70,7 @@
                 {
                     for (Capability cap : fragment.getCapabilities(namespace))
                     {
-                        // Filter out identity capabilities, since they
-                        // are not part of the fragment payload.
-                        if (!cap.getNamespace()
-                            .equals(IdentityNamespace.IDENTITY_NAMESPACE))
-                        {
-                            caps.add(new WrappedCapability(this,  cap));
-                        }
+                        caps.add(new WrappedCapability(this,  cap));
                     }
                 }
             }
diff --git a/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java b/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
index 043cb9a..6d6c4d2 100644
--- a/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
+++ b/resolver/src/test/java/org/apache/felix/resolver/test/FELIX_4914_Test.java
@@ -33,7 +33,6 @@
 import org.apache.felix.resolver.test.util.JsonReader;
 import org.apache.felix.resolver.test.util.ResolveContextImpl;
 import org.apache.felix.resolver.test.util.SimpleFilter;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.osgi.framework.BundleException;
 import org.osgi.framework.Constants;
@@ -47,7 +46,6 @@
 public class FELIX_4914_Test extends TestCase {
 
     @Test
-    @Ignore
     public void testResolution() throws Exception {
         BufferedReader reader = new BufferedReader(new InputStreamReader(getClass().getResourceAsStream("/felix-4914.json")));
         Map<String, Object> resolution = (Map<String, Object>) JsonReader.read(reader);