Skip to content

Commit

Permalink
Add new ModelPropertyName property to ViewModel attribute to fix issue
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasclaudiushuber committed Nov 25, 2023
1 parent 90a3e51 commit f5de1b3
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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()
{
Expand Down Expand Up @@ -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<PropertyToGenerate>
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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})]
Expand All @@ -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; }}
}}
}}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ namespace MvvmGen.Inspectors
{
internal static class ModelMemberInspector
{
internal static string? Inspect(AttributeData viewModelAttributeData, IList<PropertyToGenerate> propertiesToGenerate)
internal static string? Inspect(AttributeData viewModelAttributeData, IList<PropertyToGenerate> propertiesToGenerate, string? wrappedModelPropertyName)
{
string? wrappedModelType = null;

Expand All @@ -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)
{
Expand All @@ -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));
}
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/MvvmGen.SourceGenerators/Model/ViewModelToGenerate.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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 &&
Expand All @@ -79,6 +80,7 @@ public override int GetHashCode()
hashCode = hashCode * -1521134295 + EqualityComparer<string?>.Default.GetHashCode(ClassAccessModifier);
hashCode = hashCode * -1521134295 + EqualityComparer<string>.Default.GetHashCode(NamespaceName);
hashCode = hashCode * -1521134295 + EqualityComparer<string?>.Default.GetHashCode(WrappedModelType);
hashCode = hashCode * -1521134295 + EqualityComparer<string?>.Default.GetHashCode(WrappedModelPropertyName);
hashCode = hashCode * -1521134295 + IsEventSubscriber.GetHashCode();
hashCode = hashCode * -1521134295 + GenerateConstructor.GetHashCode();
hashCode = hashCode * -1521134295 + InheritFromViewModelBase.GetHashCode();
Expand Down
7 changes: 2 additions & 5 deletions src/MvvmGen.SourceGenerators/ViewModelGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit f5de1b3

Please sign in to comment.