public static bool IsApiControllerAction(ApiControllerSymbolCache symbolCache, IMethodSymbol method) { if (method == null) { return(false); } if (method.ReturnsVoid || method.ReturnType.TypeKind == TypeKind.Error) { return(false); } if (!MvcFacts.IsController(method.ContainingType, symbolCache.ControllerAttribute, symbolCache.NonControllerAttribute)) { return(false); } if (!method.ContainingType.HasAttribute(symbolCache.IApiBehaviorMetadata, inherit: true)) { return(false); } if (!MvcFacts.IsControllerAction(method, symbolCache.NonActionAttribute, symbolCache.IDisposableDispose)) { return(false); } return(true); }
private async Task IsControllerReturnsTrue(Type type) { var compilation = await GetIsControllerCompilation(); var controllerAttribute = compilation.GetTypeByMetadataName(ControllerAttribute); var nonControllerAttribute = compilation.GetTypeByMetadataName(NonControllerAttribute); var typeSymbol = compilation.GetTypeByMetadataName(type.FullName); // Act var isController = MvcFacts.IsController(typeSymbol, controllerAttribute, nonControllerAttribute); // Assert Assert.True(isController); }
private async Task IsActionReturnsTrue(Type type, string methodName) { var compilation = await GetIsControllerActionCompilation(); var nonActionAttribute = compilation.GetTypeByMetadataName(NonActionAttribute); var disposableDispose = GetDisposableDispose(compilation); var typeSymbol = compilation.GetTypeByMetadataName(type.FullName); var method = (IMethodSymbol)typeSymbol.GetMembers(methodName).First(); // Act var isControllerAction = MvcFacts.IsControllerAction(method, nonActionAttribute, disposableDispose); // Assert Assert.True(isControllerAction); }
public async Task IsAction_ReturnsTrueForNotDisposableDisposeOnTypeWithImplicitImplementation() { var compilation = await GetIsControllerActionCompilation(); var nonActionAttribute = compilation.GetTypeByMetadataName(NonActionAttribute); var disposableDispose = GetDisposableDispose(compilation); var typeSymbol = compilation.GetTypeByMetadataName(typeof(NotDisposableWithDisposeThatIsNotInterfaceContract).FullName); var method = typeSymbol.GetMembers(nameof(IDisposable.Dispose)).OfType <IMethodSymbol>().First(f => !f.ReturnsVoid); // Act var isControllerAction = MvcFacts.IsControllerAction(method, nonActionAttribute, disposableDispose); // Assert Assert.True(isControllerAction); }