diff --git a/src/MvvmGen.SourceGenerators.Tests/Model/ViewModelToGenerateTests.cs b/src/MvvmGen.SourceGenerators.Tests/Model/ViewModelToGenerateTests.cs index 08db564..fc3f0a8 100644 --- a/src/MvvmGen.SourceGenerators.Tests/Model/ViewModelToGenerateTests.cs +++ b/src/MvvmGen.SourceGenerators.Tests/Model/ViewModelToGenerateTests.cs @@ -102,6 +102,22 @@ public void ShouldNotBeEqualDifferentWrappedModelType2() Assert.NotEqual(_viewModelToGenerate1, _viewModelToGenerate2); } + [Fact] + public void ShouldNotBeEqualDifferentWrappedModelPropertyName1() + { + _viewModelToGenerate2.WrappedModelPropertyName = "CustomModelProperty"; + + Assert.NotEqual(_viewModelToGenerate1, _viewModelToGenerate2); + } + + [Fact] + public void ShouldNotBeEqualDifferentWrappedModelPropertyName2() + { + _viewModelToGenerate2.WrappedModelPropertyName = null; + + Assert.NotEqual(_viewModelToGenerate1, _viewModelToGenerate2); + } + [Fact] public void ShouldNotBeEqualDifferentPropertiesToGenerate1() { @@ -325,6 +341,7 @@ private static void FillAllProperties(ViewModelToGenerate viewModelToGenerate) viewModelToGenerate.InheritFromViewModelBase = true; viewModelToGenerate.IsEventSubscriber = true; viewModelToGenerate.WrappedModelType = "Employee"; + viewModelToGenerate.WrappedModelPropertyName = "EmployeeModel"; viewModelToGenerate.PropertiesToGenerate = new List { diff --git a/src/MvvmGen.SourceGenerators.Tests/ViewModelGeneratorTests/ViewModelAttributeTests.ModelInput.cs b/src/MvvmGen.SourceGenerators.Tests/ViewModelGeneratorTests/ViewModelAttributeTests.ModelInput.cs index b3324db..3be03f0 100644 --- a/src/MvvmGen.SourceGenerators.Tests/ViewModelGeneratorTests/ViewModelAttributeTests.ModelInput.cs +++ b/src/MvvmGen.SourceGenerators.Tests/ViewModelGeneratorTests/ViewModelAttributeTests.ModelInput.cs @@ -218,7 +218,12 @@ namespace MyCode {{ public class Employee {{ - + public Employee (int id) + {{ + Id = id; + }} + public int Id {{ get; }} + public bool IsDeveloper {{ get; set; }} }} [ViewModel({attributeArgument})] @@ -239,6 +244,21 @@ public EmployeeViewModel() partial void OnInitialize(); + public int Id => {expectedModelPropertyName}.Id; + + public bool IsDeveloper + {{ + get => {expectedModelPropertyName}.IsDeveloper; + set + {{ + if ({expectedModelPropertyName}.IsDeveloper != value) + {{ + {expectedModelPropertyName}.IsDeveloper = value; + OnPropertyChanged(""IsDeveloper""); + }} + }} + }} + protected MyCode.Employee { expectedModelPropertyName } {{ get; set; }} }} }} diff --git a/src/MvvmGen.SourceGenerators/Inspectors/ModelMemberInspector.cs b/src/MvvmGen.SourceGenerators/Inspectors/ModelMemberInspector.cs index b24bdcb..18e9d08 100644 --- a/src/MvvmGen.SourceGenerators/Inspectors/ModelMemberInspector.cs +++ b/src/MvvmGen.SourceGenerators/Inspectors/ModelMemberInspector.cs @@ -13,7 +13,7 @@ namespace MvvmGen.Inspectors { internal static class ModelMemberInspector { - internal static string? Inspect(AttributeData viewModelAttributeData, IList propertiesToGenerate) + internal static string? Inspect(AttributeData viewModelAttributeData, IList propertiesToGenerate, string? wrappedModelPropertyName) { string? wrappedModelType = null; @@ -32,6 +32,7 @@ internal static class ModelMemberInspector if (modelTypedConstant.Value.Value is INamedTypeSymbol model) { wrappedModelType = $"{model}"; + wrappedModelPropertyName = wrappedModelPropertyName ?? "Model"; var members = GetAllMembers(model); foreach (var member in members) { @@ -41,7 +42,7 @@ internal static class ModelMemberInspector if (propertySymbol is not null) { propertiesToGenerate.Add(new PropertyToGenerate( - propertySymbol.Name, propertySymbol.Type.ToString(), $"Model.{propertySymbol.Name}", propertySymbol.IsReadOnly)); + propertySymbol.Name, propertySymbol.Type.ToString(), $"{wrappedModelPropertyName}.{propertySymbol.Name}", propertySymbol.IsReadOnly)); } } } diff --git a/src/MvvmGen.SourceGenerators/Model/ViewModelToGenerate.cs b/src/MvvmGen.SourceGenerators/Model/ViewModelToGenerate.cs index 910aa76..25eba33 100644 --- a/src/MvvmGen.SourceGenerators/Model/ViewModelToGenerate.cs +++ b/src/MvvmGen.SourceGenerators/Model/ViewModelToGenerate.cs @@ -61,6 +61,7 @@ public bool Equals(ViewModelToGenerate? other) ClassAccessModifier == other.ClassAccessModifier && NamespaceName == other.NamespaceName && WrappedModelType == other.WrappedModelType && + WrappedModelPropertyName == other.WrappedModelPropertyName && IsEventSubscriber == other.IsEventSubscriber && GenerateConstructor == other.GenerateConstructor && InheritFromViewModelBase == other.InheritFromViewModelBase && @@ -79,6 +80,7 @@ public override int GetHashCode() hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(ClassAccessModifier); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(NamespaceName); hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(WrappedModelType); + hashCode = hashCode * -1521134295 + EqualityComparer.Default.GetHashCode(WrappedModelPropertyName); hashCode = hashCode * -1521134295 + IsEventSubscriber.GetHashCode(); hashCode = hashCode * -1521134295 + GenerateConstructor.GetHashCode(); hashCode = hashCode * -1521134295 + InheritFromViewModelBase.GetHashCode(); diff --git a/src/MvvmGen.SourceGenerators/ViewModelGenerator.cs b/src/MvvmGen.SourceGenerators/ViewModelGenerator.cs index bfe9e0d..f15924d 100644 --- a/src/MvvmGen.SourceGenerators/ViewModelGenerator.cs +++ b/src/MvvmGen.SourceGenerators/ViewModelGenerator.cs @@ -89,11 +89,8 @@ public void Initialize(IncrementalGeneratorInitializationContext context) CommandInvalidationsToGenerate = commandInvalidationsToGenerate }; - viewModelToGenerate.WrappedModelType = ModelMemberInspector.Inspect(viewModelAttributeData, viewModelToGenerate.PropertiesToGenerate); - if(viewModelToGenerate.WrappedModelType is not null) - { - viewModelToGenerate.WrappedModelPropertyName = ViewModelAttributeInspector.InspectModelPropertyName(viewModelAttributeData); - } + viewModelToGenerate.WrappedModelPropertyName = ViewModelAttributeInspector.InspectModelPropertyName(viewModelAttributeData); + viewModelToGenerate.WrappedModelType = ModelMemberInspector.Inspect(viewModelAttributeData, viewModelToGenerate.PropertiesToGenerate,viewModelToGenerate.WrappedModelPropertyName); viewModelToGenerate.ViewModelInterfaceToGenerate = ViewModelGenerateInterfaceAttributeInspector.Inspect(viewModelClassSymbol, viewModelToGenerate.PropertiesToGenerate, viewModelToGenerate.CommandsToGenerate);