Пример #1
0
        private ITreeRange AdjustStatement(ITreeRange range, IJavaScriptStatement statement)
        {
            var ifStatementByThen = IfStatementNavigator.GetByThen(statement);

            if (ifStatementByThen != null)
            {
                if (ifStatementByThen.Else == null)
                {
                    return(new TreeRange(ifStatementByThen, ifStatementByThen));
                }
                if (!_executing)
                {
                    return(range);
                }
                ifStatementByThen.ReplaceBy(ifStatementByThen.Else);
                return(null);
            }

            var ifStatementByElse = IfStatementNavigator.GetByElse(statement);

            if (ifStatementByElse != null)
            {
                if (ifStatementByElse.Then == null)
                {
                    return(new TreeRange(ifStatementByElse, ifStatementByElse));
                }
                if (!_executing)
                {
                    return(range);
                }
                ifStatementByElse.SetElse(null);
                return(null);
            }

            var doStatement = DoStatementNavigator.GetByStatement(statement);

            if (doStatement != null)
            {
                return(new TreeRange(doStatement, doStatement));
            }

            var whileStatement = WhileStatementNavigator.GetByStatement(statement);

            if (whileStatement != null)
            {
                return(new TreeRange(whileStatement, whileStatement));
            }

            var forStatement = ForStatementNavigator.GetByStatement(statement);

            if (forStatement != null)
            {
                return(new TreeRange(forStatement, forStatement));
            }

            var foreachStatement = ForeachStatementNavigator.GetByStatement(statement);

            if (foreachStatement != null)
            {
                return(new TreeRange(foreachStatement, foreachStatement));
            }

            var withStatement = WithStatementNavigator.GetByStatement(statement);

            if (withStatement != null)
            {
                return(new TreeRange(withStatement, withStatement));
            }

            return(range);
        }
Пример #2
0
        private ITreeRange AdjustExpression(ITreeRange range, ICompoundExpression expression)
        {
            var expressionStatement = ExpressionStatementNavigator.GetByExpression(expression);

            if (expressionStatement != null)
            {
                return(AdjustStatement(new TreeRange(expressionStatement, expressionStatement), expressionStatement));
            }

            var ifStatement = IfStatementNavigator.GetByCondition(expression);

            if (ifStatement != null)
            {
                if (ifStatement.Else == null)
                {
                    return(new TreeRange(ifStatement, ifStatement));
                }
                if (_executing)
                {
                    var block = ifStatement.Else as IBlock;
                    if (block == null)
                    {
                        ifStatement.ReplaceBy(ifStatement.Else);
                    }
                    else
                    {
                        //StatementUtil.ReplaceStatementWithBlock(block, ifStatementByCondition);
                    }
                }
                return(null);
            }

            var switchStatement = SwitchStatementNavigator.GetByCondition(expression);

            if (switchStatement != null)
            {
                return(new TreeRange(switchStatement, switchStatement));
            }

            var whileStatement = WhileStatementNavigator.GetByCondition(expression);

            if (whileStatement != null)
            {
                return(new TreeRange(whileStatement, whileStatement));
            }

            var doStatement = DoStatementNavigator.GetByCondition(expression);

            if (doStatement != null)
            {
                if (!_executing)
                {
                    return(range);
                }
                var block = doStatement.Statement as IBlock;
                if (block != null && block.Statements.Count == 1)
                {
                    doStatement.ReplaceBy(block.Statements[0]);
                }
                else
                {
                    doStatement.ReplaceBy(doStatement.Statement);
                }
                return(null);
            }

            var forStatement = ForStatementNavigator.GetByForCondition(expression);

            if (forStatement != null)
            {
                return(new TreeRange(forStatement, forStatement));
            }

            return(range);
        }