File: RouteEmbeddedLanguage\Infrastructure\MvcDetector.cs
Web Access
Project: src\src\Framework\AspNetCoreAnalyzers\src\Analyzers\Microsoft.AspNetCore.App.Analyzers.csproj (Microsoft.AspNetCore.App.Analyzers)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using System;
using Microsoft.AspNetCore.App.Analyzers.Infrastructure;
using Microsoft.AspNetCore.Shared;
using Microsoft.CodeAnalysis;
 
namespace Microsoft.AspNetCore.Analyzers.RouteEmbeddedLanguage.Infrastructure;
 
using WellKnownType = WellKnownTypeData.WellKnownType;
 
internal static class MvcDetector
{
    public static bool IsController(INamedTypeSymbol? typeSymbol, WellKnownTypes wellKnownTypes)
    {
        if (typeSymbol is null)
        {
            return false;
        }
 
        return MvcFacts.IsController(
            typeSymbol,
            wellKnownTypes.Get(WellKnownType.Microsoft_AspNetCore_Mvc_ControllerAttribute),
            wellKnownTypes.Get(WellKnownType.Microsoft_AspNetCore_Mvc_NonControllerAttribute));
    }
 
    public static bool IsAction(IMethodSymbol methodSymbol, WellKnownTypes wellKnownTypes)
    {
        var disposable = wellKnownTypes.Get(SpecialType.System_IDisposable);
        var members = disposable.GetMembers(nameof(IDisposable.Dispose));
        var idisposableDispose = (IMethodSymbol)members[0];
 
        return MvcFacts.IsControllerAction(
            methodSymbol,
            wellKnownTypes.Get(WellKnownType.Microsoft_AspNetCore_Mvc_NonActionAttribute),
            idisposableDispose);
    }
}