コード例 #1
0
        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)));
        }
コード例 #2
0
        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));
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 private static bool OnlyThrows(AccessorDeclarationSyntax accessor) =>
 (accessor.Body?.Statements.Count == 1 &&
  accessor.Body.Statements[0] is ThrowStatementSyntax) ||
 ThrowExpressionSyntaxWrapper.IsInstance(accessor.ExpressionBody()?.Expression);
コード例 #5
0
 public void TestIsInstance()
 {
     Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(null));
     Assert.False(ThrowExpressionSyntaxWrapper.IsInstance(SyntaxFactory.LiteralExpression(SyntaxKind.NullLiteralExpression)));
 }