### Question:
DesugarTryExpressionRewriter { public static Expression rewrite(Expression expression, Metadata metadata, TypeAnalyzer typeAnalyzer, Session session, SymbolAllocator symbolAllocator) { if (expression instanceof SymbolReference) { return expression; } Map<NodeRef<Expression>, Type> expressionTypes = typeAnalyzer.getTypes( session, symbolAllocator.getTypes(), expression); return ExpressionTreeRewriter.rewriteWith(new Visitor(metadata, expressionTypes), expression); } private  DesugarTryExpressionRewriter(); static Expression rewrite(Expression expression, Metadata metadata, TypeAnalyzer typeAnalyzer, Session session, SymbolAllocator symbolAllocator);  }### Answer:
@Test public void testTryExpressionDesugaringRewriter() { Expression initial = new ArithmeticBinaryExpression( ADD, new DecimalLiteral("1"), new TryExpression(new DecimalLiteral("2"))); Expression rewritten = DesugarTryExpressionRewriter.rewrite( initial, tester().getMetadata(), tester().getTypeAnalyzer(), tester().getSession(), new SymbolAllocator()); Expression expected = new ArithmeticBinaryExpression( ADD, new DecimalLiteral("1"), new FunctionCallBuilder(tester().getMetadata()) .setName(QualifiedName.of(TryFunction.NAME)) .addArgument(new FunctionType(ImmutableList.of(), createDecimalType(1)), new LambdaExpression(ImmutableList.of(), new DecimalLiteral("2"))) .build()); ExpressionVerifier verifier = new ExpressionVerifier(new SymbolAliases()); assertTrue(verifier.process(rewritten, expected)); }