예제 #1
0
        public static IEnumerable <StatementSyntax> ExtractRequires(IMethodSymbol method, ExtractStatements extractStatements, CancellationToken token)
        {
            var syntax = method.DeclaringSyntaxReferences;

            if (syntax.Length != 1)
            {
                return(Array.Empty <StatementSyntax>());
            }

            var methodSyntax = syntax[0].GetSyntax(token) as MethodDeclarationSyntax;

            if (methodSyntax == null)
            {
                return(Array.Empty <StatementSyntax>());
            }

            return(ExtractRequires(methodSyntax, extractStatements));
        }
예제 #2
0
        public static IEnumerable <StatementSyntax> ExtractRequires(MethodDeclarationSyntax method, ExtractStatements extractStatements)
        {
            var statementsToCheck = method.Body.Statements.TakeWhile(o => o is ExpressionStatementSyntax);

            switch (extractStatements)
            {
            case ExtractStatements.CustomContractRequires:
                return(statementsToCheck.Where(o => IsRequiresStatement(o) || IsTurboRequiresStatement(o)));

            case ExtractStatements.DebugAssert:
                return(statementsToCheck.Where(o => IsRequiresStatement(o) || IsDebugAssertStatement(o)));

            case ExtractStatements.All:
                return(statementsToCheck.Where(o => IsRequiresStatement(o) || IsDebugAssertStatement(o) || IsTurboRequiresStatement(o)));

            case ExtractStatements.Default:
            default:
                return(statementsToCheck.Where(o => IsRequiresStatement(o)));
            }
        }