/
githubmirror
/
roslyn
Обзор
Документация
Войти
/
githubmirror
/
roslyn
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/Compilers/Test/Utilities/CSharp/LocalVariableDeclaratorsCollector.cs
106 строк
3 KB
Jared Parsons
generated move
28 сен 2020, 19:36
28 сен 2020, 19:36
1cca63b
Код
Авторство
О чём код?
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. #nullable disable using System.Collections.Immutable; using Microsoft.CodeAnalysis.CSharp.Symbols; using Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.PooledObjects; namespace Microsoft.CodeAnalysis.CSharp.EditAndContinue.UnitTests { internal sealed class LocalVariableDeclaratorsCollector : CSharpSyntaxWalker { private readonly ArrayBuilder<SyntaxNode> _builder; private LocalVariableDeclaratorsCollector(ArrayBuilder<SyntaxNode> builder) { _builder = builder; } internal static ImmutableArray<SyntaxNode> GetDeclarators(SourceMemberMethodSymbol method) { var builder = ArrayBuilder<SyntaxNode>.GetInstance(); var visitor = new LocalVariableDeclaratorsCollector(builder); var bodies = method.Bodies; visitor.Visit(bodies.Item1 ?? (SyntaxNode)bodies.Item2); return builder.ToImmutableAndFree(); } public sealed override void VisitForEachStatement(ForEachStatementSyntax node) { _builder.Add(node); base.VisitForEachStatement(node); } public sealed override void VisitLockStatement(LockStatementSyntax node) { _builder.Add(node); base.VisitLockStatement(node); } public sealed override void VisitUsingStatement(UsingStatementSyntax node) { if (node.Expression != null) { _builder.Add(node); } base.VisitUsingStatement(node); } public override void VisitSwitchStatement(SwitchStatementSyntax node) { _builder.Add(node); base.VisitSwitchStatement(node); } public override void VisitIfStatement(IfStatementSyntax node) { _builder.Add(node); base.VisitIfStatement(node); } public override void VisitWhileStatement(WhileStatementSyntax node) { _builder.Add(node); base.VisitWhileStatement(node); } public override void VisitDoStatement(DoStatementSyntax node) { _builder.Add(node); base.VisitDoStatement(node); } public override void VisitForStatement(ForStatementSyntax node) { if (node.Condition != null) { _builder.Add(node); } base.VisitForStatement(node); } public override void VisitVariableDeclarator(VariableDeclaratorSyntax node) { _builder.Add(node); base.VisitVariableDeclarator(node); } public override void VisitSingleVariableDesignation(SingleVariableDesignationSyntax node) { _builder.Add(node); base.VisitSingleVariableDesignation(node); } public override void VisitCatchDeclaration(CatchDeclarationSyntax node) { _builder.Add(node); base.VisitCatchDeclaration(node); } } }