Browse Source

Merge branch 'master' into colorpicker-updates-1

pull/8919/head
robloo 4 years ago
committed by GitHub
parent
commit
c62798206c
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. 6
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor
  8. 6
      src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs
  9. 16
      src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs
  10. 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();

6
src/Web/Avalonia.Web.Blazor/AvaloniaView.razor

@ -3,9 +3,9 @@
tabindex="0" oncontextmenu="return false;" tabindex="0" oncontextmenu="return false;"
@onwheel="OnWheel" @onwheel="OnWheel"
@onkeydown="OnKeyDown" @onkeydown="OnKeyDown"
@onkeydown:preventDefault="true"
@onkeyup="OnKeyUp" @onkeyup="OnKeyUp"
@onkeyup:preventDefault="true" @onkeyup:preventDefault="@KeyPreventDefault"
@onkeydown:preventDefault="@KeyPreventDefault"
@onpointerdown="OnPointerDown" @onpointerdown="OnPointerDown"
@onpointerup="OnPointerUp" @onpointerup="OnPointerUp"
@onpointermove="OnPointerMove" @onpointermove="OnPointerMove"
@ -20,8 +20,6 @@
onpaste="return false;" onpaste="return false;"
oncopy="return false;" oncopy="return false;"
oncut="return false;" oncut="return false;"
@onkeydown:preventDefault="true"
@onkeyup:preventDefault="true"
autocapitalize="none"/> autocapitalize="none"/>
</div> </div>

6
src/Web/Avalonia.Web.Blazor/AvaloniaView.razor.cs

@ -63,6 +63,8 @@ namespace Avalonia.Web.Blazor
} }
} }
public bool KeyPreventDefault { get; set; }
internal INativeControlHostImpl GetNativeControlHostImpl() internal INativeControlHostImpl GetNativeControlHostImpl()
{ {
return _nativeControlHost ?? throw new InvalidOperationException("Blazor View wasn't initialized yet"); return _nativeControlHost ?? throw new InvalidOperationException("Blazor View wasn't initialized yet");
@ -203,12 +205,12 @@ namespace Avalonia.Web.Blazor
private void OnKeyDown(KeyboardEventArgs e) private void OnKeyDown(KeyboardEventArgs e)
{ {
_topLevelImpl.RawKeyboardEvent(RawKeyEventType.KeyDown, e.Code, e.Key, GetModifiers(e)); KeyPreventDefault = _topLevelImpl.RawKeyboardEvent(RawKeyEventType.KeyDown, e.Code, e.Key, GetModifiers(e));
} }
private void OnKeyUp(KeyboardEventArgs e) private void OnKeyUp(KeyboardEventArgs e)
{ {
_topLevelImpl.RawKeyboardEvent(RawKeyEventType.KeyUp, e.Code, e.Key, GetModifiers(e)); KeyPreventDefault = _topLevelImpl.RawKeyboardEvent(RawKeyEventType.KeyUp, e.Code, e.Key, GetModifiers(e));
} }
private void OnFocus(FocusEventArgs e) private void OnFocus(FocusEventArgs e)

16
src/Web/Avalonia.Web.Blazor/RazorViewTopLevelImpl.cs

@ -113,22 +113,32 @@ namespace Avalonia.Web.Blazor
} }
} }
public void RawKeyboardEvent(RawKeyEventType type, string code, string key, RawInputModifiers modifiers) public bool RawKeyboardEvent(RawKeyEventType type, string code, string key, RawInputModifiers modifiers)
{ {
if (Keycodes.KeyCodes.TryGetValue(code, out var avkey)) if (Keycodes.KeyCodes.TryGetValue(code, out var avkey))
{ {
if (_inputRoot is { }) if (_inputRoot is { })
{ {
Input?.Invoke(new RawKeyEventArgs(KeyboardDevice, Timestamp, _inputRoot, type, avkey, modifiers)); var args = new RawKeyEventArgs(KeyboardDevice, Timestamp, _inputRoot, type, avkey, modifiers);
Input?.Invoke(args);
return args.Handled;
} }
} }
else if (Keycodes.KeyCodes.TryGetValue(key, out avkey)) else if (Keycodes.KeyCodes.TryGetValue(key, out avkey))
{ {
if (_inputRoot is { }) if (_inputRoot is { })
{ {
Input?.Invoke(new RawKeyEventArgs(KeyboardDevice, Timestamp, _inputRoot, type, avkey, modifiers)); var args = new RawKeyEventArgs(KeyboardDevice, Timestamp, _inputRoot, type, avkey, modifiers);
Input?.Invoke(args);
return args.Handled;
} }
} }
return false;
} }
public void RawTextEvent(string text) public void RawTextEvent(string text)

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