Package org.apache.felix.resolver
Class ResolverImpl
- java.lang.Object
-
- org.apache.felix.resolver.ResolverImpl
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classResolverImpl.Blame(package private) static classResolverImpl.DumbExecutorprivate static classResolverImpl.EnhancedExecutorstatic classResolverImpl.Packages(package private) classResolverImpl.ResolveSessionprivate static classResolverImpl.UseConstraintErrorprivate static classResolverImpl.UsedBlamesprivate static classResolverImpl.WireCandidate
-
Field Summary
Fields Modifier and Type Field Description private java.security.AccessControlContextm_accprivate java.util.concurrent.Executorm_executorprivate Loggerm_loggerprivate intm_parallelism
-
Constructor Summary
Constructors Constructor Description ResolverImpl(Logger logger)ResolverImpl(Logger logger, int parallelism)ResolverImpl(Logger logger, java.util.concurrent.Executor executor)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private static voidaddUsedBlame(ArrayMap<org.osgi.resource.Capability,ResolverImpl.UsedBlames> usedBlames, org.osgi.resource.Capability usedCap, java.util.List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap)private static OpenHashMap<java.lang.String,ResolverImpl.Blame>calculateExportedPackages(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource, OpenHashMap<java.lang.String,ResolverImpl.Blame> exports)private static java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages>calculatePackageSpaces(java.util.concurrent.Executor innerExecutor, ResolverImpl.ResolveSession session, Candidates allCandidates, java.util.Collection<org.osgi.resource.Resource> hosts)private ResolutionErrorcheckConsistency(java.util.concurrent.Executor executor, ResolverImpl.ResolveSession session, java.util.List<Candidates> usesPermutations, java.util.List<Candidates> importPermutations, Candidates allCandidates, java.util.Map<org.osgi.resource.Resource,ResolutionError> currentFaultyResources, java.util.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, java.util.List<Candidates> usesPermutations, java.util.List<Candidates> importPermutations, org.osgi.resource.Resource resource, Candidates allCandidates, boolean dynamic, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, java.util.Map<org.osgi.resource.Resource,java.lang.Object> resultCache)private static voidcomputeUses(ResolverImpl.ResolveSession session, java.util.Map<org.osgi.resource.Resource,java.util.List<ResolverImpl.WireCandidate>> allWireCandidates, java.util.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, java.util.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, java.util.Map<org.osgi.resource.Resource,java.util.List<ResolverImpl.WireCandidate>> allWireCandidates, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> allPackages, org.osgi.resource.Resource resource, ResolverImpl.Packages resourcePkgs)private static java.util.Set<org.osgi.resource.Capability>getPackageSources(org.osgi.resource.Capability cap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)private static voidgetPackageSourcesInternal(ResolverImpl.ResolveSession session, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, org.osgi.resource.Resource resource, ResolverImpl.Packages packages)private static java.util.List<ResolverImpl.WireCandidate>getWireCandidates(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource)private static booleanisCompatible(java.util.List<ResolverImpl.Blame> currentBlames, org.osgi.resource.Capability candCap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)private static booleanisCompatible(ResolverImpl.Blame currentBlame, org.osgi.resource.Capability candCap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)private static booleanisPayload(org.osgi.resource.Requirement fragmentReq)private static voidmergeCandidatePackage(OpenHashMap<java.lang.String,java.util.List<ResolverImpl.Blame>> packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap)private static voidmergeCandidatePackages(ResolverImpl.ResolveSession session, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, Candidates allCandidates, ResolverImpl.Packages packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap, java.util.Set<org.osgi.resource.Capability> capabilityCycles, java.util.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, java.util.List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, java.util.Set<org.osgi.resource.Capability> cycleMap)private static java.util.List<java.lang.String>parseUses(java.lang.String s)private static java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>>populateDynamicWireMap(ResolveContext rc, org.osgi.resource.Resource resource, org.osgi.resource.Requirement dynReq, java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates)private static java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>>populateWireMap(ResolveContext rc, org.osgi.resource.Resource resource, java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates)java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>>resolve(ResolveContext rc)Resolve the specified resolve context and return any new resources and wires to the caller.java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>>resolve(ResolveContext rc, java.util.concurrent.Executor executor)java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>>resolve(ResolveContext rc, org.osgi.resource.Resource host, org.osgi.resource.Requirement dynamicReq, java.util.List<org.osgi.resource.Capability> matches)Resolves a dynamic requirement for the specified host resource using the specifiedResolveContext.
-
-
-
Field Detail
-
m_acc
private final java.security.AccessControlContext m_acc
-
m_logger
private final Logger m_logger
-
m_parallelism
private final int m_parallelism
-
m_executor
private final java.util.concurrent.Executor m_executor
-
-
Method Detail
-
resolve
public java.util.Map<org.osgi.resource.Resource,java.util.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 java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> resolve(ResolveContext rc, java.util.concurrent.Executor executor) throws ResolutionException
- Throws:
ResolutionException
-
checkConsistency
private ResolutionError checkConsistency(java.util.concurrent.Executor executor, ResolverImpl.ResolveSession session, java.util.List<Candidates> usesPermutations, java.util.List<Candidates> importPermutations, Candidates allCandidates, java.util.Map<org.osgi.resource.Resource,ResolutionError> currentFaultyResources, java.util.Map<org.osgi.resource.Resource,org.osgi.resource.Resource> hosts, boolean dynamic)
-
resolve
public java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> resolve(ResolveContext rc, org.osgi.resource.Resource host, org.osgi.resource.Requirement dynamicReq, java.util.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 java.util.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, java.util.Map<org.osgi.resource.Resource,java.util.List<ResolverImpl.WireCandidate>> allWireCandidates, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> allPackages, org.osgi.resource.Resource resource, ResolverImpl.Packages resourcePkgs)
-
computeUses
private static void computeUses(ResolverImpl.ResolveSession session, java.util.Map<org.osgi.resource.Resource,java.util.List<ResolverImpl.WireCandidate>> allWireCandidates, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, org.osgi.resource.Resource resource)
-
mergeCandidatePackages
private static void mergeCandidatePackages(ResolverImpl.ResolveSession session, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, Candidates allCandidates, ResolverImpl.Packages packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap, java.util.Set<org.osgi.resource.Capability> capabilityCycles, java.util.Set<org.osgi.resource.Resource> visitedRequiredBundles)
-
mergeCandidatePackage
private static void mergeCandidatePackage(OpenHashMap<java.lang.String,java.util.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, java.util.List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, java.util.Set<org.osgi.resource.Capability> cycleMap)
-
calculatePackageSpaces
private static java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> calculatePackageSpaces(java.util.concurrent.Executor innerExecutor, ResolverImpl.ResolveSession session, Candidates allCandidates, java.util.Collection<org.osgi.resource.Resource> hosts)
-
parseUses
private static java.util.List<java.lang.String> parseUses(java.lang.String s)
-
addUsedBlame
private static void addUsedBlame(ArrayMap<org.osgi.resource.Capability,ResolverImpl.UsedBlames> usedBlames, org.osgi.resource.Capability usedCap, java.util.List<org.osgi.resource.Requirement> blameReqs, org.osgi.resource.Capability matchingCap)
-
checkPackageSpaceConsistency
private ResolutionError checkPackageSpaceConsistency(ResolverImpl.ResolveSession session, java.util.List<Candidates> usesPermutations, java.util.List<Candidates> importPermutations, org.osgi.resource.Resource resource, Candidates allCandidates, boolean dynamic, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, java.util.Map<org.osgi.resource.Resource,java.lang.Object> resultCache)
-
checkMultiple
private boolean checkMultiple(ResolverImpl.ResolveSession session, ResolverImpl.UsedBlames usedBlames, ResolverImpl.Blame usedBlame, Candidates permutation)
-
calculateExportedPackages
private static OpenHashMap<java.lang.String,ResolverImpl.Blame> calculateExportedPackages(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource, OpenHashMap<java.lang.String,ResolverImpl.Blame> exports)
-
isCompatible
private static boolean isCompatible(ResolverImpl.Blame currentBlame, org.osgi.resource.Capability candCap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)
-
isCompatible
private static boolean isCompatible(java.util.List<ResolverImpl.Blame> currentBlames, org.osgi.resource.Capability candCap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)
-
getPackageSources
private static java.util.Set<org.osgi.resource.Capability> getPackageSources(org.osgi.resource.Capability cap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)
-
getPackageSourcesInternal
private static void getPackageSourcesInternal(ResolverImpl.ResolveSession session, java.util.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 java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> populateWireMap(ResolveContext rc, org.osgi.resource.Resource resource, java.util.Map<org.osgi.resource.Resource,java.util.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 java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> populateDynamicWireMap(ResolveContext rc, org.osgi.resource.Resource resource, org.osgi.resource.Requirement dynReq, java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates)
-
dumpResourcePkgMap
private static void dumpResourcePkgMap(ResolveContext rc, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)
-
dumpResourcePkgs
private static void dumpResourcePkgs(ResolveContext rc, org.osgi.resource.Resource resource, ResolverImpl.Packages packages)
-
-