| File: UnsafeMigrationSyntaxHelpers.cs | Web Access |
| Project: src\runtime\src\tools\illink\src\ILLink.RoslynAnalyzer\ILLink.RoslynAnalyzer.csproj (ILLink.RoslynAnalyzer) |
// Copyright (c) .NET Foundation and contributors. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. #if DEBUG using System.Linq; using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; namespace ILLink.RoslynAnalyzer { /// <summary> /// Provides source-shared modifier inspection for the unsafe-v2 analyzers and code fixes. /// </summary> internal static class UnsafeMigrationSyntaxHelpers { // The analyzer builds against a Roslyn version that predates SyntaxKind.SafeKeyword. private static readonly SyntaxKind s_safeKeyword = SyntaxFacts.GetContextualKeywordKind("safe"); internal static SyntaxTokenList GetModifiers(SyntaxNode declaration) => declaration switch { MemberDeclarationSyntax member => member.Modifiers, LocalFunctionStatementSyntax localFunction => localFunction.Modifiers, AccessorDeclarationSyntax accessor => accessor.Modifiers, _ => default, }; internal static bool HasModifier(SyntaxNode declaration, SyntaxKind modifier) => GetModifiers(declaration).Any(modifier); internal static bool HasSafeModifier(SyntaxNode declaration) => s_safeKeyword != SyntaxKind.None && GetModifiers(declaration).Any(s_safeKeyword); internal static SyntaxToken GetModifier(SyntaxNode declaration, SyntaxKind modifier) { foreach (SyntaxToken token in GetModifiers(declaration)) { if (token.IsKind(modifier)) return token; } return default; } } } #endif