[FELIX-4495] Fix possible NPE when trying to resolve a single bundle which is an already resolved fragment

git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1667218 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 780d496..381240b 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -197,15 +197,14 @@
                 // If a populated resource is a fragment, then its host
                 // must ultimately be verified, so store its host requirement
                 // to use for package space calculation.
-                Map<Resource, List<Requirement>> hostReqs =
-                    new HashMap<Resource, List<Requirement>>();
+                Map<Resource, Requirement> hostReqs = new HashMap<Resource, Requirement>();
                 for (Resource resource : allResources)
                 {
                     if (Util.isFragment(resource))
                     {
                         hostReqs.put(
                             resource,
-                            resource.getRequirements(HostNamespace.HOST_NAMESPACE));
+                            resource.getRequirements(HostNamespace.HOST_NAMESPACE).get(0));
                     }
                 }
 
@@ -260,10 +259,18 @@
 
                         // If we are resolving a fragment, then get its
                         // host candidate and verify it instead.
-                        List<Requirement> hostReq = hostReqs.get(resource);
+                        Requirement hostReq = hostReqs.get(resource);
                         if (hostReq != null)
                         {
-                            target = allCandidates.getFirstCandidate(hostReq.get(0)).getResource();
+                            Capability hostCap = allCandidates.getFirstCandidate(hostReq);
+                            // If the resource is an already resolved fragment and can not
+                            // be attached to new hosts, there will be no matching host,
+                            // so ignore this resource
+                            if (hostCap == null)
+                            {
+                                continue;
+                            }
+                            target = hostCap.getResource();
                         }
 
                         calculatePackageSpaces(
@@ -366,10 +373,18 @@
 
                         // If we are resolving a fragment, then we
                         // actually want to populate its host's wires.
-                        List<Requirement> hostReq = hostReqs.get(resource);
+                        Requirement hostReq = hostReqs.get(resource);
                         if (hostReq != null)
                         {
-                            target = allCandidates.getFirstCandidate(hostReq.get(0)).getResource();
+                            Capability hostCap = allCandidates.getFirstCandidate(hostReq);
+                            // If the resource is an already resolved fragment and can not
+                            // be attached to new hosts, there will be no matching host,
+                            // so ignore this resource
+                            if (hostCap == null)
+                            {
+                                continue;
+                            }
+                            target = hostCap.getResource();
                         }
 
                         if (allCandidates.isPopulated(target))