private static void ClassDependsClosure(NamedTypeSymbol type, CSharpCompilation currentCompilation, HashSet <Symbol> partialClosure) { if ((object)type == null) { return; } type = type.OriginalDefinition; if (partialClosure.Add(type)) { ClassDependsClosure(type.GetDeclaredBaseType(null), currentCompilation, partialClosure); // containment is interesting only for the current compilation if (currentCompilation != null && type.IsFromCompilation(currentCompilation)) { ClassDependsClosure(type.ContainingType, currentCompilation, partialClosure); } } }