Fix a bug in previous commit plus minor optimization. (FELIX-2973)
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1133036 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java b/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
index 070ee85..d949df7 100644
--- a/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
+++ b/framework/src/main/java/org/apache/felix/framework/resolver/ResolverImpl.java
@@ -84,7 +84,7 @@
allCandidates.prepare(getResolvedSingletons(state));
// Record the initial candidate permutation.
- m_usesPermutations.add(allCandidates);
+ m_usesPermutations.add(allCandidates);
ResolveException rethrow = null;
@@ -692,7 +692,7 @@
Map<String, List<Blame>> packages = (requires)
? currentPkgs.m_requiredPkgs
: currentPkgs.m_importedPkgs;
- List<Blame> blames = currentPkgs.m_requiredPkgs.get(pkgName);
+ List<Blame> blames = packages.get(pkgName);
if (blames == null)
{
blames = new ArrayList<Blame>();
@@ -1155,41 +1155,45 @@
// For resolved revisions look at the wires, for resolving
// revisions look in the candidate map to determine which
// exports are substitutable.
- if (revision.getWiring() != null)
+ if (!exports.isEmpty())
{
- for (BundleWire wire : revision.getWiring().getRequiredWires(null))
+ if (revision.getWiring() != null)
{
- if (wire.getRequirement().getNamespace().equals(
- BundleCapabilityImpl.PACKAGE_NAMESPACE))
+ for (BundleWire wire : revision.getWiring().getRequiredWires(null))
{
- String pkgName = (String) wire.getCapability()
- .getAttributes().get(BundleCapabilityImpl.PACKAGE_ATTR);
- exports.remove(pkgName);
- }
- }
- }
- else
- {
- for (BundleRequirement req : revision.getDeclaredRequirements(null))
- {
- if (req.getNamespace().equals(BundleCapabilityImpl.PACKAGE_NAMESPACE))
- {
- Set<BundleCapability> cands =
- allCandidates.getCandidates((BundleRequirementImpl) req);
- if ((cands != null) && !cands.isEmpty())
+ if (wire.getRequirement().getNamespace().equals(
+ BundleCapabilityImpl.PACKAGE_NAMESPACE))
{
- String pkgName = (String) cands.iterator().next()
+ String pkgName = (String) wire.getCapability()
.getAttributes().get(BundleCapabilityImpl.PACKAGE_ATTR);
exports.remove(pkgName);
}
}
}
- }
- // Add all non-substituted exports to the revisions's package space.
- for (Entry<String, BundleCapability> entry : exports.entrySet())
- {
- packages.m_exportedPkgs.put(
- entry.getKey(), new Blame(entry.getValue(), null));
+ else
+ {
+ for (BundleRequirement req : revision.getDeclaredRequirements(null))
+ {
+ if (req.getNamespace().equals(BundleCapabilityImpl.PACKAGE_NAMESPACE))
+ {
+ Set<BundleCapability> cands =
+ allCandidates.getCandidates((BundleRequirementImpl) req);
+ if ((cands != null) && !cands.isEmpty())
+ {
+ String pkgName = (String) cands.iterator().next()
+ .getAttributes().get(BundleCapabilityImpl.PACKAGE_ATTR);
+ exports.remove(pkgName);
+ }
+ }
+ }
+ }
+
+ // Add all non-substituted exports to the revisions's package space.
+ for (Entry<String, BundleCapability> entry : exports.entrySet())
+ {
+ packages.m_exportedPkgs.put(
+ entry.getKey(), new Blame(entry.getValue(), null));
+ }
}
revisionPkgMap.put(revision, packages);