private static bool OnlyThrowsNotImplementedException(MethodContext declaration) { if (declaration.Body != null && declaration.Body.Statements.Count != 1) { return(false); } var throwExpressions = Enumerable.Empty <ExpressionSyntax>(); if (declaration.ExpressionBody != null) { if (ThrowExpressionSyntaxWrapper.IsInstance(declaration.ExpressionBody.Expression)) { throwExpressions = new[] { ((ThrowExpressionSyntaxWrapper)declaration.ExpressionBody.Expression).Expression }; } } else { throwExpressions = declaration.Body.Statements.OfType <ThrowStatementSyntax>().Select(tss => tss.Expression); } return(throwExpressions .OfType <ObjectCreationExpressionSyntax>() .Select(x => declaration.Context.SemanticModel.GetSymbolInfo(x).Symbol) .OfType <IMethodSymbol>() .Any(x => x != null && x.ContainingType.Is(KnownType.System_NotImplementedException))); }
public void TestIsInstance() { Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(null)); Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression))); var syntaxNode = SyntaxFactory.ThrowExpression(SyntaxFactory.Token(SyntaxKind.ThrowKeyword), SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)); Assert.True(ThrowExpressionSyntaxWrapper.IsInstance(syntaxNode)); }
protected override bool ShouldIgnoreAccessor(IMethodSymbol accessorMethod, Compilation compilation) { if (!(accessorMethod.GetFirstSyntaxRef() is AccessorDeclarationSyntax accessor) || ((SyntaxNode)accessor.Body ?? accessor).ContainsGetOrSetOnDependencyProperty(compilation)) { return(true); } // Special case: ignore the accessor if the only statement/expression is a throw. if (accessor.Body == null) { // Expression-bodied syntax return(accessor.DescendantNodes().FirstOrDefault() is ArrowExpressionClauseSyntax arrowClause && ThrowExpressionSyntaxWrapper.IsInstance(arrowClause.Expression)); } // Statement-bodied syntax return(accessor.Body.DescendantNodes().Count(n => n is StatementSyntax) == 1 && accessor.Body.DescendantNodes().Count(n => n is ThrowStatementSyntax) == 1); }
private static bool OnlyThrows(AccessorDeclarationSyntax accessor) => (accessor.Body?.Statements.Count == 1 && accessor.Body.Statements[0] is ThrowStatementSyntax) || ThrowExpressionSyntaxWrapper.IsInstance(accessor.ExpressionBody()?.Expression);
public void TestIsInstance() { Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(null)); Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression))); }