private static bool OnlyThrowsNotImplementedException(BaseMethodDeclarationSyntax declaration, SemanticModel semanticModel) { 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(oces => semanticModel.GetSymbolInfo(oces).Symbol) .OfType <IMethodSymbol>() .Any(s => s != null && s.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))); }