/// <summary> /// Simplify nested 'try { try {} catch {} } finally {}'. /// This transformation must run after the using/lock tranformations. /// </summary> TryCatchStatement TransformTryCatchFinally(TryCatchStatement tryFinally) { if (tryCatchFinallyPattern.IsMatch(tryFinally)) { TryCatchStatement tryCatch = (TryCatchStatement)tryFinally.TryBlock.Statements.Single(); tryFinally.TryBlock = tryCatch.TryBlock.Detach(); tryCatch.CatchClauses.MoveTo(tryFinally.CatchClauses); } // Since the tryFinally instance is not changed, we can continue in the visitor as usual, so return null return(null); }
public void TestEmptyFinallyDoesNotMatchNullFinally() { TryCatchStatement c1 = new TryCatchStatement { TryBlock = new BlockStatement(), CatchClauses = { new CatchClause { Body = new BlockStatement() } } }; TryCatchStatement c2 = new TryCatchStatement { TryBlock = new BlockStatement(), CatchClauses = { new CatchClause { Body = new BlockStatement() } }, FinallyBlock = new BlockStatement() }; Assert.IsFalse(c1.IsMatch(c2)); Assert.IsFalse(c2.IsMatch(c1)); // and vice versa }
public void TestEmptyFinallyDoesNotMatchNullFinally() { TryCatchStatement c1 = new TryCatchStatement { TryBlock = new BlockStatement(), CatchClauses = { new CatchClause { Body = new BlockStatement() } } }; TryCatchStatement c2 = new TryCatchStatement { TryBlock = new BlockStatement(), CatchClauses = { new CatchClause { Body = new BlockStatement() } }, FinallyBlock = new BlockStatement() }; Assert.IsFalse(c1.IsMatch(c2)); Assert.IsFalse(c2.IsMatch(c1)); // and vice versa }