diff --git a/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs b/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs index affea895db..018b1d6020 100644 --- a/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs +++ b/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.CompileAnalyzer.cs @@ -61,7 +61,7 @@ public partial class AvaloniaPropertyAnalyzer _avaloniaPropertyAddOwnerMethods = _allAvaloniaPropertyTypes .SelectMany(t => t.GetMembers("AddOwner").OfType()).ToImmutableHashSet(methodComparer); - FindAvaloniaPropertySymbols(context.Compilation, context.CancellationToken); + RegisterAvaloniaPropertySymbols(context.Compilation, context.CancellationToken); context.RegisterOperationAction(AnalyzeFieldInitializer, OperationKind.FieldInitializer); context.RegisterOperationAction(AnalyzePropertyInitializer, OperationKind.PropertyInitializer); @@ -80,7 +80,7 @@ public partial class AvaloniaPropertyAnalyzer private bool IsAvaloniaPropertyStorage(IFieldSymbol symbol) => symbol.Type is INamedTypeSymbol namedType && IsAvaloniaPropertyType(namedType, _allAvaloniaPropertyTypes); private bool IsAvaloniaPropertyStorage(IPropertySymbol symbol) => symbol.Type is INamedTypeSymbol namedType && IsAvaloniaPropertyType(namedType, _allAvaloniaPropertyTypes); - private void FindAvaloniaPropertySymbols(Compilation compilation, CancellationToken cancellationToken) + private void RegisterAvaloniaPropertySymbols(Compilation compilation, CancellationToken cancellationToken) { var namespaceStack = new Stack(); namespaceStack.Push(compilation.GlobalNamespace); @@ -394,6 +394,7 @@ public partial class AvaloniaPropertyAnalyzer } } + /// private void AnalyzeFieldInitializer(OperationAnalysisContext context) { var operation = (IFieldInitializerOperation)context.Operation; @@ -422,6 +423,7 @@ public partial class AvaloniaPropertyAnalyzer } } + /// private void AnalyzePropertyInitializer(OperationAnalysisContext context) { var operation = (IPropertyInitializerOperation)context.Operation; @@ -449,6 +451,7 @@ public partial class AvaloniaPropertyAnalyzer } } + /// private void AnalyzeAssignment(OperationAnalysisContext context) { var operation = (IAssignmentOperation)context.Operation; @@ -480,9 +483,11 @@ public partial class AvaloniaPropertyAnalyzer } } + /// + /// private void AnalyzeInitializer_Shared(OperationAnalysisContext context, ISymbol assignmentSymbol, AvaloniaPropertyDescription description) { - if (!assignmentSymbol.Name.Contains(description.Name)) + if (!assignmentSymbol.Name.Contains(description.Name) && assignmentSymbol.DeclaredAccessibility != Accessibility.Private) { context.ReportDiagnostic(Diagnostic.Create(PropertyNameMismatch, assignmentSymbol.Locations[0], description.Name, assignmentSymbol)); @@ -503,6 +508,11 @@ public partial class AvaloniaPropertyAnalyzer } } + /// + /// + /// + /// + /// private void StartPropertySymbolAnalysis(SymbolStartAnalysisContext context) { var property = (IPropertySymbol)context.Symbol; @@ -571,6 +581,7 @@ public partial class AvaloniaPropertyAnalyzer } } + /// private void AnalyzePropertyMethods(CodeBlockAnalysisContext context) { if (context.OwningSymbol is not IMethodSymbol { AssociatedSymbol: IPropertySymbol property } method) diff --git a/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.cs b/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.cs index 355fe34801..0a59f43d6a 100644 --- a/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.cs +++ b/src/tools/PublicAnalyzers/AvaloniaPropertyAnalyzer.cs @@ -76,7 +76,7 @@ public partial class AvaloniaPropertyAnalyzer : DiagnosticAnalyzer Category, DiagnosticSeverity.Warning, isEnabledByDefault: true, - "An AvaloniaProperty should be stored in a field or property which contains its name. For example, a property named \"Brush\" should be assigned to a field called \"BrushProperty\".", + "An AvaloniaProperty should be stored in a field or property which contains its name. For example, a property named \"Brush\" should be assigned to a field called \"BrushProperty\".\nPrivate symbols are exempt from this diagnostic.", NameCollisionTag); private static readonly DiagnosticDescriptor AccessorSideEffects = new(