[FELIX-4942] Improve mergeCandidatePackage
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1690714 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 59ace68..e36fe77 100644
--- a/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
+++ b/resolver/src/main/java/org/apache/felix/resolver/ResolverImpl.java
@@ -873,7 +873,8 @@
if (candCap.getNamespace().equals(PackageNamespace.PACKAGE_NAMESPACE))
{
mergeCandidatePackage(
- current, false, currentReq, candCap, resourcePkgMap);
+ resourcePkgMap.get(current).m_importedPkgs,
+ currentReq, candCap);
}
else if (candCap.getNamespace().equals(BundleNamespace.BUNDLE_NAMESPACE))
{
@@ -898,11 +899,9 @@
for (Entry<String, Blame> entry : candPkgs.m_exportedPkgs.fast())
{
mergeCandidatePackage(
- current,
- true,
+ resourcePkgMap.get(current).m_requiredPkgs,
currentReq,
- entry.getValue().m_cap,
- resourcePkgMap);
+ entry.getValue().m_cap);
}
}
@@ -959,10 +958,9 @@
cycles.remove(current);
}
- private void mergeCandidatePackage(
- Resource current, boolean requires,
- Requirement currentReq, Capability candCap,
- Map<Resource, Packages> resourcePkgMap)
+ private static void mergeCandidatePackage(
+ OpenHashMap<String, List<Blame>> packages,
+ Requirement currentReq, Capability candCap)
{
if (candCap.getNamespace().equals(PackageNamespace.PACKAGE_NAMESPACE))
{
@@ -971,14 +969,8 @@
String pkgName = (String) candCap.getAttributes().get(PackageNamespace.PACKAGE_NAMESPACE);
- List<Requirement> blameReqs = new ArrayList<Requirement>();
- blameReqs.add(currentReq);
+ List<Requirement> blameReqs = Collections.singletonList(currentReq);
- Packages currentPkgs = resourcePkgMap.get(current);
-
- OpenHashMap<String, List<Blame>> packages = (requires)
- ? currentPkgs.m_requiredPkgs
- : currentPkgs.m_importedPkgs;
List<Blame> blames = packages.getOrCompute(pkgName);
blames.add(new Blame(candCap, blameReqs));