protected override async Task<EvaluationResult> EvaluateImpl(SyntaxNode node, SemanticModel semanticModel, Solution solution)
{
var classDeclaration = (ClassDeclarationSyntax)node;
var symbol = (ITypeSymbol)ModelExtensions.GetDeclaredSymbol(semanticModel, classDeclaration);
var members = symbol.GetMembers();
var memberCount = members.Count(x => MemberKinds.Contains(x.Kind));
if (memberCount < _threshold)
{
return null;
}
var fields = members.Where(x => x.Kind == SymbolKind.Field).AsArray();
var fieldCount = fields.Length;
if (fieldCount < _threshold)
{
return null;
}
var references = await Task.WhenAll(fields.Select(solution.FindReferences)).ConfigureAwait(false);
var sumFieldUsage = (double)references.Sum(r => r.Locations.Count());
var lcomhs = (memberCount - (sumFieldUsage / fieldCount)) / (memberCount - 1);
if (lcomhs < 1)
{
return null;
}
var snippet = node.ToFullString();
return new EvaluationResult
{
Snippet = snippet
};
}
}