Skip to content

Commit

Permalink
Fix serialization source generator error when multiple partials of th…
Browse files Browse the repository at this point in the history
…e same definition are user-defined (space-wizards#5160)
  • Loading branch information
DrSmugleaf authored May 23, 2024
1 parent d69c550 commit f0b45d9
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions Robust.Serialization.Generator/Generator.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Syntax;
Expand Down Expand Up @@ -36,6 +34,7 @@ public void Initialize(IncrementalGeneratorInitializationContext initContext)
var (compilation, declarations) = source;
var builder = new StringBuilder();
var containingTypes = new Stack<INamedTypeSymbol>();
var declarationsGenerated = new HashSet<string>();

foreach (var declaration in declarations)
{
Expand All @@ -44,6 +43,14 @@ public void Initialize(IncrementalGeneratorInitializationContext initContext)

var type = compilation.GetSemanticModel(declaration.SyntaxTree).GetDeclaredSymbol(declaration)!;

var symbolName = type
.ToDisplayString()
.Replace('<', '{')
.Replace('>', '}');

if (!declarationsGenerated.Add(symbolName))
continue;

var nonPartial = !IsPartial(declaration);

var namespaceString = type.ContainingNamespace.IsGlobalNamespace
Expand Down Expand Up @@ -107,11 +114,6 @@ public void Initialize(IncrementalGeneratorInitializationContext initContext)
{{containingTypesEnd}}
""");

var symbolName = type
.ToDisplayString()
.Replace('<', '{')
.Replace('>', '}');

var sourceText = CSharpSyntaxTree
.ParseText(builder.ToString())
.GetRoot()
Expand Down

0 comments on commit f0b45d9

Please sign in to comment.