예제 #1
0
            void AddIssueForTryCatchStatement(TryCatchStatement tryCatchStatement)
            {
                var lastCatch = tryCatchStatement.CatchClauses.LastOrNullObject();

                if (lastCatch.IsNull)
                {
                    return;
                }

                var removeTryCatchMessage = ctx.TranslateString("Remove 'try' statement");

                var removeTryStatementAction = new CodeAction(removeTryCatchMessage, script => {
                    var statements = tryCatchStatement.TryBlock.Statements;
                    if (statements.Count == 1 || tryCatchStatement.Parent is BlockStatement)
                    {
                        foreach (var statement in statements)
                        {
                            script.InsertAfter(tryCatchStatement.GetPrevSibling(s => !(s is NewLineNode)), statement.Clone());
                        }
                        script.Remove(tryCatchStatement);
                    }
                    else
                    {
                        var blockStatement = new BlockStatement();
                        foreach (var statement in statements)
                        {
                            blockStatement.Statements.Add(statement.Clone());
                        }
                        script.Replace(tryCatchStatement, blockStatement);
                    }
                    // The replace and insert script functions does not format these things well on their own
                    script.FormatText(tryCatchStatement.Parent);
                }, tryCatchStatement);

                var fixes = new [] {
                    removeTryStatementAction
                };

                AddIssue(new CodeIssue(tryCatchStatement.TryBlock.EndLocation, lastCatch.EndLocation, removeTryCatchMessage, fixes)
                {
                    IssueMarker = IssueMarker.GrayOut
                });
            }