diff --git a/src/Mvc/Mvc.Analyzers/src/AttributesShouldNotBeAppliedToPageModelAnalyzer.cs b/src/Mvc/Mvc.Analyzers/src/AttributesShouldNotBeAppliedToPageModelAnalyzer.cs
index 4dc7b6c85d..ee91bde64e 100644
--- a/src/Mvc/Mvc.Analyzers/src/AttributesShouldNotBeAppliedToPageModelAnalyzer.cs
+++ b/src/Mvc/Mvc.Analyzers/src/AttributesShouldNotBeAppliedToPageModelAnalyzer.cs
@@ -1,7 +1,6 @@
// 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.Immutable;
using Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.Diagnostics;
@@ -122,7 +121,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
}
}
- private static AttributeData GetAttribute(ISymbol symbol, INamedTypeSymbol attributeType)
+ private static AttributeData? GetAttribute(ISymbol symbol, INamedTypeSymbol attributeType)
{
foreach (var attribute in symbol.GetAttributes())
{
diff --git a/src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs b/src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs
index 72da1b1f4c..50508ab63d 100644
--- a/src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs
+++ b/src/Mvc/Mvc.Analyzers/src/CodeAnalysisExtensions.cs
@@ -31,9 +31,10 @@ namespace Microsoft.CodeAnalysis
Debug.Assert(methodSymbol != null);
Debug.Assert(attribute != null);
- while (methodSymbol != null)
+ IMethodSymbol? current = methodSymbol;
+ while (current != null)
{
- foreach (var attributeData in GetAttributes(methodSymbol, attribute))
+ foreach (var attributeData in GetAttributes(current, attribute))
{
yield return attributeData;
}
@@ -43,7 +44,7 @@ namespace Microsoft.CodeAnalysis
break;
}
- methodSymbol = methodSymbol.IsOverride ? methodSymbol.OverriddenMethod : null;
+ current = current.IsOverride ? current.OverriddenMethod : null;
}
}
@@ -76,14 +77,15 @@ namespace Microsoft.CodeAnalysis
return HasAttribute(propertySymbol, attribute);
}
- while (propertySymbol != null)
+ IPropertySymbol? current = propertySymbol;
+ while (current != null)
{
- if (propertySymbol.HasAttribute(attribute))
+ if (current.HasAttribute(attribute))
{
return true;
}
- propertySymbol = propertySymbol.IsOverride ? propertySymbol.OverriddenProperty : null;
+ current = current.IsOverride ? current.OverriddenProperty : null;
}
return false;
diff --git a/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj b/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj
index 1e92917e80..d3422ae192 100644
--- a/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj
+++ b/src/Mvc/Mvc.Analyzers/src/Microsoft.AspNetCore.Mvc.Analyzers.csproj
@@ -9,6 +9,8 @@
false
false
$(MSBuildProjectName).nuspec
+ enable
+ enable
diff --git a/src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs b/src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs
index ad5aeeaeab..c20466bfcc 100644
--- a/src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs
+++ b/src/Mvc/Mvc.Analyzers/src/TopLevelParameterNameAnalyzer.cs
@@ -3,7 +3,6 @@
using System;
-using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using Microsoft.CodeAnalysis;
@@ -24,8 +23,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
context.RegisterCompilationStartAction(compilationStartAnalysisContext =>
{
- var typeCache = new SymbolCache(compilationStartAnalysisContext.Compilation);
- if (typeCache.ControllerAttribute == null || typeCache.ControllerAttribute.TypeKind == TypeKind.Error)
+ if (!SymbolCache.TryCreate(compilationStartAnalysisContext.Compilation, out var typeCache))
{
// No-op if we can't find types we care about.
return;
@@ -185,20 +183,100 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
internal readonly struct SymbolCache
{
- public SymbolCache(Compilation compilation)
+ public SymbolCache(
+ INamedTypeSymbol bindAttribute,
+ INamedTypeSymbol controllerAttribute,
+ INamedTypeSymbol fromBodyAttribute,
+ INamedTypeSymbol apiBehaviorMetadata,
+ INamedTypeSymbol binderTypeProviderMetadata,
+ INamedTypeSymbol modelNameProvider,
+ INamedTypeSymbol nonControllerAttribute,
+ INamedTypeSymbol nonActionAttribute,
+ IMethodSymbol disposableDispose)
{
- BindAttribute = compilation.GetTypeByMetadataName(SymbolNames.BindAttribute);
- ControllerAttribute = compilation.GetTypeByMetadataName(SymbolNames.ControllerAttribute);
- FromBodyAttribute = compilation.GetTypeByMetadataName(SymbolNames.FromBodyAttribute);
- IApiBehaviorMetadata = compilation.GetTypeByMetadataName(SymbolNames.IApiBehaviorMetadata);
- IBinderTypeProviderMetadata = compilation.GetTypeByMetadataName(SymbolNames.IBinderTypeProviderMetadata);
- IModelNameProvider = compilation.GetTypeByMetadataName(SymbolNames.IModelNameProvider);
- NonControllerAttribute = compilation.GetTypeByMetadataName(SymbolNames.NonControllerAttribute);
- NonActionAttribute = compilation.GetTypeByMetadataName(SymbolNames.NonActionAttribute);
+ BindAttribute = bindAttribute;
+ ControllerAttribute = controllerAttribute;
+ FromBodyAttribute = fromBodyAttribute;
+ IApiBehaviorMetadata = apiBehaviorMetadata;
+ IBinderTypeProviderMetadata = binderTypeProviderMetadata;
+ IModelNameProvider = modelNameProvider;
+ NonControllerAttribute = nonControllerAttribute;
+ NonActionAttribute = nonActionAttribute;
+ IDisposableDispose = disposableDispose;
+ }
+
+ public static bool TryCreate(Compilation compilation, out SymbolCache symbolCache)
+ {
+ symbolCache = default;
+
+ if (!TryGetType(SymbolNames.BindAttribute, out var bindAttribute))
+ {
+ return false;
+ }
+
+
+ if (!TryGetType(SymbolNames.ControllerAttribute, out var controllerAttribute))
+ {
+ return false;
+ }
+
+
+ if (!TryGetType(SymbolNames.FromBodyAttribute, out var fromBodyAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(SymbolNames.IApiBehaviorMetadata, out var apiBehaviorMetadata))
+ {
+ return false;
+ }
+
+ if (!TryGetType(SymbolNames.IBinderTypeProviderMetadata, out var iBinderTypeProviderMetadata))
+ {
+ return false;
+ }
+
+ if (!TryGetType(SymbolNames.IModelNameProvider, out var iModelNameProvider))
+ {
+ return false;
+ }
+
+ if (!TryGetType(SymbolNames.NonControllerAttribute, out var nonControllerAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(SymbolNames.NonActionAttribute, out var nonActionAttribute))
+ {
+ return false;
+ }
var disposable = compilation.GetSpecialType(SpecialType.System_IDisposable);
- var members = disposable.GetMembers(nameof(IDisposable.Dispose));
- IDisposableDispose = members.Length == 1 ? (IMethodSymbol)members[0] : null;
+ var members = disposable?.GetMembers(nameof(IDisposable.Dispose));
+ var idisposableDispose = (IMethodSymbol?)members?[0];
+ if (idisposableDispose == null)
+ {
+ return false;
+ }
+
+ symbolCache = new SymbolCache(
+ bindAttribute,
+ controllerAttribute,
+ fromBodyAttribute,
+ apiBehaviorMetadata,
+ iBinderTypeProviderMetadata,
+ iModelNameProvider,
+ nonControllerAttribute,
+ nonActionAttribute,
+ idisposableDispose);
+
+ return true;
+
+ bool TryGetType(string typeName, out INamedTypeSymbol typeSymbol)
+ {
+ typeSymbol = compilation.GetTypeByMetadataName(typeName);
+ return typeSymbol != null && typeSymbol.TypeKind != TypeKind.Error;
+ }
}
public INamedTypeSymbol BindAttribute { get; }
diff --git a/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj b/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj
index df8a4a4cb0..522919a556 100644
--- a/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj
+++ b/src/Mvc/Mvc.Analyzers/test/Mvc.Analyzers.Test.csproj
@@ -21,7 +21,7 @@
-
+
diff --git a/src/Mvc/Mvc.Analyzers/test/TopLevelParameterNameAnalyzerTest.cs b/src/Mvc/Mvc.Analyzers/test/TopLevelParameterNameAnalyzerTest.cs
index 7329ae9d13..361f6d3cb5 100644
--- a/src/Mvc/Mvc.Analyzers/test/TopLevelParameterNameAnalyzerTest.cs
+++ b/src/Mvc/Mvc.Analyzers/test/TopLevelParameterNameAnalyzerTest.cs
@@ -134,7 +134,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
var method = (IMethodSymbol)modelType.GetMembers("ActionMethod").First();
var parameter = method.Parameters[0];
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var result = TopLevelParameterNameAnalyzer.IsProblematicParameter(symbolCache, parameter);
return result;
@@ -145,7 +145,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
{
var methodName = nameof(GetNameTests.SingleAttribute);
var compilation = await GetCompilationForGetName();
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(GetNameTests).FullName);
var method = (IMethodSymbol)type.GetMembers(methodName).First();
@@ -161,7 +161,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
{
var methodName = nameof(GetNameTests.NoAttribute);
var compilation = await GetCompilationForGetName();
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(GetNameTests).FullName);
var method = (IMethodSymbol)type.GetMembers(methodName).First();
@@ -177,7 +177,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
{
var methodName = nameof(GetNameTests.SingleAttributeWithoutName);
var compilation = await GetCompilationForGetName();
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(GetNameTests).FullName);
var method = (IMethodSymbol)type.GetMembers(methodName).First();
@@ -193,7 +193,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
{
var methodName = nameof(GetNameTests.MultipleAttributes);
var compilation = await GetCompilationForGetName();
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(GetNameTests).FullName);
var method = (IMethodSymbol)type.GetMembers(methodName).First();
@@ -221,7 +221,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
var compilation = await project.GetCompilationAsync();
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(SpecifiesModelTypeTests).FullName);
var method = (IMethodSymbol)type.GetMembers(testMethod).First();
@@ -239,7 +239,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
var compilation = await project.GetCompilationAsync();
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(SpecifiesModelTypeTests).FullName);
var method = (IMethodSymbol)type.GetMembers(testMethod).First();
@@ -257,7 +257,7 @@ namespace Microsoft.AspNetCore.Mvc.Analyzers
var project = DiagnosticProject.Create(GetType().Assembly, new[] { testSource.Source });
var compilation = await project.GetCompilationAsync();
- var symbolCache = new TopLevelParameterNameAnalyzer.SymbolCache(compilation);
+ Assert.True(TopLevelParameterNameAnalyzer.SymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(SpecifiesModelTypeTests).FullName);
var method = (IMethodSymbol)type.GetMembers(testMethod).First();
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadata.cs b/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadata.cs
index 018967cb10..2fdc277a08 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadata.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadata.cs
@@ -1,6 +1,7 @@
// 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 Microsoft.CodeAnalysis;
using Microsoft.CodeAnalysis.CSharp.Syntax;
@@ -17,7 +18,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
_statusCode = null;
}
- public ActualApiResponseMetadata(ReturnStatementSyntax returnStatement, int statusCode, ITypeSymbol returnType)
+ public ActualApiResponseMetadata(ReturnStatementSyntax returnStatement, int statusCode, ITypeSymbol? returnType)
{
ReturnStatement = returnStatement;
_statusCode = statusCode;
@@ -26,10 +27,10 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
public ReturnStatementSyntax ReturnStatement { get; }
- public int StatusCode => _statusCode.Value;
+ public int StatusCode => _statusCode ?? throw new ArgumentException("Status code is not available when IsDefaultResponse is true");
public bool IsDefaultResponse => _statusCode == null;
- public ITypeSymbol ReturnType { get; }
+ public ITypeSymbol? ReturnType { get; }
}
}
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs b/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs
index 83e1c78546..3580535601 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/ActualApiResponseMetadataFactory.cs
@@ -87,13 +87,13 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
.FirstOrDefault();
var statusCode = GetDefaultStatusCode(defaultStatusCodeAttribute);
- ITypeSymbol returnType = null;
+ ITypeSymbol? returnType = null;
switch (returnExpression)
{
case InvocationExpressionSyntax invocation:
{
// Covers the 'return StatusCode(200)' case.
- var result = InspectMethodArguments(symbolCache, semanticModel, invocation.Expression, invocation.ArgumentList, cancellationToken);
+ var result = InspectMethodArguments(semanticModel, invocation.Expression, invocation.ArgumentList, cancellationToken);
statusCode = result.statusCode ?? statusCode;
returnType = result.returnType;
break;
@@ -102,7 +102,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
case ObjectCreationExpressionSyntax creation:
{
// Read values from 'return new StatusCodeResult(200) case.
- var result = InspectMethodArguments(symbolCache, semanticModel, creation, creation.ArgumentList, cancellationToken);
+ var result = InspectMethodArguments(semanticModel, creation, creation.ArgumentList, cancellationToken);
statusCode = result.statusCode ?? statusCode;
returnType = result.returnType;
@@ -123,14 +123,14 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
return new ActualApiResponseMetadata(returnStatementSyntax, statusCode.Value, returnType);
}
- private static (int? statusCode, ITypeSymbol returnType) InspectInitializers(
+ private static (int? statusCode, ITypeSymbol? returnType) InspectInitializers(
in ApiControllerSymbolCache symbolCache,
SemanticModel semanticModel,
InitializerExpressionSyntax initializer,
CancellationToken cancellationToken)
{
int? statusCode = null;
- ITypeSymbol typeSymbol = null;
+ ITypeSymbol? typeSymbol = null;
for (var i = 0; initializer != null && i < initializer.Expressions.Count; i++)
{
@@ -162,15 +162,14 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
return (statusCode, typeSymbol);
}
- private static (int? statusCode, ITypeSymbol returnType) InspectMethodArguments(
- in ApiControllerSymbolCache symbolCache,
+ private static (int? statusCode, ITypeSymbol? returnType) InspectMethodArguments(
SemanticModel semanticModel,
ExpressionSyntax expression,
BaseArgumentListSyntax argumentList,
CancellationToken cancellationToken)
{
int? statusCode = null;
- ITypeSymbol typeSymbol = null;
+ ITypeSymbol? typeSymbol = null;
var symbolInfo = semanticModel.GetSymbolInfo(expression, cancellationToken);
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs
index 18b82c2ae1..0e23036cce 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/AddResponseTypeAttributeCodeFixAction.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -43,7 +44,14 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
protected override async Task GetChangedDocumentAsync(CancellationToken cancellationToken)
{
- var context = await CreateCodeActionContext(cancellationToken).ConfigureAwait(false);
+ var nullableContext = await CreateCodeActionContext(cancellationToken).ConfigureAwait(false);
+ if (nullableContext == null)
+ {
+ return _document;
+ }
+
+ var context = nullableContext.Value;
+
var declaredResponseMetadata = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(context.SymbolCache, context.Method);
var errorResponseType = SymbolApiResponseMetadataProvider.GetErrorResponseType(context.SymbolCache, context.Method);
@@ -56,8 +64,11 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var documentEditor = await DocumentEditor.CreateAsync(_document, cancellationToken).ConfigureAwait(false);
var addUsingDirective = false;
- foreach (var (statusCode, returnType) in results.OrderBy(s => s.statusCode))
+ foreach (var item in results.OrderBy(s => s.statusCode))
{
+ var statusCode = item.statusCode;
+ var returnType = item.typeSymbol;
+
AttributeSyntax attributeSyntax;
bool addUsing;
@@ -113,7 +124,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
return document.WithSyntaxRoot(root);
}
- private async Task CreateCodeActionContext(CancellationToken cancellationToken)
+ private async Task CreateCodeActionContext(CancellationToken cancellationToken)
{
var root = await _document.GetSyntaxRootAsync(cancellationToken).ConfigureAwait(false);
var semanticModel = await _document.GetSemanticModelAsync(cancellationToken).ConfigureAwait(false);
@@ -124,7 +135,10 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var statusCodesType = semanticModel.Compilation.GetTypeByMetadataName(ApiSymbolNames.HttpStatusCodes);
var statusCodeConstants = GetStatusCodeConstants(statusCodesType);
- var symbolCache = new ApiControllerSymbolCache(semanticModel.Compilation);
+ if (!ApiControllerSymbolCache.TryCreate(semanticModel.Compilation, out var symbolCache))
+ {
+ return null;
+ }
var codeActionContext = new CodeActionContext(semanticModel, symbolCache, method, methodSyntax, statusCodeConstants, cancellationToken);
return codeActionContext;
@@ -152,15 +166,15 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
return statusCodeConstants;
}
- private ICollection<(int statusCode, ITypeSymbol typeSymbol)> CalculateStatusCodesToApply(in CodeActionContext context, IList declaredResponseMetadata)
+ private ICollection<(int statusCode, ITypeSymbol? typeSymbol)> CalculateStatusCodesToApply(in CodeActionContext context, IList declaredResponseMetadata)
{
if (!ActualApiResponseMetadataFactory.TryGetActualResponseMetadata(context.SymbolCache, context.SemanticModel, context.MethodSyntax, context.CancellationToken, out var actualResponseMetadata))
{
// If we cannot parse metadata correctly, don't offer fixes.
- return Array.Empty<(int, ITypeSymbol)>();
+ return Array.Empty<(int, ITypeSymbol?)>();
}
- var statusCodes = new Dictionary();
+ var statusCodes = new Dictionary();
foreach (var metadata in actualResponseMetadata)
{
if (DeclaredApiResponseMetadata.TryGetDeclaredMetadata(declaredResponseMetadata, metadata, result: out var declaredMetadata) &&
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs b/src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs
index 9a8dc1c714..274609128f 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/ApiActionsDoNotRequireExplicitModelValidationCheckAnalyzer.cs
@@ -23,8 +23,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
context.RegisterCompilationStartAction(compilationStartAnalysisContext =>
{
- var symbolCache = new ApiControllerSymbolCache(compilationStartAnalysisContext.Compilation);
- if (symbolCache.ApiConventionTypeAttribute == null || symbolCache.ApiConventionTypeAttribute.TypeKind == TypeKind.Error)
+ if (!ApiControllerSymbolCache.TryCreate(compilationStartAnalysisContext.Compilation, out var symbolCache))
{
// No-op if we can't find types we care about.
return;
@@ -55,12 +54,18 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
}
var parent = ifOperation.Parent;
- if (parent?.Kind == OperationKind.Block)
+ if (parent == null)
{
- parent = parent?.Parent;
+ // No parent, nothing to do
+ return;
}
- if (parent?.Kind != OperationKind.MethodBodyOperation)
+ if (parent.Kind == OperationKind.Block && parent.Parent != null)
+ {
+ parent = parent.Parent;
+ }
+
+ if (parent.Kind != OperationKind.MethodBodyOperation)
{
// Only support top-level ModelState IsValid checks.
return;
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/ApiControllerSymbolCache.cs b/src/Mvc/Mvc.Api.Analyzers/src/ApiControllerSymbolCache.cs
index 37f6b26291..2a41802889 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/ApiControllerSymbolCache.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/ApiControllerSymbolCache.cs
@@ -8,30 +8,164 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
{
internal readonly struct ApiControllerSymbolCache
{
- public ApiControllerSymbolCache(Compilation compilation)
+ public static bool TryCreate(Compilation compilation, out ApiControllerSymbolCache symbolCache)
{
- ApiConventionMethodAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ApiConventionMethodAttribute);
- ApiConventionNameMatchAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ApiConventionNameMatchAttribute);
- ApiConventionTypeAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ApiConventionTypeAttribute);
- ApiConventionTypeMatchAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ApiConventionTypeMatchAttribute);
- ControllerAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ControllerAttribute);
- DefaultStatusCodeAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.DefaultStatusCodeAttribute);
- IActionResult = compilation.GetTypeByMetadataName(ApiSymbolNames.IActionResult);
- IApiBehaviorMetadata = compilation.GetTypeByMetadataName(ApiSymbolNames.IApiBehaviorMetadata);
- ModelStateDictionary = compilation.GetTypeByMetadataName(ApiSymbolNames.ModelStateDictionary);
- NonActionAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.NonActionAttribute);
- NonControllerAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.NonControllerAttribute);
- ProblemDetails = compilation.GetTypeByMetadataName(ApiSymbolNames.ProblemDetails);
- ProducesDefaultResponseTypeAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ProducesDefaultResponseTypeAttribute);
- ProducesErrorResponseTypeAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ProducesErrorResponseTypeAttribute);
- ProducesResponseTypeAttribute = compilation.GetTypeByMetadataName(ApiSymbolNames.ProducesResponseTypeAttribute);
+ symbolCache = default;
+
+ if (!TryGetType(ApiSymbolNames.ApiConventionMethodAttribute, out var apiConventionMethodAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ApiConventionNameMatchAttribute, out var apiConventionNameMatchAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ApiConventionTypeAttribute, out var apiConventionTypeAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ApiConventionTypeMatchAttribute, out var apiConventionTypeMatchAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ControllerAttribute, out var controllerAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.DefaultStatusCodeAttribute, out var defaultStatusCodeAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.IActionResult, out var iActionResult))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.IApiBehaviorMetadata, out var iApiBehaviorMetadata))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ModelStateDictionary, out var modelStateDictionary))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.NonActionAttribute, out var nonActionAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.NonControllerAttribute, out var nonControllerAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ProblemDetails, out var problemDetails))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ProducesDefaultResponseTypeAttribute, out var producesDefaultResponseTypeAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ProducesErrorResponseTypeAttribute, out var producesErrorResponseTypeAttribute))
+ {
+ return false;
+ }
+
+ if (!TryGetType(ApiSymbolNames.ProducesResponseTypeAttribute, out var producesResponseTypeAttribute))
+ {
+ return false;
+ }
var statusCodeActionResult = compilation.GetTypeByMetadataName(ApiSymbolNames.IStatusCodeActionResult);
- StatusCodeActionResultStatusProperty = (IPropertySymbol)statusCodeActionResult?.GetMembers("StatusCode")[0];
+ var statusCodeActionResultStatusProperty = (IPropertySymbol?)statusCodeActionResult?.GetMembers("StatusCode")[0];
+ if (statusCodeActionResultStatusProperty == null)
+ {
+ return false;
+ }
var disposable = compilation.GetSpecialType(SpecialType.System_IDisposable);
- var members = disposable.GetMembers(nameof(IDisposable.Dispose));
- IDisposableDispose = members.Length == 1 ? (IMethodSymbol)members[0] : null;
+ var members = disposable?.GetMembers(nameof(IDisposable.Dispose));
+ var iDisposableDispose = (IMethodSymbol?)members?[0];
+ if (iDisposableDispose == null)
+ {
+ return false;
+ }
+
+ symbolCache = new ApiControllerSymbolCache(
+ apiConventionMethodAttribute,
+ apiConventionNameMatchAttribute,
+ apiConventionTypeAttribute,
+ apiConventionTypeMatchAttribute,
+ controllerAttribute,
+ defaultStatusCodeAttribute,
+ iActionResult,
+ iApiBehaviorMetadata,
+ iDisposableDispose,
+ statusCodeActionResultStatusProperty,
+ modelStateDictionary,
+ nonActionAttribute,
+ nonControllerAttribute,
+ problemDetails,
+ producesDefaultResponseTypeAttribute,
+ producesResponseTypeAttribute,
+ producesErrorResponseTypeAttribute);
+
+ return true;
+
+ bool TryGetType(string typeName, out INamedTypeSymbol typeSymbol)
+ {
+ typeSymbol = compilation.GetTypeByMetadataName(typeName);
+ return typeSymbol != null && typeSymbol.TypeKind != TypeKind.Error;
+ }
+ }
+
+ private ApiControllerSymbolCache(
+ INamedTypeSymbol apiConventionMethodAttribute,
+ INamedTypeSymbol apiConventionNameMatchAttribute,
+ INamedTypeSymbol apiConventionTypeAttribute,
+ INamedTypeSymbol apiConventionTypeMatchAttribute,
+ INamedTypeSymbol controllerAttribute,
+ INamedTypeSymbol defaultStatusCodeAttribute,
+ INamedTypeSymbol actionResult,
+ INamedTypeSymbol apiBehaviorMetadata,
+ IMethodSymbol disposableDispose,
+ IPropertySymbol statusCodeActionResultStatusProperty,
+ ITypeSymbol modelStateDictionary,
+ INamedTypeSymbol nonActionAttribute,
+ INamedTypeSymbol nonControllerAttribute,
+ INamedTypeSymbol problemDetails,
+ INamedTypeSymbol producesDefaultResponseTypeAttribute,
+ INamedTypeSymbol producesResponseTypeAttribute,
+ INamedTypeSymbol producesErrorResponseTypeAttribute)
+ {
+ ApiConventionMethodAttribute = apiConventionMethodAttribute;
+ ApiConventionNameMatchAttribute = apiConventionNameMatchAttribute;
+ ApiConventionTypeAttribute = apiConventionTypeAttribute;
+ ApiConventionTypeMatchAttribute = apiConventionTypeMatchAttribute;
+ ControllerAttribute = controllerAttribute;
+ DefaultStatusCodeAttribute = defaultStatusCodeAttribute;
+ IActionResult = actionResult;
+ IApiBehaviorMetadata = apiBehaviorMetadata;
+ IDisposableDispose = disposableDispose;
+ StatusCodeActionResultStatusProperty = statusCodeActionResultStatusProperty;
+ ModelStateDictionary = modelStateDictionary;
+ NonActionAttribute = nonActionAttribute;
+ NonControllerAttribute = nonControllerAttribute;
+ ProblemDetails = problemDetails;
+ ProducesDefaultResponseTypeAttribute = producesDefaultResponseTypeAttribute;
+ ProducesResponseTypeAttribute = producesResponseTypeAttribute;
+ ProducesErrorResponseTypeAttribute = producesErrorResponseTypeAttribute;
}
public INamedTypeSymbol ApiConventionMethodAttribute { get; }
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/ApiConventionAnalyzer.cs b/src/Mvc/Mvc.Api.Analyzers/src/ApiConventionAnalyzer.cs
index 6b92ee4c8f..5890981a10 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/ApiConventionAnalyzer.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/ApiConventionAnalyzer.cs
@@ -25,8 +25,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
context.RegisterCompilationStartAction(compilationStartAnalysisContext =>
{
- var symbolCache = new ApiControllerSymbolCache(compilationStartAnalysisContext.Compilation);
- if (symbolCache.ApiConventionTypeAttribute == null || symbolCache.ApiConventionTypeAttribute.TypeKind == TypeKind.Error)
+ if (!ApiControllerSymbolCache.TryCreate(compilationStartAnalysisContext.Compilation, out var symbolCache))
{
// No-op if we can't find types we care about.
return;
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/DeclaredApiResponseMetadata.cs b/src/Mvc/Mvc.Api.Analyzers/src/DeclaredApiResponseMetadata.cs
index 30819931d0..c8f2a9c48f 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/DeclaredApiResponseMetadata.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/DeclaredApiResponseMetadata.cs
@@ -23,8 +23,8 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
private DeclaredApiResponseMetadata(
int statusCode,
- AttributeData attributeData,
- IMethodSymbol attributeSource,
+ AttributeData? attributeData,
+ IMethodSymbol? attributeSource,
bool @implicit,
bool @default)
{
@@ -37,9 +37,9 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
public int StatusCode { get; }
- public AttributeData Attribute { get; }
+ public AttributeData? Attribute { get; }
- public IMethodSymbol AttributeSource { get; }
+ public IMethodSymbol? AttributeSource { get; }
///
/// True if this is the implicit 200 associated with an
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj b/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj
index f5efb230a2..d827140aad 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj
+++ b/src/Mvc/Mvc.Api.Analyzers/src/Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj
@@ -9,6 +9,8 @@
false
false
$(MSBuildProjectName).nuspec
+ enable
+ enable
diff --git a/src/Mvc/Mvc.Api.Analyzers/src/SymbolApiResponseMetadataProvider.cs b/src/Mvc/Mvc.Api.Analyzers/src/SymbolApiResponseMetadataProvider.cs
index 9b6a1b759c..e8c85489e7 100644
--- a/src/Mvc/Mvc.Api.Analyzers/src/SymbolApiResponseMetadataProvider.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/src/SymbolApiResponseMetadataProvider.cs
@@ -80,7 +80,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
return Array.Empty();
}
- private static IMethodSymbol GetMethodFromConventionMethodAttribute(in ApiControllerSymbolCache symbolCache, IMethodSymbol method)
+ private static IMethodSymbol? GetMethodFromConventionMethodAttribute(in ApiControllerSymbolCache symbolCache, IMethodSymbol method)
{
var attribute = method.GetAttributes(symbolCache.ApiConventionMethodAttribute, inherit: true)
.FirstOrDefault();
@@ -113,7 +113,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
return (IMethodSymbol)conventionMethod;
}
- private static IMethodSymbol MatchConventionMethod(
+ private static IMethodSymbol? MatchConventionMethod(
in ApiControllerSymbolCache symbolCache,
IMethodSymbol method,
IReadOnlyList conventionTypes)
diff --git a/src/Mvc/Mvc.Api.Analyzers/test/ActualApiResponseMetadataFactoryTest.cs b/src/Mvc/Mvc.Api.Analyzers/test/ActualApiResponseMetadataFactoryTest.cs
index bf4a12fd67..d9c15bddaa 100644
--- a/src/Mvc/Mvc.Api.Analyzers/test/ActualApiResponseMetadataFactoryTest.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/test/ActualApiResponseMetadataFactoryTest.cs
@@ -66,7 +66,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
}";
var project = DiagnosticProject.Create(GetType().Assembly, new[] { source });
var compilation = await project.GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var returnType = compilation.GetTypeByMetadataName($"{Namespace}.TestController");
var syntaxTree = returnType.DeclaringSyntaxReferences[0].SyntaxTree;
@@ -307,7 +307,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var type = compilation.GetTypeByMetadataName(typeName);
var method = (IMethodSymbol)type.GetMembers(methodName).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var syntaxTree = method.DeclaringSyntaxReferences[0].SyntaxTree;
var methodSyntax = (MethodDeclarationSyntax)syntaxTree.GetRoot().FindNode(method.Locations[0].SourceSpan);
@@ -322,7 +322,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
{
// Arrange
var compilation = await GetCompilation("InspectReturnExpressionTests");
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var controllerType = compilation.GetTypeByMetadataName(typeof(TestFiles.InspectReturnExpressionTests.TestController).FullName);
var syntaxTree = controllerType.DeclaringSyntaxReferences[0].SyntaxTree;
@@ -342,7 +342,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
{
var project = DiagnosticProject.Create(GetType().Assembly, new[] { source });
var compilation = await project.GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var returnType = compilation.GetTypeByMetadataName($"{Namespace}.{test}");
var syntaxTree = returnType.DeclaringSyntaxReferences[0].SyntaxTree;
diff --git a/src/Mvc/Mvc.Api.Analyzers/test/ApiControllerFactsTest.cs b/src/Mvc/Mvc.Api.Analyzers/test/ApiControllerFactsTest.cs
index e0875d0f93..786aeeb9d7 100644
--- a/src/Mvc/Mvc.Api.Analyzers/test/ApiControllerFactsTest.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/test/ApiControllerFactsTest.cs
@@ -37,7 +37,7 @@ namespace TestNamespace
}";
var project = DiagnosticProject.Create(GetType().Assembly, new[] { source });
var compilation = await project.GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var method = (IMethodSymbol)compilation.GetTypeByMetadataName("TestNamespace.TestController").GetMembers("Get").First();
// Act
@@ -52,7 +52,7 @@ namespace TestNamespace
{
// Arrange
var compilation = await GetCompilation();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(ApiConventionAnalyzerTest_IndexModel).FullName);
var method = (IMethodSymbol)type.GetMembers(nameof(ApiConventionAnalyzerTest_IndexModel.OnGet)).First();
@@ -68,7 +68,7 @@ namespace TestNamespace
{
// Arrange
var compilation = await GetCompilation();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(ApiConventionAnalyzerTest_NotApiController).FullName);
var method = (IMethodSymbol)type.GetMembers(nameof(ApiConventionAnalyzerTest_NotApiController.Index)).First();
@@ -84,7 +84,7 @@ namespace TestNamespace
{
// Arrange
var compilation = await GetCompilation();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(ApiConventionAnalyzerTest_NotAction).FullName);
var method = (IMethodSymbol)type.GetMembers(nameof(ApiConventionAnalyzerTest_NotAction.Index)).First();
@@ -100,7 +100,7 @@ namespace TestNamespace
{
// Arrange
var compilation = await GetCompilation();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(ApiConventionAnalyzerTest_Valid).FullName);
var method = (IMethodSymbol)type.GetMembers(nameof(ApiConventionAnalyzerTest_Valid.Index)).First();
@@ -116,7 +116,7 @@ namespace TestNamespace
{
// Arrange
var compilation = await GetCompilation(nameof(IsApiControllerAction_ReturnsTrue_IfAttributeIsDeclaredOnAssembly));
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var type = compilation.GetTypeByMetadataName(typeof(IsApiControllerAction_ReturnsTrue_IfAttributeIsDeclaredOnAssemblyController).FullName);
var method = (IMethodSymbol)type.GetMembers(nameof(IsApiControllerAction_ReturnsTrue_IfAttributeIsDeclaredOnAssemblyController.Action)).First();
diff --git a/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj b/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj
index 370646fc2b..6a29876594 100644
--- a/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj
+++ b/src/Mvc/Mvc.Api.Analyzers/test/Mvc.Api.Analyzers.Test.csproj
@@ -20,7 +20,7 @@
-
+
diff --git a/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiConventionMatcherTest.cs b/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiConventionMatcherTest.cs
index 864a6b3791..1d0ab00c1b 100644
--- a/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiConventionMatcherTest.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiConventionMatcherTest.cs
@@ -431,7 +431,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
private async Task RunMatchTest(string methodName, string conventionMethodName, bool expected)
{
var compilation = await GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var testController = compilation.GetTypeByMetadataName(TestControllerName);
var testConvention = compilation.GetTypeByMetadataName(TestConventionName);
@@ -451,7 +451,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
// Arrange
var expected = SymbolApiConventionNameMatchBehavior.Exact;
var compilation = await GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var testConvention = compilation.GetTypeByMetadataName(TestConventionName);
var method = testConvention.GetMembers(nameof(TestConvention.MethodWithoutMatchBehavior)).First();
@@ -469,7 +469,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
// Arrange
var expected = SymbolApiConventionNameMatchBehavior.Exact;
var compilation = await GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var testConvention = compilation.GetTypeByMetadataName(TestConventionName);
var method = testConvention.GetMembers(nameof(TestConvention.MethodWithRandomAttributes)).First();
@@ -487,7 +487,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
// Arrange
var expected = SymbolApiConventionNameMatchBehavior.Prefix;
var compilation = await GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var testConvention = compilation.GetTypeByMetadataName(TestConventionName);
var method = testConvention.GetMembers(nameof(TestConvention.Get)).First();
@@ -505,7 +505,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
// Arrange
var expected = SymbolApiConventionTypeMatchBehavior.AssignableFrom;
var compilation = await GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var testConvention = compilation.GetTypeByMetadataName(TestConventionName);
var method = (IMethodSymbol)testConvention.GetMembers(nameof(TestConvention.Get)).First();
@@ -524,7 +524,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
// Arrange
var expected = SymbolApiConventionTypeMatchBehavior.AssignableFrom;
var compilation = await GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var testConvention = compilation.GetTypeByMetadataName(TestConventionName);
var method = (IMethodSymbol)testConvention.GetMembers(nameof(TestConvention.MethodParameterWithRandomAttributes)).First();
@@ -543,7 +543,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
// Arrange
var expected = SymbolApiConventionTypeMatchBehavior.Any;
var compilation = await GetCompilationAsync();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
var testConvention = compilation.GetTypeByMetadataName(TestConventionName);
var method = (IMethodSymbol)testConvention.GetMembers(nameof(TestConvention.MethodWithAnyTypeMatchBehaviorParameter)).First();
diff --git a/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiResponseMetadataProviderTest.cs b/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiResponseMetadataProviderTest.cs
index d93a2ee158..f9adfa062a 100644
--- a/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiResponseMetadataProviderTest.cs
+++ b/src/Mvc/Mvc.Api.Analyzers/test/SymbolApiResponseMetadataProviderTest.cs
@@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerWithoutConvention)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerWithoutConvention.GetPerson)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -39,7 +39,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerWithoutConvention)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerWithoutConvention.PostPerson)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -57,7 +57,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.ActionWithProducesAttribute)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -75,7 +75,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.ActionWithProducesResponseType_StatusCodeInConstructor)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -98,7 +98,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.ActionWithProducesResponseType_StatusCodeAndTypeInConstructor)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -121,7 +121,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.ActionWithProducesResponseType_StatusCodeInConstructorAndProperty)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -144,7 +144,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.ActionWithProducesResponseType_StatusCodeAndTypeInConstructorAndProperty)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -167,7 +167,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.ActionWithCustomProducesResponseTypeAttributeWithArguments)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -189,7 +189,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.GetResponseMetadata_ReturnsValuesFromApiConventionMethodAttribute)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -220,7 +220,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.GetResponseMetadata_WithProducesResponseTypeAndApiConventionMethod)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -242,7 +242,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{nameof(GetResponseMetadata_ControllerActionWithAttributes)}");
var method = (IMethodSymbol)controller.GetMembers(nameof(GetResponseMetadata_ControllerActionWithAttributes.ActionWithCustomApiResponseMetadataProvider)).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -275,7 +275,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName($"{Namespace}.{typeName}");
var method = (IMethodSymbol)controller.GetMembers(methodName).First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -298,7 +298,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName(type.FullName);
var method = (IMethodSymbol)controller.GetMembers().First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -320,7 +320,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var compilation = await GetResponseMetadataCompilation();
var controller = compilation.GetTypeByMetadataName(type.FullName);
var method = (IMethodSymbol)controller.GetMembers().First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetDeclaredResponseMetadata(symbolCache, method);
@@ -410,7 +410,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var type = compilation.GetTypeByMetadataName(typeof(GetErrorResponseType_ReturnsProblemDetails_IfNoAttributeIsDiscoveredController).FullName);
var method = (IMethodSymbol)type.GetMembers("Action").First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetErrorResponseType(symbolCache, method);
@@ -428,7 +428,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var type = compilation.GetTypeByMetadataName(typeof(GetErrorResponseType_ReturnsTypeDefinedAtAssemblyController).FullName);
var method = (IMethodSymbol)type.GetMembers("Action").First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetErrorResponseType(symbolCache, method);
@@ -446,7 +446,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var type = compilation.GetTypeByMetadataName(typeof(GetErrorResponseType_ReturnsTypeDefinedAtControllerController).FullName);
var method = (IMethodSymbol)type.GetMembers("Action").First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetErrorResponseType(symbolCache, method);
@@ -464,7 +464,7 @@ namespace Microsoft.AspNetCore.Mvc.Api.Analyzers
var type = compilation.GetTypeByMetadataName(typeof(GetErrorResponseType_ReturnsTypeDefinedAtActionController).FullName);
var method = (IMethodSymbol)type.GetMembers("Action").First();
- var symbolCache = new ApiControllerSymbolCache(compilation);
+ Assert.True(ApiControllerSymbolCache.TryCreate(compilation, out var symbolCache));
// Act
var result = SymbolApiResponseMetadataProvider.GetErrorResponseType(symbolCache, method);
diff --git a/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp3.0.cs b/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp3.0.cs
index 3976060e0c..54a8699f3f 100644
--- a/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp3.0.cs
+++ b/src/Mvc/Mvc.Core/ref/Microsoft.AspNetCore.Mvc.Core.netcoreapp3.0.cs
@@ -38,7 +38,7 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(202)]
public partial class AcceptedAtActionResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public AcceptedAtActionResult(string actionName, string controllerName, object routeValues, object value) : base (default(object)) { }
+ public AcceptedAtActionResult(string actionName, string controllerName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
public string ActionName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public string ControllerName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Routing.RouteValueDictionary RouteValues { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
@@ -48,8 +48,8 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(202)]
public partial class AcceptedAtRouteResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public AcceptedAtRouteResult(object routeValues, object value) : base (default(object)) { }
- public AcceptedAtRouteResult(string routeName, object routeValues, object value) : base (default(object)) { }
+ public AcceptedAtRouteResult(object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
+ public AcceptedAtRouteResult(string routeName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
public string RouteName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Routing.RouteValueDictionary RouteValues { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Mvc.IUrlHelper UrlHelper { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
@@ -59,8 +59,8 @@ namespace Microsoft.AspNetCore.Mvc
public partial class AcceptedResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
public AcceptedResult() : base (default(object)) { }
- public AcceptedResult(string location, object value) : base (default(object)) { }
- public AcceptedResult(System.Uri locationUri, object value) : base (default(object)) { }
+ public AcceptedResult(string location, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
+ public AcceptedResult(System.Uri locationUri, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
public string Location { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public override void OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) { }
}
@@ -151,8 +151,8 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(400)]
public partial class BadRequestObjectResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public BadRequestObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) : base (default(object)) { }
- public BadRequestObjectResult(object error) : base (default(object)) { }
+ public BadRequestObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) : base (default(object)) { }
+ public BadRequestObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object error) : base (default(object)) { }
}
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(400)]
public partial class BadRequestResult : Microsoft.AspNetCore.Mvc.StatusCodeResult
@@ -226,8 +226,8 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(409)]
public partial class ConflictObjectResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public ConflictObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) : base (default(object)) { }
- public ConflictObjectResult(object error) : base (default(object)) { }
+ public ConflictObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) : base (default(object)) { }
+ public ConflictObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object error) : base (default(object)) { }
}
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(409)]
public partial class ConflictResult : Microsoft.AspNetCore.Mvc.StatusCodeResult
@@ -278,43 +278,43 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted(object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted(string uri) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted(string uri, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted(string uri, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted(System.Uri uri) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted(System.Uri uri, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedResult Accepted(System.Uri uri, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, string controllerName) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, string controllerName, object routeValues) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, string controllerName, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object routeValues) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, string controllerName, object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedAtActionResult AcceptedAtAction(string actionName, string controllerName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute(object routeValues) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object routeValues) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute(object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute(object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute(string routeName) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute(string routeName, object routeValues) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute(string routeName, object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.AcceptedAtRouteResult AcceptedAtRoute(string routeName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.BadRequestResult BadRequest() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.BadRequestObjectResult BadRequest(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.BadRequestObjectResult BadRequest([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.BadRequestObjectResult BadRequest(object error) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.BadRequestObjectResult BadRequest([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object error) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.ChallengeResult Challenge() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
@@ -326,9 +326,9 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.ConflictResult Conflict() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.ConflictObjectResult Conflict(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.ConflictObjectResult Conflict([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.ConflictObjectResult Conflict(object error) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.ConflictObjectResult Conflict([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object error) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.ContentResult Content(string content) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
@@ -338,21 +338,21 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.ContentResult Content(string content, string contentType, System.Text.Encoding contentEncoding) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedResult Created(string uri, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedResult Created(string uri, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedResult Created(System.Uri uri, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedResult Created(System.Uri uri, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedAtActionResult CreatedAtAction(string actionName, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedAtActionResult CreatedAtAction(string actionName, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedAtActionResult CreatedAtAction(string actionName, object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedAtActionResult CreatedAtAction(string actionName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedAtActionResult CreatedAtAction(string actionName, string controllerName, object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedAtActionResult CreatedAtAction(string actionName, string controllerName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute(object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute(object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute(string routeName, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute(string routeName, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute(string routeName, object routeValues, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.CreatedAtRouteResult CreatedAtRoute(string routeName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.FileContentResult File(byte[] fileContents, string contentType) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
@@ -422,11 +422,11 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.NotFoundResult NotFound() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.NotFoundObjectResult NotFound(object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.NotFoundObjectResult NotFound([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.OkResult Ok() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.OkObjectResult Ok(object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.OkObjectResult Ok([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.PhysicalFileResult PhysicalFile(string physicalPath, string contentType) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
@@ -540,9 +540,9 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.SignOutResult SignOut(params string[] authenticationSchemes) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.StatusCodeResult StatusCode(int statusCode) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.StatusCodeResult StatusCode([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultStatusCodeAttribute]int statusCode) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.ObjectResult StatusCode(int statusCode, object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.ObjectResult StatusCode([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultStatusCodeAttribute]int statusCode, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
[System.Diagnostics.DebuggerStepThroughAttribute]
public virtual System.Threading.Tasks.Task TryUpdateModelAsync(object model, System.Type modelType, string prefix) { throw null; }
@@ -572,19 +572,19 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.UnauthorizedResult Unauthorized() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult Unauthorized(object value) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.UnauthorizedObjectResult Unauthorized([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.UnprocessableEntityResult UnprocessableEntity() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult UnprocessableEntity(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult UnprocessableEntity([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult UnprocessableEntity(object error) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.UnprocessableEntityObjectResult UnprocessableEntity([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object error) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
public virtual Microsoft.AspNetCore.Mvc.ActionResult ValidationProblem() { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.ActionResult ValidationProblem(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.ActionResult ValidationProblem([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelStateDictionary) { throw null; }
[Microsoft.AspNetCore.Mvc.NonActionAttribute]
- public virtual Microsoft.AspNetCore.Mvc.ActionResult ValidationProblem(Microsoft.AspNetCore.Mvc.ValidationProblemDetails descriptor) { throw null; }
+ public virtual Microsoft.AspNetCore.Mvc.ActionResult ValidationProblem([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ValidationProblemDetails descriptor) { throw null; }
}
public partial class ControllerContext : Microsoft.AspNetCore.Mvc.ActionContext
{
@@ -601,7 +601,7 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(201)]
public partial class CreatedAtActionResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public CreatedAtActionResult(string actionName, string controllerName, object routeValues, object value) : base (default(object)) { }
+ public CreatedAtActionResult(string actionName, string controllerName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
public string ActionName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public string ControllerName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Routing.RouteValueDictionary RouteValues { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
@@ -611,8 +611,8 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(201)]
public partial class CreatedAtRouteResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public CreatedAtRouteResult(object routeValues, object value) : base (default(object)) { }
- public CreatedAtRouteResult(string routeName, object routeValues, object value) : base (default(object)) { }
+ public CreatedAtRouteResult(object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
+ public CreatedAtRouteResult(string routeName, object routeValues, [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
public string RouteName { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Routing.RouteValueDictionary RouteValues { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Mvc.IUrlHelper UrlHelper { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
@@ -914,7 +914,7 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(404)]
public partial class NotFoundObjectResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public NotFoundObjectResult(object value) : base (default(object)) { }
+ public NotFoundObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
}
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(404)]
public partial class NotFoundResult : Microsoft.AspNetCore.Mvc.StatusCodeResult
@@ -928,6 +928,7 @@ namespace Microsoft.AspNetCore.Mvc
public System.Type DeclaredType { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public Microsoft.AspNetCore.Mvc.Formatters.FormatterCollection Formatters { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public int? StatusCode { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
+ [Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]
public object Value { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } [System.Runtime.CompilerServices.CompilerGeneratedAttribute]set { } }
public override System.Threading.Tasks.Task ExecuteResultAsync(Microsoft.AspNetCore.Mvc.ActionContext context) { throw null; }
public virtual void OnFormatting(Microsoft.AspNetCore.Mvc.ActionContext context) { }
@@ -1167,7 +1168,7 @@ namespace Microsoft.AspNetCore.Mvc
}
public partial class StatusCodeResult : Microsoft.AspNetCore.Mvc.ActionResult, Microsoft.AspNetCore.Mvc.IActionResult, Microsoft.AspNetCore.Mvc.Infrastructure.IClientErrorActionResult, Microsoft.AspNetCore.Mvc.Infrastructure.IStatusCodeActionResult
{
- public StatusCodeResult(int statusCode) { }
+ public StatusCodeResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultStatusCodeAttribute]int statusCode) { }
int? Microsoft.AspNetCore.Mvc.Infrastructure.IStatusCodeActionResult.StatusCode { get { throw null; } }
public int StatusCode { [System.Runtime.CompilerServices.CompilerGeneratedAttribute]get { throw null; } }
public override void ExecuteResult(Microsoft.AspNetCore.Mvc.ActionContext context) { }
@@ -1186,7 +1187,7 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(401)]
public partial class UnauthorizedObjectResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public UnauthorizedObjectResult(object value) : base (default(object)) { }
+ public UnauthorizedObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object value) : base (default(object)) { }
}
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(401)]
public partial class UnauthorizedResult : Microsoft.AspNetCore.Mvc.StatusCodeResult
@@ -1196,8 +1197,8 @@ namespace Microsoft.AspNetCore.Mvc
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(422)]
public partial class UnprocessableEntityObjectResult : Microsoft.AspNetCore.Mvc.ObjectResult
{
- public UnprocessableEntityObjectResult(Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) : base (default(object)) { }
- public UnprocessableEntityObjectResult(object error) : base (default(object)) { }
+ public UnprocessableEntityObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]Microsoft.AspNetCore.Mvc.ModelBinding.ModelStateDictionary modelState) : base (default(object)) { }
+ public UnprocessableEntityObjectResult([Microsoft.AspNetCore.Mvc.Infrastructure.ActionResultObjectValueAttribute]object error) : base (default(object)) { }
}
[Microsoft.AspNetCore.Mvc.Infrastructure.DefaultStatusCodeAttribute(422)]
public partial class UnprocessableEntityResult : Microsoft.AspNetCore.Mvc.StatusCodeResult
@@ -1922,6 +1923,16 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
public abstract Microsoft.AspNetCore.Mvc.Infrastructure.ActionDescriptorCollection ActionDescriptors { get; }
public abstract Microsoft.Extensions.Primitives.IChangeToken GetChangeToken();
}
+ [System.AttributeUsageAttribute(System.AttributeTargets.Parameter | System.AttributeTargets.Property, AllowMultiple=false, Inherited=false)]
+ public sealed partial class ActionResultObjectValueAttribute : System.Attribute
+ {
+ public ActionResultObjectValueAttribute() { }
+ }
+ [System.AttributeUsageAttribute(System.AttributeTargets.Parameter, AllowMultiple=false, Inherited=false)]
+ public sealed partial class ActionResultStatusCodeAttribute : System.Attribute
+ {
+ public ActionResultStatusCodeAttribute() { }
+ }
public partial class CompatibilitySwitch : Microsoft.AspNetCore.Mvc.Infrastructure.ICompatibilitySwitch where TValue : struct
{
public CompatibilitySwitch(string name) { }
diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs b/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs
index 8a87c33b2b..dc1891561a 100644
--- a/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs
+++ b/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultObjectValueAttribute.cs
@@ -21,7 +21,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
/// ObjectResult { [ActionResultObjectValueAttribute] public object Value { get; set; } }
///
[AttributeUsage(AttributeTargets.Parameter | AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
- internal sealed class ActionResultObjectValueAttribute : Attribute
+ public sealed class ActionResultObjectValueAttribute : Attribute
{
}
}
diff --git a/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultStatusCodeAttribute.cs b/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultStatusCodeAttribute.cs
index 2b4d1d4119..9d5709ac95 100644
--- a/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultStatusCodeAttribute.cs
+++ b/src/Mvc/Mvc.Core/src/Infrastructure/ActionResultStatusCodeAttribute.cs
@@ -20,7 +20,7 @@ namespace Microsoft.AspNetCore.Mvc.Infrastructure
/// StatusCodeResult([ActionResultStatusCodeParameter] int statusCode)
///
[AttributeUsage(AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
- internal sealed class ActionResultStatusCodeAttribute : Attribute
+ public sealed class ActionResultStatusCodeAttribute : Attribute
{
}
}
diff --git a/src/Mvc/mvc.slnf b/src/Mvc/mvc.slnf
new file mode 100644
index 0000000000..79d4fb7df0
--- /dev/null
+++ b/src/Mvc/mvc.slnf
@@ -0,0 +1,73 @@
+{
+ "solution": {
+ "path": "Mvc.sln",
+ "projects": [
+ "test\\WebSites\\BasicWebSite\\BasicWebSite.csproj",
+ "test\\WebSites\\RoutingWebSite\\Mvc.RoutingWebSite.csproj",
+ "test\\WebSites\\RazorWebSite\\RazorWebSite.csproj",
+ "test\\WebSites\\FormatterWebSite\\FormatterWebSite.csproj",
+ "test\\WebSites\\ApiExplorerWebSite\\ApiExplorerWebSite.csproj",
+ "test\\WebSites\\VersioningWebSite\\VersioningWebSite.csproj",
+ "test\\WebSites\\TagHelpersWebSite\\TagHelpersWebSite.csproj",
+ "test\\WebSites\\FilesWebSite\\FilesWebSite.csproj",
+ "test\\WebSites\\ApplicationModelWebSite\\ApplicationModelWebSite.csproj",
+ "test\\WebSites\\HtmlGenerationWebSite\\HtmlGenerationWebSite.csproj",
+ "test\\WebSites\\ErrorPageMiddlewareWebSite\\ErrorPageMiddlewareWebSite.csproj",
+ "test\\WebSites\\XmlFormattersWebSite\\XmlFormattersWebSite.csproj",
+ "test\\WebSites\\ControllersFromServicesWebSite\\ControllersFromServicesWebSite.csproj",
+ "test\\WebSites\\ControllersFromServicesClassLibrary\\ControllersFromServicesClassLibrary.csproj",
+ "test\\WebSites\\CorsWebSite\\CorsWebSite.csproj",
+ "samples\\MvcSandbox\\MvcSandbox.csproj",
+ "test\\WebSites\\SimpleWebSite\\SimpleWebSite.csproj",
+ "test\\WebSites\\SecurityWebSite\\SecurityWebSite.csproj",
+ "test\\WebSites\\RazorPagesWebSite\\RazorPagesWebSite.csproj",
+ "benchmarks\\Microsoft.AspNetCore.Mvc.Performance\\Microsoft.AspNetCore.Mvc.Performance.csproj",
+ "test\\WebSites\\RazorBuildWebSite\\RazorBuildWebSite.csproj",
+ "test\\WebSites\\RazorBuildWebSite.Views\\RazorBuildWebSite.Views.csproj",
+ "Mvc.Analyzers\\src\\Microsoft.AspNetCore.Mvc.Analyzers.csproj",
+ "Mvc.Analyzers\\test\\Mvc.Analyzers.Test.csproj",
+ "test\\WebSites\\RazorPagesClassLibrary\\RazorPagesClassLibrary.csproj",
+ "shared\\Mvc.Views.TestCommon\\Microsoft.AspNetCore.Mvc.Views.TestCommon.csproj",
+ "Mvc.Api.Analyzers\\test\\Mvc.Api.Analyzers.Test.csproj",
+ "Mvc.Api.Analyzers\\src\\Microsoft.AspNetCore.Mvc.Api.Analyzers.csproj",
+ "test\\WebSites\\GenericHostWebSite\\GenericHostWebSite.csproj",
+ "Mvc\\src\\Microsoft.AspNetCore.Mvc.csproj",
+ "Mvc\\test\\Microsoft.AspNetCore.Mvc.Test.csproj",
+ "Mvc.Abstractions\\src\\Microsoft.AspNetCore.Mvc.Abstractions.csproj",
+ "Mvc.Abstractions\\test\\Microsoft.AspNetCore.Mvc.Abstractions.Test.csproj",
+ "Mvc.ApiExplorer\\src\\Microsoft.AspNetCore.Mvc.ApiExplorer.csproj",
+ "Mvc.ApiExplorer\\test\\Microsoft.AspNetCore.Mvc.ApiExplorer.Test.csproj",
+ "Mvc.Core\\src\\Microsoft.AspNetCore.Mvc.Core.csproj",
+ "Mvc.Core\\test\\Microsoft.AspNetCore.Mvc.Core.Test.csproj",
+ "Mvc.Cors\\src\\Microsoft.AspNetCore.Mvc.Cors.csproj",
+ "Mvc.Cors\\test\\Microsoft.AspNetCore.Mvc.Cors.Test.csproj",
+ "Mvc.DataAnnotations\\src\\Microsoft.AspNetCore.Mvc.DataAnnotations.csproj",
+ "Mvc.DataAnnotations\\test\\Microsoft.AspNetCore.Mvc.DataAnnotations.Test.csproj",
+ "Mvc.Formatters.Json\\src\\Microsoft.AspNetCore.Mvc.Formatters.Json.csproj",
+ "Mvc.Formatters.Xml\\src\\Microsoft.AspNetCore.Mvc.Formatters.Xml.csproj",
+ "Mvc.Formatters.Xml\\test\\Microsoft.AspNetCore.Mvc.Formatters.Xml.Test.csproj",
+ "Mvc.Localization\\src\\Microsoft.AspNetCore.Mvc.Localization.csproj",
+ "Mvc.Localization\\test\\Microsoft.AspNetCore.Mvc.Localization.Test.csproj",
+ "Mvc.Razor\\src\\Microsoft.AspNetCore.Mvc.Razor.csproj",
+ "Mvc.Razor\\test\\Microsoft.AspNetCore.Mvc.Razor.Test.csproj",
+ "Mvc.RazorPages\\src\\Microsoft.AspNetCore.Mvc.RazorPages.csproj",
+ "Mvc.RazorPages\\test\\Microsoft.AspNetCore.Mvc.RazorPages.Test.csproj",
+ "Mvc.TagHelpers\\src\\Microsoft.AspNetCore.Mvc.TagHelpers.csproj",
+ "Mvc.TagHelpers\\test\\Microsoft.AspNetCore.Mvc.TagHelpers.Test.csproj",
+ "Mvc.ViewFeatures\\src\\Microsoft.AspNetCore.Mvc.ViewFeatures.csproj",
+ "Mvc.ViewFeatures\\test\\Microsoft.AspNetCore.Mvc.ViewFeatures.Test.csproj",
+ "test\\Mvc.FunctionalTests\\Microsoft.AspNetCore.Mvc.FunctionalTests.csproj",
+ "test\\Mvc.IntegrationTests\\Microsoft.AspNetCore.Mvc.IntegrationTests.csproj",
+ "shared\\Mvc.TestDiagnosticListener\\Microsoft.AspNetCore.Mvc.TestDiagnosticListener.csproj",
+ "Mvc.Testing\\src\\Microsoft.AspNetCore.Mvc.Testing.csproj",
+ "shared\\Mvc.Core.TestCommon\\Microsoft.AspNetCore.Mvc.Core.TestCommon.csproj",
+ "Mvc.NewtonsoftJson\\src\\Microsoft.AspNetCore.Mvc.NewtonsoftJson.csproj",
+ "Mvc.NewtonsoftJson\\test\\Microsoft.AspNetCore.Mvc.NewtonsoftJson.Test.csproj",
+ "Mvc.Razor.RuntimeCompilation\\src\\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.csproj",
+ "Mvc.Razor.RuntimeCompilation\\test\\Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.Test.csproj",
+ "test\\WebSites\\RazorBuildWebSite.PrecompiledViews\\RazorBuildWebSite.PrecompiledViews.csproj",
+ "Mvc.Components.Prerendering\\src\\Microsoft.AspNetCore.Mvc.Components.Prerendering.csproj",
+ "Mvc.Components.Prerendering\\test\\Microsoft.AspNetCore.Mvc.Components.Prerendering.Test.csproj"
+ ]
+ }
+}
\ No newline at end of file