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;
 }