You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ri...@apache.org on 2009/12/02 22:27:50 UTC
svn commit: r886309 -
/felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/prototype/ProtoResolver.java
Author: rickhall
Date: Wed Dec 2 21:27:49 2009
New Revision: 886309
URL: http://svn.apache.org/viewvc?rev=886309&view=rev
Log:
Simplify main resolver loop.
Modified:
felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/prototype/ProtoResolver.java
Modified: felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/prototype/ProtoResolver.java
URL: http://svn.apache.org/viewvc/felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/prototype/ProtoResolver.java?rev=886309&r1=886308&r2=886309&view=diff
==============================================================================
--- felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/prototype/ProtoResolver.java (original)
+++ felix/sandbox/rickhall/resolver/src/main/java/org/apache/felix/resolver/prototype/ProtoResolver.java Wed Dec 2 21:27:49 2009
@@ -205,7 +205,8 @@
{
repeat = false;
- // Loop through all of the target module's imports and v
+ // Loop through all of the target module's imports and see
+ // if there is a consistent candidate provider.
for (Requirement req : reqs)
{
// Get the current candidate capability for the current import.
@@ -215,77 +216,81 @@
{
continue;
}
+
+ // Find a consistent candidate.
+ Capability selectedCandidate = null;
Iterator<Capability> itExporters = exporters.iterator();
- Capability cap = itExporters.next();
-//System.out.println("+++ RESOLVING " + cap + " FOR " + module);
- try
+ while ((selectedCandidate == null) && itExporters.hasNext())
{
- // If current candidate is resolved, then try to merge
- // in its constraints with the existing constraints.
- if (cap.getModule().isResolved())
- {
- mergeResolvedConstraints(
- module, candidateMap, currentConstraintsCopy,
- cap);
- }
- // If current candidate is the same as the module being
- // resolved, then just directly add it as a constraint.
- else if (cap.getModule().equals(module))
+ Capability cap = itExporters.next();
+//System.out.println("+++ RESOLVING " + cap + " FOR " + module);
+ try
{
- currentConstraintsCopy.put(
- (String) cap.getAttribute(Capability.PACKAGE_ATTR).getValue(),
- new Blame(cap, blameModule));
+ // If current candidate is resolved, then try to merge
+ // in its constraints with the existing constraints.
+ if (cap.getModule().isResolved())
+ {
+ mergeResolvedConstraints(
+ module, candidateMap, currentConstraintsCopy,
+ cap);
+ }
+ // If current candidate is the same as the module being
+ // resolved, then just directly add it as a constraint.
+ else if (cap.getModule().equals(module))
+ {
+ currentConstraintsCopy.put(
+ (String) cap.getAttribute(Capability.PACKAGE_ATTR).getValue(),
+ new Blame(cap, blameModule));
+ }
+ // If the current candidate is not resolved, then try to resolve
+ // it, which will also merge packages while verify constraints.
+ else
+ {
+ resolve(
+ cap.getModule(),
+ cap,
+ module,
+ candidateMap,
+ currentConstraintsCopy,
+ cycleMap);
+ }
+
+ // This candidate was consistent, so select it.
+ selectedCandidate = cap;
}
- // If the current candidate is not resolved, then try to resolve
- // it, which will also merge packages while verify constraints.
- else
+ // If we have a resolve exception, then the current candidate
+ // should be removed. If we are at the root, we should try the
+ // next permutated candidate map if there are no more candidates.
+ catch (ResolveException ex)
{
- resolve(
- cap.getModule(),
- cap,
- module,
- candidateMap,
- currentConstraintsCopy,
- cycleMap);
- }
- }
- // If we have a resolve exception, then the current candidate
- // should be removed. If we are at the root, we should try the
- // next permutated candidate map if there are no more candidates.
- catch (ResolveException ex)
- {
System.out.println("RE " + ex);
ex.printStackTrace();
//System.out.println("Current candidate map : " + candidateMap);
- // Remove offending candidate.
- itExporters.remove();
+ // Remove offending candidate.
+ itExporters.remove();
//System.out.println("Updated candidate map : " + candidateMap);
- if (!itExporters.hasNext() && !req.isOptional())
- {
- // TODO: PROTO RESOLVER - Maybe this should be moved.
- if ((module == m_rootModule) && (m_candidatePermutations.size() > 0))
+ if (!itExporters.hasNext() && !req.isOptional())
{
- currentConstraintsCopy.clear();
- currentConstraintsCopy.putAll(currentConstraints);
- candidateMap = m_candidatePermutations.remove(0);
+ // TODO: PROTO RESOLVER - Maybe this should be moved.
+ if ((module == m_rootModule) && (m_candidatePermutations.size() > 0))
+ {
+ currentConstraintsCopy.clear();
+ currentConstraintsCopy.putAll(currentConstraints);
+ candidateMap = m_candidatePermutations.remove(0);
//System.out.println("+++ TRYING ALTERNATIVE: " + candidateMap);
- // Flush various caches for new candidates.
- m_resolvingConstraintCache.clear();
- m_verifyCache.clear();
- repeat = true;
- }
- else
- {
- candidateMap.remove(req);
- throw new ResolveException("Unresolved constraint "
- + req + " in " + module);
+ // Flush various caches for new candidates.
+ m_resolvingConstraintCache.clear();
+ m_verifyCache.clear();
+ repeat = true;
+ }
+ else
+ {
+ candidateMap.remove(req);
+ throw new ResolveException("Unresolved constraint "
+ + req + " in " + module);
+ }
}
}
- else
- {
- repeat = true;
- }
- break;
}
}
}