| Modifier and Type | Class and Description |
|---|---|
private static class |
ResolverImpl.Blame |
(package private) static class |
ResolverImpl.DumbExecutor |
private static class |
ResolverImpl.EnhancedExecutor |
static class |
ResolverImpl.Packages |
(package private) class |
ResolverImpl.ResolveSession |
private static class |
ResolverImpl.UseConstraintError |
private static class |
ResolverImpl.UsedBlames |
private static class |
ResolverImpl.WireCandidate |
| Modifier and Type | Field and Description |
|---|---|
private java.security.AccessControlContext |
m_acc |
private java.util.concurrent.Executor |
m_executor |
private Logger |
m_logger |
private int |
m_parallelism |
| Constructor and Description |
|---|
ResolverImpl(Logger logger) |
ResolverImpl(Logger logger,
java.util.concurrent.Executor executor) |
ResolverImpl(Logger logger,
int parallelism) |
| Modifier and Type | Method and Description |
|---|---|
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) |
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 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) |
private boolean |
checkMultiple(ResolverImpl.ResolveSession session,
ResolverImpl.UsedBlames usedBlames,
ResolverImpl.Blame usedBlame,
Candidates permutation) |
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) |
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) |
private static org.osgi.resource.Wire |
createWire(org.osgi.resource.Requirement requirement,
Candidates allCandidates) |
private static void |
dumpResourcePkgMap(ResolveContext rc,
java.util.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,
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 void |
getPackageSourcesInternal(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 boolean |
isCompatible(java.util.List<ResolverImpl.Blame> currentBlames,
org.osgi.resource.Capability candCap,
java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap) |
private static boolean |
isCompatible(ResolverImpl.Blame currentBlame,
org.osgi.resource.Capability candCap,
java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap) |
private static boolean |
isPayload(org.osgi.resource.Requirement fragmentReq) |
private static void |
mergeCandidatePackage(OpenHashMap<java.lang.String,java.util.List<ResolverImpl.Blame>> packages,
org.osgi.resource.Requirement currentReq,
org.osgi.resource.Capability candCap) |
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) |
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) |
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
specified
ResolveContext. |
private final java.security.AccessControlContext m_acc
private final Logger m_logger
private final int m_parallelism
private final java.util.concurrent.Executor m_executor
public ResolverImpl(Logger logger)
public ResolverImpl(Logger logger, int parallelism)
public ResolverImpl(Logger logger, java.util.concurrent.Executor executor)
public java.util.Map<org.osgi.resource.Resource,java.util.List<org.osgi.resource.Wire>> resolve(ResolveContext rc) throws ResolutionException
ResolverThe resolver considers two groups of resources:
mandatory group must be
resolved. A failure to satisfy any mandatory requirement for these
resources will result in throwing a ResolutionExceptionoptional 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.
resolve in interface Resolverrc - The resolve context for the resolve operation. Must not be
null.ResolutionException - If the resolution cannot be satisfied.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
ResolutionExceptionprivate 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)
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
ResolveContext. 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.
rc - the resolve contexthost - the hosting resourcedynamicReq - the dynamic requirementmatches - a list of matching capabilitiesResolutionExceptionprivate static java.util.List<ResolverImpl.WireCandidate> getWireCandidates(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource)
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)
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)
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)
private static void mergeCandidatePackage(OpenHashMap<java.lang.String,java.util.List<ResolverImpl.Blame>> packages, org.osgi.resource.Requirement currentReq, org.osgi.resource.Capability candCap)
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)
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 static java.util.List<java.lang.String> parseUses(java.lang.String s)
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)
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)
private boolean checkMultiple(ResolverImpl.ResolveSession session, ResolverImpl.UsedBlames usedBlames, ResolverImpl.Blame usedBlame, Candidates permutation)
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 boolean isCompatible(ResolverImpl.Blame currentBlame, org.osgi.resource.Capability candCap, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)
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)
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 void getPackageSourcesInternal(ResolverImpl.ResolveSession session, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap, org.osgi.resource.Resource resource, ResolverImpl.Packages packages)
private static org.osgi.resource.Resource getDeclaredResource(org.osgi.resource.Resource resource)
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 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)
private static org.osgi.resource.Wire createWire(org.osgi.resource.Requirement requirement,
Candidates allCandidates)
private static boolean isPayload(org.osgi.resource.Requirement fragmentReq)
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 void dumpResourcePkgMap(ResolveContext rc, java.util.Map<org.osgi.resource.Resource,ResolverImpl.Packages> resourcePkgMap)
private static void dumpResourcePkgs(ResolveContext rc, org.osgi.resource.Resource resource, ResolverImpl.Packages packages)