private IEnumerable <InheritanceDataHolder> FindDependencies <T> (InheritanceDataHolder baseTypeAndDerivees, SyntaxNode root, SemanticModel semanticModel) where T : SyntaxNode { var classDeclaration = root .DescendantNodes() .OfType <TypeDeclarationSyntax>().First (dec => semanticModel.GetDeclaredSymbol(dec).Equals(baseTypeAndDerivees.BaseType)); var instantiations = classDeclaration.DescendantNodes().OfType <T>(); foreach (var instantiation in instantiations) { var instSymbol = semanticModel.GetSymbolInfo(instantiation).Symbol; if (instSymbol == null) { continue; } var instBase = instSymbol.ContainingSymbol; if (!instBase.Equals(baseTypeAndDerivees.Derivee)) { continue; } var holder = new InheritanceDataHolder(baseTypeAndDerivees) { Violation = instantiation }; yield return(holder); } }
public InheritanceDataHolder(InheritanceDataHolder holder) { Document = holder.Document; Derivee = holder.Derivee; BaseType = holder.BaseType; }