Package org.apache.felix.resolver
Class ResolverImpl
java.lang.Object
org.apache.felix.resolver.ResolverImpl
- All Implemented Interfaces:
Resolver
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class
(package private) static class
private static class
static class
(package private) class
private static final class
private static class
private static final class
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AccessControlContext
private final Executor
private final Logger
private final int
-
Constructor Summary
ConstructorsConstructorDescriptionResolverImpl
(Logger logger) ResolverImpl
(Logger logger, int parallelism) ResolverImpl
(Logger logger, Executor executor) -
Method Summary
Modifier and TypeMethodDescriptionprivate static void
addUsedBlame
(ArrayMap<org.osgi.resource.Capability, ResolverImpl.UsedBlames> usedBlames, org.osgi.resource.Capability usedCap, List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap) private static OpenHashMap
<String, ResolverImpl.Blame> calculateExportedPackages
(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource, OpenHashMap<String, ResolverImpl.Blame> exports) private static Map
<org.osgi.resource.Resource, ResolverImpl.Packages> calculatePackageSpaces
(Executor innerExecutor, ResolverImpl.ResolveSession session, Candidates allCandidates, Collection<org.osgi.resource.Resource> hosts) private ResolutionError
checkConsistency
(Executor executor, ResolverImpl.ResolveSession session, List<Candidates> usesPermutations, List<Candidates> importPermutations, Candidates allCandidates, Map<org.osgi.resource.Resource, ResolutionError> currentFaultyResources, Map<org.osgi.resource.Resource, org.osgi.resource.Resource> hosts, boolean dynamic) private boolean
checkMultiple
(ResolverImpl.ResolveSession session, ResolverImpl.UsedBlames usedBlames, ResolverImpl.Blame usedBlame, Candidates permutation) private ResolutionError
checkPackageSpaceConsistency
(ResolverImpl.ResolveSession session, List<Candidates> usesPermutations, List<Candidates> importPermutations, org.osgi.resource.Resource resource, Candidates allCandidates, boolean dynamic, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, Map<org.osgi.resource.Resource, Object> resultCache) private static void
computeUses
(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, List<ResolverImpl.WireCandidate>> allWireCandidates, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, org.osgi.resource.Resource resource) private static org.osgi.resource.Wire
createWire
(org.osgi.resource.Requirement requirement, Candidates allCandidates) private static void
dumpResourcePkgMap
(ResolveContext rc, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static void
dumpResourcePkgs
(ResolveContext rc, org.osgi.resource.Resource resource, ResolverImpl.Packages packages) private static org.osgi.resource.Capability
getDeclaredCapability
(org.osgi.resource.Capability c) private static org.osgi.resource.Requirement
getDeclaredRequirement
(org.osgi.resource.Requirement r) private static org.osgi.resource.Resource
getDeclaredResource
(org.osgi.resource.Resource resource) private static ResolverImpl.Packages
getPackages
(ResolverImpl.ResolveSession session, Candidates allCandidates, Map<org.osgi.resource.Resource, List<ResolverImpl.WireCandidate>> allWireCandidates, Map<org.osgi.resource.Resource, ResolverImpl.Packages> allPackages, org.osgi.resource.Resource resource, ResolverImpl.Packages resourcePkgs) private static Set
<org.osgi.resource.Capability> getPackageSources
(org.osgi.resource.Capability cap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static void
getPackageSourcesInternal
(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, org.osgi.resource.Resource resource, ResolverImpl.Packages packages) private static List
<ResolverImpl.WireCandidate> getWireCandidates
(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource) private static boolean
isCompatible
(List<ResolverImpl.Blame> currentBlames, org.osgi.resource.Capability candCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static boolean
isCompatible
(ResolverImpl.Blame currentBlame, org.osgi.resource.Capability candCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static boolean
isPayload
(org.osgi.resource.Requirement fragmentReq) private static void
mergeCandidatePackage
(OpenHashMap<String, List<ResolverImpl.Blame>> packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap) private static void
mergeCandidatePackages
(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, Candidates allCandidates, ResolverImpl.Packages packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap, Set<org.osgi.resource.Capability> capabilityCycles, Set<org.osgi.resource.Resource> visitedRequiredBundles) private static void
mergeUses
(ResolverImpl.ResolveSession session, org.osgi.resource.Resource current, ResolverImpl.Packages currentPkgs, org.osgi.resource.Capability mergeCap, List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, Set<org.osgi.resource.Capability> cycleMap) populateDynamicWireMap
(ResolveContext rc, org.osgi.resource.Resource resource, org.osgi.resource.Requirement dynReq, Map<org.osgi.resource.Resource, List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates) populateWireMap
(ResolveContext rc, org.osgi.resource.Resource resource, Map<org.osgi.resource.Resource, List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates) Resolve the specified resolve context and return any new resources and wires to the caller.resolve
(ResolveContext rc, Executor executor) resolve
(ResolveContext rc, org.osgi.resource.Resource host, org.osgi.resource.Requirement dynamicReq, List<org.osgi.resource.Capability> matches) Resolves a dynamic requirement for the specified host resource using the specifiedResolveContext
.
-
Field Details
-
m_acc
-
m_logger
-
m_parallelism
private final int m_parallelism -
m_executor
-
-
Constructor Details
-
ResolverImpl
-
ResolverImpl
-
ResolverImpl
-
-
Method Details
-
resolve
public Map<org.osgi.resource.Resource,List<org.osgi.resource.Wire>> resolve(ResolveContext rc) throws ResolutionException Description copied from interface:Resolver
Resolve the specified resolve context and return any new resources and wires to the caller.The resolver considers two groups of resources:
- Mandatory - any resource in the
mandatory group
must be resolved. A failure to satisfy any mandatory requirement for these resources will result in throwing aResolutionException
- Optional - any resource in the
optional group
may be resolved. A failure to satisfy a mandatory requirement for a resource in this group will not fail the overall resolution but no resources or wires will be returned for that resource.
The resolve method returns the delta between the start state defined by
ResolveContext.getWirings()
and the end resolved state. That is, only new resources and wires are included.The behavior of the resolver is not defined if the specified resolve context supplies inconsistent information.
- Specified by:
resolve
in interfaceResolver
- Parameters:
rc
- The resolve context for the resolve operation. Must not benull
.- Returns:
- The new resources and wires required to satisfy the specified resolve context. The returned map is the property of the caller and can be modified by the caller.
- Throws:
ResolutionException
- If the resolution cannot be satisfied.
- Mandatory - any resource in the
-
resolve
public Map<org.osgi.resource.Resource,List<org.osgi.resource.Wire>> resolve(ResolveContext rc, Executor executor) throws ResolutionException - Throws:
ResolutionException
-
checkConsistency
private ResolutionError checkConsistency(Executor executor, ResolverImpl.ResolveSession session, List<Candidates> usesPermutations, List<Candidates> importPermutations, Candidates allCandidates, Map<org.osgi.resource.Resource, ResolutionError> currentFaultyResources, Map<org.osgi.resource.Resource, org.osgi.resource.Resource> hosts, boolean dynamic) -
resolve
public Map<org.osgi.resource.Resource,List<org.osgi.resource.Wire>> resolve(ResolveContext rc, org.osgi.resource.Resource host, org.osgi.resource.Requirement dynamicReq, List<org.osgi.resource.Capability> matches) throws ResolutionException Resolves a dynamic requirement for the specified host resource using the specifiedResolveContext
. The dynamic requirement may contain wild cards in its filter for the package name. The matching candidates are used to resolve the requirement and the resolve context is not asked to find providers for the dynamic requirement. The host resource is expected to not be a fragment, to already be resolved and have an existing wiring provided by the resolve context.This operation may resolve additional resources in order to resolve the dynamic requirement. The returned map will contain entries for each resource that got resolved in addition to the specified host resource. The wire list for the host resource will only contain a single wire which is for the dynamic requirement.
- Parameters:
rc
- the resolve contexthost
- the hosting resourcedynamicReq
- the dynamic requirementmatches
- a list of matching capabilities- Returns:
- The new resources and wires required to satisfy the specified dynamic requirement. The returned map is the property of the caller and can be modified by the caller.
- Throws:
ResolutionException
-
getWireCandidates
private static List<ResolverImpl.WireCandidate> getWireCandidates(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource) -
getPackages
private static ResolverImpl.Packages getPackages(ResolverImpl.ResolveSession session, Candidates allCandidates, Map<org.osgi.resource.Resource, List<ResolverImpl.WireCandidate>> allWireCandidates, Map<org.osgi.resource.Resource, ResolverImpl.Packages> allPackages, org.osgi.resource.Resource resource, ResolverImpl.Packages resourcePkgs) -
computeUses
private static void computeUses(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, List<ResolverImpl.WireCandidate>> allWireCandidates, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, org.osgi.resource.Resource resource) -
mergeCandidatePackages
private static void mergeCandidatePackages(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, Candidates allCandidates, ResolverImpl.Packages packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap, Set<org.osgi.resource.Capability> capabilityCycles, Set<org.osgi.resource.Resource> visitedRequiredBundles) -
mergeCandidatePackage
private static void mergeCandidatePackage(OpenHashMap<String, List<ResolverImpl.Blame>> packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap) -
mergeUses
private static void mergeUses(ResolverImpl.ResolveSession session, org.osgi.resource.Resource current, ResolverImpl.Packages currentPkgs, org.osgi.resource.Capability mergeCap, List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, Set<org.osgi.resource.Capability> cycleMap) -
calculatePackageSpaces
private static Map<org.osgi.resource.Resource,ResolverImpl.Packages> calculatePackageSpaces(Executor innerExecutor, ResolverImpl.ResolveSession session, Candidates allCandidates, Collection<org.osgi.resource.Resource> hosts) -
parseUses
-
addUsedBlame
private static void addUsedBlame(ArrayMap<org.osgi.resource.Capability, ResolverImpl.UsedBlames> usedBlames, org.osgi.resource.Capability usedCap, List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap) -
checkPackageSpaceConsistency
private ResolutionError checkPackageSpaceConsistency(ResolverImpl.ResolveSession session, List<Candidates> usesPermutations, List<Candidates> importPermutations, org.osgi.resource.Resource resource, Candidates allCandidates, boolean dynamic, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, Map<org.osgi.resource.Resource, Object> resultCache) -
checkMultiple
private boolean checkMultiple(ResolverImpl.ResolveSession session, ResolverImpl.UsedBlames usedBlames, ResolverImpl.Blame usedBlame, Candidates permutation) -
calculateExportedPackages
private static OpenHashMap<String,ResolverImpl.Blame> calculateExportedPackages(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource, OpenHashMap<String, ResolverImpl.Blame> exports) -
isCompatible
private static boolean isCompatible(ResolverImpl.Blame currentBlame, org.osgi.resource.Capability candCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) -
isCompatible
private static boolean isCompatible(List<ResolverImpl.Blame> currentBlames, org.osgi.resource.Capability candCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) -
getPackageSources
private static Set<org.osgi.resource.Capability> getPackageSources(org.osgi.resource.Capability cap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) -
getPackageSourcesInternal
private static void getPackageSourcesInternal(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, org.osgi.resource.Resource resource, ResolverImpl.Packages packages) -
getDeclaredResource
private static org.osgi.resource.Resource getDeclaredResource(org.osgi.resource.Resource resource) -
getDeclaredCapability
private static org.osgi.resource.Capability getDeclaredCapability(org.osgi.resource.Capability c) -
getDeclaredRequirement
private static org.osgi.resource.Requirement getDeclaredRequirement(org.osgi.resource.Requirement r) -
populateWireMap
private static Map<org.osgi.resource.Resource,List<org.osgi.resource.Wire>> populateWireMap(ResolveContext rc, org.osgi.resource.Resource resource, Map<org.osgi.resource.Resource, List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates) -
createWire
private static org.osgi.resource.Wire createWire(org.osgi.resource.Requirement requirement, Candidates allCandidates) -
isPayload
private static boolean isPayload(org.osgi.resource.Requirement fragmentReq) -
populateDynamicWireMap
private static Map<org.osgi.resource.Resource,List<org.osgi.resource.Wire>> populateDynamicWireMap(ResolveContext rc, org.osgi.resource.Resource resource, org.osgi.resource.Requirement dynReq, Map<org.osgi.resource.Resource, List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates) -
dumpResourcePkgMap
private static void dumpResourcePkgMap(ResolveContext rc, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) -
dumpResourcePkgs
private static void dumpResourcePkgs(ResolveContext rc, org.osgi.resource.Resource resource, ResolverImpl.Packages packages)
-