private static Conversion DepthFirstSearch(Release source, Release target, Stack stack)
{
Conversion best = null;
if (!stack.Contains (source)) {
stack.Push (source);
foreach (Conversion first in source.SourceConversions) {
Release release = first.TargetRelease;
Conversion result = null;
if (release == target)
result = first;
else {
Conversion second = DepthFirstSearch (release, target, stack);
if (second != null)
result = new IndirectConversion (first, second);
}
if (result != null) {
if ((best == null)||(result.Complexity < best.Complexity))
best = result;
}
}
stack.Pop ();
}
return (best);
}