String[] getUsesDirective() { return (String[]) getExportPackageDescription().getDirective(Constants.USES_DIRECTIVE); } }
public void populateRoots(ResolverBundle importingBundle, ResolverExport export) { Map<String, PackageRoots> packageRoots = bundles.get(importingBundle); if (packageRoots != null) packageRoots.remove(export.getName()); PackageRoots roots = getPackageRoots(export.getExporter(), export.getName(), null); packageRoots.put(export.getName(), roots); }
private ResolverExport[] getExports(boolean selected) { ResolverExport[] results = getExportPackages(); int removedExports = 0; for (int i = 0; i < results.length; i++) if (selected ? results[i].getSubstitute() != null : results[i].getSubstitute() == null) removedExports++; if (removedExports == 0) return results; ResolverExport[] selectedExports = new ResolverExport[results.length - removedExports]; int index = 0; for (int i = 0; i < results.length; i++) { if (selected ? results[i].getSubstitute() != null : results[i].getSubstitute() == null) continue; selectedExports[index] = results[i]; index++; } return selectedExports; }
iCandidates.remove(); } else { capabilities.add(export.getCapability()); ResolverImpl.log("CHECKING: " + export.getExporter().getBundleDescription() + ", " + export.getName()); //$NON-NLS-1$ //$NON-NLS-2$ int originalState = export.getExporter().getState(); if (imp.isDynamic() && originalState != ResolverBundle.RESOLVED) continue; // Must not attempt to resolve an exporter when dynamic if (imp.getSelectedSupplier() != null && ((ResolverExport) imp.getSelectedSupplier()).getExporter() == imp.getBundle()) break; // We wired to ourselves; nobody else matters if (imp.getBundle() != export.getExporter()) { for (int j = 0; j < substitutableExps.length; j++) if (substitutableExps[j].getSubstitute() == null) substitutableExps[j].setSubstitute(export); // Import wins, drop export if ((originalState != ResolverBundle.RESOLVED && !resolveBundle(export.getExporter(), cycle) && !developmentMode) || export.getSubstitute() != null) { if (substitutableExps[j].getSubstitute() == export) substitutableExps[j].setSubstitute(null); continue; // Bundle hasn't resolved || export has not been selected and is unavailable } else if (export.getSubstitute() != null) continue; // we already found a possible import that satisifies us; our export is dropped if (imp.getBundle() != export.getExporter()) if (export.getExporter().getState() == ResolverBundle.RESOLVING) {
for (int i = 0; i < size; i++) { ResolverExport root = roots[i]; String[] uses = root.getUsesDirective(); if (uses == null) continue; visited.add(this); for (int j = 0; j < uses.length; j++) { if (uses[j].equals(root.getName()) || !uses[j].equals(exportingRoots.name)) continue; PackageRoots thisUsedRoots = getPackageRoots(root.getExporter(), uses[j], null); PackageRoots exportingUsedRoots = getPackageRoots(exporter, uses[j], null); if (thisUsedRoots == exportingRoots)
ResolverBundle getResolverBundle() { return getExporter(); }
private void rewireImport(ResolverImport imp, List<ResolverBundle> visited) { if (imp.isDynamic() || imp.getSelectedSupplier() != null) return; // Re-wire 'imp' ResolverExport matchingExport = null; ExportPackageDescription importSupplier = (ExportPackageDescription) imp.getVersionConstraint().getSupplier(); ResolverBundle exporter = importSupplier == null ? null : (ResolverBundle) bundleMapping.get(importSupplier.getExporter()); List<ResolverExport> matches = resolverExports.get(imp.getName()); for (ResolverExport export : matches) { if (export.getExporter() == exporter && importSupplier == export.getExportPackageDescription()) { matchingExport = export; break; } } imp.addPossibleSupplier(matchingExport); // If we still have a null wire and it's not optional, then we have an error if (imp.getSelectedSupplier() == null && !imp.isOptional()) { System.err.println("Could not find matching export for " + imp.getVersionConstraint()); //$NON-NLS-1$ // TODO log error!! } if (imp.getSelectedSupplier() != null) { rewireBundle(((ResolverExport) imp.getSelectedSupplier()).getExporter(), visited); } }
for (int i = 0; i < results.length; i++) results[i].setSubstitute(results[i]); resolver.getResolverExports().remove(results); if (removedCapabilities != null)
hostExports.add(new ResolverExport(this, hostExport));
private void printConflict(PackageRoots[][] conflict, ResolverConstraint constraint, ResolverBundle bundle) { System.out.println("Found conflict for bundle: " + bundle + ", when trying to resolve constraint: " + constraint); //$NON-NLS-1$//$NON-NLS-2$ for (PackageRoots[] rootConflicts : conflict) { ResolverExport export0 = rootConflicts[0].getRoots()[0]; ResolverExport export1 = rootConflicts[1].getRoots()[0]; System.out.println(" " + export0 + ", provided by bundle: " + export0.getResolverBundle() + " conflicts with " + export1 + ", provided by bundle: " + export1.getResolverBundle()); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } }
iCandidates.remove(); } else { capabilities.add(export.getCapability()); ResolverImpl.log("CHECKING: " + export.getExporter().getBundleDescription() + ", " + export.getName()); //$NON-NLS-1$ //$NON-NLS-2$ int originalState = export.getExporter().getState(); if (imp.isDynamic() && originalState != ResolverBundle.RESOLVED) continue; // Must not attempt to resolve an exporter when dynamic if (imp.getSelectedSupplier() != null && ((ResolverExport) imp.getSelectedSupplier()).getExporter() == imp.getBundle()) break; // We wired to ourselves; nobody else matters if (imp.getBundle() != export.getExporter()) { for (int j = 0; j < substitutableExps.length; j++) if (substitutableExps[j].getSubstitute() == null) substitutableExps[j].setSubstitute(export); // Import wins, drop export if ((originalState != ResolverBundle.RESOLVED && !resolveBundle(export.getExporter(), cycle) && !developmentMode) || export.getSubstitute() != null) { if (substitutableExps[j].getSubstitute() == export) substitutableExps[j].setSubstitute(null); continue; // Bundle hasn't resolved || export has not been selected and is unavailable } else if (export.getSubstitute() != null) continue; // we already found a possible import that satisifies us; our export is dropped if (imp.getBundle() != export.getExporter()) if (export.getExporter().getState() == ResolverBundle.RESOLVING) {
for (int i = 0; i < size; i++) { ResolverExport root = roots[i]; String[] uses = root.getUsesDirective(); if (uses == null) continue; visited.add(this); for (int j = 0; j < uses.length; j++) { if (uses[j].equals(root.getName()) || !uses[j].equals(exportingRoots.name)) continue; PackageRoots thisUsedRoots = getPackageRoots(root.getExporter(), uses[j], null); PackageRoots exportingUsedRoots = getPackageRoots(exporter, uses[j], null); if (thisUsedRoots == exportingRoots)
private boolean subSet(ResolverExport[] superSet, ResolverExport[] subSet) { for (int i = 0; i < subSet.length; i++) { boolean found = false; for (int j = 0; j < superSet.length; j++) // compare by exporter in case the bundle exports the package multiple times if (subSet[i].getExporter() == superSet[j].getExporter()) { found = true; break; } if (!found) return false; } return true; }
private void rewireImport(ResolverImport imp, List<ResolverBundle> visited) { if (imp.isDynamic() || imp.getSelectedSupplier() != null) return; // Re-wire 'imp' ResolverExport matchingExport = null; ExportPackageDescription importSupplier = (ExportPackageDescription) imp.getVersionConstraint().getSupplier(); ResolverBundle exporter = importSupplier == null ? null : (ResolverBundle) bundleMapping.get(importSupplier.getExporter()); List<ResolverExport> matches = resolverExports.get(imp.getName()); for (ResolverExport export : matches) { if (export.getExporter() == exporter && importSupplier == export.getExportPackageDescription()) { matchingExport = export; break; } } imp.addPossibleSupplier(matchingExport); // If we still have a null wire and it's not optional, then we have an error if (imp.getSelectedSupplier() == null && !imp.isOptional()) { System.err.println("Could not find matching export for " + imp.getVersionConstraint()); //$NON-NLS-1$ // TODO log error!! } if (imp.getSelectedSupplier() != null) { rewireBundle(((ResolverExport) imp.getSelectedSupplier()).getExporter(), visited); } }
for (int i = 0; i < results.length; i++) results[i].setSubstitute(results[i]); resolver.getResolverExports().remove(results); if (removedCapabilities != null)
hostExports.add(new ResolverExport(this, hostExport));
private void printConflict(PackageRoots[][] conflict, ResolverConstraint constraint, ResolverBundle bundle) { System.out.println("Found conflict for bundle: " + bundle + ", when trying to resolve constraint: " + constraint); //$NON-NLS-1$//$NON-NLS-2$ for (PackageRoots[] rootConflicts : conflict) { ResolverExport export0 = rootConflicts[0].getRoots()[0]; ResolverExport export1 = rootConflicts[1].getRoots()[0]; System.out.println(" " + export0 + ", provided by bundle: " + export0.getResolverBundle() + " conflicts with " + export1 + ", provided by bundle: " + export1.getResolverBundle()); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } }
iCandidates.remove(); } else { capabilities.add(export.getCapability()); ResolverImpl.log("CHECKING: " + export.getExporter().getBundleDescription() + ", " + export.getName()); //$NON-NLS-1$ //$NON-NLS-2$ int originalState = export.getExporter().getState(); if (imp.isDynamic() && originalState != ResolverBundle.RESOLVED) continue; // Must not attempt to resolve an exporter when dynamic if (imp.getSelectedSupplier() != null && ((ResolverExport) imp.getSelectedSupplier()).getExporter() == imp.getBundle()) break; // We wired to ourselves; nobody else matters if (imp.getBundle() != export.getExporter()) { for (int j = 0; j < substitutableExps.length; j++) if (substitutableExps[j].getSubstitute() == null) substitutableExps[j].setSubstitute(export); // Import wins, drop export if ((originalState != ResolverBundle.RESOLVED && !resolveBundle(export.getExporter(), cycle) && !developmentMode) || export.getSubstitute() != null) { if (substitutableExps[j].getSubstitute() == export) substitutableExps[j].setSubstitute(null); continue; // Bundle hasn't resolved || export has not been selected and is unavailable } else if (export.getSubstitute() != null) continue; // we already found a possible import that satisifies us; our export is dropped if (imp.getBundle() != export.getExporter()) if (export.getExporter().getState() == ResolverBundle.RESOLVING) {
for (int i = 0; i < size; i++) { ResolverExport root = roots[i]; String[] uses = root.getUsesDirective(); if (uses == null) continue; visited.add(this); for (int j = 0; j < uses.length; j++) { if (uses[j].equals(root.getName()) || !uses[j].equals(exportingRoots.name)) continue; PackageRoots thisUsedRoots = getPackageRoots(root.getExporter(), uses[j], null); PackageRoots exportingUsedRoots = getPackageRoots(exporter, uses[j], null); if (thisUsedRoots == exportingRoots)
public void populateRoots(ResolverBundle importingBundle, ResolverExport export) { Map<String, PackageRoots> packageRoots = bundles.get(importingBundle); if (packageRoots != null) packageRoots.remove(export.getName()); PackageRoots roots = getPackageRoots(export.getExporter(), export.getName(), null); packageRoots.put(export.getName(), roots); }