Class ResolverImpl
- All Implemented Interfaces:
Resolver
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static class(package private) static classprivate static classstatic class(package private) static enum(package private) static 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 voidaddUsedBlames(ArrayMap<Set<org.osgi.resource.Capability>, ResolverImpl.UsedBlames> usedBlames, Collection<ResolverImpl.Blame> blames, org.osgi.resource.Capability matchingCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static OpenHashMap<String, ResolverImpl.Blame> calculateExportedPackages(ResolverImpl.ResolveSession session, Candidates allCandidates, org.osgi.resource.Resource resource, OpenHashMap<String, ResolverImpl.Blame> exports, OpenHashMap<String, ResolverImpl.Blame> substitutes) private Map<org.osgi.resource.Resource, ResolverImpl.Packages> calculatePackageSpaces(ResolverImpl.ResolveSession session, Candidates allCandidates, Collection<org.osgi.resource.Resource> hosts) private ResolutionErrorcheckConsistency(ResolverImpl.ResolveSession session, Candidates allCandidates, Map<org.osgi.resource.Resource, ResolutionError> currentFaultyResources) private ResolutionErrorcheckPackageSpaceConsistency(ResolverImpl.ResolveSession session, 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 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) doResolve(ResolverImpl.ResolveSession session) 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 CandidatesfindValidCandidates(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, ResolutionError> faultyResources) 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 voidprivate 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, Set<org.osgi.resource.Capability> candSources, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) private static booleanisCompatible(ResolverImpl.Blame currentBlame, Set<org.osgi.resource.Capability> candSources, 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 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) private booleanpermuteUsedBlameRequirement(org.osgi.resource.Requirement req, Set<org.osgi.resource.Requirement> mutated, Candidates permutation) private ResolutionErrorpermuteUsedBlames(ResolverImpl.ResolveSession session, ResolutionError rethrow, Candidates allCandidates, org.osgi.resource.Resource resource, String pkgName, ResolverImpl.Blame requirementBlame, ResolverImpl.UsedBlames usedBlames, AtomicReference<Candidates> permRef1, AtomicReference<Candidates> permRef2, Set<org.osgi.resource.Requirement> mutated) populateDynamicWireMap(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, List<org.osgi.resource.Wire>> wireMap, Candidates allCandidates) populateWireMap(ResolverImpl.ResolveSession session, 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) resolveDynamic(ResolveContext context, org.osgi.resource.Wiring hostWiring, org.osgi.resource.Requirement dynamicRequirement) Resolves a given requirement dynamically for the given host wiring using the given resolve context and return any new resources and wires to the caller.
-
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
-
doResolve
private Map<org.osgi.resource.Resource,List<org.osgi.resource.Wire>> doResolve(ResolverImpl.ResolveSession session) throws ResolutionException - Throws:
ResolutionException
-
getInitialCandidates
-
findValidCandidates
private Candidates findValidCandidates(ResolverImpl.ResolveSession session, Map<org.osgi.resource.Resource, ResolutionError> faultyResources) -
checkConsistency
private ResolutionError checkConsistency(ResolverImpl.ResolveSession session, Candidates allCandidates, Map<org.osgi.resource.Resource, ResolutionError> currentFaultyResources) -
resolveDynamic
public Map<org.osgi.resource.Resource,List<org.osgi.resource.Wire>> resolveDynamic(ResolveContext context, org.osgi.resource.Wiring hostWiring, org.osgi.resource.Requirement dynamicRequirement) throws ResolutionException Description copied from interface:ResolverResolves a given requirement dynamically for the given host wiring using the given resolve context and return any new resources and wires to the caller.The requirement must be a
requirementof the wiring and must use thepackagenamespace with aresolutionof typedynamic.The resolve context is not asked for
mandatoryresources or foroptionalresources. The resolve context is asked tofind providersfor the given requirement. The matchingpackagecapabilities returned by the resolve context must not have aosgi.wiring.packageattribute equal to apackagecapability alreadywired toby the wiring or equal apackagecapabilityprovidedby the wiring. The resolve context may be requested tofind providersfor other requirements in order to resolve the resources that provide the matching capabilities to the given requirement.If the requirement
cardinalityis notmultiplethen no new wire must be created if thewiresof the wiring already contain a wire that uses therequirementThis 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 wiring
resource. The wire list for the wiring resource will only contain one wire which is for the dynamic requirement.- Specified by:
resolveDynamicin interfaceResolver- Parameters:
context- The resolve context for the resolve operation. Must not benull.hostWiring- The wiring with the dynamicrequirement. Must not benull.dynamicRequirement- The dynamic requirement. Must not benull.- 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. If no new wires were created then a ResolutionException is thrown.
- Throws:
ResolutionException- if the dynamic requirement cannot be resolved
-
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 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 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 Map<org.osgi.resource.Resource,ResolverImpl.Packages> calculatePackageSpaces(ResolverImpl.ResolveSession session, Candidates allCandidates, Collection<org.osgi.resource.Resource> hosts) -
parseUses
-
addUsedBlames
private void addUsedBlames(ArrayMap<Set<org.osgi.resource.Capability>, ResolverImpl.UsedBlames> usedBlames, Collection<ResolverImpl.Blame> blames, org.osgi.resource.Capability matchingCap, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) -
checkPackageSpaceConsistency
private ResolutionError checkPackageSpaceConsistency(ResolverImpl.ResolveSession session, org.osgi.resource.Resource resource, Candidates allCandidates, boolean dynamic, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap, Map<org.osgi.resource.Resource, Object> resultCache) -
permuteUsedBlames
private ResolutionError permuteUsedBlames(ResolverImpl.ResolveSession session, ResolutionError rethrow, Candidates allCandidates, org.osgi.resource.Resource resource, String pkgName, ResolverImpl.Blame requirementBlame, ResolverImpl.UsedBlames usedBlames, AtomicReference<Candidates> permRef1, AtomicReference<Candidates> permRef2, Set<org.osgi.resource.Requirement> mutated) -
permuteUsedBlameRequirement
private boolean permuteUsedBlameRequirement(org.osgi.resource.Requirement req, Set<org.osgi.resource.Requirement> mutated, 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, OpenHashMap<String, ResolverImpl.Blame> substitutes) -
isCompatible
private static boolean isCompatible(ResolverImpl.Blame currentBlame, Set<org.osgi.resource.Capability> candSources, Map<org.osgi.resource.Resource, ResolverImpl.Packages> resourcePkgMap) -
isCompatible
private static boolean isCompatible(List<ResolverImpl.Blame> currentBlames, Set<org.osgi.resource.Capability> candSources, 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(ResolverImpl.ResolveSession session, 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(ResolverImpl.ResolveSession session, 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)
-