ArchiMetrics.Analysis.Metrics.DepthOfInheritanceAnalyzer.Calculate C# (CSharp) Method

Calculate() public method

public Calculate ( Microsoft.CodeAnalysis.CSharp.Syntax.TypeDeclarationSyntax type ) : int
type Microsoft.CodeAnalysis.CSharp.Syntax.TypeDeclarationSyntax
return int
		public int Calculate(TypeDeclarationSyntax type)
		{
			var num = type.IsKind(SyntaxKind.ClassDeclaration) || type.IsKind(SyntaxKind.StructDeclaration) ? 1 : 0;
			if (type.BaseList != null)
			{
				foreach (var symbolInfo in type.BaseList.Types.Select(syntax => ModelExtensions.GetSymbolInfo(_semanticModel, syntax)))
				{
					for (var symbol = symbolInfo.Symbol as INamedTypeSymbol; symbol != null; symbol = symbol.BaseType)
					{
						if (_inheritableTypes.Any(x => x == symbol.TypeKind))
						{
							num++;
						}
					}
				}
			}

			return num == 0 && (type.IsKind(SyntaxKind.ClassDeclaration) || type.IsKind(SyntaxKind.StructDeclaration))
				? 1
				: num;
		}
	}

Usage Example

Example #1
0
        private int CalculateDepthOfInheritance(TypeDeclarationSyntax type)
        {
            var analyzer = new DepthOfInheritanceAnalyzer(Model);

            return(analyzer.Calculate(type));
        }
All Usage Examples Of ArchiMetrics.Analysis.Metrics.DepthOfInheritanceAnalyzer::Calculate
DepthOfInheritanceAnalyzer