// ----------------------------------------------------------------------------- // file="PanelStateIncrementalGenerator.StateCommandHandlers" // Project: StgSharp // Copyright (c) Nitload. // SPDX-License-Identifier: MIT // ----------------------------------------------------------------------------- using Microsoft.CodeAnalysis; using System.Collections.Generic; using System.Collections.Immutable; namespace StgSharp.UserInterface.Generator { internal static class PanelStateIncrementalGeneratorStateCommandHandlers { public static StateChangeCommandHandlerPartAnalysis Analyze( PanelStateIncrementalGeneratorTypeTarget target, PanelStateSymbolPartAnalysis stateSymbols, StateChangeBindingPartAnalysis stateChangeBindings ) { ImmutableArray members = MergeMembers( stateChangeBindings.Members, stateSymbols.Members); return new StateChangeCommandHandlerPartAnalysis( target.TypeDisplayName, members); } private static void AddMembers( ImmutableArray.Builder builder, HashSet seen, ImmutableArray members ) { foreach (PanelStateIncrementalGeneratorMarkedMember member in members) { string key = member.Symbol.ToDisplayString(SymbolDisplayFormat.FullyQualifiedFormat); if (!seen.Add(key)) { continue; } builder.Add(member); } } private static ImmutableArray MergeMembers( ImmutableArray primaryMembers, ImmutableArray secondaryMembers ) { if (primaryMembers.IsDefaultOrEmpty && secondaryMembers.IsDefaultOrEmpty) { return ImmutableArray.Empty; } HashSet seen = new(StringComparer.Ordinal); ImmutableArray.Builder builder = ImmutableArray.CreateBuilder(); AddMembers(builder, seen, primaryMembers); AddMembers(builder, seen, secondaryMembers); return builder.ToImmutable(); } } }