Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java')
-rw-r--r--bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java424
1 files changed, 229 insertions, 195 deletions
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java
index 90e28d7f4..0ddf0183a 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java
@@ -131,18 +131,18 @@ public class ResolverImpl implements Resolver {
ArrayList<ResolverBundle> fragmentBundles = new ArrayList<>();
// Add each bundle to the resolver's internal state
- for (int i = 0; i < bundles.length; i++)
- initResolverBundle(bundles[i], fragmentBundles, false);
+ for (BundleDescription bundle : bundles) {
+ initResolverBundle(bundle, fragmentBundles, false);
+ }
// Add each removal pending bundle to the resolver's internal state
List<BundleDescription> removedBundles = removalPending.getAllValues();
for (BundleDescription removed : removedBundles)
initResolverBundle(removed, fragmentBundles, true);
// Iterate over the resolved fragments and attach them to their hosts
- for (Iterator<ResolverBundle> iter = fragmentBundles.iterator(); iter.hasNext();) {
- ResolverBundle fragment = iter.next();
+ for (ResolverBundle fragment : fragmentBundles) {
BundleDescription[] hosts = ((HostSpecification) fragment.getHost().getVersionConstraint()).getHosts();
- for (int i = 0; i < hosts.length; i++) {
- ResolverBundle host = bundleMapping.get(hosts[i]);
+ for (BundleDescription h : hosts) {
+ ResolverBundle host = bundleMapping.get(h);
if (host != null)
// Do not add fragment exports here because they would have been added by the host above.
host.attachFragment(fragment, false);
@@ -187,18 +187,19 @@ public class ResolverImpl implements Resolver {
visited.add(rb);
// Wire requires to bundles
BundleConstraint[] requires = rb.getRequires();
- for (int i = 0; i < requires.length; i++) {
- rewireRequire(requires[i], visited);
+ for (BundleConstraint require : requires) {
+ rewireRequire(require, visited);
}
// Wire imports to exports
ResolverImport[] imports = rb.getImportPackages();
- for (int i = 0; i < imports.length; i++) {
- rewireImport(imports[i], visited);
+ for (ResolverImport resolverImport : imports) {
+ rewireImport(resolverImport, visited);
}
// Wire generics
GenericConstraint[] genericRequires = rb.getGenericRequires();
- for (int i = 0; i < genericRequires.length; i++)
- rewireGeneric(genericRequires[i], visited);
+ for (GenericConstraint genericRequire : genericRequires) {
+ rewireGeneric(genericRequire, visited);
+ }
}
private void rewireGeneric(GenericConstraint constraint, List<ResolverBundle> visited) {
@@ -222,8 +223,9 @@ public class ResolverImpl implements Resolver {
}
VersionSupplier[] matchingCapabilities = constraint.getPossibleSuppliers();
if (matchingCapabilities != null)
- for (int i = 0; i < matchingCapabilities.length; i++)
- rewireBundle(matchingCapabilities[i].getResolverBundle(), visited);
+ for (VersionSupplier matchingCapability : matchingCapabilities) {
+ rewireBundle(matchingCapability.getResolverBundle(), visited);
+ }
}
private void rewireRequire(BundleConstraint req, List<ResolverBundle> visited) {
@@ -317,9 +319,11 @@ public class ResolverImpl implements Resolver {
if (nativeCode != null) {
NativeCodeDescription[] nativeCodeSuppliers = nativeCode.getPossibleSuppliers();
NativeCodeDescription highestRanked = null;
- for (int i = 0; i < nativeCodeSuppliers.length; i++)
- if (nativeCode.isSatisfiedBy(nativeCodeSuppliers[i]) && (highestRanked == null || highestRanked.compareTo(nativeCodeSuppliers[i]) < 0))
- highestRanked = nativeCodeSuppliers[i];
+ for (NativeCodeDescription nativeCodeSupplier : nativeCodeSuppliers) {
+ if (nativeCode.isSatisfiedBy(nativeCodeSupplier) && (highestRanked == null || highestRanked.compareTo(nativeCodeSupplier) < 0)) {
+ highestRanked = nativeCodeSupplier;
+ }
+ }
if (highestRanked == null) {
if (!nativeCode.isOptional()) {
state.addResolverError(bundleDesc, ResolverError.NO_NATIVECODE_MATCH, nativeCode.toString(), nativeCode);
@@ -342,10 +346,10 @@ public class ResolverImpl implements Resolver {
return false;
try {
Filter filter = FilterImpl.newInstance(platformFilter);
- for (int i = 0; i < platformProperties.length; i++) {
+ for (Dictionary<Object, Object> platformProperty : platformProperties) {
// using matchCase here in case of duplicate case invarient keys (bug 180817)
- @SuppressWarnings("rawtypes")
- Dictionary props = platformProperties[i];
+ @SuppressWarnings(value = "rawtypes")
+ Dictionary props = platformProperty;
if (filter.matchCase(props))
return true;
}
@@ -459,8 +463,8 @@ public class ResolverImpl implements Resolver {
reRefresh = addDevConstraints(reRefresh);
// Unresolve all the supplied bundles and their dependents
if (reRefresh != null)
- for (int i = 0; i < reRefresh.length; i++) {
- ResolverBundle rb = bundleMapping.get(reRefresh[i]);
+ for (BundleDescription description : reRefresh) {
+ ResolverBundle rb = bundleMapping.get(description);
if (rb != null)
unresolveBundle(rb, false);
}
@@ -588,10 +592,10 @@ public class ResolverImpl implements Resolver {
// when in develoment mode we need to reRefresh hosts of unresolved fragments that add new constraints
// and reRefresh and unresolved bundles that have dependents
Set<BundleDescription> additionalRefresh = new HashSet<>();
- ResolverBundle[] unresolved = unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
- for (int i = 0; i < unresolved.length; i++) {
- addUnresolvedWithDependents(unresolved[i], additionalRefresh);
- addHostsFromFragmentConstraints(unresolved[i], additionalRefresh);
+ ResolverBundle[] allUnresolved = unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
+ for (ResolverBundle unresolved : allUnresolved ) {
+ addUnresolvedWithDependents(unresolved, additionalRefresh);
+ addHostsFromFragmentConstraints(unresolved, additionalRefresh);
}
if (additionalRefresh.size() == 0)
return reRefresh; // no new bundles found to refresh
@@ -626,9 +630,9 @@ public class ResolverImpl implements Resolver {
private Collection<ResolverBundle> resolveOptionalConstraints(ResolverBundle[] bundles) {
Collection<ResolverBundle> result = new ArrayList<>();
- for (int i = 0; i < bundles.length; i++) {
- if (bundles[i] != null && resolveOptionalConstraints(bundles[i])) {
- result.add(bundles[i]);
+ for (ResolverBundle bundle : bundles) {
+ if (bundle != null && resolveOptionalConstraints(bundle)) {
+ result.add(bundle);
}
}
return result;
@@ -639,21 +643,25 @@ public class ResolverImpl implements Resolver {
BundleConstraint[] requires = bundle.getRequires();
List<ResolverBundle> cycle = new ArrayList<>();
boolean resolvedOptional = false;
- for (int i = 0; i < requires.length; i++)
- if (requires[i].isOptional() && requires[i].getSelectedSupplier() == null) {
+ for (BundleConstraint require : requires) {
+ if (require.isOptional() && require.getSelectedSupplier() == null) {
cycle.clear();
- resolveRequire(requires[i], cycle);
- if (requires[i].getSelectedSupplier() != null)
+ resolveRequire(require, cycle);
+ if (require.getSelectedSupplier() != null) {
resolvedOptional = true;
+ }
}
+ }
ResolverImport[] imports = bundle.getImportPackages();
- for (int i = 0; i < imports.length; i++)
- if (imports[i].isOptional() && imports[i].getSelectedSupplier() == null) {
+ for (ResolverImport resolverImport : imports) {
+ if (resolverImport.isOptional() && resolverImport.getSelectedSupplier() == null) {
cycle.clear();
- resolveImport(imports[i], cycle);
- if (imports[i].getSelectedSupplier() != null)
+ resolveImport(resolverImport, cycle);
+ if (resolverImport.getSelectedSupplier() != null) {
resolvedOptional = true;
+ }
}
+ }
return resolvedOptional;
}
@@ -796,17 +804,19 @@ public class ResolverImpl implements Resolver {
Arrays.sort(bundles);
// First attach all fragments to the matching hosts
Collection<String> processedFragments = new HashSet<>(bundles.length);
- for (int i = 0; i < bundles.length; i++)
- attachFragment(bundles[i], processedFragments);
+ for (ResolverBundle bundle : bundles) {
+ attachFragment(bundle, processedFragments);
+ }
// Lists of cyclic dependencies recording during resolving
List<ResolverBundle> cycle = new ArrayList<>(1); // start small
// Attempt to resolve all unresolved bundles
- for (int i = 0; i < bundles.length; i++) {
- if (DEBUG)
- ResolverImpl.log("** RESOLVING " + bundles[i] + " **"); //$NON-NLS-1$ //$NON-NLS-2$
+ for (ResolverBundle bundle : bundles) {
+ if (DEBUG) {
+ ResolverImpl.log("** RESOLVING " + bundle + " **"); //$NON-NLS-1$ //$NON-NLS-2$
+ }
cycle.clear();
- resolveBundle(bundles[i], cycle);
+ resolveBundle(bundle, cycle);
// Check for any bundles involved in a cycle.
// if any bundles in the cycle are not resolved then we need to resolve the resolvable ones
checkCycle(cycle);
@@ -814,8 +824,9 @@ public class ResolverImpl implements Resolver {
// Resolve all fragments that are still attached to at least one host.
if (unresolvedBundles.size() > 0) {
ResolverBundle[] unresolved = unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
- for (int i = 0; i < unresolved.length; i++)
- resolveFragment(unresolved[i]);
+ for (ResolverBundle toResolve : unresolved) {
+ resolveFragment(toResolve);
+ }
}
checkUsesConstraints(bundles, platformProperties);
checkComposites(bundles, platformProperties);
@@ -826,20 +837,21 @@ public class ResolverImpl implements Resolver {
if (helpers == null)
return;
Set<ResolverBundle> exclude = null;
- for (int i = 0; i < bundles.length; i++) {
- CompositeResolveHelper helper = helpers.getCompositeResolveHelper(bundles[i].getBundleDescription());
+ for (ResolverBundle bundle : bundles) {
+ CompositeResolveHelper helper = helpers.getCompositeResolveHelper(bundle.getBundleDescription());
if (helper == null)
continue;
- if (!bundles[i].isResolved())
+ if (!bundle.isResolved()) {
continue;
- if (!helper.giveExports(getExportsWiredTo(bundles[i], null))) {
- state.addResolverError(bundles[i].getBundleDescription(), ResolverError.DISABLED_BUNDLE, null, null);
- bundles[i].setResolvable(false);
+ }
+ if (!helper.giveExports(getExportsWiredTo(bundle, null))) {
+ state.addResolverError(bundle.getBundleDescription(), ResolverError.DISABLED_BUNDLE, null, null);
+ bundle.setResolvable(false);
// We pass false for keepFragmentsAttached because we need to redo the attachments (bug 272561)
- setBundleUnresolved(bundles[i], false, false);
+ setBundleUnresolved(bundle, false, false);
if (exclude == null)
exclude = new HashSet<>(1);
- exclude.add(bundles[i]);
+ exclude.add(bundle);
}
}
reResolveBundles(exclude, bundles, platformProperties);
@@ -880,11 +892,11 @@ public class ResolverImpl implements Resolver {
if (exclude == null || exclude.size() == 0)
return;
List<ResolverBundle> remainingUnresolved = new ArrayList<>();
- for (int i = 0; i < bundles.length; i++) {
- if (!exclude.contains(bundles[i])) {
+ for (ResolverBundle bundle : bundles) {
+ if (!exclude.contains(bundle)) {
// We pass false for keepFragmentsAttached because we need to redo the attachments (bug 272561)
- setBundleUnresolved(bundles[i], false, false);
- remainingUnresolved.add(bundles[i]);
+ setBundleUnresolved(bundle, false, false);
+ remainingUnresolved.add(bundle);
}
}
resolveBundles0(remainingUnresolved.toArray(new ResolverBundle[remainingUnresolved.size()]), platformProperties);
@@ -917,8 +929,7 @@ public class ResolverImpl implements Resolver {
printCombination(bestCombination);
}
for (int i = 0; i < bestCombination.length; i++) {
- for (int j = 0; j < multipleSuppliers[i].length; j++) {
- ResolverConstraint constraint = multipleSuppliers[i][j];
+ for (ResolverConstraint constraint : multipleSuppliers[i]) {
constraint.setSelectedSupplier(bestCombination[i]);
// sanity check to make sure we did not just get wired to our own dropped export
VersionSupplier selectedSupplier = constraint.getSelectedSupplier();
@@ -1043,8 +1054,9 @@ public class ResolverImpl implements Resolver {
multipleSuppliers[current][i].selectNextSupplier();
return true; // the current slot has a next supplier
}
- for (int i = 0; i < multipleSuppliers[current].length; i++)
- multipleSuppliers[current][i].setSelectedSupplier(0); // reset the current slot
+ for (ResolverConstraint multipleSupplier : multipleSuppliers[current]) {
+ multipleSupplier.setSelectedSupplier(0); // reset the current slot
+ }
current++; // move to the next slot
}
return false;
@@ -1064,40 +1076,39 @@ public class ResolverImpl implements Resolver {
private List<ResolverConstraint> getConflicts(ResolverBundle[] bundles, Set<String> packageConstraints, Set<String> bundleConstraints, Collection<GenericConstraint> multiRequirementWithMultiSuppliers) {
groupingChecker.clear();
List<ResolverConstraint> conflicts = null;
- for (int i = 0; i < bundles.length; i++)
- conflicts = addConflicts(bundles[i], packageConstraints, bundleConstraints, multiRequirementWithMultiSuppliers, conflicts);
+ for (ResolverBundle bundle : bundles) {
+ conflicts = addConflicts(bundle, packageConstraints, bundleConstraints, multiRequirementWithMultiSuppliers, conflicts);
+ }
return conflicts;
}
private List<ResolverConstraint> addConflicts(ResolverBundle bundle, Set<String> packageConstraints, Set<String> bundleConstraints, Collection<GenericConstraint> multiRequirementWithMultiSuppliers, List<ResolverConstraint> conflicts) {
BundleConstraint[] requires = bundle.getRequires();
- for (int i = 0; i < requires.length; i++) {
- ResolverBundle selectedSupplier = (ResolverBundle) requires[i].getSelectedSupplier();
+ for (BundleConstraint require : requires) {
+ ResolverBundle selectedSupplier = (ResolverBundle) require.getSelectedSupplier();
PackageRoots[][] conflict = selectedSupplier == null ? null : groupingChecker.isConsistent(bundle, selectedSupplier);
if (conflict != null) {
addConflictNames(conflict, packageConstraints, bundleConstraints);
-
- if (DEBUG_CONFLICTS)
- printConflict(conflict, requires[i], bundle);
-
+ if (DEBUG_CONFLICTS) {
+ printConflict(conflict, require, bundle);
+ }
if (conflicts == null)
conflicts = new ArrayList<>(1);
- conflicts.add(requires[i]);
+ conflicts.add(require);
}
}
ResolverImport[] imports = bundle.getImportPackages();
- for (int i = 0; i < imports.length; i++) {
- ResolverExport selectedSupplier = (ResolverExport) imports[i].getSelectedSupplier();
+ for (ResolverImport importConflict : imports) {
+ ResolverExport selectedSupplier = (ResolverExport) importConflict.getSelectedSupplier();
PackageRoots[][] conflict = selectedSupplier == null ? null : groupingChecker.isConsistent(bundle, selectedSupplier);
if (conflict != null) {
addConflictNames(conflict, packageConstraints, bundleConstraints);
-
- if (DEBUG_CONFLICTS)
- printConflict(conflict, imports[i], bundle);
-
+ if (DEBUG_CONFLICTS) {
+ printConflict(conflict, importConflict, bundle);
+ }
if (conflicts == null)
conflicts = new ArrayList<>(1);
- conflicts.add(imports[i]);
+ conflicts.add(importConflict);
}
}
@@ -1147,26 +1158,28 @@ public class ResolverImpl implements Resolver {
}
// records the conflict names we can use to scope down the list of multiple suppliers
- private void addConflictNames(PackageRoots[][] conflict, Set<String> packageConstraints, Set<String> bundleConstraints) {
+ private void addConflictNames(PackageRoots[][] conflicts, Set<String> packageConstraints, Set<String> bundleConstraints) {
if (packageConstraints == null || bundleConstraints == null)
return;
- for (int i = 0; i < conflict.length; i++) {
- packageConstraints.add(conflict[i][0].getName());
- packageConstraints.add(conflict[i][1].getName());
- ResolverExport[] exports0 = conflict[i][0].getRoots();
- if (exports0 != null)
- for (int j = 0; j < exports0.length; j++) {
- ResolverBundle exporter = exports0[j].getExporter();
+ for (PackageRoots[] conflict : conflicts) {
+ packageConstraints.add(conflict[0].getName());
+ packageConstraints.add(conflict[1].getName());
+ ResolverExport[] exports0 = conflict[0].getRoots();
+ if (exports0 != null) {
+ for (ResolverExport exportConflict : exports0) {
+ ResolverBundle exporter = exportConflict.getExporter();
if (exporter != null && exporter.getName() != null)
bundleConstraints.add(exporter.getName());
}
- ResolverExport[] exports1 = conflict[i][1].getRoots();
- if (exports1 != null)
- for (int j = 0; j < exports1.length; j++) {
- ResolverBundle exporter = exports1[j].getExporter();
+ }
+ ResolverExport[] exports1 = conflict[1].getRoots();
+ if (exports1 != null) {
+ for (ResolverExport exportConflict : exports1) {
+ ResolverBundle exporter = exportConflict.getExporter();
if (exporter != null && exporter.getName() != null)
bundleConstraints.add(exporter.getName());
}
+ }
}
}
@@ -1313,18 +1326,19 @@ public class ResolverImpl implements Resolver {
}
// Check that we haven't wired to any dropped exports
ResolverImport[] imports = cycleBundle.getImportPackages();
- for (int j = 0; j < imports.length; j++) {
+ for (ResolverImport resolverImport : imports) {
// check for dropped exports
- while (imports[j].getSelectedSupplier() != null) {
- ResolverExport importSupplier = (ResolverExport) imports[j].getSelectedSupplier();
- if (importSupplier.getSubstitute() != null)
- imports[j].selectNextSupplier();
- else
+ while (resolverImport.getSelectedSupplier() != null) {
+ ResolverExport importSupplier = (ResolverExport) resolverImport.getSelectedSupplier();
+ if (importSupplier.getSubstitute() != null) {
+ resolverImport.selectNextSupplier();
+ } else {
break;
+ }
}
- if (!imports[j].isDynamic() && !imports[j].isOptional() && imports[j].getSelectedSupplier() == null) {
+ if (!resolverImport.isDynamic() && !resolverImport.isOptional() && resolverImport.getSelectedSupplier() == null) {
cycleBundle.setResolvable(false);
- state.addResolverError(imports[j].getVersionConstraint().getBundle(), ResolverError.MISSING_IMPORT_PACKAGE, imports[j].getVersionConstraint().toString(), imports[j].getVersionConstraint());
+ state.addResolverError(resolverImport.getVersionConstraint().getBundle(), ResolverError.MISSING_IMPORT_PACKAGE, resolverImport.getVersionConstraint().toString(), resolverImport.getVersionConstraint());
iCycle.remove();
continue cycleLoop;
}
@@ -1394,15 +1408,17 @@ public class ResolverImpl implements Resolver {
if (!failed) {
GenericConstraint[] genericRequires = bundle.getGenericRequires();
- for (int i = 0; i < genericRequires.length; i++) {
- if (genericRequires[i].isEffective()) {
- 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);
+ for (GenericConstraint genericRequire : genericRequires) {
+ if (genericRequire.isEffective()) {
+ if (!resolveGenericReq(genericRequire, cycle)) {
+ if (DEBUG || DEBUG_GENERICS) {
+ ResolverImpl.log("** GENERICS " + genericRequire.getVersionConstraint().getName() + "[" + genericRequire.getBundleDescription() + "] failed to resolve"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ state.addResolverError(genericRequire.getVersionConstraint().getBundle(), ResolverError.MISSING_GENERIC_CAPABILITY, genericRequire.getVersionConstraint().toString(), genericRequire.getVersionConstraint());
+ if (genericRequire.isFromFragment()) {
+ if (!developmentMode) { // only detach fragments when not in devmode
+ bundle.detachFragment(bundleMapping.get(genericRequire.getVersionConstraint().getBundle()), null);
+ }
continue;
}
if (!developmentMode) {
@@ -1411,8 +1427,8 @@ public class ResolverImpl implements Resolver {
break;
}
} else {
- if (StateImpl.OSGI_EE_NAMESPACE.equals(genericRequires[i].getNameSpace())) {
- VersionSupplier supplier = genericRequires[i].getSelectedSupplier();
+ if (StateImpl.OSGI_EE_NAMESPACE.equals(genericRequire.getNameSpace())) {
+ VersionSupplier supplier = genericRequire.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);
@@ -1425,15 +1441,17 @@ public class ResolverImpl implements Resolver {
if (!failed) {
// Iterate thru required bundles of 'bundle' trying to find matching bundles.
BundleConstraint[] requires = bundle.getRequires();
- for (int i = 0; i < requires.length; i++) {
- if (!resolveRequire(requires[i], cycle)) {
- if (DEBUG || DEBUG_REQUIRES)
- ResolverImpl.log("** REQUIRE " + requires[i].getVersionConstraint().getName() + "[" + requires[i].getBundleDescription() + "] failed to resolve"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- state.addResolverError(requires[i].getVersionConstraint().getBundle(), ResolverError.MISSING_REQUIRE_BUNDLE, requires[i].getVersionConstraint().toString(), requires[i].getVersionConstraint());
+ for (BundleConstraint require : requires) {
+ if (!resolveRequire(require, cycle)) {
+ if (DEBUG || DEBUG_REQUIRES) {
+ ResolverImpl.log("** REQUIRE " + require.getVersionConstraint().getName() + "[" + require.getBundleDescription() + "] failed to resolve"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
+ state.addResolverError(require.getVersionConstraint().getBundle(), ResolverError.MISSING_REQUIRE_BUNDLE, require.getVersionConstraint().toString(), require.getVersionConstraint());
// If the require has failed to resolve and it is from a fragment, then remove the fragment from the host
- if (requires[i].isFromFragment()) {
- if (!developmentMode) // only detach fragments when not in devmode
- bundle.detachFragment(bundleMapping.get(requires[i].getVersionConstraint().getBundle()), requires[i]);
+ if (require.isFromFragment()) {
+ if (!developmentMode) { // only detach fragments when not in devmode
+ bundle.detachFragment(bundleMapping.get(require.getVersionConstraint().getBundle()), require);
+ }
continue;
}
if (!developmentMode) {
@@ -1448,16 +1466,18 @@ public class ResolverImpl implements Resolver {
if (!failed) {
// Iterate thru imports of 'bundle' trying to find matching exports.
ResolverImport[] imports = bundle.getImportPackages();
- for (int i = 0; i < imports.length; i++) {
+ for (ResolverImport resolverImport : imports) {
// Only resolve non-dynamic imports here
- if (!imports[i].isDynamic() && !resolveImport(imports[i], cycle)) {
- if (DEBUG || DEBUG_IMPORTS)
- ResolverImpl.log("** IMPORT " + imports[i].getName() + "[" + imports[i].getBundleDescription() + "] failed to resolve"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ if (!resolverImport.isDynamic() && !resolveImport(resolverImport, cycle)) {
+ if (DEBUG || DEBUG_IMPORTS) {
+ ResolverImpl.log("** IMPORT " + resolverImport.getName() + "[" + resolverImport.getBundleDescription() + "] failed to resolve"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
// If the import has failed to resolve and it is from a fragment, then remove the fragment from the host
- state.addResolverError(imports[i].getVersionConstraint().getBundle(), ResolverError.MISSING_IMPORT_PACKAGE, imports[i].getVersionConstraint().toString(), imports[i].getVersionConstraint());
- if (imports[i].isFromFragment()) {
- if (!developmentMode) // only detach fragments when not in devmode
- bundle.detachFragment(bundleMapping.get(imports[i].getVersionConstraint().getBundle()), imports[i]);
+ state.addResolverError(resolverImport.getVersionConstraint().getBundle(), ResolverError.MISSING_IMPORT_PACKAGE, resolverImport.getVersionConstraint().toString(), resolverImport.getVersionConstraint());
+ if (resolverImport.isFromFragment()) {
+ if (!developmentMode) { // only detach fragments when not in devmode
+ bundle.detachFragment(bundleMapping.get(resolverImport.getVersionConstraint().getBundle()), resolverImport);
+ }
continue;
}
if (!developmentMode) {
@@ -1498,11 +1518,12 @@ public class ResolverImpl implements Resolver {
// get all currently attached fragments and ensure that any constraints
// they have do not conflict with the constraints resolved to by the host
ResolverBundle[] fragments = bundle.getFragments();
- for (int i = 0; i < fragments.length; i++) {
- BundleDescription fragment = fragments[i].getBundleDescription();
- if (bundle.constraintsConflict(fragment, fragment.getImportPackages(), fragment.getRequiredBundles(), fragment.getGenericRequires()) && !developmentMode)
+ for (ResolverBundle resolverFragment : fragments) {
+ BundleDescription fragment = resolverFragment.getBundleDescription();
+ if (bundle.constraintsConflict(fragment, fragment.getImportPackages(), fragment.getRequiredBundles(), fragment.getGenericRequires()) && !developmentMode) {
// found some conflicts; detach the fragment
- bundle.detachFragment(fragments[i], null);
+ bundle.detachFragment(resolverFragment, null);
+ }
}
}
@@ -1712,18 +1733,22 @@ public class ResolverImpl implements Resolver {
// first add the possible supplier; this is done before resolving the supplier bundle to prevent endless cycle loops.
imp.addPossibleSupplier(export);
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
+ for (ResolverExport substitutableExp : substitutableExps) {
+ if (substitutableExp.getSubstitute() == null) {
+ substitutableExp.setSubstitute(export); // Import wins, drop export
+ }
+ }
// if in dev mode then allow a constraint to resolve to an unresolved bundle
if ((originalState != ResolverBundle.RESOLVED && !resolveBundle(export.getExporter(), cycle) && !developmentMode) || export.getSubstitute() != null) {
// remove the possible supplier
imp.removePossibleSupplier(export);
// add back the exports of this package from the importer
if (imp.getSelectedSupplier() == null)
- for (int j = 0; j < substitutableExps.length; j++)
- if (substitutableExps[j].getSubstitute() == export)
- substitutableExps[j].setSubstitute(null);
+ for (ResolverExport substitutableExp : substitutableExps) {
+ if (substitutableExp.getSubstitute() == export) {
+ substitutableExp.setSubstitute(null);
+ }
+ }
continue; // Bundle hasn't resolved || export has not been selected and is unavailable
}
} else if (export.getSubstitute() != null)
@@ -1797,60 +1822,65 @@ public class ResolverImpl implements Resolver {
// Resolves the bundles in the State
private void stateResolveBundles(ResolverBundle[] resolvedBundles) {
- for (int i = 0; i < resolvedBundles.length; i++) {
- if (!resolvedBundles[i].getBundleDescription().isResolved())
- stateResolveBundle(resolvedBundles[i]);
+ for (ResolverBundle resolvedBundle : resolvedBundles) {
+ if (!resolvedBundle.getBundleDescription().isResolved()) {
+ stateResolveBundle(resolvedBundle);
+ }
}
}
private void stateResolveConstraints(ResolverBundle rb) {
ResolverImport[] imports = rb.getImportPackages();
- for (int i = 0; i < imports.length; i++) {
- ResolverExport export = (ResolverExport) imports[i].getSelectedSupplier();
+ for (ResolverImport resolverImport : imports) {
+ ResolverExport export = (ResolverExport) resolverImport.getSelectedSupplier();
BaseDescription supplier = export == null ? null : export.getExportPackageDescription();
- state.resolveConstraint(imports[i].getVersionConstraint(), supplier);
+ state.resolveConstraint(resolverImport.getVersionConstraint(), supplier);
}
BundleConstraint[] requires = rb.getRequires();
- for (int i = 0; i < requires.length; i++) {
- ResolverBundle bundle = (ResolverBundle) requires[i].getSelectedSupplier();
+ for (BundleConstraint require : requires) {
+ ResolverBundle bundle = (ResolverBundle) require.getSelectedSupplier();
BaseDescription supplier = bundle == null ? null : bundle.getBundleDescription();
- state.resolveConstraint(requires[i].getVersionConstraint(), supplier);
+ state.resolveConstraint(require.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());
+ for (GenericConstraint genericRequire : genericRequires) {
+ VersionSupplier[] matchingCapabilities = genericRequire.getMatchingCapabilities();
+ if (matchingCapabilities == null) {
+ state.resolveConstraint(genericRequire.getVersionConstraint(), null);
+ } else {
+ for (VersionSupplier matchingCapability : matchingCapabilities) {
+ state.resolveConstraint(genericRequire.getVersionConstraint(), matchingCapability.getBaseDescription());
+ }
+ }
}
}
private void stateResolveFragConstraints(ResolverBundle rb) {
ResolverBundle host = (ResolverBundle) rb.getHost().getSelectedSupplier();
ImportPackageSpecification[] imports = rb.getBundleDescription().getImportPackages();
- for (int i = 0; i < imports.length; i++) {
- ResolverImport hostImport = host == null ? null : host.getImport(imports[i].getName());
+ for (ImportPackageSpecification importSpecification : imports) {
+ ResolverImport hostImport = host == null ? null : host.getImport(importSpecification.getName());
ResolverExport export = (ResolverExport) (hostImport == null ? null : hostImport.getSelectedSupplier());
BaseDescription supplier = export == null ? null : export.getExportPackageDescription();
- state.resolveConstraint(imports[i], supplier);
+ state.resolveConstraint(importSpecification, supplier);
}
BundleSpecification[] requires = rb.getBundleDescription().getRequiredBundles();
- for (int i = 0; i < requires.length; i++) {
- BundleConstraint hostRequire = host == null ? null : host.getRequire(requires[i].getName());
+ for (BundleSpecification require : requires) {
+ BundleConstraint hostRequire = host == null ? null : host.getRequire(require.getName());
ResolverBundle bundle = (ResolverBundle) (hostRequire == null ? null : hostRequire.getSelectedSupplier());
BaseDescription supplier = bundle == null ? null : bundle.getBundleDescription();
- state.resolveConstraint(requires[i], supplier);
+ state.resolveConstraint(require, 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());
+ for (GenericConstraint genericRequire : genericRequires) {
+ VersionSupplier[] matchingCapabilities = genericRequire.getMatchingCapabilities();
+ if (matchingCapabilities == null) {
+ state.resolveConstraint(genericRequire.getVersionConstraint(), null);
+ } else {
+ for (VersionSupplier matchingCapability : matchingCapabilities) {
+ state.resolveConstraint(genericRequire.getVersionConstraint(), matchingCapability.getBaseDescription());
+ }
+ }
}
}
@@ -1869,17 +1899,18 @@ public class ResolverImpl implements Resolver {
// Gather selected exports
ResolverExport[] exports = rb.getSelectedExports();
List<ExportPackageDescription> selectedExports = new ArrayList<>(exports.length);
- for (int i = 0; i < exports.length; i++) {
- if (permissionChecker.checkPackagePermission(exports[i].getExportPackageDescription()))
- selectedExports.add(exports[i].getExportPackageDescription());
+ for (ResolverExport export : exports) {
+ if (permissionChecker.checkPackagePermission(export.getExportPackageDescription())) {
+ selectedExports.add(export.getExportPackageDescription());
+ }
}
ExportPackageDescription[] selectedExportsArray = selectedExports.toArray(new ExportPackageDescription[selectedExports.size()]);
// Gather substitute exports
ResolverExport[] substituted = rb.getSubstitutedExports();
List<ExportPackageDescription> substitutedExports = new ArrayList<>(substituted.length);
- for (int i = 0; i < substituted.length; i++) {
- substitutedExports.add(substituted[i].getExportPackageDescription());
+ for (ResolverExport substitutedExport : substituted) {
+ substitutedExports.add(substitutedExport.getExportPackageDescription());
}
ExportPackageDescription[] substitutedExportsArray = substitutedExports.toArray(new ExportPackageDescription[substitutedExports.size()]);
@@ -1890,13 +1921,14 @@ public class ResolverImpl implements Resolver {
BundleConstraint[] requires = rb.getRequires();
List<BundleDescription> bundlesWiredTo = new ArrayList<>(requires.length);
List<StateWire> requireWires = new ArrayList<>(requires.length);
- for (int i = 0; i < requires.length; i++)
- if (requires[i].getSelectedSupplier() != null) {
- BundleDescription supplier = (BundleDescription) requires[i].getSelectedSupplier().getBaseDescription();
+ for (BundleConstraint require : requires) {
+ if (require.getSelectedSupplier() != null) {
+ BundleDescription supplier = (BundleDescription) require.getSelectedSupplier().getBaseDescription();
bundlesWiredTo.add(supplier);
- StateWire requireWire = newStateWire(rb.getBundleDescription(), requires[i].getVersionConstraint(), supplier, supplier);
+ StateWire requireWire = newStateWire(rb.getBundleDescription(), require.getVersionConstraint(), supplier, supplier);
requireWires.add(requireWire);
}
+ }
BundleDescription[] bundlesWiredToArray = bundlesWiredTo.toArray(new BundleDescription[bundlesWiredTo.size()]);
if (!requireWires.isEmpty())
stateWires.put(BundleRevision.BUNDLE_NAMESPACE, requireWires);
@@ -1976,13 +2008,14 @@ public class ResolverImpl implements Resolver {
ResolverImport[] imports = rb.getImportPackages();
List<ExportPackageDescription> exportsWiredTo = new ArrayList<>(imports.length);
List<StateWire> importWires = new ArrayList<>(imports.length);
- for (int i = 0; i < imports.length; i++)
- if (imports[i].getSelectedSupplier() != null) {
- ExportPackageDescription supplier = (ExportPackageDescription) imports[i].getSelectedSupplier().getBaseDescription();
+ for (ResolverImport resolverImport : imports) {
+ if (resolverImport.getSelectedSupplier() != null) {
+ ExportPackageDescription supplier = (ExportPackageDescription) resolverImport.getSelectedSupplier().getBaseDescription();
exportsWiredTo.add(supplier);
- StateWire wire = newStateWire(rb.getBundleDescription(), imports[i].getVersionConstraint(), supplier.getExporter(), supplier);
+ StateWire wire = newStateWire(rb.getBundleDescription(), resolverImport.getVersionConstraint(), supplier.getExporter(), supplier);
importWires.add(wire);
}
+ }
if (stateWires != null && !importWires.isEmpty())
stateWires.put(BundleRevision.PACKAGE_NAMESPACE, importWires);
return exportsWiredTo.toArray(new ExportPackageDescription[exportsWiredTo.size()]);
@@ -2010,12 +2043,13 @@ public class ResolverImpl implements Resolver {
ResolverImport[] resolverImports = rb.getImportPackages();
// Check through the ResolverImports of this bundle.
// If there is a matching one then pass it into resolveImport()
- for (int j = 0; j < resolverImports.length; j++) {
+ for (ResolverImport resolverImport : resolverImports) {
// Make sure it is a dynamic import
- if (!resolverImports[j].isDynamic())
+ if (!resolverImport.isDynamic()) {
continue;
+ }
// Resolve the import
- ExportPackageDescription supplier = resolveDynamicImport(resolverImports[j], requestedPackage);
+ ExportPackageDescription supplier = resolveDynamicImport(resolverImport, requestedPackage);
if (supplier != null)
return supplier;
}
@@ -2173,8 +2207,8 @@ public class ResolverImpl implements Resolver {
BundleDescription[] dependents = bundle.getBundleDescription().getDependents();
state.resolveBundle(bundle.getBundleDescription(), false, null, null, null, null, null, null, null, null);
// Unresolve dependents of 'bundle'
- for (int i = 0; i < dependents.length; i++) {
- ResolverBundle db = bundleMapping.get(dependents[i]);
+ for (BundleDescription dependent : dependents) {
+ ResolverBundle db = bundleMapping.get(dependent);
if (db == null) {
continue;
}
@@ -2255,11 +2289,11 @@ public class ResolverImpl implements Resolver {
if (requireBundles.length == 0) {
ResolverImpl.log(" (r) no requires"); //$NON-NLS-1$
} else {
- for (int i = 0; i < requireBundles.length; i++) {
- if (requireBundles[i].getSelectedSupplier() == null) {
+ for (BundleConstraint requireBundle : requireBundles) {
+ if (requireBundle.getSelectedSupplier() == null) {
ResolverImpl.log(" (r) " + rb.getBundleDescription() + " -> NULL!!!"); //$NON-NLS-1$ //$NON-NLS-2$
} else {
- ResolverImpl.log(" (r) " + rb.getBundleDescription() + " -> " + requireBundles[i].getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$
+ ResolverImpl.log(" (r) " + rb.getBundleDescription() + " -> " + requireBundle.getSelectedSupplier()); //$NON-NLS-1$ //$NON-NLS-2$
}
}
}
@@ -2268,8 +2302,8 @@ public class ResolverImpl implements Resolver {
if (hostSpec != null) {
VersionSupplier[] hosts = hostSpec.getPossibleSuppliers();
if (hosts != null)
- for (int i = 0; i < hosts.length; i++) {
- ResolverImpl.log(" (h) " + rb.getBundleDescription() + " -> " + hosts[i].getBundleDescription()); //$NON-NLS-1$ //$NON-NLS-2$
+ for (VersionSupplier host : hosts) {
+ ResolverImpl.log(" (h) " + rb.getBundleDescription() + " -> " + host.getBundleDescription()); //$NON-NLS-1$ //$NON-NLS-2$
}
}
// Imports
@@ -2278,16 +2312,16 @@ public class ResolverImpl implements Resolver {
ResolverImpl.log(" (w) no imports"); //$NON-NLS-1$
continue;
}
- for (int i = 0; i < imports.length; i++) {
- if (imports[i].isDynamic() && imports[i].getSelectedSupplier() == null) {
- ResolverImpl.log(" (w) " + imports[i].getBundle() + ":" + imports[i].getName() + " -> DYNAMIC"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if (imports[i].isOptional() && imports[i].getSelectedSupplier() == null) {
- ResolverImpl.log(" (w) " + imports[i].getBundle() + ":" + imports[i].getName() + " -> OPTIONAL (could not be wired)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- } else if (imports[i].getSelectedSupplier() == null) {
- ResolverImpl.log(" (w) " + imports[i].getBundle() + ":" + imports[i].getName() + " -> NULL!!!"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ for (ResolverImport resolverImport : imports) {
+ if (resolverImport.isDynamic() && resolverImport.getSelectedSupplier() == null) {
+ ResolverImpl.log(" (w) " + resolverImport.getBundle() + ":" + resolverImport.getName() + " -> DYNAMIC"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ } else if (resolverImport.isOptional() && resolverImport.getSelectedSupplier() == null) {
+ ResolverImpl.log(" (w) " + resolverImport.getBundle() + ":" + resolverImport.getName() + " -> OPTIONAL (could not be wired)"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ } else if (resolverImport.getSelectedSupplier() == null) {
+ ResolverImpl.log(" (w) " + resolverImport.getBundle() + ":" + resolverImport.getName() + " -> NULL!!!"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
} else {
- ResolverImpl.log(" (w) " + imports[i].getBundle() + ":" + imports[i].getName() + " -> " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
- ((ResolverExport) imports[i].getSelectedSupplier()).getExporter() + ":" + imports[i].getSelectedSupplier().getName()); //$NON-NLS-1$
+ ResolverImpl.log(" (w) " + resolverImport.getBundle() + ":" + resolverImport.getName() + " -> " + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ ((ResolverExport) resolverImport.getSelectedSupplier()).getExporter() + ":" + resolverImport.getSelectedSupplier().getName()); //$NON-NLS-1$
}
}
}

Back to the top