private boolean resolveGenericReq(GenericConstraint constraint, List<ResolverBundle> cycle) { if (DEBUG_GENERICS) ResolverImpl.log("Trying to resolve: " + constraint.getBundle() + ", " + constraint.getVersionConstraint()); //$NON-NLS-1$ //$NON-NLS-2$ VersionSupplier matchingCapability = constraint.getSelectedSupplier(); if (matchingCapability != null) { if (!cycle.contains(constraint.getBundle())) { cycle.add(constraint.getBundle()); if (DEBUG_CYCLES) ResolverImpl.log("generic cycle: " + constraint.getBundle() + " -> " + constraint.getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$ VersionHashMap<GenericCapability> namespace = resolverGenerics.get(constraint.getNameSpace()); String name = constraint.getName(); List<GenericCapability> capabilities; if (namespace == null) if (!constraint.isSatisfiedBy(capability)) { iCandidates.remove(); } else { hook.filterMatches(constraint.getRequirement(), asCapabilities(new ArrayMap<BundleCapability, GenericCapability>(genCapabilities, candidates))); boolean result = false; constraint.addPossibleSupplier(capability); // Wire to the capability if (constraint.getBundle() == capability.getResolverBundle()) { result = true; // Wired to ourselves continue; cycle.add(supplier); } else { constraint.removePossibleSupplier(capability);
private boolean resolveOSGiEE(ResolverBundle bundle) { GenericConstraint[] requirements = bundle.getGenericRequires(); for (GenericConstraint requirement : requirements) { if (!(StateImpl.OSGI_EE_NAMESPACE.equals(requirement.getNameSpace()) || requirement.isEffective())) continue; { if (!resolveGenericReq(requirement, new ArrayList<ResolverBundle>(0))) { if (DEBUG || DEBUG_GENERICS) ResolverImpl.log("** GENERICS " + requirement.getVersionConstraint().getName() + "[" + requirement.getBundleDescription() + "] failed to resolve"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ state.addResolverError(requirement.getVersionConstraint().getBundle(), ResolverError.MISSING_GENERIC_CAPABILITY, requirement.getVersionConstraint().toString(), requirement.getVersionConstraint()); if (!developmentMode) { // fail fast; otherwise we want to attempt to resolver other constraints in dev mode return false; } } else { VersionSupplier supplier = requirement.getSelectedSupplier(); Integer ee = supplier == null ? null : (Integer) ((GenericDescription) supplier.getBaseDescription()).getAttributes().get(ExportPackageDescriptionImpl.EQUINOX_EE); if (ee != null && ((BundleDescriptionImpl) bundle.getBaseDescription()).getEquinoxEE() < 0) ((BundleDescriptionImpl) bundle.getBundleDescription()).setEquinoxEE(ee); } } } return true; }
private void rewireGeneric(GenericConstraint constraint, List<ResolverBundle> visited) { if (constraint.getSelectedSupplier() != null) return; GenericDescription[] suppliers = ((GenericSpecification) constraint.getVersionConstraint()).getSuppliers(); if (suppliers == null) return; VersionHashMap<GenericCapability> namespace = resolverGenerics.get(constraint.getNameSpace()); if (namespace == null) { System.err.println("Could not find matching capability for " + constraint.getVersionConstraint()); //$NON-NLS-1$ // TODO log error!! return; } String constraintName = constraint.getName(); List<GenericCapability> matches = constraintName == null ? namespace.get(constraintName) : namespace.getAllValues(); for (GenericCapability match : matches) { for (GenericDescription supplier : suppliers) if (match.getBaseDescription() == supplier) constraint.addPossibleSupplier(match); } VersionSupplier[] matchingCapabilities = constraint.getPossibleSuppliers(); if (matchingCapabilities != null) for (int i = 0; i < matchingCapabilities.length; i++) rewireBundle(matchingCapabilities[i].getResolverBundle(), visited); }
public VersionSupplier[] getMatchingCapabilities() { if (isMultiple()) return getPossibleSuppliers(); VersionSupplier supplier = getSelectedSupplier(); return supplier == null ? null : new VersionSupplier[] {supplier}; } }
List<GenericDescription> resolvedGenericRequires = new ArrayList<GenericDescription>(genericRequires.length); for (GenericConstraint genericConstraint : genericRequires) { VersionSupplier[] matching = genericConstraint.getMatchingCapabilities(); if (matching != null) for (VersionSupplier capability : matching) { GenericDescription supplier = ((GenericCapability) capability).getGenericDescription(); resolvedGenericRequires.add(supplier); StateWire genericWire = newStateWire(rb.getBundleDescription(), genericConstraint.getVersionConstraint(), supplier.getSupplier(), supplier); List<StateWire> genericWires = stateWires.get(genericConstraint.getNameSpace()); if (genericWires == null) { genericWires = new ArrayList<StateWire>(); stateWires.put(genericConstraint.getNameSpace(), genericWires);
private void stateResolveConstraints(ResolverBundle rb) { ResolverImport[] imports = rb.getImportPackages(); for (int i = 0; i < imports.length; i++) { ResolverExport export = (ResolverExport) imports[i].getSelectedSupplier(); BaseDescription supplier = export == null ? null : export.getExportPackageDescription(); state.resolveConstraint(imports[i].getVersionConstraint(), supplier); } BundleConstraint[] requires = rb.getRequires(); for (int i = 0; i < requires.length; i++) { ResolverBundle bundle = (ResolverBundle) requires[i].getSelectedSupplier(); BaseDescription supplier = bundle == null ? null : bundle.getBundleDescription(); state.resolveConstraint(requires[i].getVersionConstraint(), supplier); } GenericConstraint[] genericRequires = rb.getGenericRequires(); for (int i = 0; i < genericRequires.length; i++) { VersionSupplier[] matchingCapabilities = genericRequires[i].getMatchingCapabilities(); if (matchingCapabilities == null) state.resolveConstraint(genericRequires[i].getVersionConstraint(), null); else for (int j = 0; j < matchingCapabilities.length; j++) state.resolveConstraint(genericRequires[i].getVersionConstraint(), matchingCapabilities[j].getBaseDescription()); } }
groupingChecker.clear(); for (GenericConstraint multiConstraint : multiRequirementWithMultiSuppliers) { VersionSupplier[] matchingSuppliers = multiConstraint.getMatchingCapabilities(); if (matchingSuppliers != null) { for (VersionSupplier supplier : matchingSuppliers) { if (groupingChecker.isConsistent(multiConstraint.getBundle(), (GenericCapability) supplier) != null) { multiConstraint.removePossibleSupplier(supplier);
if (genericRequire.getNumPossibleSuppliers() > 1 && !genericRequire.isMultiple()) multipleGenericSupplierList.add(genericRequire); Map<String, List<List<ResolverConstraint>>> multipleGenericSupplierMaps = new HashMap<>(); for (GenericConstraint genericRequire : multipleGenericSupplierList) addMutipleSupplierConstraint(multipleGenericSupplierMaps, genericRequire, genericRequire.getNameSpace()); addMergedSuppliers(results, multipleImportSupplierMaps); addMergedSuppliers(results, multipleRequireSupplierMaps);
if (!resolveGenericReq(genericRequires[i], cycle)) { if (DEBUG || DEBUG_GENERICS) ResolverImpl.log("** GENERICS " + genericRequires[i].getVersionConstraint().getName() + "[" + genericRequires[i].getBundleDescription() + "] failed to resolve"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ state.addResolverError(genericRequires[i].getVersionConstraint().getBundle(), ResolverError.MISSING_GENERIC_CAPABILITY, genericRequires[i].getVersionConstraint().toString(), genericRequires[i].getVersionConstraint()); if (genericRequires[i].isFromFragment()) { if (!developmentMode) // only detach fragments when not in devmode bundle.detachFragment(bundleMapping.get(genericRequires[i].getVersionConstraint().getBundle()), null); continue;
if (genericRequire.getNumPossibleSuppliers() > 1 && genericRequire.supplierHasUses()) multipleGenericSupplierList.add(genericRequire); Map<String, List<List<ResolverConstraint>>> multipleGenericSupplierMaps = new HashMap<String, List<List<ResolverConstraint>>>(); for (GenericConstraint genericRequire : multipleGenericSupplierList) addMutipleSupplierConstraint(multipleGenericSupplierMaps, genericRequire, genericRequire.getNameSpace()); addMergedSuppliers(results, multipleImportSupplierMaps); addMergedSuppliers(results, multipleRequireSupplierMaps);
for (GenericSpecification requirement : requirements) { if (StateImpl.OSGI_EE_NAMESPACE.equals(requirement.getType())) constraints.add(new GenericConstraint(this, requirement)); genericReqiures = new GenericConstraint[actualGenericRequires.length]; for (int i = 0; i < genericReqiures.length; i++) genericReqiures[i] = new GenericConstraint(this, actualGenericRequires[i]);
VersionSupplier[] suppliers = capabilityRequirement.getMatchingCapabilities(); if (suppliers == null) continue; if (multiRequirementWithMultiSuppliers != null && capabilityRequirement.isMultiple() && suppliers.length > 1) { multiRequirementWithMultiSuppliers.add(capabilityRequirement);
void clearWires() { ResolverImport[] allImports = getImportPackages(); for (int i = 0; i < allImports.length; i++) allImports[i].clearPossibleSuppliers(); if (host != null) host.clearPossibleSuppliers(); BundleConstraint[] allRequires = getRequires(); for (int i = 0; i < allRequires.length; i++) allRequires[i].clearPossibleSuppliers(); GenericConstraint[] allGenericRequires = getGenericRequires(); for (int i = 0; i < allGenericRequires.length; i++) allGenericRequires[i].clearPossibleSuppliers(); ResolverExport[] allExports = getExportPackages(); for (int i = 0; i < allExports.length; i++) allExports[i].setSubstitute(null); }
VersionSupplier[] suppliers = capabilityRequirement.getMatchingCapabilities(); if (suppliers == null) continue;
public VersionSupplier[] getMatchingCapabilities() { if (isMultiple()) return getPossibleSuppliers(); VersionSupplier supplier = getSelectedSupplier(); return supplier == null ? null : new VersionSupplier[] {supplier}; } }
List<GenericDescription> resolvedGenericRequires = new ArrayList<GenericDescription>(genericRequires.length); for (GenericConstraint genericConstraint : genericRequires) { VersionSupplier[] matching = genericConstraint.getMatchingCapabilities(); if (matching != null) for (VersionSupplier capability : matching) { GenericDescription supplier = ((GenericCapability) capability).getGenericDescription(); resolvedGenericRequires.add(supplier); StateWire genericWire = newStateWire(rb.getBundleDescription(), genericConstraint.getVersionConstraint(), supplier.getSupplier(), supplier); List<StateWire> genericWires = stateWires.get(genericConstraint.getNameSpace()); if (genericWires == null) { genericWires = new ArrayList<StateWire>(); stateWires.put(genericConstraint.getNameSpace(), genericWires);
private void stateResolveConstraints(ResolverBundle rb) { ResolverImport[] imports = rb.getImportPackages(); for (int i = 0; i < imports.length; i++) { ResolverExport export = (ResolverExport) imports[i].getSelectedSupplier(); BaseDescription supplier = export == null ? null : export.getExportPackageDescription(); state.resolveConstraint(imports[i].getVersionConstraint(), supplier); } BundleConstraint[] requires = rb.getRequires(); for (int i = 0; i < requires.length; i++) { ResolverBundle bundle = (ResolverBundle) requires[i].getSelectedSupplier(); BaseDescription supplier = bundle == null ? null : bundle.getBundleDescription(); state.resolveConstraint(requires[i].getVersionConstraint(), supplier); } GenericConstraint[] genericRequires = rb.getGenericRequires(); for (int i = 0; i < genericRequires.length; i++) { VersionSupplier[] matchingCapabilities = genericRequires[i].getMatchingCapabilities(); if (matchingCapabilities == null) state.resolveConstraint(genericRequires[i].getVersionConstraint(), null); else for (int j = 0; j < matchingCapabilities.length; j++) state.resolveConstraint(genericRequires[i].getVersionConstraint(), matchingCapabilities[j].getBaseDescription()); } }
groupingChecker.clear(); for (GenericConstraint multiConstraint : multiRequirementWithMultiSuppliers) { VersionSupplier[] matchingSuppliers = multiConstraint.getMatchingCapabilities(); if (matchingSuppliers != null) { for (VersionSupplier supplier : matchingSuppliers) { if (groupingChecker.isConsistent(multiConstraint.getBundle(), (GenericCapability) supplier) != null) { multiConstraint.removePossibleSupplier(supplier);
if (genericRequire.getNumPossibleSuppliers() > 1 && !genericRequire.isMultiple()) multipleGenericSupplierList.add(genericRequire); Map<String, List<List<ResolverConstraint>>> multipleGenericSupplierMaps = new HashMap<String, List<List<ResolverConstraint>>>(); for (GenericConstraint genericRequire : multipleGenericSupplierList) addMutipleSupplierConstraint(multipleGenericSupplierMaps, genericRequire, genericRequire.getNameSpace()); addMergedSuppliers(results, multipleImportSupplierMaps); addMergedSuppliers(results, multipleRequireSupplierMaps);
if (genericRequire.getNumPossibleSuppliers() > 1 && genericRequire.supplierHasUses()) multipleGenericSupplierList.add(genericRequire); Map<String, List<List<ResolverConstraint>>> multipleGenericSupplierMaps = new HashMap<String, List<List<ResolverConstraint>>>(); for (GenericConstraint genericRequire : multipleGenericSupplierList) addMutipleSupplierConstraint(multipleGenericSupplierMaps, genericRequire, genericRequire.getNameSpace()); addMergedSuppliers(results, multipleImportSupplierMaps); addMergedSuppliers(results, multipleRequireSupplierMaps);