Skip to content

Commit 5c39fe7

Browse files
committed
IsPartialDefinition
1 parent 28f4a00 commit 5c39fe7

4 files changed

Lines changed: 9 additions & 21 deletions

File tree

samples/StringLiteralCodeAnalysisSample/StringLiteralCodeAnalysisSample.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
55
<TargetFramework>net5.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>
9-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.9.0" PrivateAssets="all" />
9+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.10.0" PrivateAssets="all" />
1010
</ItemGroup>
1111

1212
<ItemGroup>

src/StringLiteralGenerator/StringLiteralGenerator.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.0</TargetFramework>
@@ -19,7 +19,7 @@
1919
</PropertyGroup>
2020

2121
<ItemGroup>
22-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.9.0" PrivateAssets="all" />
22+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="3.10.0" PrivateAssets="all" />
2323
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" PrivateAssets="all" />
2424
</ItemGroup>
2525

src/StringLiteralGenerator/Utf8StringLiteralGenerator.Parser.cs

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,8 @@ public partial class Utf8StringLiteralGenerator : ISourceGenerator
77
{
88
private const string attributeName = "StringLiteral.Utf8Attribute";
99

10-
private static bool IsStaticPartial(MemberDeclarationSyntax m)
11-
{
12-
bool isStatic = false;
13-
bool isPartial = false;
14-
foreach (var mod in m.Modifiers)
15-
{
16-
isStatic |= mod.Text == "static";
17-
isPartial |= mod.Text == "partial";
18-
}
19-
return isStatic && isPartial;
20-
}
10+
private static bool IsSyntaxTargetForGeneration(SyntaxNode node) =>
11+
node is MethodDeclarationSyntax { AttributeLists.Count: > 0 };
2112

2213
static bool ReturnsString(IMethodSymbol methodSymbol)
2314
{

src/StringLiteralGenerator/Utf8StringLiteralGenerator.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,14 @@ public void Execute(GeneratorExecutionContext context)
3333
{
3434
foreach (var m in receiver.CandidateMethods)
3535
{
36-
if (!IsStaticPartial(m)) continue;
37-
3836
var model = compilation.GetSemanticModel(m.SyntaxTree);
3937

4038
if (m.ParameterList.Parameters.Count != 0) continue;
4139
if (model.GetDeclaredSymbol(m) is not { } methodSymbol) continue;
40+
if (!methodSymbol.IsPartialDefinition || !methodSymbol.IsStatic) continue;
4241
if (!ReturnsString(methodSymbol)) continue;
4342
if (GetUtf8Attribute(methodSymbol) is not { } value) continue;
4443

45-
4644
yield return (new(methodSymbol.ContainingType), new(methodSymbol, value));
4745
}
4846
}
@@ -61,10 +59,9 @@ class SyntaxReceiver : ISyntaxReceiver
6159
public void OnVisitSyntaxNode(SyntaxNode syntaxNode)
6260
{
6361
// any field with at least one attribute is a candidate for property generation
64-
if (syntaxNode is MethodDeclarationSyntax methodDeclarationSyntax
65-
&& methodDeclarationSyntax.AttributeLists.Count > 0)
62+
if (IsSyntaxTargetForGeneration(syntaxNode))
6663
{
67-
CandidateMethods.Add(methodDeclarationSyntax);
64+
CandidateMethods.Add((MethodDeclarationSyntax)syntaxNode);
6865
}
6966
}
7067
}

0 commit comments

Comments
 (0)