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.google.dart.compiler.util.AstUtil;
008 import org.jetbrains.annotations.NotNull;
009
010 import java.util.ArrayList;
011 import java.util.List;
012
013 /**
014 * A JavaScript switch statement.
015 */
016 public class JsSwitch extends SourceInfoAwareJsNode implements JsStatement {
017
018 private final List<JsSwitchMember> cases;
019 private JsExpression expression;
020
021 public JsSwitch() {
022 super();
023 cases = new ArrayList<JsSwitchMember>();
024 }
025
026 public JsSwitch(JsExpression expression, List<JsSwitchMember> cases) {
027 this.expression = expression;
028 this.cases = cases;
029 }
030
031 public List<JsSwitchMember> getCases() {
032 return cases;
033 }
034
035 public JsExpression getExpression() {
036 return expression;
037 }
038
039 public void setExpression(JsExpression expression) {
040 this.expression = expression;
041 }
042
043 @Override
044 public void accept(JsVisitor v) {
045 v.visit(this);
046 }
047
048 @Override
049 public void acceptChildren(JsVisitor visitor) {
050 visitor.accept(expression);
051 visitor.acceptWithInsertRemove(cases);
052 }
053
054 @Override
055 public void traverse(JsVisitorWithContext v, JsContext ctx) {
056 if (v.visit(this, ctx)) {
057 expression = v.accept(expression);
058 v.acceptList(cases);
059 }
060 v.endVisit(this, ctx);
061 }
062
063 @NotNull
064 @Override
065 public JsSwitch deepCopy() {
066 JsExpression expressionCopy = AstUtil.deepCopy(expression);
067 List<JsSwitchMember> casesCopy = AstUtil.deepCopy(cases);
068
069 return new JsSwitch(expressionCopy, casesCopy).withMetadataFrom(this);
070 }
071 }