From b1308e904615d8b014c064c34649e24912dde862 Mon Sep 17 00:00:00 2001 From: Perry Taylor Date: Fri, 13 Aug 2021 12:03:59 -0400 Subject: [PATCH 1/3] Add sample case --- Cloneable.Sample/ClassWithInheritance.cs | 8 ++++++++ Cloneable.Sample/InheritedClass.cs | 10 ++++++++++ Cloneable.Sample/Program.cs | 13 +++++++++++++ 3 files changed, 31 insertions(+) create mode 100644 Cloneable.Sample/ClassWithInheritance.cs create mode 100644 Cloneable.Sample/InheritedClass.cs diff --git a/Cloneable.Sample/ClassWithInheritance.cs b/Cloneable.Sample/ClassWithInheritance.cs new file mode 100644 index 0000000..e50811e --- /dev/null +++ b/Cloneable.Sample/ClassWithInheritance.cs @@ -0,0 +1,8 @@ +namespace Cloneable.Sample +{ + [Cloneable] + public partial class ClassWithInheritance : InheritedClass + { + public double C { get; set; } + } +} \ No newline at end of file diff --git a/Cloneable.Sample/InheritedClass.cs b/Cloneable.Sample/InheritedClass.cs new file mode 100644 index 0000000..dab1bf4 --- /dev/null +++ b/Cloneable.Sample/InheritedClass.cs @@ -0,0 +1,10 @@ +namespace Cloneable.Sample +{ + [Cloneable] + public partial class InheritedClass + { + public double A { get; set; } + + public double B { get; set; } + } +} \ No newline at end of file diff --git a/Cloneable.Sample/Program.cs b/Cloneable.Sample/Program.cs index c398e26..31ccfd4 100644 --- a/Cloneable.Sample/Program.cs +++ b/Cloneable.Sample/Program.cs @@ -11,6 +11,7 @@ static void Main(string[] args) DoSimpleExplicitClone(); DoDeepClone(); DoSafeDeepClone(); + DoBaseClassClone(); } static void DoSimpleClone() @@ -79,5 +80,17 @@ static void DoSafeDeepClone() Console.WriteLine("Is parents child copied: " + (clone.Child != parent.Child)); Console.WriteLine(); } + + static void DoBaseClassClone() + { + var classWithInheritance = new ClassWithInheritance(); + + classWithInheritance.A = 2; + + var clone = classWithInheritance.Clone(); + + Console.WriteLine(clone); + Console.WriteLine($"Clone A of Inherited Class:{clone.A}"); + } } } From f847913cd13dd9be15046f1ea2808d870c0692a2 Mon Sep 17 00:00:00 2001 From: Perry Taylor Date: Fri, 13 Aug 2021 14:43:57 -0400 Subject: [PATCH 2/3] Update nuget references and try to get source generator in a state where it can be debugged. --- Cloneable.Sample/Cloneable.Sample.csproj | 4 +++- Cloneable/Cloneable.csproj | 6 ++++-- Cloneable/CloneableGenerator.cs | 10 ++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/Cloneable.Sample/Cloneable.Sample.csproj b/Cloneable.Sample/Cloneable.Sample.csproj index abee800..b8866c9 100644 --- a/Cloneable.Sample/Cloneable.Sample.csproj +++ b/Cloneable.Sample/Cloneable.Sample.csproj @@ -7,7 +7,9 @@ - + diff --git a/Cloneable/Cloneable.csproj b/Cloneable/Cloneable.csproj index bdad948..6b63c21 100644 --- a/Cloneable/Cloneable.csproj +++ b/Cloneable/Cloneable.csproj @@ -4,6 +4,7 @@ Auto-generator of Clone method using C# Source Generator netstandard2.0 latest + true enable false https://github.com/mostmand/Cloneable @@ -15,7 +16,8 @@ - - + + + diff --git a/Cloneable/CloneableGenerator.cs b/Cloneable/CloneableGenerator.cs index 850e708..80106ab 100644 --- a/Cloneable/CloneableGenerator.cs +++ b/Cloneable/CloneableGenerator.cs @@ -222,6 +222,16 @@ private IEnumerable GetCloneableProperties(ITypeSymbol classSym var targetSymbolMembers = classSymbol.GetMembers().OfType() .Where(x => x.SetMethod is not null && x.CanBeReferencedByName); + + var baseTargetSymbolMembers = classSymbol.BaseType?.GetMembers().OfType() + .Where(x => x.SetMethod is not null && + x.CanBeReferencedByName); + + if (baseTargetSymbolMembers != null) + { + targetSymbolMembers.Concat(baseTargetSymbolMembers); + } + if (isExplicit) { return targetSymbolMembers.Where(x => x.HasAttribute(cloneAttribute!)); From 97501497b6499121b06ddd4b1877acf629d6ddde Mon Sep 17 00:00:00 2001 From: Perry Taylor Date: Fri, 13 Aug 2021 15:09:46 -0400 Subject: [PATCH 3/3] Get basic inheritence working. --- Cloneable/CloneableGenerator.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cloneable/CloneableGenerator.cs b/Cloneable/CloneableGenerator.cs index 80106ab..44b316a 100644 --- a/Cloneable/CloneableGenerator.cs +++ b/Cloneable/CloneableGenerator.cs @@ -229,7 +229,7 @@ private IEnumerable GetCloneableProperties(ITypeSymbol classSym if (baseTargetSymbolMembers != null) { - targetSymbolMembers.Concat(baseTargetSymbolMembers); + targetSymbolMembers = targetSymbolMembers.Concat(baseTargetSymbolMembers); } if (isExplicit)