Browse Source

Merge branch 'master' into pointerover-fixes

pull/8918/head
Jumar Macato 4 years ago
committed by GitHub
parent
commit
3858b5a7ee
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 3
      .editorconfig
  2. 1
      src/Avalonia.Base/Layout/StackLayout.cs
  3. 1
      src/Avalonia.Base/Layout/UniformGridLayout.cs
  4. 1
      src/Avalonia.Base/Rotate3DTransform.cs
  5. 1
      src/Avalonia.Controls/Primitives/Popup.cs
  6. 1
      src/Avalonia.Controls/SplitButton/ToggleSplitButton.cs
  7. 30
      src/tools/DevAnalyzers/OnPropertyChangedOverrideAnalyzer.cs

3
.editorconfig

@ -137,6 +137,9 @@ space_within_single_line_array_initializer_braces = true
# Wrapping preferences # Wrapping preferences
csharp_wrap_before_ternary_opsigns = false csharp_wrap_before_ternary_opsigns = false
# Avalonia DevAnalyzer preferences
dotnet_diagnostic.AVADEV2001.severity = error
# Xaml files # Xaml files
[*.{xaml,axaml}] [*.{xaml,axaml}]
indent_size = 2 indent_size = 2

1
src/Avalonia.Base/Layout/StackLayout.cs

@ -322,6 +322,7 @@ namespace Avalonia.Layout
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{ {
base.OnPropertyChanged(change);
if (change.Property == OrientationProperty) if (change.Property == OrientationProperty)
{ {
var orientation = change.GetNewValue<Orientation>(); var orientation = change.GetNewValue<Orientation>();

1
src/Avalonia.Base/Layout/UniformGridLayout.cs

@ -473,6 +473,7 @@ namespace Avalonia.Layout
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{ {
base.OnPropertyChanged(change);
if (change.Property == OrientationProperty) if (change.Property == OrientationProperty)
{ {
var orientation = change.GetNewValue<Orientation>(); var orientation = change.GetNewValue<Orientation>();

1
src/Avalonia.Base/Rotate3DTransform.cs

@ -205,6 +205,7 @@ public class Rotate3DTransform : Transform
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{ {
base.OnPropertyChanged(change);
if (!_isInitializing) RaiseChanged(); if (!_isInitializing) RaiseChanged();
} }
} }

1
src/Avalonia.Controls/Primitives/Popup.cs

@ -524,6 +524,7 @@ namespace Avalonia.Controls.Primitives
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change) protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{ {
base.OnPropertyChanged(change);
if (_openState is not null) if (_openState is not null)
{ {
if (change.Property == WidthProperty || if (change.Property == WidthProperty ||

1
src/Avalonia.Controls/SplitButton/ToggleSplitButton.cs

@ -92,6 +92,7 @@ namespace Avalonia.Controls
/// <inheritdoc/> /// <inheritdoc/>
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs e) protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs e)
{ {
base.OnPropertyChanged(e);
if (e.Property == IsCheckedProperty) if (e.Property == IsCheckedProperty)
{ {
OnIsCheckedChanged(); OnIsCheckedChanged();

30
src/tools/DevAnalyzers/OnPropertyChangedOverrideAnalyzer.cs

@ -1,6 +1,7 @@
using System.Collections.Immutable; using System.Collections.Immutable;
using System.Linq; using System.Linq;
using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Diagnostics; using Microsoft.CodeAnalysis.Diagnostics;
@ -26,37 +27,32 @@ namespace DevAnalyzers
{ {
context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None); context.ConfigureGeneratedCodeAnalysis(GeneratedCodeAnalysisFlags.None);
context.EnableConcurrentExecution(); context.EnableConcurrentExecution();
context.RegisterSymbolAction(AnalyzeMethod, SymbolKind.Method); context.RegisterSyntaxNodeAction(AnalyzeMethod, SyntaxKind.MethodDeclaration);
} }
private static void AnalyzeMethod(SymbolAnalysisContext context) private static void AnalyzeMethod(SyntaxNodeAnalysisContext context)
{ {
if (context.Symbol is IMethodSymbol currentMethod var method = (MethodDeclarationSyntax)context.Node;
if (context.SemanticModel.GetDeclaredSymbol(method, context.CancellationToken) is IMethodSymbol currentMethod
&& currentMethod.Name == "OnPropertyChanged" && currentMethod.Name == "OnPropertyChanged"
&& currentMethod.OverriddenMethod is IMethodSymbol originalMethod) && currentMethod.OverriddenMethod is IMethodSymbol originalMethod)
{ {
var declaration = currentMethod.DeclaringSyntaxReferences.FirstOrDefault() var baseInvocations = method.Body?.DescendantNodes().OfType<BaseExpressionSyntax>();
?.GetSyntax(context.CancellationToken); if (baseInvocations?.Any() == true)
if (declaration is not null && context.Compilation.GetSemanticModel(declaration!.SyntaxTree) is { } semanticModel)
{ {
if (declaration.SyntaxTree.TryGetRoot(out var root)) foreach (var baseInvocation in baseInvocations)
{ {
var baseInvocations = root.DescendantNodes().OfType<BaseExpressionSyntax>(); if (baseInvocation.Parent is SyntaxNode parent)
if (baseInvocations.Any())
{ {
foreach (var baseInvocation in baseInvocations) var targetSymbol = context.SemanticModel.GetSymbolInfo(parent, context.CancellationToken);
if (SymbolEqualityComparer.Default.Equals(targetSymbol.Symbol, originalMethod))
{ {
var parent = baseInvocation.Parent; return;
var targetSymbol = semanticModel.GetSymbolInfo(parent, context.CancellationToken);
if (SymbolEqualityComparer.Default.Equals(targetSymbol.Symbol, originalMethod))
{
return;
}
} }
} }
context.ReportDiagnostic(Diagnostic.Create(Rule, currentMethod.Locations[0], currentMethod.Name));
} }
} }
context.ReportDiagnostic(Diagnostic.Create(Rule, currentMethod.Locations[0], currentMethod.Name));
} }
} }

Loading…
Cancel
Save