Skip to content

Commit

Permalink
Merge pull request #727 from Cysharp/feature/FixSourceGeneratorErrorA…
Browse files Browse the repository at this point in the history
…liasQualified

Fix error when a source code contains alias-qualified attribute names
  • Loading branch information
mayuki committed Dec 22, 2023
2 parents 780c861 + 7886c57 commit 0cc7f10
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -55,9 +55,11 @@ public void OnVisitSyntaxNode(GeneratorSyntaxContext context)
attrSyntax.Parent is AttributeListSyntax &&
attrSyntax.Parent.Parent is ClassDeclarationSyntax classDeclSyntax)
{
var attrName = attrSyntax.Name is QualifiedNameSyntax qualifiedName
var attrName = attrSyntax.Name is QualifiedNameSyntax qualifiedName /* Foo.Bar.AttrName */
? qualifiedName.Right.Identifier.ValueText
: ((IdentifierNameSyntax)attrSyntax.Name).Identifier.ValueText;
: attrSyntax.Name is AliasQualifiedNameSyntax aliasQualifiedName /* foo::AttrName */
? aliasQualifiedName.Name.Identifier.ValueText
: ((IdentifierNameSyntax)attrSyntax.Name).Identifier.ValueText; /* AttrName */

if (attrName.StartsWith(MagicOnionClientSourceGenerator.MagicOnionClientGenerationAttributeShortName, StringComparison.Ordinal))
{
Expand Down
48 changes: 48 additions & 0 deletions tests/MagicOnion.Client.SourceGenerator.Tests/RunTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,4 +187,52 @@ partial class MagicOnionInitializer {}
// var allOutputReason = result.TrackedOutputSteps.SelectMany(x => x.Value).SelectMany(x => x.Outputs);
// Assert.Collection(allOutputReason, x => Assert.Equal(IncrementalStepRunReason.Unchanged, x.Reason));
//}

[Fact]
public void RunAndGenerate_ParseAttributeName()
{
var (compilation, semanticModel) = CompilationHelper.Create(
"""
using MagicOnion.Client;

using moc = global::MagicOnion.Client;

[MagicOnionClientGeneration]
partial class IdentifierOnly {}

[MagicOnion.Client.MagicOnionClientGeneration]
partial class FullyQualified {}

[global::MagicOnion.Client.MagicOnionClientGeneration]
partial class FullyQualifiedWithGlobal {}

[moc::MagicOnionClientGeneration]
partial class AliasQualified {}


[MagicOnionClientGenerationAttribute]
partial class FullName_IdentifierOnly {}

[MagicOnion.Client.MagicOnionClientGenerationAttribute]
partial class FullName_FullyQualified {}

[global::MagicOnion.Client.MagicOnionClientGenerationAttribute]
partial class FullName_FullyQualifiedWithGlobal {}

[moc::MagicOnionClientGenerationAttribute]
partial class FullName_AliasQualified {}
""");
var sourceGenerator = new MagicOnionClientSourceGenerator();

GeneratorDriver driver = CSharpGeneratorDriver.Create(
generators: new[] { sourceGenerator.AsSourceGenerator() },
driverOptions: new GeneratorDriverOptions(IncrementalGeneratorOutputKind.None, trackIncrementalGeneratorSteps: true)
);

// Run generator and update compilation
driver = driver.RunGeneratorsAndUpdateCompilation(compilation, out var newCompilation, out var diagnostics);

Assert.DoesNotContain(diagnostics, x => x.Severity > DiagnosticSeverity.Info);
Assert.DoesNotContain(newCompilation.GetDiagnostics(), x => x.Severity > DiagnosticSeverity.Info);
}
}

0 comments on commit 0cc7f10

Please sign in to comment.