ArchiMetrics.CodeReview.Rules.Semantic.ClassInstabilityRule.GetReferencedTypes C# (CSharp) Method

GetReferencedTypes() private static method

private static GetReferencedTypes ( Microsoft.CodeAnalysis.SyntaxNode classDeclaration, ISymbol sourceSymbol, Microsoft.CodeAnalysis.SemanticModel semanticModel ) : IEnumerable
classDeclaration Microsoft.CodeAnalysis.SyntaxNode
sourceSymbol ISymbol
semanticModel Microsoft.CodeAnalysis.SemanticModel
return IEnumerable
		private static IEnumerable<ITypeSymbol> GetReferencedTypes(SyntaxNode classDeclaration, ISymbol sourceSymbol, SemanticModel semanticModel)
		{
			var typeSyntaxes = classDeclaration.DescendantNodesAndSelf().OfType<TypeSyntax>();
			var commonSymbolInfos = typeSyntaxes.Select(x => semanticModel.GetSymbolInfo(x)).AsArray();
			var members = commonSymbolInfos
				.Select(x => x.Symbol)
				.Where(x => x != null)
				.Select(x =>
				{
					var typeSymbol = x as ITypeSymbol;
					return typeSymbol == null ? x.ContainingType : x;
				})
				.Cast<ITypeSymbol>()
				.WhereNotNull()
				.DistinctBy(x => x.ToDisplayString())
				.Where(x => x != sourceSymbol)
				.AsArray();

			return members;
		}
	}