Skip to content

Commit

Permalink
Handle partial interface scenario
Browse files Browse the repository at this point in the history
  • Loading branch information
Dương Kafka Đinh Hoàng committed May 13, 2024
1 parent dbcee1a commit 7b74d67
Show file tree
Hide file tree
Showing 8 changed files with 29 additions and 29 deletions.
2 changes: 1 addition & 1 deletion BindableProps/BindableProps.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
<PackageTags>source-generator;maui;net-standard;net-6;net-7;net-8;utility;helper</PackageTags>
<PackageProjectUrl>https://github.com/KafkaWannaFly/BindableProps</PackageProjectUrl>
<Version>1.4.1</Version>
<Version>1.4.2</Version>
<RepositoryUrl>https://github.com/KafkaWannaFly/BindableProps</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PackageReadmeFile>README.md</PackageReadmeFile>
Expand Down
16 changes: 8 additions & 8 deletions BindablePropsSG/Generators/AllBindablePropsSG.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,15 +84,15 @@ public class AllBindablePropsSG : BaseGenerator
}
}

protected override string ProcessClass(ClassDeclarationSyntax? classSyntax,
protected override string ProcessClass(TypeDeclarationSyntax? typeDeclarationSyntax,
List<(SyntaxNode, ISymbol)> syntaxSymbols)
{
if (classSyntax is null || !syntaxSymbols.Any())
if (typeDeclarationSyntax is null || !syntaxSymbols.Any())
return string.Empty;

var usingDirectives = classSyntax.SyntaxTree.GetCompilationUnitRoot().Usings;
var usingDirectives = typeDeclarationSyntax.SyntaxTree.GetCompilationUnitRoot().Usings;

var namespaceSyntax = classSyntax.Parent as BaseNamespaceDeclarationSyntax;
var namespaceSyntax = typeDeclarationSyntax.Parent as BaseNamespaceDeclarationSyntax;
var namespaceName = namespaceSyntax?.Name.ToString() ?? "global";

var source = new StringBuilder($@"
Expand All @@ -103,15 +103,15 @@ public class AllBindablePropsSG : BaseGenerator
namespace {namespaceName}
{{
public partial class {classSyntax.Identifier}
public partial class {typeDeclarationSyntax.Identifier}
{{
");

foreach (var (syntax, symbol) in syntaxSymbols)
{
// variableDeclaratorSyntax --> variableDeclarationSyntax --> fieldDeclarationSyntax
var fieldDeclarationSyntax = syntax.Parent?.Parent!;
ProcessField(source, classSyntax, fieldDeclarationSyntax, symbol);
ProcessField(source, typeDeclarationSyntax, fieldDeclarationSyntax, symbol);
}

source.Append(@"
Expand All @@ -122,11 +122,11 @@ public partial class {classSyntax.Identifier}
return source.ToString();
}

protected override void ProcessField(StringBuilder source, ClassDeclarationSyntax classDeclarationSyntax,
protected override void ProcessField(StringBuilder source, TypeDeclarationSyntax typeDeclarationSyntax,
SyntaxNode syntaxNode, ISymbol fieldSymbol)
{
var bindablePropParam = SyntaxUtil.ExtractCreateBindablePropertyParam(
classDeclarationSyntax,
typeDeclarationSyntax,
syntaxNode,
fieldSymbol,
"Dummy Name That I Don't Care"
Expand Down
4 changes: 2 additions & 2 deletions BindablePropsSG/Generators/AttachedPropSG.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ public class AttachedPropSG : BaseGenerator
"AttachedPropAttribute"
};

protected override void ProcessField(StringBuilder source, ClassDeclarationSyntax classSyntax,
protected override void ProcessField(StringBuilder source, TypeDeclarationSyntax typeDeclarationSyntax,
SyntaxNode syntaxNode,
ISymbol fieldSymbol)
{
var bindablePropParam =
SyntaxUtil.ExtractCreateBindablePropertyParam(classSyntax, syntaxNode, fieldSymbol, "AttachedProp");
SyntaxUtil.ExtractCreateBindablePropertyParam(typeDeclarationSyntax, syntaxNode, fieldSymbol, "AttachedProp");

var defaultOnChangedDelegate = SyntaxUtil.GetDefaultOnChangedDelegate(
bindablePropParam.ClassType!,
Expand Down
20 changes: 10 additions & 10 deletions BindablePropsSG/Generators/BaseGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,9 @@ protected virtual bool Predicate(SyntaxNode node, CancellationToken cancellation
{
if (syntaxSymbols.IsDefaultOrEmpty)
return;

var groupList = syntaxSymbols.GroupBy<(SyntaxNode, ISymbol), ClassDeclarationSyntax>(
fieldGroup => (ClassDeclarationSyntax)fieldGroup.Item1!.Parent!
var groupList = syntaxSymbols.GroupBy<(SyntaxNode, ISymbol), TypeDeclarationSyntax>(
fieldGroup => (TypeDeclarationSyntax)fieldGroup.Item1!.Parent!
);

foreach (var group in groupList)
Expand All @@ -73,17 +73,17 @@ protected virtual bool Predicate(SyntaxNode node, CancellationToken cancellation
}
}

protected virtual string ProcessClass(ClassDeclarationSyntax? classSyntax,
protected virtual string ProcessClass(TypeDeclarationSyntax? typeDeclarationSyntax,
List<(SyntaxNode, ISymbol)> syntaxSymbols)
{
if (classSyntax is null)
if (typeDeclarationSyntax is null)
{
return string.Empty;
}

var usingDirectives = classSyntax.SyntaxTree.GetCompilationUnitRoot().Usings;
var usingDirectives = typeDeclarationSyntax.SyntaxTree.GetCompilationUnitRoot().Usings;

var namespaceSyntax = classSyntax.Parent as BaseNamespaceDeclarationSyntax;
var namespaceSyntax = typeDeclarationSyntax.Parent as BaseNamespaceDeclarationSyntax;
var namespaceName = namespaceSyntax?.Name.ToString() ?? "global";

var source = new StringBuilder($@"
Expand All @@ -94,13 +94,13 @@ protected virtual bool Predicate(SyntaxNode node, CancellationToken cancellation
namespace {namespaceName}
{{
public partial class {classSyntax.Identifier}
public partial {typeDeclarationSyntax.Keyword.Text} {typeDeclarationSyntax.Identifier}
{{
");

foreach (var (syntax, symbol) in syntaxSymbols)
{
ProcessField(source, classSyntax, syntax, symbol);
ProcessField(source, typeDeclarationSyntax, syntax, symbol);
}

source.Append(@$"
Expand All @@ -116,7 +116,7 @@ protected virtual string ProcessClass((SyntaxNode, ISymbol) group)
return string.Empty;
}

protected virtual void ProcessField(StringBuilder source, ClassDeclarationSyntax classSyntax,
protected virtual void ProcessField(StringBuilder source, TypeDeclarationSyntax typeDeclarationSyntax,
SyntaxNode fieldSyntax, ISymbol fieldSymbol)
{
}
Expand Down
4 changes: 2 additions & 2 deletions BindablePropsSG/Generators/BindablePropSG.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ public class BindablePropSG : BaseGenerator
"BindablePropAttribute"
};

protected override void ProcessField(StringBuilder source, ClassDeclarationSyntax classSyntax,
protected override void ProcessField(StringBuilder source, TypeDeclarationSyntax typeDeclarationSyntax,
SyntaxNode syntaxNode,
ISymbol fieldSymbol)
{
var bindablePropParam =
SyntaxUtil.ExtractCreateBindablePropertyParam(classSyntax, syntaxNode, fieldSymbol, "BindableProp");
SyntaxUtil.ExtractCreateBindablePropertyParam(typeDeclarationSyntax, syntaxNode, fieldSymbol, "BindableProp");

source.Append($@"
public {bindablePropParam.NewKeyWord} static readonly BindableProperty {bindablePropParam.PropName}Property = BindableProperty.Create(
Expand Down
4 changes: 2 additions & 2 deletions BindablePropsSG/Generators/BindableReadOnlyPropSG.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@ public class BindableReadOnlyPropSG : BaseGenerator

protected override void ProcessField(
StringBuilder source,
ClassDeclarationSyntax classSyntax,
TypeDeclarationSyntax typeDeclarationSyntax,
SyntaxNode syntaxNode,
ISymbol fieldSymbol
)
{
var bindablePropParam =
SyntaxUtil.ExtractCreateBindablePropertyParam(classSyntax, syntaxNode, fieldSymbol, "BindableReadOnlyProp");
SyntaxUtil.ExtractCreateBindablePropertyParam(typeDeclarationSyntax, syntaxNode, fieldSymbol, "BindableReadOnlyProp");

var fieldSyntax = (FieldDeclarationSyntax)syntaxNode;
var attributeSyntax = SyntaxUtil.GetAttributeByName(fieldSyntax, "BindableReadOnlyProp");
Expand Down
4 changes: 2 additions & 2 deletions BindablePropsSG/Utils/SyntaxUtil.cs
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ public static string GetDefaultOnChangedDelegate(string classType, string propNa
}

public static BindablePropertyParam ExtractCreateBindablePropertyParam(
ClassDeclarationSyntax classSyntax,
TypeDeclarationSyntax typeDeclarationSyntax,
SyntaxNode syntaxNode,
ISymbol fieldSymbol,
string attributeName
Expand All @@ -138,7 +138,7 @@ string attributeName
var newKeyword = fieldSyntax.Modifiers
.FirstOrDefault(keyword => keyword.Text.Equals("new")).ToString();

var classType = classSyntax.Identifier.ToString();
var classType = typeDeclarationSyntax.Identifier.ToString();

var defaultFieldValue = GetFieldDefaultValue(fieldSyntax) ?? "default";

Expand Down
4 changes: 2 additions & 2 deletions UnitTest/BaseTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ namespace UnitTest;

public class BaseTest<TGenerator> where TGenerator : IIncrementalGenerator, new()
{
protected IIncrementalGenerator _generator = new TGenerator();
private readonly IIncrementalGenerator _generator = new TGenerator();

virtual protected string GetDataFolder()
protected virtual string GetDataFolder()
{
return string.Empty;
}
Expand Down

0 comments on commit 7b74d67

Please sign in to comment.