Browse Source

Move ConstructorArgumentAttribute and remove BindingMode from ReflectionBinding constructor (#20589)

* Move ConstructorArgumentAttribute to Avalonia.Base assembly

* Move IOptionalFeatureProvider to Avalonia namespace

* Remove BindingMode from ReflectionBinding constructor

* Update API suppressions
pull/20108/merge
Julien Lebosquain 2 days ago
committed by GitHub
parent
commit
656d691940
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 28
      api/Avalonia.Skia.nupkg.xml
  2. 264
      api/Avalonia.nupkg.xml
  3. 2
      src/Avalonia.Base/Data/CompiledBinding.cs
  4. 13
      src/Avalonia.Base/Data/ReflectionBinding.cs
  5. 1
      src/Avalonia.Base/Data/TemplateBinding.cs
  6. 3
      src/Avalonia.Base/IOptionalFeatureProvider.cs
  7. 17
      src/Avalonia.Base/Metadata/ConstructorArgumentAttribute.cs
  8. 2
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/DynamicResourceExtension.cs
  9. 7
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ReflectionBindingExtension.cs
  10. 1
      src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/RelativeSourceExtension.cs
  11. 10
      src/Markup/Avalonia.Markup.Xaml/XamlTypes.cs
  12. 2
      src/Markup/Avalonia.Markup/Data/Binding.cs
  13. 46
      tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs
  14. 3
      tests/Avalonia.Base.UnitTests/Styling/SetterTests.cs
  15. 2
      tests/Avalonia.Benchmarks/Data/Binding_Setup.cs
  16. 2
      tests/Avalonia.Benchmarks/Data/Binding_Values.cs
  17. 8
      tests/Avalonia.Controls.UnitTests/TextBoxTests_DataValidation.cs
  18. 8
      tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs
  19. 19
      tests/Avalonia.Markup.UnitTests/Data/BindingTests_Delay.cs
  20. 3
      tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs

28
api/Avalonia.Skia.nupkg.xml

@ -0,0 +1,28 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- https://learn.microsoft.com/dotnet/fundamentals/package-validation/diagnostic-ids -->
<Suppressions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Skia.ISkiaGpu</Target>
<Left>baseline/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll</Left>
<Right>current/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Skia.ISkiaGpuWithPlatformGraphicsContext</Target>
<Left>baseline/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll</Left>
<Right>current/Avalonia.Skia/lib/net10.0/Avalonia.Skia.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Skia.ISkiaGpu</Target>
<Left>baseline/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll</Left>
<Right>current/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Skia.ISkiaGpuWithPlatformGraphicsContext</Target>
<Left>baseline/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll</Left>
<Right>current/Avalonia.Skia/lib/net8.0/Avalonia.Skia.dll</Right>
</Suppression>
</Suppressions>

264
api/Avalonia.nupkg.xml

@ -19,12 +19,24 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Platform.IOptionalFeatureProvider</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Platform.IReadableBitmapWithAlphaImpl</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Platform.OptionalFeatureProviderExtensions</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Utilities.StringTokenizer</Target>
@ -49,6 +61,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Markup.Xaml.ConstructorArgumentAttribute</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Markup.Xaml.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Markup.Xaml.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Media.Fonts.FontFamilyLoader</Target>
@ -73,12 +91,24 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Platform.IOptionalFeatureProvider</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Platform.IReadableBitmapWithAlphaImpl</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Platform.OptionalFeatureProviderExtensions</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Utilities.StringTokenizer</Target>
@ -103,6 +133,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Markup.Xaml.ConstructorArgumentAttribute</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Markup.Xaml.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Markup.Xaml.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0001</DiagnosticId>
<Target>T:Avalonia.Media.Fonts.FontFamilyLoader</Target>
@ -133,6 +169,12 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Data.ReflectionBinding.#ctor(System.String,Avalonia.Data.BindingMode)</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers)</Target>
@ -499,6 +541,18 @@
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Data.Binding.#ctor(System.String,Avalonia.Data.BindingMode)</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Markup.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Markup.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Markup.Xaml.MarkupExtensions.ReflectionBindingExtension.#ctor(System.String,Avalonia.Data.BindingMode)</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Markup.Xaml.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Markup.Xaml.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Media.Fonts.FontCollectionBase._glyphTypefaceCache</Target>
@ -553,6 +607,12 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Data.ReflectionBinding.#ctor(System.String,Avalonia.Data.BindingMode)</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Input.IKeyboardNavigationHandler.Move(Avalonia.Input.IInputElement,Avalonia.Input.NavigationDirection,Avalonia.Input.KeyModifiers)</Target>
@ -925,6 +985,18 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Dialogs.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Dialogs.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Data.Binding.#ctor(System.String,Avalonia.Data.BindingMode)</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Markup.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Markup.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:Avalonia.Markup.Xaml.MarkupExtensions.ReflectionBindingExtension.#ctor(System.String,Avalonia.Data.BindingMode)</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Markup.Xaml.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Markup.Xaml.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>F:Avalonia.Media.Fonts.FontCollectionBase._glyphTypefaceCache</Target>
@ -1285,30 +1357,222 @@
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Media.ImmediateDrawingContext</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Media.StreamGeometryContext</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPlatformGraphicsContext</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPlatformGraphicsWithFeatures</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPlatformRenderInterfaceContext</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IWriteableBitmapImpl</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Application</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Controls.Embedding.Offscreen.OffscreenTopLevelImplBase</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Controls.Platform.IWin32OptionsTopLevelImpl</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPopupImpl</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.ITopLevelImpl</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IWindowBaseImpl</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IWindowImpl</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Metal.IMetalDevice</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Metal.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Metal.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.OpenGL.Egl.EglContext</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.OpenGL.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.OpenGL.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.OpenGL.IGlContext</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.OpenGL.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.OpenGL.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Vulkan.IVulkanDevice</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Vulkan.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Vulkan.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Vulkan.IVulkanPlatformGraphicsContext</Target>
<Left>baseline/Avalonia/lib/net10.0/Avalonia.Vulkan.dll</Left>
<Right>current/Avalonia/lib/net10.0/Avalonia.Vulkan.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Media.ImmediateDrawingContext</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Media.StreamGeometryContext</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPlatformGraphicsContext</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPlatformGraphicsWithFeatures</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPlatformRenderInterfaceContext</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IWriteableBitmapImpl</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Base.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Base.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Application</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Controls.Embedding.Offscreen.OffscreenTopLevelImplBase</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Controls.Platform.IWin32OptionsTopLevelImpl</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IPopupImpl</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.ITopLevelImpl</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IWindowBaseImpl</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Platform.IWindowImpl</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Controls.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Controls.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Metal.IMetalDevice</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Metal.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Metal.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.OpenGL.Egl.EglContext</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.OpenGL.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.OpenGL.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.OpenGL.IGlContext</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.OpenGL.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.OpenGL.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Vulkan.IVulkanDevice</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Vulkan.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Vulkan.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0008</DiagnosticId>
<Target>T:Avalonia.Vulkan.IVulkanPlatformGraphicsContext</Target>
<Left>baseline/Avalonia/lib/net8.0/Avalonia.Vulkan.dll</Left>
<Right>current/Avalonia/lib/net8.0/Avalonia.Vulkan.dll</Right>
</Suppression>
<Suppression>
<DiagnosticId>CP0009</DiagnosticId>
<Target>T:Avalonia.Controls.ResourcesChangedEventArgs</Target>

2
src/Avalonia.Base/Data/CompiledBinding.cs

@ -7,6 +7,7 @@ using Avalonia.Data.Converters;
using Avalonia.Data.Core;
using Avalonia.Data.Core.ExpressionNodes;
using Avalonia.Data.Core.Parsers;
using Avalonia.Metadata;
namespace Avalonia.Data;
@ -70,6 +71,7 @@ public class CompiledBinding : BindingBase
/// <summary>
/// Gets or sets the binding path.
/// </summary>
[ConstructorArgument("path")]
public CompiledBindingPath? Path { get; set; }
/// <summary>

13
src/Avalonia.Base/Data/ReflectionBinding.cs

@ -8,6 +8,7 @@ using Avalonia.Data.Converters;
using Avalonia.Data.Core;
using Avalonia.Data.Core.ExpressionNodes;
using Avalonia.Data.Core.Parsers;
using Avalonia.Metadata;
using Avalonia.Utilities;
namespace Avalonia.Data
@ -34,17 +35,6 @@ namespace Avalonia.Data
{
Path = path;
}
/// <summary>
/// Initializes a new instance of the <see cref="ReflectionBinding"/> class.
/// </summary>
/// <param name="path">The binding path.</param>
/// <param name="mode">The binding mode.</param>
public ReflectionBinding(string path, BindingMode mode)
{
Path = path;
Mode = mode;
}
/// <summary>
/// Gets or sets the amount of time, in milliseconds, to wait before updating the binding
@ -95,6 +85,7 @@ namespace Avalonia.Data
/// <summary>
/// Gets or sets the binding path.
/// </summary>
[ConstructorArgument("path")]
public string Path { get; set; } = "";
/// <summary>

1
src/Avalonia.Base/Data/TemplateBinding.cs

@ -48,6 +48,7 @@ namespace Avalonia.Data
/// <summary>
/// Gets or sets the name of the source property on the templated parent.
/// </summary>
[ConstructorArgument("property")]
[InheritDataTypeFrom(InheritDataTypeFromScopeKind.ControlTemplate)]
public AvaloniaProperty? Property { get; set; }

3
src/Avalonia.Base/Platform/IOptionalFeatureProvider.cs → src/Avalonia.Base/IOptionalFeatureProvider.cs

@ -1,8 +1,7 @@
using System;
using System.Diagnostics.CodeAnalysis;
// TODO12: move to Avalonia namespace.
namespace Avalonia.Platform;
namespace Avalonia;
public interface IOptionalFeatureProvider
{

17
src/Avalonia.Base/Metadata/ConstructorArgumentAttribute.cs

@ -0,0 +1,17 @@
using System;
namespace Avalonia.Metadata;
/// <summary>
/// Indicates that a property corresponds to a named parameter in the constructor.
/// </summary>
/// <param name="name">The name of the parameter in the constructor.</param>
/// <remarks>This attribute is used for XAML.</remarks>
[AttributeUsage(AttributeTargets.Property)]
public sealed class ConstructorArgumentAttribute(string name) : Attribute
{
/// <summary>
/// Gets the name of the parameter in the constructor.
/// </summary>
public string Name { get; } = name;
}

2
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/DynamicResourceExtension.cs

@ -3,6 +3,7 @@ using Avalonia.Controls;
using Avalonia.Data;
using Avalonia.Data.Core;
using Avalonia.Markup.Xaml.XamlIl.Runtime;
using Avalonia.Metadata;
using Avalonia.Styling;
namespace Avalonia.Markup.Xaml.MarkupExtensions
@ -22,6 +23,7 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions
ResourceKey = resourceKey;
}
[ConstructorArgument("resourceKey")]
public object? ResourceKey { get; set; }
public BindingBase ProvideValue(IServiceProvider serviceProvider)

7
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/ReflectionBindingExtension.cs

@ -22,13 +22,6 @@ namespace Avalonia.Markup.Xaml.MarkupExtensions
/// <param name="path">The binding path.</param>
public ReflectionBindingExtension(string path) : base(path) { }
/// <summary>
/// Initializes a new instance of the <see cref="ReflectionBinding"/> class.
/// </summary>
/// <param name="path">The binding path.</param>
/// <param name="mode">The binding mode.</param>
public ReflectionBindingExtension(string path, BindingMode mode) : base(path, mode) { }
public ReflectionBinding ProvideValue(IServiceProvider serviceProvider)
{
return new ReflectionBinding

1
src/Markup/Avalonia.Markup.Xaml/MarkupExtensions/RelativeSourceExtension.cs

@ -1,5 +1,6 @@
using System;
using Avalonia.Data;
using Avalonia.Metadata;
namespace Avalonia.Markup.Xaml.MarkupExtensions
{

10
src/Markup/Avalonia.Markup.Xaml/XamlTypes.cs

@ -32,14 +32,4 @@ namespace Avalonia.Markup.Xaml
[RequiresUnreferencedCode(TrimmingMessages.XamlTypeResolvedRequiresUnreferenceCodeMessage)]
Type Resolve (string qualifiedTypeName);
}
// TODO12: Move to Avalonia.Base
[AttributeUsage(AttributeTargets.Property)]
public sealed class ConstructorArgumentAttribute : Attribute
{
public ConstructorArgumentAttribute(string name)
{
}
}
}

2
src/Markup/Avalonia.Markup/Data/Binding.cs

@ -16,6 +16,4 @@ public class Binding : ReflectionBinding
public Binding() { }
public Binding(string path) : base(path) { }
public Binding(string path, BindingMode mode) : base(path, mode) { }
}

46
tests/Avalonia.Base.UnitTests/AvaloniaObjectTests_Binding.cs

@ -1091,7 +1091,11 @@ namespace Avalonia.Base.UnitTests
var target = new Class1();
var source = new TestTwoWayBindingViewModel();
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source.Value), BindingMode.TwoWay) { Source = source });
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source.Value))
{
Mode = BindingMode.TwoWay,
Source = source
});
target.DoubleValue = 123.4;
@ -1105,7 +1109,11 @@ namespace Avalonia.Base.UnitTests
var target = new Class1();
var source = new TestTwoWayBindingViewModel();
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source.Value), BindingMode.TwoWay) { Source = source });
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source.Value))
{
Mode = BindingMode.TwoWay,
Source = source
});
Assert.False(source.SetterCalled);
}
@ -1116,7 +1124,11 @@ namespace Avalonia.Base.UnitTests
var target = new Class1();
var source = new TestTwoWayBindingViewModel();
target.Bind(Class1.DoubleValueProperty, new Binding("[0]", BindingMode.TwoWay) { Source = source });
target.Bind(Class1.DoubleValueProperty, new Binding("[0]")
{
Mode = BindingMode.TwoWay,
Source = source
});
Assert.False(source.SetterCalled);
}
@ -1127,7 +1139,7 @@ namespace Avalonia.Base.UnitTests
var target = new TextBlock();
target.DataContext = null;
target.Bind(TextBlock.TextProperty, new Binding("Missing", BindingMode.TwoWay));
target.Bind(TextBlock.TextProperty, new Binding("Missing") { Mode = BindingMode.TwoWay });
}
[Fact]
@ -1136,7 +1148,7 @@ namespace Avalonia.Base.UnitTests
var target = new TextBlock();
target.DataContext = null;
target.Bind(TextBlock.TextProperty, new Binding("[0]", BindingMode.TwoWay));
target.Bind(TextBlock.TextProperty, new Binding("[0]") { Mode = BindingMode.TwoWay });
}
[Theory(Skip = "Will need changes to binding internals in order to pass")]
@ -1147,7 +1159,11 @@ namespace Avalonia.Base.UnitTests
{
var target = new Class1();
var source = new TestTwoWayBindingViewModel();
var binding = new Binding(nameof(source.Value), BindingMode.TwoWay) { Source = source };
var binding = new Binding(nameof(source.Value))
{
Mode = BindingMode.TwoWay,
Source = source
};
target.Bind(Class1.DoubleValueProperty, binding, priority);
target.SetValue(Class1.DoubleValueProperty, 123.4, priority - 1);
@ -1165,7 +1181,11 @@ namespace Avalonia.Base.UnitTests
{
var target = new Class1();
var source = new TestTwoWayBindingViewModel();
var binding1 = new Binding(nameof(source.Value), BindingMode.TwoWay) { Source = source };
var binding1 = new Binding(nameof(source.Value))
{
Mode = BindingMode.TwoWay,
Source = source
};
var binding2 = new BehaviorSubject<double>(123.4);
target.Bind(Class1.DoubleValueProperty, binding1, priority);
@ -1182,7 +1202,11 @@ namespace Avalonia.Base.UnitTests
var target = new Class1();
var source = new TestTwoWayBindingViewModel();
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source.Value), BindingMode.TwoWay) { Source = source });
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source.Value))
{
Mode = BindingMode.TwoWay,
Source = source
});
target.SetValue(Class1.DoubleValueProperty, 123.4, BindingPriority.Animation);
// Setter should not be called because the TwoWay binding with Style priority
@ -1197,7 +1221,11 @@ namespace Avalonia.Base.UnitTests
var source1 = new TestTwoWayBindingViewModel();
var source2 = new BehaviorSubject<double>(123.4);
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source1.Value), BindingMode.TwoWay) { Source = source1 });
target.Bind(Class1.DoubleValueProperty, new Binding(nameof(source1.Value))
{
Mode = BindingMode.TwoWay,
Source = source1
});
target.Bind(Class1.DoubleValueProperty, source2, BindingPriority.Animation);
// Setter should not be called because the TwoWay binding with Style priority

3
tests/Avalonia.Base.UnitTests/Styling/SetterTests.cs

@ -143,8 +143,9 @@ namespace Avalonia.Base.UnitTests.Styling
Classes = { "foo" },
};
var binding = new Binding("Name", BindingMode.OneWay)
var binding = new Binding("Name")
{
Mode = BindingMode.OneWay,
Converter = new TestConverter(),
RelativeSource = new RelativeSource(RelativeSourceMode.Self),
};

2
tests/Avalonia.Benchmarks/Data/Binding_Setup.cs

@ -31,7 +31,7 @@ public class Binding_Setup
public void Setup_DataContext_Property_Binding_TwoWay()
{
var target = _target;
var binding = new Binding(nameof(_data.IntValue), mode: BindingMode.TwoWay);
var binding = new Binding(nameof(_data.IntValue)) { Mode = BindingMode.TwoWay };
for (var i = 0; i < 100; ++i)
{

2
tests/Avalonia.Benchmarks/Data/Binding_Values.cs

@ -36,7 +36,7 @@ public class Binding_Values
_data.IntValue = -1;
var target = _target;
var binding = new Binding(nameof(_data.IntValue), mode: BindingMode.TwoWay);
var binding = new Binding(nameof(_data.IntValue)) { Mode = BindingMode.TwoWay };
using var d = target.Bind(TestControl.IntValueProperty, binding);
for (var i = 0; i < 100; ++i)

8
tests/Avalonia.Controls.UnitTests/TextBoxTests_DataValidation.cs

@ -29,7 +29,7 @@ namespace Avalonia.Controls.UnitTests
var target = new TextBox
{
DataContext = new ExceptionTest(),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10), BindingMode.TwoWay),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10)) { Mode = BindingMode.TwoWay },
Template = CreateTemplate(),
};
@ -51,7 +51,7 @@ namespace Avalonia.Controls.UnitTests
var target = new TextBox
{
DataContext = new ExceptionTest(),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10), BindingMode.TwoWay),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10)) { Mode = BindingMode.TwoWay },
Template = CreateTemplate(),
};
@ -77,7 +77,7 @@ namespace Avalonia.Controls.UnitTests
var target = new TextBox
{
DataContext = new ExceptionTest(),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10), BindingMode.TwoWay),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10)) { Mode = BindingMode.TwoWay },
Template = CreateTemplate()
};
DataValidationErrors.SetErrorConverter(target, err => "Error: " + err);
@ -101,7 +101,7 @@ namespace Avalonia.Controls.UnitTests
var target = new TextBox
{
DataContext = new ExceptionTest(),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10), BindingMode.TwoWay),
[!TextBox.TextProperty] = new Binding(nameof(ExceptionTest.LessThan10)) { Mode = BindingMode.TwoWay },
Template = CreateTemplate(),
};

8
tests/Avalonia.Markup.UnitTests/Data/BindingTests.cs

@ -544,8 +544,8 @@ namespace Avalonia.Markup.UnitTests.Data
var root = new Panel { Children = { target1, target2 } };
var source = new Source { Foo = "foo" };
using (target1.Bind(TextBlock.TextProperty, new Binding("Foo", BindingMode.OneTime)))
using (target2.Bind(TextBlock.TextProperty, new Binding("Foo", BindingMode.OneWayToSource)))
using (target1.Bind(TextBlock.TextProperty, new Binding("Foo") { Mode = BindingMode.OneTime }))
using (target2.Bind(TextBlock.TextProperty, new Binding("Foo") { Mode = BindingMode.OneWayToSource }))
{
root.DataContext = source;
}
@ -643,8 +643,8 @@ namespace Avalonia.Markup.UnitTests.Data
Children = { target1, target2 }
};
target1.Bind(TextBlock.TextProperty, new Binding("Foo", BindingMode.TwoWay));
target2.Bind(TextBlock.TextProperty, new Binding("Foo", BindingMode.OneWayToSource));
target1.Bind(TextBlock.TextProperty, new Binding("Foo") { Mode = BindingMode.TwoWay });
target2.Bind(TextBlock.TextProperty, new Binding("Foo") { Mode = BindingMode.OneWayToSource });
Assert.Equal("OneWayToSource", source.Foo);

19
tests/Avalonia.Markup.UnitTests/Data/BindingTests_Delay.cs

@ -29,7 +29,11 @@ public class BindingTests_Delay : ScopedTestBase, IDisposable
_source = new BindingTests.Source { Foo = InitialFooValue };
_target = new TextBox { DataContext = _source };
_binding = new Binding(nameof(_source.Foo), BindingMode.TwoWay) { Delay = DelayMilliseconds };
_binding = new Binding(nameof(_source.Foo))
{
Mode = BindingMode.TwoWay,
Delay = DelayMilliseconds
};
_bindingExpr = _target.Bind(TextBox.TextProperty, _binding);
@ -120,7 +124,12 @@ public class BindingTests_Delay : ScopedTestBase, IDisposable
new TestRoot() { Child = new Panel() { Children = { _target, secondBox } } };
_target.Bind(TextBox.TextProperty, new Binding(nameof(_source.Foo), BindingMode.TwoWay) { Delay = DelayMilliseconds, UpdateSourceTrigger = UpdateSourceTrigger.LostFocus });
_target.Bind(TextBox.TextProperty, new Binding(nameof(_source.Foo))
{
Mode = BindingMode.TwoWay,
Delay = DelayMilliseconds,
UpdateSourceTrigger = UpdateSourceTrigger.LostFocus
});
Assert.True(_target.Focus());
_target.Text = "bar";
@ -134,7 +143,11 @@ public class BindingTests_Delay : ScopedTestBase, IDisposable
[Fact]
public void Delayed_Binding_OneWayToSource_DataContext_Change_Should_Update_Source_Immediately()
{
_target.Bind(TextBlock.TextProperty, new Binding(nameof(_source.Foo), BindingMode.OneWayToSource) { Delay = DelayMilliseconds });
_target.Bind(TextBlock.TextProperty, new Binding(nameof(_source.Foo))
{
Mode = BindingMode.OneWayToSource,
Delay = DelayMilliseconds
});
_target.Text = "bar";

3
tests/Avalonia.Markup.UnitTests/Data/BindingTests_Self.cs

@ -34,8 +34,9 @@ namespace Avalonia.Markup.UnitTests.Data
var target = new TextBlock
{
Tag = "Hello World!",
[!TextBlock.TextProperty] = new Binding("Tag", BindingMode.TwoWay)
[!TextBlock.TextProperty] = new Binding("Tag")
{
Mode = BindingMode.TwoWay,
RelativeSource = new RelativeSource(RelativeSourceMode.Self)
},
};

Loading…
Cancel
Save