You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2015/07/13 17:18:00 UTC

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

Author: gnodet
Date: Mon Jul 13 15:18:00 2015
New Revision: 1690713

URL: http://svn.apache.org/r1690713
Log:
[FELIX-4942] Small improvements to mergeUses

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

Modified: felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java?rev=1690713&r1=1690712&r2=1690713&view=diff
==============================================================================
--- felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java (original)
+++ felix/trunk/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java Mon Jul 13 15:18:00 2015
@@ -805,7 +805,6 @@ public class ResolverImpl implements Res
                         blameReqs,
                         cap,
                         resourcePkgMap,
-                        allCandidates,
                         usesCycleMap);
                 }
             }
@@ -828,7 +827,6 @@ public class ResolverImpl implements Res
                             blameReqs,
                             null,
                             resourcePkgMap,
-                            allCandidates,
                             usesCycleMap);
                     }
                 }
@@ -849,7 +847,6 @@ public class ResolverImpl implements Res
                         blameReqs,
                         null,
                         resourcePkgMap,
-                        allCandidates,
                         usesCycleMap);
                 }
             }
@@ -989,11 +986,10 @@ public class ResolverImpl implements Res
         }
     }
 
-    private void mergeUses(
+    private static void mergeUses(
         ResolveSession session, Resource current, Packages currentPkgs,
         Capability mergeCap, List<Requirement> blameReqs, Capability matchingCap,
         Map<Resource, Packages> resourcePkgMap,
-        Candidates allCandidates,
         Map<Capability, Set<Resource>> cycleMap)
     {
         // If there are no uses, then just return.
@@ -1028,7 +1024,7 @@ public class ResolverImpl implements Res
 //            else
             {
                 String s = candSourceCap.getDirectives().get(Namespace.CAPABILITY_USES_DIRECTIVE);
-                if (s != null)
+                if (s != null && !s.isEmpty())
                 {
                     // Parse these uses directive.
                     uses = session.getUsesCache().get(s);
@@ -1040,19 +1036,18 @@ public class ResolverImpl implements Res
                 }
                 else
                 {
-                    uses = Collections.emptyList();
+                    continue;
                 }
             }
+            Packages candSourcePkgs = resourcePkgMap.get(candSourceCap.getResource());
             for (String usedPkgName : uses)
             {
-                Packages candSourcePkgs = resourcePkgMap.get(candSourceCap.getResource());
                 List<Blame> candSourceBlames;
                 // Check to see if the used package is exported.
                 Blame candExportedBlame = candSourcePkgs.m_exportedPkgs.get(usedPkgName);
                 if (candExportedBlame != null)
                 {
-                    candSourceBlames = new ArrayList<Blame>(1);
-                    candSourceBlames.add(candExportedBlame);
+                    candSourceBlames = Collections.singletonList(candExportedBlame);
                 }
                 else
                 {
@@ -1061,8 +1056,10 @@ public class ResolverImpl implements Res
                     candSourceBlames = candSourcePkgs.m_requiredPkgs.get(usedPkgName);
                     // Lastly, if the used package is not required, check to see if it
                     // is imported.
-                    candSourceBlames = (candSourceBlames != null)
-                        ? candSourceBlames : candSourcePkgs.m_importedPkgs.get(usedPkgName);
+                    if (candSourceBlames == null)
+                    {
+                        candSourceBlames = candSourcePkgs.m_importedPkgs.get(usedPkgName);
+                    }
                 }
 
                 // If the used package cannot be found, then just ignore it
@@ -1077,19 +1074,20 @@ public class ResolverImpl implements Res
                 {
                     if (blame.m_reqs != null)
                     {
-                        List<Requirement> blameReqs2 = new ArrayList<Requirement>(blameReqs);
+                        List<Requirement> blameReqs2 = new ArrayList<Requirement>(blameReqs.size() + 1);
+                        blameReqs2.addAll(blameReqs);
                         // Only add the last requirement in blame chain because
                         // that is the requirement wired to the blamed capability
                         blameReqs2.add(blame.m_reqs.get(blame.m_reqs.size() - 1));
                         addUsedBlame(usedPkgBlames, blame.m_cap, blameReqs2, matchingCap);
                         mergeUses(session, current, currentPkgs, blame.m_cap, blameReqs2, matchingCap,
-                            resourcePkgMap, allCandidates, cycleMap);
+                            resourcePkgMap, cycleMap);
                     }
                     else
                     {
                         addUsedBlame(usedPkgBlames, blame.m_cap, blameReqs, matchingCap);
                         mergeUses(session, current, currentPkgs, blame.m_cap, blameReqs, matchingCap,
-                            resourcePkgMap, allCandidates, cycleMap);
+                            resourcePkgMap, cycleMap);
                     }
                 }
             }