From 217f15d670cd2601aba05c1af9f4f815b78db2e8 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Fri, 19 Jun 2026 08:52:05 +0200 Subject: [PATCH] Remove dead generator helpers: IsTypeNode, GetTopLevelTypes, TreeTraversal --- .../DecompilerSyntaxTreeGenerator.cs | 5 +- .../RoslynHelpers.cs | 11 -- .../TreeTraversal.cs | 125 ------------------ 3 files changed, 2 insertions(+), 139 deletions(-) delete mode 100644 ICSharpCode.Decompiler.Generators/TreeTraversal.cs diff --git a/ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs b/ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs index 78b8c3233..75553e70d 100644 --- a/ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs +++ b/ICSharpCode.Decompiler.Generators/DecompilerSyntaxTreeGenerator.cs @@ -30,7 +30,7 @@ namespace ICSharpCode.Decompiler.Generators; [Generator] internal class DecompilerSyntaxTreeGenerator : IIncrementalGenerator { - record AstNodeAdditions(string NodeName, bool NeedsVisitor, bool IsAbstract, bool BaseHasDefaultConstructor, bool NeedsPatternPlaceholder, bool IsTypeNode, string VisitMethodName, string VisitMethodParamType, EquatableArray<(string Member, string TypeName, bool RecursiveMatch, bool MatchAny, bool Nullable)>? MembersToMatch, EquatableArray<(string RoleExpr, bool IsCollection, string PropertyName, string PropertyType, string ElementType, bool IsOverride, bool IsNullable, string KindName, bool IsPartial)>? Slots, EquatableArray<(string StringName, string TokenName, bool NullOnEmpty)>? NameSlots, EquatableArray<(string PropertyName, string ParamType, string ElementType, bool IsCollection, bool IsOptional)>? CtorParams); + record AstNodeAdditions(string NodeName, bool NeedsVisitor, bool IsAbstract, bool BaseHasDefaultConstructor, bool NeedsPatternPlaceholder, string VisitMethodName, string VisitMethodParamType, EquatableArray<(string Member, string TypeName, bool RecursiveMatch, bool MatchAny, bool Nullable)>? MembersToMatch, EquatableArray<(string RoleExpr, bool IsCollection, string PropertyName, string PropertyType, string ElementType, bool IsOverride, bool IsNullable, string KindName, bool IsPartial)>? Slots, EquatableArray<(string StringName, string TokenName, bool NullOnEmpty)>? NameSlots, EquatableArray<(string PropertyName, string ParamType, string ElementType, bool IsCollection, bool IsOptional)>? CtorParams); // Derives the shared SlotKind name from a [Slot]/[NameSlot] string. Those strings are already bare // kind names (e.g. "Body", "Getter"), so this is mostly identity; the last-dotted-segment and @@ -175,7 +175,6 @@ internal class DecompilerSyntaxTreeGenerator : IIncrementalGenerator IsAbstract: targetSymbol.IsAbstract, BaseHasDefaultConstructor: targetSymbol.BaseType is { } bt && bt.InstanceConstructors.Any(c => c.Parameters.Length == 0 && c.DeclaredAccessibility != Accessibility.Private), NeedsPatternPlaceholder: (bool)attribute.ConstructorArguments[0].Value!, - IsTypeNode: targetSymbol.Name == "AstType" || targetSymbol.BaseType?.Name == "AstType", visitMethodName, paramTypeName, membersToMatch?.ToEquatableArray(), slots?.ToEquatableArray(), nameSlots?.ToEquatableArray(), ctorParams?.ToEquatableArray()); } @@ -587,7 +586,7 @@ internal class DecompilerSyntaxTreeGenerator : IIncrementalGenerator builder.AppendLine("namespace ICSharpCode.Decompiler.CSharp.Syntax;"); source = source - .Concat([new("PatternPlaceholder", true, false, true, false, false, "PatternPlaceholder", "AstNode", null, null, null, null)]) + .Concat([new("PatternPlaceholder", true, false, true, false, "PatternPlaceholder", "AstNode", null, null, null, null)]) .ToImmutableArray(); WriteInterface("IAstVisitor", "void", ""); diff --git a/ICSharpCode.Decompiler.Generators/RoslynHelpers.cs b/ICSharpCode.Decompiler.Generators/RoslynHelpers.cs index fa198a98d..2e65fa4c7 100644 --- a/ICSharpCode.Decompiler.Generators/RoslynHelpers.cs +++ b/ICSharpCode.Decompiler.Generators/RoslynHelpers.cs @@ -4,17 +4,6 @@ namespace ICSharpCode.Decompiler.Generators; public static class RoslynHelpers { - public static IEnumerable GetTopLevelTypes(this IAssemblySymbol assembly) - { - foreach (var ns in TreeTraversal.PreOrder(assembly.GlobalNamespace, ns => ns.GetNamespaceMembers())) - { - foreach (var t in ns.GetTypeMembers()) - { - yield return t; - } - } - } - public static bool IsDerivedFrom(this INamedTypeSymbol type, INamedTypeSymbol baseType) { INamedTypeSymbol? t = type; diff --git a/ICSharpCode.Decompiler.Generators/TreeTraversal.cs b/ICSharpCode.Decompiler.Generators/TreeTraversal.cs deleted file mode 100644 index 3485768bb..000000000 --- a/ICSharpCode.Decompiler.Generators/TreeTraversal.cs +++ /dev/null @@ -1,125 +0,0 @@ -#nullable enable -// Copyright (c) 2010-2013 AlphaSierraPapa for the SharpDevelop Team -// -// Permission is hereby granted, free of charge, to any person obtaining a copy of this -// software and associated documentation files (the "Software"), to deal in the Software -// without restriction, including without limitation the rights to use, copy, modify, merge, -// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons -// to whom the Software is furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in all copies or -// substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, -// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR -// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE -// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR -// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -// DEALINGS IN THE SOFTWARE. - -namespace ICSharpCode.Decompiler.Generators; - -/// -/// Static helper methods for traversing trees. -/// -internal static class TreeTraversal -{ - /// - /// Converts a tree data structure into a flat list by traversing it in pre-order. - /// - /// The root element of the tree. - /// The function that gets the children of an element. - /// Iterator that enumerates the tree structure in pre-order. - public static IEnumerable PreOrder(T root, Func?> recursion) - { - return PreOrder(new T[] { root }, recursion); - } - - /// - /// Converts a tree data structure into a flat list by traversing it in pre-order. - /// - /// The root elements of the forest. - /// The function that gets the children of an element. - /// Iterator that enumerates the tree structure in pre-order. - public static IEnumerable PreOrder(IEnumerable input, Func?> recursion) - { - Stack> stack = new Stack>(); - try - { - stack.Push(input.GetEnumerator()); - while (stack.Count > 0) - { - while (stack.Peek().MoveNext()) - { - T element = stack.Peek().Current; - yield return element; - IEnumerable? children = recursion(element); - if (children != null) - { - stack.Push(children.GetEnumerator()); - } - } - stack.Pop().Dispose(); - } - } - finally - { - while (stack.Count > 0) - { - stack.Pop().Dispose(); - } - } - } - - /// - /// Converts a tree data structure into a flat list by traversing it in post-order. - /// - /// The root element of the tree. - /// The function that gets the children of an element. - /// Iterator that enumerates the tree structure in post-order. - public static IEnumerable PostOrder(T root, Func?> recursion) - { - return PostOrder(new T[] { root }, recursion); - } - - /// - /// Converts a tree data structure into a flat list by traversing it in post-order. - /// - /// The root elements of the forest. - /// The function that gets the children of an element. - /// Iterator that enumerates the tree structure in post-order. - public static IEnumerable PostOrder(IEnumerable input, Func?> recursion) - { - Stack> stack = new Stack>(); - try - { - stack.Push(input.GetEnumerator()); - while (stack.Count > 0) - { - while (stack.Peek().MoveNext()) - { - T element = stack.Peek().Current; - IEnumerable? children = recursion(element); - if (children != null) - { - stack.Push(children.GetEnumerator()); - } - else - { - yield return element; - } - } - stack.Pop().Dispose(); - if (stack.Count > 0) - yield return stack.Peek().Current; - } - } - finally - { - while (stack.Count > 0) - { - stack.Pop().Dispose(); - } - } - } -}