for (IInterfaceDefinition parentIFace : parentIFaces)
{
// as we recurse, we need to create new recursion guards at each level. Otherwise a
// "diamond inheritance hierarchy" would generate a false positive.
// So we make a copy and pass it down to the next level.
RecursionGuard childGuard = new RecursionGuard(guard);
analyze(parentIFace, childGuard, problems);
if (!childGuard.foundLoop)
{
theInterfaces.add(parentIFace);
}