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
csharp_wrap_before_ternary_opsigns = false
# Avalonia DevAnalyzer preferences
dotnet_diagnostic.AVADEV2001.severity = error
# Xaml files
[*.{xaml,axaml}]
indent_size = 2

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

@ -322,6 +322,7 @@ namespace Avalonia.Layout
protected override void OnPropertyChanged(AvaloniaPropertyChangedEventArgs change)
{
base.OnPropertyChanged(change);
if (change.Property == OrientationProperty)
{
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)
{
base.OnPropertyChanged(change);
if (change.Property == OrientationProperty)
{
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)
{
base.OnPropertyChanged(change);
if (!_isInitializing) RaiseChanged();
}
}

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

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

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

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

30
src/tools/DevAnalyzers/OnPropertyChangedOverrideAnalyzer.cs

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

Loading…
Cancel
Save