Reimplemented SingleFieldComplexRegionAnalyzer to avoid call to Compilation.GetSemanticModel()

This commit is contained in:
Mikael Lindemann 2020-08-16 17:52:04 +02:00
Родитель ddf1b3db13
Коммит d9da28f455
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 28C86AD4F4866E2B
1 изменённых файлов: 4 добавлений и 24 удалений

Просмотреть файл

@ -68,36 +68,16 @@ namespace Piranha.Analyzers
return;
}
var references = context.SemanticModel.GetTypeInfo(property.Type).Type.DeclaringSyntaxReferences;
var members = context.SemanticModel.GetTypeInfo(property.Type).Type.GetMembers();
if (references.IsEmpty)
if (members.IsEmpty)
{
return;
}
var fieldCount = 0;
var fieldAttributeType = context.Compilation.GetTypeByMetadataName(Constants.Types.PiranhaExtendFieldAttribute);
var propCount = members.Count(m => m is IPropertySymbol);
foreach (var reference in references)
{
var node = reference.GetSyntax(context.CancellationToken);
if (!(node is ClassDeclarationSyntax @class))
{
return;
}
var referenceSemanticModel = context.Compilation.GetSemanticModel(node.SyntaxTree);
// Counts properties marked with FieldAttribute.
fieldCount += @class.Members
.OfType<PropertyDeclarationSyntax>()
.Count(p => p.AttributeLists
.Any(al => al.Attributes
.Any(a => fieldAttributeType.Equals(referenceSemanticModel.GetTypeInfo(a, context.CancellationToken).Type, SymbolEqualityComparer.IncludeNullability))));
}
if (fieldCount == 1)
if (propCount == 1)
{
context.ReportDiagnostic(Diagnostic.Create(Rule, property.GetLocation()));
}