001 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
002 // for details. All rights reserved. Use of this source code is governed by a
003 // BSD-style license that can be found in the LICENSE file.
004
005 package com.google.dart.compiler.backend.js.ast;
006
007 import com.intellij.util.SmartList;
008 import org.jetbrains.annotations.Nullable;
009
010 import java.util.List;
011
012 /**
013 * A JavaScript <code>try</code> statement.
014 */
015 public class JsTry extends SourceInfoAwareJsNode implements JsStatement {
016 private final List<JsCatch> catches;
017 private JsBlock finallyBlock;
018 private JsBlock tryBlock;
019
020 public JsTry() {
021 catches = new SmartList<JsCatch>();
022 }
023
024 public JsTry(JsBlock tryBlock, List<JsCatch> catches, @Nullable JsBlock finallyBlock) {
025 this.tryBlock = tryBlock;
026 this.catches = catches;
027 this.finallyBlock = finallyBlock;
028 }
029
030 public List<JsCatch> getCatches() {
031 return catches;
032 }
033
034 public JsBlock getFinallyBlock() {
035 return finallyBlock;
036 }
037
038 public JsBlock getTryBlock() {
039 return tryBlock;
040 }
041
042 public void setFinallyBlock(JsBlock block) {
043 finallyBlock = block;
044 }
045
046 public void setTryBlock(JsBlock block) {
047 tryBlock = block;
048 }
049
050 @Override
051 public void accept(JsVisitor v) {
052 v.visitTry(this);
053 }
054
055 @Override
056 public void acceptChildren(JsVisitor visitor) {
057 visitor.accept(tryBlock);
058 visitor.acceptWithInsertRemove(catches);
059 if (finallyBlock != null) {
060 visitor.accept(finallyBlock);
061 }
062 }
063 }