Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
<IncludeBuildOutput>false</IncludeBuildOutput>
<GenerateDocumentationFile>false</GenerateDocumentationFile>
<NuspecFile>$(MSBuildProjectName).nuspec</NuspecFile>
<Nullable>Enable</Nullable>
</PropertyGroup>

<ItemGroup>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using Microsoft.AspNetCore.Mvc.Analyzers;
using Microsoft.CodeAnalysis;

namespace Microsoft.AspNetCore.Analyzers
Expand All @@ -14,8 +13,8 @@ public static bool IsEndpointRoutingExplicitlyDisabled(OptionsAnalysis analysis)
for (var i = 0; i < analysis.Options.Length; i++)
{
var item = analysis.Options[i];
if (string.Equals(item.OptionsType.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat), SymbolNames.MvcOptions) &&
string.Equals(item.Property.Name, SymbolNames.EnableEndpointRoutingProperty, StringComparison.Ordinal))
if (string.Equals(item.OptionsType.ToDisplayString(SymbolDisplayFormat.CSharpErrorMessageFormat), SymbolNames.MvcOptions.MetadataName) &&
string.Equals(item.Property.Name, SymbolNames.MvcOptions.EnableEndpointRoutingPropertyName, StringComparison.Ordinal))
{
return item.ConstantValue as bool? == false;
}
Expand Down
3 changes: 3 additions & 0 deletions src/Analyzers/Analyzers/src/StartupSymbols.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,15 @@ public StartupSymbols(Compilation compilation)
{
IApplicationBuilder = compilation.GetTypeByMetadataName(SymbolNames.IApplicationBuilder.MetadataName);
IServiceCollection = compilation.GetTypeByMetadataName(SymbolNames.IServiceCollection.MetadataName);
MvcOptions = compilation.GetTypeByMetadataName(SymbolNames.MvcOptions.MetadataName);
}

public bool HasRequiredSymbols => IApplicationBuilder != null && IServiceCollection != null;

public INamedTypeSymbol IApplicationBuilder { get; }

public INamedTypeSymbol IServiceCollection { get; }

public INamedTypeSymbol MvcOptions { get; }
}
}
7 changes: 7 additions & 0 deletions src/Analyzers/Analyzers/src/SymbolNames.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,12 @@ public static class SignalRAppBuilderExtensions

public const string UseSignalRMethodName = "UseSignalR";
}

public static class MvcOptions
{
public const string MetadataName = "Microsoft.AspNetCore.Mvc.MvcOptions";

public const string EnableEndpointRoutingPropertyName = "EnableEndpointRouting";
}
}
}
5 changes: 5 additions & 0 deletions src/Analyzers/Analyzers/test/AnalyzerTestBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ public abstract class AnalyzerTestBase

public TestSource Read(string source)
{
if (!source.EndsWith(".cs"))
{
source = source + ".cs";
}

var filePath = Path.Combine(ProjectDirectory, "TestFiles", GetType().Name, source);
if (!File.Exists(filePath))
{
Expand Down
31 changes: 31 additions & 0 deletions src/Analyzers/Analyzers/test/AnalyzersDiagnosticAnalyzerRunner.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Analyzer.Testing;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;

namespace Microsoft.AspNetCore.Analyzers
{
internal class AnalyzersDiagnosticAnalyzerRunner : DiagnosticAnalyzerRunner
{
public AnalyzersDiagnosticAnalyzerRunner(DiagnosticAnalyzer analyzer)
{
Analyzer = analyzer;
}

public DiagnosticAnalyzer Analyzer { get; }

public Task<Diagnostic[]> GetDiagnosticsAsync(string source)
{
return GetDiagnosticsAsync(sources: new[] { source }, Analyzer, Array.Empty<string>());
}

public Task<Diagnostic[]> GetDiagnosticsAsync(Project project)
{
return GetDiagnosticsAsync(new[] { project }, Analyzer, Array.Empty<string>());
}
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.

using System;
using System.Collections.Concurrent;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Analyzer.Testing;
using Microsoft.AspNetCore.Mvc;
using Microsoft.CodeAnalysis;
using Xunit;

namespace Microsoft.AspNetCore.Analyzers
{
public class StartupAnalyzerTest
public class StartupAnalyzerTest : AnalyzerTestBase
{
public StartupAnalyzerTest()
{
StartupAnalyzer = new StartupAnalzyer();

Runner = new MvcDiagnosticAnalyzerRunner(StartupAnalyzer);
Runner = new AnalyzersDiagnosticAnalyzerRunner(StartupAnalyzer);

Analyses = new ConcurrentBag<object>();
ConfigureServicesMethods = new ConcurrentBag<IMethodSymbol>();
Expand All @@ -32,7 +30,7 @@ public StartupAnalyzerTest()

private StartupAnalzyer StartupAnalyzer { get; }

private MvcDiagnosticAnalyzerRunner Runner { get; }
private AnalyzersDiagnosticAnalyzerRunner Runner { get; }

private ConcurrentBag<object> Analyses { get; }

Expand All @@ -44,7 +42,7 @@ public StartupAnalyzerTest()
public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_Standard()
{
// Arrange
var source = ReadSource("StartupSignatures_Standard");
var source = Read("StartupSignatures_Standard");

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand All @@ -60,7 +58,7 @@ public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_Standard
public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_MoreVariety()
{
// Arrange
var source = ReadSource("StartupSignatures_MoreVariety");
var source = Read("StartupSignatures_MoreVariety");

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand All @@ -82,7 +80,7 @@ public async Task StartupAnalyzer_FindsStartupMethods_StartupSignatures_MoreVari
public async Task StartupAnalyzer_MvcOptionsAnalysis_UseMvc_FindsEndpointRoutingDisabled()
{
// Arrange
var source = ReadSource("MvcOptions_UseMvcWithDefaultRouteAndEndpointRoutingDisabled");
var source = Read("MvcOptions_UseMvcWithDefaultRouteAndEndpointRoutingDisabled");

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand All @@ -102,7 +100,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_UseMvc_FindsEndpointRouting
public async Task StartupAnalyzer_MvcOptionsAnalysis_AddMvcOptions_FindsEndpointRoutingDisabled()
{
// Arrange
var source = ReadSource("MvcOptions_UseMvcWithDefaultRouteAndAddMvcOptionsEndpointRoutingDisabled");
var source = Read("MvcOptions_UseMvcWithDefaultRouteAndAddMvcOptionsEndpointRoutingDisabled");

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand All @@ -125,7 +123,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_AddMvcOptions_FindsEndpoint
public async Task StartupAnalyzer_MvcOptionsAnalysis_FindsEndpointRoutingEnabled(string sourceFileName, string mvcMiddlewareName)
{
// Arrange
var source = ReadSource(sourceFileName);
var source = Read(sourceFileName);

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand All @@ -151,7 +149,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_FindsEndpointRoutingEnabled
public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleMiddleware()
{
// Arrange
var source = ReadSource("MvcOptions_UseMvcWithOtherMiddleware");
var source = Read("MvcOptions_UseMvcWithOtherMiddleware");

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand Down Expand Up @@ -183,7 +181,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleMiddleware()
public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleUseMvc()
{
// Arrange
var source = ReadSource("MvcOptions_UseMvcMultiple");
var source = Read("MvcOptions_UseMvcMultiple");

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand Down Expand Up @@ -215,7 +213,7 @@ public async Task StartupAnalyzer_MvcOptionsAnalysis_MultipleUseMvc()
public async Task StartupAnalyzer_ServicesAnalysis_CallBuildServiceProvider()
{
// Arrange
var source = ReadSource("ConfigureServices_BuildServiceProvider");
var source = Read("ConfigureServices_BuildServiceProvider");

// Act
var diagnostics = await Runner.GetDiagnosticsAsync(source.Source);
Expand All @@ -230,10 +228,5 @@ public async Task StartupAnalyzer_ServicesAnalysis_CallBuildServiceProvider()
AnalyzerAssert.DiagnosticLocation(source.MarkerLocations["MM1"], diagnostic.Location);
});
}

private TestSource ReadSource(string fileName)
{
return MvcTestSource.Read(nameof(StartupAnalyzerTest), fileName);
}
}
}
99 changes: 0 additions & 99 deletions src/Mvc/Mvc.Analyzers/src/Startup/StartupFacts.cs

This file was deleted.

23 changes: 0 additions & 23 deletions src/Mvc/Mvc.Analyzers/src/Startup/StartupSymbols.cs

This file was deleted.