From f0b45d95cbfb35f3e99319a1829ea663f2229dd5 Mon Sep 17 00:00:00 2001 From: DrSmugleaf <10968691+DrSmugleaf@users.noreply.github.com> Date: Thu, 23 May 2024 13:48:40 -0700 Subject: [PATCH] Fix serialization source generator error when multiple partials of the same definition are user-defined (#5160) --- Robust.Serialization.Generator/Generator.cs | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/Robust.Serialization.Generator/Generator.cs b/Robust.Serialization.Generator/Generator.cs index 504136a93..382adb2ce 100644 --- a/Robust.Serialization.Generator/Generator.cs +++ b/Robust.Serialization.Generator/Generator.cs @@ -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; @@ -36,6 +34,7 @@ public class Generator : IIncrementalGenerator var (compilation, declarations) = source; var builder = new StringBuilder(); var containingTypes = new Stack(); + var declarationsGenerated = new HashSet(); foreach (var declaration in declarations) { @@ -44,6 +43,14 @@ public class Generator : IIncrementalGenerator 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 @@ -107,11 +114,6 @@ using Robust.Shared.Serialization.TypeSerializers.Interfaces; {{containingTypesEnd}} """); - var symbolName = type - .ToDisplayString() - .Replace('<', '{') - .Replace('>', '}'); - var sourceText = CSharpSyntaxTree .ParseText(builder.ToString()) .GetRoot()