List previousNodes) throws OverConstrainedVersionException {
for (Iterator i = previousNodes.iterator(); i.hasNext();) {
ResolutionNode previous = (ResolutionNode) i.next();
if (previous.isActive()) {
// Version mediation
VersionRange previousRange = previous.getArtifact().getVersionRange();
VersionRange currentRange = node.getArtifact().getVersionRange();
// TODO: why do we force the version on it? what if they
// don't match?
if (previousRange == null) {
// version was already resolved
node.getArtifact().setVersion(previous.getArtifact().getVersion());
} else if (currentRange == null) {
// version was already resolved
previous.getArtifact().setVersion(node.getArtifact().getVersion());
} else {
// TODO: shouldn't need to double up on this work, only
// done for simplicity of handling recommended
// version but the restriction is identical
VersionRange newRange = previousRange.restrict(currentRange);
// TODO: ick. this forces the OCE that should have come
// from the previous call. It is still correct
if (newRange.isSelectedVersionKnown(previous.getArtifact())) {
fireEvent(ResolutionListener.RESTRICT_RANGE,
listeners, node, previous.getArtifact(),
newRange);
}
previous.getArtifact().setVersionRange(newRange);