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 classprivate static classstatic class(package private) classprivate static final classprivate static classprivate static final class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AccessControlContextprivate final Executorprivate final Loggerprivate final int -
Constructor Summary
ConstructorsConstructorDescriptionResolverImpl(Logger logger) ResolverImpl(Logger logger, int parallelism) ResolverImpl(Logger logger, Executor executor) -
Method Summary
Modifier and TypeMethodDescriptionprivate static voidaddUsedBlame(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 ResolutionErrorcheckConsistency(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 booleancheckMultiple(ResolverImpl.ResolveSession session, ResolverImpl.UsedBlames usedBlames, ResolverImpl.Blame usedBlame, Candidates permutation) private ResolutionErrorcheckPackageSpaceConsistency(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 voidcomputeUses(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.WirecreateWire(org.osgi.resource.Requirement requirement, Candidates allCandidates) private static voiddumpResourcePkgMap(ResolveContext rc, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static voiddumpResourcePkgs(ResolveContext rc, org.osgi.resource.Resource resource, ResolverImpl.Packages packages) private static org.osgi.resource.CapabilitygetDeclaredCapability(org.osgi.resource.Capability c) private static org.osgi.resource.RequirementgetDeclaredRequirement(org.osgi.resource.Requirement r) private static org.osgi.resource.ResourcegetDeclaredResource(org.osgi.resource.Resource resource) private static ResolverImpl.PackagesgetPackages(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 voidgetPackageSourcesInternal(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 booleanisCompatible(List<ResolverImpl.Blame> currentBlames, org.osgi.resource.Capability candCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static booleanisCompatible(ResolverImpl.Blame currentBlame, org.osgi.resource.Capability candCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static booleanisPayload(org.osgi.resource.Requirement fragmentReq) private static voidmergeCandidatePackage(OpenHashMap<String, List<ResolverImpl.Blame>> packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap) private static voidmergeCandidatePackages(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 voidmergeUses(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:ResolverResolve 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 groupmust be resolved. A failure to satisfy any mandatory requirement for these resources will result in throwing aResolutionException - Optional - any resource in the
optional groupmay 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:
resolvein 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)
-