Ejemplo n.º 1
0
        public override void EnterStatement([NotNull] JavaParser.StatementContext context)
        {
            Logger.Debug("parsing statement");

            if (_currentMethod != null)
            {
                if (context.Start.StartIndex < _lastStopIndex)
                {
                    return;
                }

                var inputStream = context.Start.InputStream;

                var interval = new Interval(context.Start.StartIndex, context.Stop.StopIndex);

                _lastStopIndex = context.Stop.StopIndex;

                var text = context.GetText();

                //find method invocation using Regex: not conditional, name followed by ( and )
                var methodInvocationMatches = Regex.Matches(text, @"(?!\bif\b|\bfor\b|\bwhile\b|\bswitch\b|\btry\b|\bcatch\b)(\b[\w]+\b)[\s\n\r]*(?=\(.*\))");

                if (methodInvocationMatches.Count > 0)
                {
                    foreach (Match methodInvocationMatch in methodInvocationMatches)
                    {
                        MethodInvocation methodInvocation = new MethodInvocation(methodInvocationMatch.Value);

                        _currentMethod.AddMethodInvocation(methodInvocation);

                        InvokeParseInfoUpdate("Parsing method invocation: " + methodInvocation.Content);
                    }
                }
            }
        }
 public override void EnterStatement(JavaParser.StatementContext context)
 {
     if (context.ASSERT() != null ||
         context.RETURN() != null ||
         context.THROW() != null ||
         context.BREAK() != null ||
         context.CONTINUE() != null ||
         (context.SEMI() != null && context.ChildCount == 1) ||
         context.statementExpression() != null)
     {
         if (IsInCurrentContext(context))
         {
             _associatedTrees.Add(context);
         }
     }
 }
Ejemplo n.º 3
0
 public override Instr[] VisitStatement([NotNull] JavaParser.StatementContext context)
 {
     if (context.assignment() != null)
     {
         return(context.assignment().Accept(this));
     }
     if (context.if_op() != null)
     {
         return(context.if_op().Accept(this));
     }
     if (context.method_call() != null)
     {
         return(context.method_call().Accept(this));
     }
     return(new Instr[0]);
 }
Ejemplo n.º 4
0
        public Ust VisitStatement(JavaParser.StatementContext context)
        {
            var              textSpan = context.GetTextSpan();
            Statement        result;
            Expression       expression;
            Statement        statement;
            List <Statement> statements;

            if (context.blockLabel != null)
            {
                result = (Statement)Visit(context.blockLabel);
                return(result);
            }

            if (context.statementExpression != null)
            {
                result = Visit(context.statementExpression).ToStatementIfRequired();
                return(result);
            }

            if (context.identifierLabel != null)
            {
                var defaultResult = VisitChildren(context);
                return(new WrapperStatement(defaultResult, textSpan));
            }

            int firstTokenType = context.GetChild <ITerminalNode>(0).Symbol.Type;

            if (firstTokenType == JavaLexer.ASSERT)
            {
                var defaultResult = VisitChildren(context);
                return(new WrapperStatement(defaultResult, textSpan));
            }

            if (firstTokenType == JavaLexer.IF)
            {
                var condition     = (Expression)Visit(context.parExpression());
                var trueStatement = (Statement)Visit(context.statement(0));
                var falseStatment = context.ELSE() == null
                    ? null
                    : (Statement)Visit(context.statement(1));

                result = new IfElseStatement(condition, trueStatement, textSpan)
                {
                    FalseStatement = falseStatment
                };
                return(result);
            }

            if (firstTokenType == JavaLexer.FOR)
            {
                result = (Statement)Visit(context.forControl());
                return(result);
            }

            if (firstTokenType == JavaLexer.WHILE)
            {
                var conditionWhile = (Expression)Visit(context.parExpression());
                statement = (Statement)Visit(context.statement(0));

                result = new WhileStatement(conditionWhile, statement, textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.DO)
            {
                statement  = (Statement)Visit(context.statement(0));
                expression = (Expression)Visit(context.parExpression());

                result = new DoWhileStatement(statement, expression, textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.TRY)
            {
                // TODO: implement 'try' resourceSpecification block catchClause* finallyBlock? (C# using)

                var block = (BlockStatement)Visit(context.block());
                JavaParser.ResourceSpecificationContext resSpec = context.resourceSpecification();

                List <CatchClause> catchClauses = context.catchClause()
                                                  ?.Select(cc => (CatchClause)Visit(cc))
                                                  .Where(cc => cc != null).ToList();

                var finallyBlock = context.finallyBlock() == null ? null
                    : (BlockStatement)Visit(context.finallyBlock());

                if (resSpec == null)
                {
                    result = new TryCatchStatement(block, textSpan)
                    {
                        CatchClauses = catchClauses,
                        FinallyBlock = finallyBlock
                    };
                }
                else
                {
                    // C# using conversion to tryCatch
                    statements = new List <Statement>();
                    statements.AddRange(resSpec.resources().resource()
                                        .Select(res =>
                    {
                        var e = (VariableDeclarationExpression)Visit(res);
                        return(e == null ? null : new ExpressionStatement(e));
                    })
                                        .Where(res => res != null));
                    statements.AddRange(block.Statements);
                    var blockStatement = new BlockStatement(statements, context.GetTextSpan());

                    result = new TryCatchStatement(block, textSpan)
                    {
                        CatchClauses = catchClauses,
                        FinallyBlock = finallyBlock
                    };
                }
                return(result);
            }

            if (firstTokenType == JavaLexer.SWITCH)
            {
                expression = (Expression)Visit(context.parExpression());
                SwitchSection[] switchSections = context.switchBlockStatementGroup()
                                                 .Select(group => (SwitchSection)Visit(group))
                                                 .Where(group => group != null).ToArray();

                result = new SwitchStatement(expression, switchSections, textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.SYNCHRONIZED) // synchronized(a) { b; c; } => { a; b; c; }
            {
                var resultStatements = new List <Statement>();
                expression = (Expression)Visit(context.parExpression());
                statements = context.block().blockStatement()
                             .Select(s => (Statement)Visit(s))
                             .Where(s => s != null).ToList();
                resultStatements.Add(new ExpressionStatement(expression, expression.TextSpan));
                resultStatements.AddRange(statements);

                result = new BlockStatement(resultStatements, textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.RETURN)
            {
                expression = context.expression(0) != null
                            ? (Expression)Visit(context.expression(0))
                            : null;
                result = new ReturnStatement(expression, textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.THROW)
            {
                expression = (Expression)Visit(context.expression(0));
                result     = new ThrowStatement(expression, textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.BREAK)
            {
                result = new BreakStatement(textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.CONTINUE)
            {
                result = new ContinueStatement(textSpan);
                return(result);
            }

            if (firstTokenType == JavaLexer.SEMI)
            {
                result = new EmptyStatement(textSpan);
                return(result);
            }

            return(VisitShouldNotBeVisited(context));
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Enter a parse tree produced by <see cref="JavaParser.statement"/>.
 /// <para>The default implementation does nothing.</para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 public virtual void EnterStatement([NotNull] JavaParser.StatementContext context)
 {
 }
Ejemplo n.º 6
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="JavaParser.statement"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitStatement([NotNull] JavaParser.StatementContext context)
 {
     return(VisitChildren(context));
 }
Ejemplo n.º 7
0
 public override void ExitStatement([NotNull] JavaParser.StatementContext context)
 {
     _statementListener.ExitStatement(context);
 }