From 74882b332ca3912feb6d0ae2a8dd2b81b248a9ae Mon Sep 17 00:00:00 2001
From: Glenn Watson <5834289+glennawatson@users.noreply.github.com>
Date: Fri, 25 Sep 2026 23:09:50 +1000
Subject: [PATCH 01/30] chore: ignore Claude Code workspace folders
---
.gitignore | 3 +++
1 file changed, 3 insertions(+)
diff --git a/.gitignore b/.gitignore
index dfcfd56f..a8679d30 100644
--- a/.gitignore
+++ b/.gitignore
@@ -348,3 +348,6 @@ MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder
.ionide/
+
+# Claude Code local workspace
+.claude/
From 83d1edd1b37e021b39467a59c88c990626afabbb Mon Sep 17 00:00:00 2001
From: Glenn Watson <5834289+glennawatson@users.noreply.github.com>
Date: Sat, 26 Sep 2026 00:48:28 +1000
Subject: [PATCH 02/30] test: add generator benchmarks with EventPipe
allocation tracing
---
src/Directory.Packages.props | 1 +
src/ReactiveUI.SourceGenerators.slnx | 3 +
src/benchmarks/.editorconfig | 8 +
.../GenerationBenchmarks.cs | 59 +++++++
.../Mocks/BindableDerivedList.cs | 17 +++
.../Mocks/IViewFor.cs | 27 ++++
.../Mocks/Reactive.cs | 73 +++++++++
.../Mocks/ReactiveCollection.cs | 17 +++
.../Mocks/ReactiveCommand.cs | 42 +++++
.../Mocks/ReactiveObject.cs | 24 +++
.../Mocks/RoutedControlHost.cs | 14 ++
.../Mocks/Stubs.cs | 64 ++++++++
.../Mocks/ViewModelControlHost.cs | 14 ++
.../Program.cs | 63 ++++++++
...ctiveUI.SourceGenerators.Benchmarks.csproj | 36 +++++
.../Support/GeneratorCatalog.cs | 62 ++++++++
.../Support/GeneratorHarness.cs | 144 ++++++++++++++++++
17 files changed, 668 insertions(+)
create mode 100644 src/benchmarks/.editorconfig
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/GenerationBenchmarks.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/BindableDerivedList.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/IViewFor.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Reactive.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCollection.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCommand.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveObject.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/RoutedControlHost.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Stubs.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ViewModelControlHost.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Program.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorCatalog.cs
create mode 100644 src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorHarness.cs
diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index b548c23c..c75a3c41 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -38,6 +38,7 @@
+
diff --git a/src/ReactiveUI.SourceGenerators.slnx b/src/ReactiveUI.SourceGenerators.slnx
index d90f297c..927f0d7a 100644
--- a/src/ReactiveUI.SourceGenerators.slnx
+++ b/src/ReactiveUI.SourceGenerators.slnx
@@ -1,4 +1,7 @@
+
+
+
diff --git a/src/benchmarks/.editorconfig b/src/benchmarks/.editorconfig
new file mode 100644
index 00000000..94936343
--- /dev/null
+++ b/src/benchmarks/.editorconfig
@@ -0,0 +1,8 @@
+[*.cs]
+
+###################
+# Benchmark harness relaxations
+#
+# The benchmark host is a console tool: it reports to the console rather than through a logging abstraction.
+###################
+dotnet_diagnostic.SST1449.severity = none # Console output is the harness's report
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/GenerationBenchmarks.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/GenerationBenchmarks.cs
new file mode 100644
index 00000000..fec0ece8
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/GenerationBenchmarks.cs
@@ -0,0 +1,59 @@
+// Copyright (c) 2019-2026 ReactiveUI Association Incorporated. All rights reserved.
+// ReactiveUI Association Incorporated licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for full license information.
+
+using BenchmarkDotNet.Attributes;
+using Microsoft.CodeAnalysis;
+using ReactiveUI.SourceGenerators.Benchmarks.Support;
+
+namespace ReactiveUI.SourceGenerators.Benchmarks;
+
+/// Measures a cold generation pass over a mock consumer corpus.
+///
+/// The driver is rebuilt per iteration so each measurement is a cold generation, which is what a consumer's build
+/// pays. A reused driver would serve the next iteration from its incremental caches.
+///
+public class GenerationBenchmarks
+{
+ /// How many times each mock file is repeated, each copy in its own namespace.
+ private const int Copies = 20;
+
+ /// The mock consumer compilation, built once per parameter set.
+ private Compilation _compilation = null!;
+
+ /// Gets the corpus names.
+ public static IEnumerable Corpora => GeneratorCatalog.Corpora;
+
+ /// Gets or sets the corpus: one generator's mock file, or every mock file.
+ [ParamsSource(nameof(Corpora))]
+ public string Corpus { get; set; } = GeneratorHarness.AllCorpus;
+
+ /// Builds the mock consumer compilation once per parameter set.
+ [GlobalSetup]
+ public void Setup() => _compilation = GeneratorHarness.BuildCompilation(Corpus, Copies);
+
+ /// Runs a whole cold generation: syntax scan, extraction and emission.
+ /// The number of generated characters, so the work cannot be optimized away.
+ /// The corpus generated nothing beyond the injected attributes.
+ [Benchmark]
+ public int Generate()
+ {
+ var result = GeneratorHarness.CreateDriver(Corpus).RunGenerators(_compilation).GetRunResult();
+
+ var characters = 0;
+ var files = 0;
+ foreach (var generator in result.Results)
+ {
+ foreach (var generated in generator.GeneratedSources)
+ {
+ characters += generated.SourceText.Length;
+ files++;
+ }
+ }
+
+ // A corpus that stopped matching the attributes would quietly measure driver overhead instead.
+ return files <= Copies
+ ? throw new InvalidOperationException($"The {Corpus} corpus generated {files} files; the benchmark is measuring nothing.")
+ : characters;
+ }
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/BindableDerivedList.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/BindableDerivedList.cs
new file mode 100644
index 00000000..5afb35ca
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/BindableDerivedList.cs
@@ -0,0 +1,17 @@
+using System.Collections.ObjectModel;
+using ReactiveUI.Reactive;
+using ReactiveUI.SourceGenerators;
+
+namespace Mocks.BindableDerivedList__N__;
+
+public partial class ListViewModel : ReactiveObject
+{
+ [BindableDerivedList]
+ private readonly ReadOnlyObservableCollection? _names;
+
+ [BindableDerivedList(AccessModifier = PropertyAccessModifier.Internal)]
+ private readonly ReadOnlyObservableCollection? _numbers;
+
+ [BindableDerivedList]
+ private readonly ReadOnlyObservableCollection? _children;
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/IViewFor.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/IViewFor.cs
new file mode 100644
index 00000000..cc67792f
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/IViewFor.cs
@@ -0,0 +1,27 @@
+using ReactiveUI.Reactive;
+using ReactiveUI.SourceGenerators;
+
+namespace Mocks.IViewFor__N__;
+
+public sealed class LoginViewModel : ReactiveObject
+{
+}
+
+public sealed class DashboardViewModel : ReactiveObject
+{
+}
+
+[IViewFor]
+public partial class LoginView : System.Windows.Controls.UserControl
+{
+}
+
+[IViewFor]
+public partial class DashboardView : System.Windows.Forms.UserControl
+{
+}
+
+[IViewFor("Mocks.IViewFor__N__.LoginViewModel")]
+public partial class LoginWindow : System.Windows.Window
+{
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Reactive.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Reactive.cs
new file mode 100644
index 00000000..b940356d
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Reactive.cs
@@ -0,0 +1,73 @@
+using System;
+using System.Collections.Generic;
+using ReactiveUI.Reactive;
+using ReactiveUI.SourceGenerators;
+
+namespace Mocks.Reactive__N__;
+
+/// A view model with field and partial-property reactive members.
+public partial class PersonViewModel : ReactiveObject
+{
+ [Reactive]
+ private string _firstName = string.Empty;
+
+ [Reactive(nameof(FullName))]
+ private string _lastName = string.Empty;
+
+ [Reactive(SetModifier = AccessModifier.Protected)]
+ private int _age;
+
+ [Reactive(Inheritance = InheritanceModifier.Virtual)]
+ private double? _height;
+
+ [Reactive]
+ private List? _tags;
+
+ [Reactive]
+ private DateTimeOffset _updated;
+
+ public string FullName => FirstName + " " + LastName;
+
+ /// Gets or sets the nickname.
+ [Reactive]
+ public partial string? Nickname { get; set; }
+
+ [Reactive]
+ public partial int Score { get; protected set; }
+
+ [Reactive("Summary")]
+ public partial bool IsActive { get; set; }
+
+ public string Summary => IsActive ? FullName : string.Empty;
+}
+
+public partial class AddressViewModel : ReactiveObject
+{
+ [Reactive]
+ private string? _street;
+
+ [Reactive]
+ private string? _city;
+
+ [Reactive]
+ private string? _postCode;
+
+ [Reactive]
+ public partial string? Country { get; set; }
+
+ public partial class Nested : ReactiveObject
+ {
+ [Reactive]
+ private int _level;
+ }
+}
+
+public partial class GenericViewModel : ReactiveObject
+ where T : class
+{
+ [Reactive]
+ private T? _value;
+
+ [Reactive]
+ public partial IReadOnlyList? Items { get; set; }
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCollection.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCollection.cs
new file mode 100644
index 00000000..4da0bbcd
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCollection.cs
@@ -0,0 +1,17 @@
+using System.Collections.ObjectModel;
+using ReactiveUI.Reactive;
+using ReactiveUI.SourceGenerators;
+
+namespace Mocks.ReactiveCollection__N__;
+
+public partial class CollectionViewModel : ReactiveObject
+{
+ [ReactiveCollection]
+ private ObservableCollection _names = [];
+
+ [ReactiveCollection]
+ private ObservableCollection _numbers = [];
+
+ [ReactiveCollection]
+ private ObservableCollection? _children;
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCommand.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCommand.cs
new file mode 100644
index 00000000..75a4b6fb
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveCommand.cs
@@ -0,0 +1,42 @@
+using System;
+using System.Reactive.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+using ReactiveUI.Reactive;
+using ReactiveUI.SourceGenerators;
+
+namespace Mocks.ReactiveCommand__N__;
+
+public partial class CommandsViewModel : ReactiveObject
+{
+ private readonly IObservable _canSave = Observable.Return(true);
+
+ [ReactiveCommand]
+ private void Refresh()
+ {
+ }
+
+ [ReactiveCommand]
+ private int Add(int value) => value + 1;
+
+ [ReactiveCommand(CanExecute = nameof(_canSave))]
+ private Task SaveAsync() => Task.CompletedTask;
+
+ [ReactiveCommand]
+ private Task LoadAsync(string key, CancellationToken token) => Task.FromResult(key);
+
+ [ReactiveCommand]
+ private IObservable Stream(double seed) => Observable.Return(seed);
+
+ [ReactiveCommand(OutputScheduler = "RxSchedulers.MainThreadScheduler")]
+ private string Format(int value) => value.ToString();
+
+ [ReactiveCommand(AccessModifier = PropertyAccessModifier.Internal)]
+ private void Reset()
+ {
+ }
+
+ [ReactiveCommand]
+ [property: System.ComponentModel.Description("delete")]
+ private async Task DeleteAsync(int id, CancellationToken token) => await Task.Delay(id, token);
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveObject.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveObject.cs
new file mode 100644
index 00000000..d30ebe7c
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ReactiveObject.cs
@@ -0,0 +1,24 @@
+using System.ComponentModel;
+using ReactiveUI.SourceGenerators;
+
+namespace Mocks.ReactiveObject__N__;
+
+[IReactiveObject]
+public partial class PlainObject
+{
+ [Reactive]
+ private string? _name;
+
+ [Reactive]
+ private int _count;
+
+ [Reactive]
+ public partial bool Enabled { get; set; }
+}
+
+[IReactiveObject]
+public partial class Settings
+{
+ [Reactive]
+ private double _volume;
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/RoutedControlHost.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/RoutedControlHost.cs
new file mode 100644
index 00000000..a555429e
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/RoutedControlHost.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel;
+using ReactiveUI.SourceGenerators.WinForms;
+
+namespace Mocks.RoutedControlHost__N__;
+
+[RoutedControlHost("System.Windows.Forms.UserControl")]
+public partial class RouterControl
+{
+ private IContainer? components;
+
+ private void InitializeComponent()
+ {
+ }
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Stubs.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Stubs.cs
new file mode 100644
index 00000000..1ec676ff
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/Stubs.cs
@@ -0,0 +1,64 @@
+// Stand-ins for the WPF and WinForms types the view mocks derive from, so the corpus compiles on every OS.
+namespace System.Windows
+{
+ public class DependencyProperty
+ {
+ public static DependencyProperty Register(string name, global::System.Type propertyType, global::System.Type ownerType, PropertyMetadata typeMetadata) => null!;
+ }
+ public class PropertyMetadata
+ {
+ public PropertyMetadata(object? defaultValue) { }
+ }
+ public class DependencyObject
+ {
+ public object GetValue(DependencyProperty dp) => null!;
+ public void SetValue(DependencyProperty dp, object value) { }
+ }
+ public class UIElement : DependencyObject { }
+ public class FrameworkElement : UIElement { }
+ public class Window : FrameworkElement { }
+}
+namespace System.Windows.Controls
+{
+ public class UserControl : System.Windows.FrameworkElement { }
+ public class Page : System.Windows.FrameworkElement { }
+}
+namespace System.Windows.Forms
+{
+ public enum DockStyle
+ {
+ None,
+ Fill,
+ }
+
+ public class Control : global::System.ComponentModel.Component
+ {
+ public ControlCollection Controls { get; } = new();
+ public DockStyle Dock { get; set; }
+ public void SuspendLayout() { }
+ public void ResumeLayout() { }
+ }
+
+ public sealed class ControlCollection : global::System.Collections.Generic.IEnumerable
+ {
+ private readonly global::System.Collections.Generic.List controls = new();
+
+ public int Count => controls.Count;
+ public void Add(Control control) => controls.Add(control);
+ public void Clear() => controls.Clear();
+ public void Remove(Control? control)
+ {
+ if (control is not null)
+ {
+ controls.Remove(control);
+ }
+ }
+
+ public global::System.Collections.Generic.IEnumerator GetEnumerator() => controls.GetEnumerator();
+ global::System.Collections.IEnumerator global::System.Collections.IEnumerable.GetEnumerator() => GetEnumerator();
+ }
+
+ public class Form : Control { }
+ public class UserControl : Control { }
+}
+
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ViewModelControlHost.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ViewModelControlHost.cs
new file mode 100644
index 00000000..e0df9504
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Mocks/ViewModelControlHost.cs
@@ -0,0 +1,14 @@
+using System.ComponentModel;
+using ReactiveUI.SourceGenerators.WinForms;
+
+namespace Mocks.ViewModelControlHost__N__;
+
+[ViewModelControlHost("System.Windows.Forms.UserControl")]
+public partial class HostControl
+{
+ private IContainer? components;
+
+ private void InitializeComponent()
+ {
+ }
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Program.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Program.cs
new file mode 100644
index 00000000..ccc39e13
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Program.cs
@@ -0,0 +1,63 @@
+// Copyright (c) 2019-2026 ReactiveUI Association Incorporated. All rights reserved.
+// ReactiveUI Association Incorporated licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for full license information.
+
+using System.Diagnostics.Tracing;
+using BenchmarkDotNet.Configs;
+using BenchmarkDotNet.Diagnosers;
+using BenchmarkDotNet.Running;
+using Microsoft.Diagnostics.NETCore.Client;
+using Microsoft.Diagnostics.Tracing.Parsers;
+using ReactiveUI.SourceGenerators.Benchmarks.Support;
+
+namespace ReactiveUI.SourceGenerators.Benchmarks;
+
+/// Entry point that hands the command line to the BenchmarkDotNet switcher.
+internal static class Program
+{
+ /// The environment variable that turns the EventPipe profiler off when set to false.
+ private const string ProfilersVariable = "BENCHMARK_PROFILERS";
+
+ /// Runs the benchmarks the command line selects, or --smoke to run each corpus once.
+ /// The command-line arguments.
+ internal static void Main(string[] args)
+ {
+ if (args is ["--smoke"])
+ {
+ // Runs each corpus once outside BenchmarkDotNet, to prove the mocks still generate before a long run.
+ foreach (var corpus in GeneratorCatalog.Corpora)
+ {
+ var benchmark = new GenerationBenchmarks { Corpus = corpus };
+ benchmark.Setup();
+ Console.WriteLine($"{corpus}: {benchmark.Generate():N0} characters, {GeneratorHarness.CountErrors(corpus)} compile errors");
+ }
+
+ return;
+ }
+
+ _ = BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args, CreateConfig());
+ }
+
+ /// Creates the run configuration.
+ /// The memory diagnoser, plus an EventPipe trace per benchmark unless profiling is turned off.
+ ///
+ /// The trace carries verbose GC events, whose AllocationTick events name the allocated type and its call stack,
+ /// and CPU samples. The traces land in BenchmarkDotNet.Artifacts and are summarised with nettrace-analyzer.cs.
+ ///
+ private static ManualConfig CreateConfig()
+ {
+ var config = ManualConfig.Create(DefaultConfig.Instance).AddDiagnoser(MemoryDiagnoser.Default);
+ if (string.Equals(Environment.GetEnvironmentVariable(ProfilersVariable), "false", StringComparison.OrdinalIgnoreCase))
+ {
+ return config;
+ }
+
+ EventPipeProvider[] providers =
+ [
+ new("Microsoft-DotNETCore-SampleProfiler", EventLevel.Informational),
+ new(ClrTraceEventParser.ProviderName, EventLevel.Verbose, (long)(ClrTraceEventParser.Keywords.Default | ClrTraceEventParser.Keywords.GCHandle)),
+ ];
+
+ return config.AddDiagnoser(new EventPipeProfiler(EventPipeProfile.GcVerbose, providers));
+ }
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
new file mode 100644
index 00000000..b0a1980e
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
@@ -0,0 +1,36 @@
+
+
+
+ net10.0
+ Exe
+ false
+ enable
+ enable
+
+ $(NoWarn);CA1515;CA1822;CA1001
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorCatalog.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorCatalog.cs
new file mode 100644
index 00000000..464af29c
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorCatalog.cs
@@ -0,0 +1,62 @@
+// Copyright (c) 2019-2026 ReactiveUI Association Incorporated. All rights reserved.
+// ReactiveUI Association Incorporated licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for full license information.
+
+using Microsoft.CodeAnalysis;
+using ReactiveUI.SourceGenerators.WinForms;
+
+namespace ReactiveUI.SourceGenerators.Benchmarks.Support;
+
+/// Names the generators the package ships and the mock corpus each one reads.
+internal static class GeneratorCatalog
+{
+ /// Gets the corpus names, one per generator, each matching a file in the mocks folder.
+ internal static IEnumerable Corpora =>
+ [
+ "Reactive",
+ "ReactiveCommand",
+ "ReactiveObject",
+ "BindableDerivedList",
+ "ReactiveCollection",
+ "IViewFor",
+ "ViewModelControlHost",
+ "RoutedControlHost",
+ GeneratorHarness.AllCorpus,
+ ];
+
+ /// Creates the generators a corpus exercises: its own generator, or every generator for the whole corpus.
+ /// The corpus name.
+ /// The generators.
+ ///
+ /// always runs, because it injects the modifier enums the other attributes take.
+ /// No other corpus marks a member [Reactive], so it adds only its fixed cost.
+ ///
+ internal static ISourceGenerator[] Create(string corpus) =>
+ corpus switch
+ {
+ "Reactive" => [new ReactiveGenerator().AsSourceGenerator()],
+ "ReactiveCommand" => [new ReactiveGenerator().AsSourceGenerator(), new ReactiveCommandGenerator().AsSourceGenerator()],
+ "ReactiveObject" => [new ReactiveGenerator().AsSourceGenerator(), new ReactiveObjectGenerator().AsSourceGenerator()],
+ "BindableDerivedList" => [new ReactiveGenerator().AsSourceGenerator(), new BindableDerivedListGenerator().AsSourceGenerator()],
+ "ReactiveCollection" => [new ReactiveGenerator().AsSourceGenerator(), new ReactiveCollectionGenerator().AsSourceGenerator()],
+ "IViewFor" => [new ReactiveGenerator().AsSourceGenerator(), new IViewForGenerator().AsSourceGenerator()],
+ "ViewModelControlHost" => [new ReactiveGenerator().AsSourceGenerator(), new ViewModelControlHostGenerator().AsSourceGenerator()],
+ "RoutedControlHost" => [new ReactiveGenerator().AsSourceGenerator(), new RoutedControlHostGenerator().AsSourceGenerator()],
+ _ => Create(),
+ };
+
+ /// Creates every generator the package ships.
+ /// The generators.
+ internal static ISourceGenerator[] Create() =>
+ [
+ new ReactiveGenerator().AsSourceGenerator(),
+ new ReactiveCommandGenerator().AsSourceGenerator(),
+ new ObservableAsPropertyGenerator().AsSourceGenerator(),
+ new ReactiveObjectGenerator().AsSourceGenerator(),
+ new BindableDerivedListGenerator().AsSourceGenerator(),
+ new ReactiveCollectionGenerator().AsSourceGenerator(),
+ new IViewForGenerator().AsSourceGenerator(),
+ new ViewModelControlHostGenerator().AsSourceGenerator(),
+ new RoutedControlHostGenerator().AsSourceGenerator(),
+ ];
+}
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorHarness.cs b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorHarness.cs
new file mode 100644
index 00000000..51d57e54
--- /dev/null
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/Support/GeneratorHarness.cs
@@ -0,0 +1,144 @@
+// Copyright (c) 2019-2026 ReactiveUI Association Incorporated. All rights reserved.
+// ReactiveUI Association Incorporated licenses this file to you under the MIT license.
+// See the LICENSE file in the project root for full license information.
+
+using System.Reflection;
+using Microsoft.CodeAnalysis;
+using Microsoft.CodeAnalysis.CSharp;
+
+namespace ReactiveUI.SourceGenerators.Benchmarks.Support;
+
+/// Builds the compilation and the generator driver the generation benchmarks run.
+internal static class GeneratorHarness
+{
+ /// The corpus name that selects every mock file.
+ internal const string AllCorpus = "All";
+
+ /// The folder beside the benchmark assembly that holds the mock consumer source.
+ private const string MocksFolder = "Mocks";
+
+ /// The token in a mock file that each copy replaces with its own index.
+ private const string IndexToken = "__N__";
+
+ /// The parse options every benchmark compilation uses.
+ private static readonly CSharpParseOptions ParseOptions = new(LanguageVersion.CSharp13);
+
+ /// The metadata references for the mock consumer, resolved once per process.
+ private static readonly Lazy> References = new(CreateReferences);
+
+ /// Builds a compilation over the mock consumer source copied beside the benchmark assembly.
+ /// The mock file name without extension, or for every mock file.
+ /// How many times each mock file is repeated, each copy in its own namespace.
+ /// The compilation.
+ internal static CSharpCompilation BuildCompilation(string corpus, int copies)
+ {
+ var paths = Directory.GetFiles(Path.Combine(AppContext.BaseDirectory, MocksFolder), "*.cs");
+ Array.Sort(paths, StringComparer.Ordinal);
+
+ var syntaxTrees = new List();
+ foreach (var path in paths)
+ {
+ var name = Path.GetFileNameWithoutExtension(path);
+ if (corpus != AllCorpus && !string.Equals(name, corpus, StringComparison.Ordinal) && !string.Equals(name, "Stubs", StringComparison.Ordinal))
+ {
+ continue;
+ }
+
+ var template = File.ReadAllText(path);
+ if (!template.Contains(IndexToken, StringComparison.Ordinal))
+ {
+ syntaxTrees.Add(CSharpSyntaxTree.ParseText(template, ParseOptions, path));
+ continue;
+ }
+
+ for (var i = 0; i < copies; i++)
+ {
+ var text = template.Replace(IndexToken, i.ToString(System.Globalization.CultureInfo.InvariantCulture), StringComparison.Ordinal);
+ syntaxTrees.Add(CSharpSyntaxTree.ParseText(text, ParseOptions, $"{name}{i}.cs"));
+ }
+ }
+
+ return CSharpCompilation.Create(
+ "Mocks",
+ syntaxTrees,
+ References.Value,
+ new(OutputKind.DynamicallyLinkedLibrary, nullableContextOptions: NullableContextOptions.Enable));
+ }
+
+ /// Creates a cold generator driver for a corpus, carrying no caches from a previous run.
+ /// The corpus whose generators the driver runs.
+ /// The generator driver.
+ internal static GeneratorDriver CreateDriver(string corpus) =>
+ CSharpGeneratorDriver.Create(
+ GeneratorCatalog.Create(corpus),
+ parseOptions: ParseOptions);
+
+ /// Generates over a corpus and counts the errors in the resulting compilation, printing each one.
+ /// The corpus name.
+ /// The number of errors.
+ internal static int CountErrors(string corpus)
+ {
+ _ = CreateDriver(corpus).RunGeneratorsAndUpdateCompilation(BuildCompilation(corpus, 1), out var output, out _);
+ var errors = 0;
+ foreach (var diagnostic in output.GetDiagnostics())
+ {
+ if (diagnostic.Severity == DiagnosticSeverity.Error)
+ {
+ errors++;
+ Console.WriteLine($" {diagnostic}");
+ }
+ }
+
+ return errors;
+ }
+
+ /// Creates the metadata references for the mock consumer: the runtime plus ReactiveUI and its dependencies.
+ /// The references.
+ private static List CreateReferences()
+ {
+ var visited = new HashSet(StringComparer.OrdinalIgnoreCase);
+ var references = new List();
+ Assembly[] seeds =
+ [
+ typeof(object).Assembly,
+ typeof(Enumerable).Assembly,
+ typeof(System.ComponentModel.INotifyPropertyChanged).Assembly,
+ typeof(ReactiveUI.Reactive.ReactiveObject).Assembly,
+ typeof(System.Reactive.Unit).Assembly,
+ typeof(DynamicData.SourceList<>).Assembly,
+ typeof(Splat.Locator).Assembly,
+ ];
+
+ foreach (var seed in seeds)
+ {
+ AddTransitive(seed, visited, references);
+ }
+
+ return references;
+ }
+
+ /// Adds an assembly and its loadable references to the reference list.
+ /// The assembly.
+ /// The assembly locations already added.
+ /// The references to add to.
+ private static void AddTransitive(Assembly assembly, HashSet visited, List references)
+ {
+ if (assembly.IsDynamic || string.IsNullOrEmpty(assembly.Location) || !visited.Add(assembly.Location))
+ {
+ return;
+ }
+
+ references.Add(MetadataReference.CreateFromFile(assembly.Location));
+ foreach (var name in assembly.GetReferencedAssemblies())
+ {
+ try
+ {
+ AddTransitive(Assembly.Load(name), visited, references);
+ }
+ catch (FileNotFoundException)
+ {
+ // A facade the runtime does not ship is not needed by the mocks.
+ }
+ }
+ }
+}
From b20ee61a8e55af85b0008738b885858736341371 Mon Sep 17 00:00:00 2001
From: Glenn Watson <5834289+glennawatson@users.noreply.github.com>
Date: Sat, 26 Sep 2026 01:01:18 +1000
Subject: [PATCH 03/30] test: host the generator benchmarks on current Roslyn
against the Roslyn 5.0 band
---
.gitignore | 4 ++++
src/Directory.Packages.props | 2 +-
src/benchmarks/Directory.Packages.props | 9 +++++++++
.../ReactiveUI.SourceGenerators.Benchmarks.csproj | 6 +++---
4 files changed, 17 insertions(+), 4 deletions(-)
create mode 100644 src/benchmarks/Directory.Packages.props
diff --git a/.gitignore b/.gitignore
index a8679d30..e95da353 100644
--- a/.gitignore
+++ b/.gitignore
@@ -351,3 +351,7 @@ MigrationBackup/
# Claude Code local workspace
.claude/
+
+# BenchmarkDotNet
+**/.bdn/
+**/BenchmarkDotNet.Artifacts/
diff --git a/src/Directory.Packages.props b/src/Directory.Packages.props
index c75a3c41..7ff5bfdb 100644
--- a/src/Directory.Packages.props
+++ b/src/Directory.Packages.props
@@ -14,7 +14,7 @@
-
+
diff --git a/src/benchmarks/Directory.Packages.props b/src/benchmarks/Directory.Packages.props
new file mode 100644
index 00000000..950cb65b
--- /dev/null
+++ b/src/benchmarks/Directory.Packages.props
@@ -0,0 +1,9 @@
+
+
+
+
+
+ 5.9.0
+
+
diff --git a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
index b0a1980e..c38853e1 100644
--- a/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
+++ b/src/benchmarks/ReactiveUI.SourceGenerators.Benchmarks/ReactiveUI.SourceGenerators.Benchmarks.csproj
@@ -12,8 +12,8 @@
-
-
+
+
@@ -25,7 +25,7 @@
measurement covers the generator rather than whatever the host build decides to do with it.
-->
-
+
From 3f3cbfc665ac519bad2dfd325f5e3b9686ce9ff7 Mon Sep 17 00:00:00 2001
From: Glenn Watson <5834289+glennawatson@users.noreply.github.com>
Date: Sat, 26 Sep 2026 01:01:18 +1000
Subject: [PATCH 04/30] feat!: remove [ObservableAsProperty] and IViewFor view
registration, now provided by ReactiveUI.Binding
ReactiveUI.Binding ships [ObservableAsProperty] with ToProperty, and a view
locator that registers every IViewFor at compile time. The copies here
are removed:
- the [ObservableAsProperty] generator for fields, methods, observable
properties and partial properties, with InitializeOAPH
- RXUISG0014, RXUISG0017 and the RXUISPR0002 suppressor; RXUISPR0003 now
covers [ReactiveCommand] only
- RegisterViewsForViewModelsSourceGenerated, the RegistrationType and
ViewModelRegistrationType options, and SplatRegistrationType
RXUISG0012 and RXUISG0013 were reported for an invalid forwarded attribute
by every generator; they keep their IDs with a generic message.
The examples write ObservableAsPropertyHelper by hand and register views
with Splat, with notes pointing at ReactiveUI.Binding.
---
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 25 -
...Generators.IViewForAttribute.g.verified.cs | 60 --
...pts#TestNs.FullView.IViewFor.g.verified.cs | 35 -
...UISourceGeneratorsExtensions.g.verified.cs | 24 -
...Generators.IViewForAttribute.g.verified.cs | 60 --
...ant#TestNs.TestView.IViewFor.g.verified.cs | 35 -
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 25 -
...Generators.IViewForAttribute.g.verified.cs | 60 --
...ion#TestNs.TestView.IViewFor.g.verified.cs | 35 -
...UISourceGeneratorsExtensions.g.verified.cs | 24 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 24 -
...Generators.IViewForAttribute.g.verified.cs | 60 --
...gle#TestNs.TestView.IViewFor.g.verified.cs | 35 -
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...UISourceGeneratorsExtensions.g.verified.cs | 24 -
...Generators.IViewForAttribute.g.verified.cs | 60 --
...Req#TestNs.TestView.IViewFor.g.verified.cs | 35 -
...UISourceGeneratorsExtensions.g.verified.cs | 23 -
...Generators.IViewForAttribute.g.verified.cs | 30 +-
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 34 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 34 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 21 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 33 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 40 --
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 35 -
...ableAsPropertyFromObservable.g.verified.cs | 38 --
...ableAsPropertyFromObservable.g.verified.cs | 35 -
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 34 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...nner1.ObservableAsProperties.g.verified.cs | 23 -
...nner3.ObservableAsProperties.g.verified.cs | 26 -
...nner2.ObservableAsProperties.g.verified.cs | 23 -
...estVM.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...evel4.ObservableAsProperties.g.verified.cs | 29 -
...ableAsPropertyFromObservable.g.verified.cs | 41 --
...evel3.ObservableAsProperties.g.verified.cs | 26 -
...evel2.ObservableAsProperties.g.verified.cs | 23 -
...ableAsPropertyFromObservable.g.verified.cs | 35 -
...evel1.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...cVM`1.ObservableAsProperties.g.verified.cs | 19 -
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ecord.ObservableAsProperties.g.verified.cs | 19 -
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 22 -
...ableAsPropertyFromObservable.g.verified.cs | 34 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 25 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 19 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 25 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 25 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...estVM.ObservableAsProperties.g.verified.cs | 43 --
...ableAsPropertyFromObservable.g.verified.cs | 41 --
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 41 --
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 41 --
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 41 --
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...bservableAsPropertyAttribute.g.verified.cs | 56 --
...ableAsPropertyFromObservable.g.verified.cs | 31 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...rceGenerators.AccessModifier.g.verified.cs | 8 -
...ors.IReactiveObjectAttribute.g.verified.cs | 19 -
...estNs.TestVM.IReactiveObject.g.verified.cs | 68 --
.../TestHelper.cs | 7 -
.../UnitTests/DiagnosticSuppressorTests.cs | 31 +-
.../UnitTests/GeneratedOutputCoverageTests.cs | 25 +-
.../UnitTests/IViewForGeneratorTests.cs | 32 +-
.../OAPFromObservableGeneratorTests.cs | 392 -----------
.../UnitTests/OAPGeneratorTests.cs | 152 -----
.../UnitTests/OapExtTests.cs | 641 ------------------
.../UnitTests/ReactiveUiIntegrationTests.cs | 102 +--
.../UnitTests/RxObjExtTests.cs | 25 -
.../UnitTests/ViewForExtTests.cs | 146 +---
.../AnalyzerReleases.Shipped.md | 16 +-
.../TestViewModel.cs | 17 +-
.../Program.cs | 7 +-
.../TestClassOAPH_VM.cs | 41 +-
.../TestViewModel.Initialization.cs | 63 +-
.../TestViewModel.cs | 164 +++--
.../TestViewWinForms.cs | 2 +-
.../TestViewWpf.cs | 2 +-
.../TestViewWpf2.cs | 2 +-
.../AnalyzerReleases.Shipped.md | 20 +-
.../AnalyzerReleases.Unshipped.md | 14 +
.../AttributeDefinitions.cs | 153 +----
.../Core/Extensions/ContextExtensions.cs | 4 +-
.../Diagnostics/DiagnosticDescriptors.cs | 57 +-
.../Diagnostics/SuppressionDescriptors.cs | 8 +-
...esNotNeedToBeStaticDiagnosticSuppressor.cs | 43 --
...eWithFieldNeverReadDiagnosticSuppressor.cs | 53 --
.../IViewFor/IViewForGenerator.Execute.cs | 176 +----
.../IViewFor/IViewForGenerator.cs | 15 +-
.../IViewFor/Models/IViewForInfo.cs | 6 +-
.../Models/ObservableFieldInfo.cs | 32 -
.../Models/ObservableMethodInfo.cs | 52 --
.../ObservableAsPropertyGenerator.cs | 33 -
...eAsPropertyGenerator{FromField}.Execute.cs | 322 ---------
...bservableAsPropertyGenerator{FromField}.cs | 78 ---
...opertyGenerator{FromObservable}.Execute.cs | 540 ---------------
...ableAsPropertyGenerator{FromObservable}.cs | 78 ---
...activeUI.SourceGenerators.Roslyn.projitems | 9 -
.../Support/GeneratorCatalog.cs | 1 -
204 files changed, 301 insertions(+), 8598 deletions(-)
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#TestNs.FullView.IViewFor.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#TestNs.TestView.IViewFor.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#TestNs.TestView.IViewFor.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#TestNs.TestView.IViewFor.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#TestNs.TestView.IViewFor.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrRef#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrRef#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromField#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromField#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromObservableMethods#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromObservableMethods#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromObservableMethodsWithName#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromObservableMethodsWithName#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromObservableProp#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromObservableProp#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromPartialProperty#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromPartialProperty#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromPartialPropertyWithEmptyStringInitialValue#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromPartialPropertyWithEmptyStringInitialValue#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromPartialPropertyWithoutInitialValue#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.FromPartialPropertyWithoutInitialValue#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.Nested#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.Nested#TestNs.TestVM+TestVMInner1.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.Nested#TestNs.TestVM+TestVMInner2+TestVMInner3.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.Nested#TestNs.TestVM+TestVMInner2.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.Nested#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.WithAttr#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.WithAttr#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.WithName#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.WithName#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.FromField#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.FromField#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.FromFieldNestedClass#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.FromFieldNestedClass#TestNs.TestVM+TestVMInner1.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.FromFieldNestedClass#TestNs.TestVM+TestVMInner2+TestVMInner3.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.FromFieldNestedClass#TestNs.TestVM+TestVMInner2.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.FromFieldNestedClass#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.NamedFromField#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.NamedFromField#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.NonReadOnlyFromField#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.NonReadOnlyFromField#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.NonReadOnlyFromFieldProtected#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPGeneratorTests.NonReadOnlyFromFieldProtected#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInDeeplyNestedClass#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInDeeplyNestedClass#TestNs.Level1+Level2+Level3+Level4.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInDeeplyNestedClass#TestNs.Level1+Level2+Level3+Level4.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInDeeplyNestedClass#TestNs.Level1+Level2+Level3.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInDeeplyNestedClass#TestNs.Level1+Level2.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInDeeplyNestedClass#TestNs.Level1+Level2.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInDeeplyNestedClass#TestNs.Level1.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInGenericClass#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInGenericClass#TestNs.GenericVM`1.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInGenericClass#TestNs.GenericVM`1.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInRecordClass#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInRecordClass#TestNs.TestVMRecord.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldInRecordClass#TestNs.TestVMRecord.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithArrayTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithArrayTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithAttributes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithAttributes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithAttributes#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithCombinedOptions#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithCombinedOptions#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithDelegateTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithDelegateTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithEnumTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithEnumTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithGenericTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithGenericTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithInitialValue#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithInitialValue#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithInterfaceTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithInterfaceTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithNullableTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithNullableTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithNumericInitialValue#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithNumericInitialValue#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithTimeTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithTimeTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithTupleTypes#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromFieldWithTupleTypes#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromMultipleObservableAsProperties#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromMultipleObservableAsProperties#TestNs.TestVM.ObservableAsProperties.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromMultipleObservableAsProperties#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservableMethodWithCustomName#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservableMethodWithCustomName#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithComplexGenerics#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithComplexGenerics#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithEnum#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithEnum#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithGenericType#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithGenericType#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithInterface#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithInterface#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithTuple#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/OAPH/OapExtTests.FromObservablePropertyWithTuple#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/REACTIVEOBJ/RxObjExtTests.WithOap#ReactiveUI.SourceGenerators.IReactiveObjectAttribute.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/REACTIVEOBJ/RxObjExtTests.WithOap#TestNs.TestVM.IReactiveObject.g.verified.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/UnitTests/OAPFromObservableGeneratorTests.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/UnitTests/OAPGeneratorTests.cs
delete mode 100644 src/ReactiveUI.SourceGenerator.Tests/UnitTests/OapExtTests.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/Diagnostics/Suppressions/OAPHMethodDoesNotNeedToBeStaticDiagnosticSuppressor.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/Diagnostics/Suppressions/ObservableAsPropertyAttributeWithFieldNeverReadDiagnosticSuppressor.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/ObservableAsProperty/Models/ObservableFieldInfo.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/ObservableAsProperty/Models/ObservableMethodInfo.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/ObservableAsProperty/ObservableAsPropertyGenerator.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/ObservableAsProperty/ObservableAsPropertyGenerator{FromField}.Execute.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/ObservableAsProperty/ObservableAsPropertyGenerator{FromField}.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/ObservableAsProperty/ObservableAsPropertyGenerator{FromObservable}.Execute.cs
delete mode 100644 src/ReactiveUI.SourceGenerators.Roslyn/ObservableAsProperty/ObservableAsPropertyGenerator{FromObservable}.cs
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/IViewForGeneratorTests.Basic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index 08cdb68c..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- resolver.RegisterConstant>(new global::TestNs.FullView());
- resolver.Register();
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
deleted file mode 100644
index ee889df3..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-//HintName: ReactiveUI.SourceGenerators.IViewForAttribute.g.cs
-// Copyright (c) 2026 .NET Foundation and Contributors. All rights reserved.
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for full license information.
-
-//
-#pragma warning disable
-#nullable enable
-namespace ReactiveUI.SourceGenerators;
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model, ensure to use the full type name including namespace.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#TestNs.FullView.IViewFor.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#TestNs.FullView.IViewFor.g.verified.cs
deleted file mode 100644
index a0351071..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.AllRegOpts#TestNs.FullView.IViewFor.g.verified.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-//HintName: TestNs.FullView.IViewFor.g.cs
-//
-using ReactiveUI;
-using System.Windows;
-
-#pragma warning disable
-#nullable enable
-
-namespace TestNs
-{
- ///
- /// Partial class for the FullView which contains ReactiveUI IViewFor initialization.
- ///
- [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
- public partial class FullView : IViewFor
- {
- ///
- /// The view model dependency property.
- ///
- public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(TestNs.FullViewModel), typeof(FullView), new PropertyMetadata(null));
-
- ///
- /// Gets the binding root view model.
- ///
- public TestNs.FullViewModel BindingRoot => ViewModel;
-
- ///
- public TestNs.FullViewModel ViewModel { get => (TestNs.FullViewModel)GetValue(ViewModelProperty); set => SetValue(ViewModelProperty, value); }
-
- ///
- object? IViewFor.ViewModel { get => ViewModel; set => ViewModel = (TestNs.FullViewModel)value; }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index c6758a7c..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- resolver.RegisterConstant>(new global::TestNs.TestView());
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
deleted file mode 100644
index ee889df3..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-//HintName: ReactiveUI.SourceGenerators.IViewForAttribute.g.cs
-// Copyright (c) 2026 .NET Foundation and Contributors. All rights reserved.
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for full license information.
-
-//
-#pragma warning disable
-#nullable enable
-namespace ReactiveUI.SourceGenerators;
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model, ensure to use the full type name including namespace.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#TestNs.TestView.IViewFor.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#TestNs.TestView.IViewFor.g.verified.cs
deleted file mode 100644
index cf05cbc2..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Constant#TestNs.TestView.IViewFor.g.verified.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-//HintName: TestNs.TestView.IViewFor.g.cs
-//
-using ReactiveUI;
-using System.Windows;
-
-#pragma warning disable
-#nullable enable
-
-namespace TestNs
-{
- ///
- /// Partial class for the TestView which contains ReactiveUI IViewFor initialization.
- ///
- [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
- public partial class TestView : IViewFor
- {
- ///
- /// The view model dependency property.
- ///
- public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(TestNs.TestViewModel), typeof(TestView), new PropertyMetadata(null));
-
- ///
- /// Gets the binding root view model.
- ///
- public TestNs.TestViewModel BindingRoot => ViewModel;
-
- ///
- public TestNs.TestViewModel ViewModel { get => (TestNs.TestViewModel)GetValue(ViewModelProperty); set => SetValue(ViewModelProperty, value); }
-
- ///
- object? IViewFor.ViewModel { get => ViewModel; set => ViewModel = (TestNs.TestViewModel)value; }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.DiffNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.ExtNs#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithNestedViewClass#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactiveCommandsViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithReactivePropertiesViewModel#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithStringViewModelType#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index 9b9b7c89..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- resolver.RegisterLazySingleton>(() => new global::TestNs.TestView());
- resolver.RegisterLazySingleton(() => new global::TestNs.TestViewModel());
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
deleted file mode 100644
index ee889df3..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-//HintName: ReactiveUI.SourceGenerators.IViewForAttribute.g.cs
-// Copyright (c) 2026 .NET Foundation and Contributors. All rights reserved.
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for full license information.
-
-//
-#pragma warning disable
-#nullable enable
-namespace ReactiveUI.SourceGenerators;
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model, ensure to use the full type name including namespace.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#TestNs.TestView.IViewFor.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#TestNs.TestView.IViewFor.g.verified.cs
deleted file mode 100644
index cf05cbc2..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromIViewForWithViewModelRegistration#TestNs.TestView.IViewFor.g.verified.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-//HintName: TestNs.TestView.IViewFor.g.cs
-//
-using ReactiveUI;
-using System.Windows;
-
-#pragma warning disable
-#nullable enable
-
-namespace TestNs
-{
- ///
- /// Partial class for the TestView which contains ReactiveUI IViewFor initialization.
- ///
- [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
- public partial class TestView : IViewFor
- {
- ///
- /// The view model dependency property.
- ///
- public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(TestNs.TestViewModel), typeof(TestView), new PropertyMetadata(null));
-
- ///
- /// Gets the binding root view model.
- ///
- public TestNs.TestViewModel BindingRoot => ViewModel;
-
- ///
- public TestNs.TestViewModel ViewModel { get => (TestNs.TestViewModel)GetValue(ViewModelProperty); set => SetValue(ViewModelProperty, value); }
-
- ///
- object? IViewFor.ViewModel { get => ViewModel; set => ViewModel = (TestNs.TestViewModel)value; }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index e8122464..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- resolver.RegisterLazySingleton>(() => new global::TestNs.View3());
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.FromMultipleIViewForInSameNamespace#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Generic#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Interface#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index 09a9a9f1..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- resolver.RegisterLazySingleton>(() => new global::TestNs.TestView());
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
deleted file mode 100644
index ee889df3..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-//HintName: ReactiveUI.SourceGenerators.IViewForAttribute.g.cs
-// Copyright (c) 2026 .NET Foundation and Contributors. All rights reserved.
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for full license information.
-
-//
-#pragma warning disable
-#nullable enable
-namespace ReactiveUI.SourceGenerators;
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model, ensure to use the full type name including namespace.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#TestNs.TestView.IViewFor.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#TestNs.TestView.IViewFor.g.verified.cs
deleted file mode 100644
index cf05cbc2..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.LazySingle#TestNs.TestView.IViewFor.g.verified.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-//HintName: TestNs.TestView.IViewFor.g.cs
-//
-using ReactiveUI;
-using System.Windows;
-
-#pragma warning disable
-#nullable enable
-
-namespace TestNs
-{
- ///
- /// Partial class for the TestView which contains ReactiveUI IViewFor initialization.
- ///
- [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
- public partial class TestView : IViewFor
- {
- ///
- /// The view model dependency property.
- ///
- public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(TestNs.TestViewModel), typeof(TestView), new PropertyMetadata(null));
-
- ///
- /// Gets the binding root view model.
- ///
- public TestNs.TestViewModel BindingRoot => ViewModel;
-
- ///
- public TestNs.TestViewModel ViewModel { get => (TestNs.TestViewModel)GetValue(ViewModelProperty); set => SetValue(ViewModelProperty, value); }
-
- ///
- object? IViewFor.ViewModel { get => ViewModel; set => ViewModel = (TestNs.TestViewModel)value; }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Nested#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index d5913d0c..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- resolver.Register, global::TestNs.TestView>();
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
deleted file mode 100644
index ee889df3..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ /dev/null
@@ -1,60 +0,0 @@
-//HintName: ReactiveUI.SourceGenerators.IViewForAttribute.g.cs
-// Copyright (c) 2026 .NET Foundation and Contributors. All rights reserved.
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for full license information.
-
-//
-#pragma warning disable
-#nullable enable
-namespace ReactiveUI.SourceGenerators;
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-
-///
-/// IViewForAttribute.
-///
-///
-///
-/// Initializes a new instance of the class.
-///
-/// Type of the view model, ensure to use the full type name including namespace.
-[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#TestNs.TestView.IViewFor.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#TestNs.TestView.IViewFor.g.verified.cs
deleted file mode 100644
index cf05cbc2..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.PerReq#TestNs.TestView.IViewFor.g.verified.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-//HintName: TestNs.TestView.IViewFor.g.cs
-//
-using ReactiveUI;
-using System.Windows;
-
-#pragma warning disable
-#nullable enable
-
-namespace TestNs
-{
- ///
- /// Partial class for the TestView which contains ReactiveUI IViewFor initialization.
- ///
- [global::System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage]
- public partial class TestView : IViewFor
- {
- ///
- /// The view model dependency property.
- ///
- public static readonly DependencyProperty ViewModelProperty = DependencyProperty.Register(nameof(ViewModel), typeof(TestNs.TestViewModel), typeof(TestView), new PropertyMetadata(null));
-
- ///
- /// Gets the binding root view model.
- ///
- public TestNs.TestViewModel BindingRoot => ViewModel;
-
- ///
- public TestNs.TestViewModel ViewModel { get => (TestNs.TestViewModel)GetValue(ViewModelProperty); set => SetValue(ViewModelProperty, value); }
-
- ///
- object? IViewFor.ViewModel { get => ViewModel; set => ViewModel = (TestNs.TestViewModel)value; }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
deleted file mode 100644
index ee04db7b..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.verified.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-//HintName: ReactiveUI.ReactiveUISourceGeneratorsExtensions.g.cs
-//
-#pragma warning disable
-#nullable enable
-
-using global::ReactiveUI;
-using global::Splat;
-
-namespace ReactiveUI.SourceGenerators
-{
- ///
- /// Source-generated registration extensions for ReactiveUI views.
- ///
- internal static class ReactiveUISourceGeneratorsExtensions
- {
- public static void RegisterViewsForViewModelsSourceGenerated(this global::Splat.IMutableDependencyResolver resolver)
- {
- if (resolver is null) throw new global::System.ArgumentNullException(nameof(resolver));
- }
- }
-}
-#nullable restore
-#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
index ee889df3..0318d8ef 100644
--- a/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
+++ b/src/ReactiveUI.SourceGenerator.Tests/IVIEWFOR/ViewForExtTests.Record#ReactiveUI.SourceGenerators.IViewForAttribute.g.verified.cs
@@ -18,20 +18,7 @@ namespace ReactiveUI.SourceGenerators;
///
/// Type of the view model.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute : global::System.Attribute;
///
/// IViewForAttribute.
@@ -42,19 +29,6 @@ internal sealed class IViewForAttribute : global::System.Attribute
///
/// Type of the view model, ensure to use the full type name including namespace.
[global::System.AttributeUsage(global::System.AttributeTargets.Class, AllowMultiple = false, Inherited = false)]
-internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute
-{
- ///
- /// Gets the Splat registration type for Splat IViewFor registration.
- /// Registers IViewFor in the Splat service locator.
- ///
- public SplatRegistrationType RegistrationType { get; init; } = SplatRegistrationType.None;
-
- ///
- /// Gets the Splat registration type for Splat View Model registration.
- /// Registers the ViewModel (T) in the Splat service locator.
- ///
- public SplatRegistrationType ViewModelRegistrationType { get; init; } = SplatRegistrationType.None;
-}
+internal sealed class IViewForAttribute(string? viewModelType) : global::System.Attribute;
#nullable restore
#pragma warning restore
\ No newline at end of file
diff --git a/src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
deleted file mode 100644
index 05d217a4..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.verified.cs
+++ /dev/null
@@ -1,56 +0,0 @@
-//HintName: ReactiveUI.SourceGenerators.ObservableAsPropertyAttribute.g.cs
-// Copyright (c) 2026 .NET Foundation and Contributors. All rights reserved.
-// Licensed to the .NET Foundation under one or more agreements.
-// The .NET Foundation licenses this file to you under the MIT license.
-// See the LICENSE file in the project root for full license information.
-
-//
-#pragma warning disable
-#nullable enable
-namespace ReactiveUI.SourceGenerators;
-
-///
-/// ObservableAsPropertyAttribute.
-///
-///
-[global::System.AttributeUsage(global::System.AttributeTargets.Field | global::System.AttributeTargets.Property | global::System.AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
-internal sealed class ObservableAsPropertyAttribute : global::System.Attribute
-{
- ///
- /// Gets the name of the property.
- ///
- ///
- /// The name of the property.
- ///
- public string? PropertyName { get; init; }
-
- ///
- /// Gets the Readonly state of the OAPH property.
- ///
- ///
- /// The is read only of the OAPH property.
- ///
- public bool ReadOnly { get; init; } = true;
-
- ///
- /// Gets the AccessModifier of the OAPH property.
- ///
- ///
- /// The AccessModifier of the OAPH property, protected if true.
- ///
- public bool UseProtected { get; init; } = false;
-
- ///
- /// Gets the inheritance modifier of the generated property.
- ///
- public InheritanceModifier Inheritance { get; init; }
-
- ///
- /// Gets the Initial Value of the OAPH property.
- /// This should be a string representation of the value. i.e. "42" or "DateTime.Now" or "new List<string>()".
- /// String values are automatically quoted.
- ///
- public string? InitialValue { get; init; }
-}
-#nullable restore
-#pragma warning restore
diff --git a/src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs b/src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
deleted file mode 100644
index e83082da..00000000
--- a/src/ReactiveUI.SourceGenerator.Tests/OAPH/OAPFromObservableGeneratorTests.AttrNullRef#TestNs.TestVM.ObservableAsPropertyFromObservable.g.verified.cs
+++ /dev/null
@@ -1,34 +0,0 @@
-//HintName: TestNs.TestVM.ObservableAsPropertyFromObservable.g.cs
-//
-using ReactiveUI;
-
-#pragma warning disable
-#nullable enable
-
-namespace TestNs
-{
-
- public partial class TestVM
- {
- ///
- private object? _myNamedProperty;
-
- ///
- private ReactiveUI.ObservableAsPropertyHelper