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 /**
011 * Represents a JavaScript if statement.
012 */
013 public final class JsIf extends SourceInfoAwareJsNode implements JsStatement {
014 private JsExpression ifExpression;
015 private JsStatement thenStatement;
016 private JsStatement elseStatement;
017
018 public JsIf() {
019 }
020
021 public JsIf(JsExpression ifExpression, JsStatement thenStatement, JsStatement elseStatement) {
022 this.ifExpression = ifExpression;
023 this.thenStatement = thenStatement;
024 this.elseStatement = elseStatement;
025 }
026
027 public JsIf(JsExpression ifExpression, JsStatement thenStatement) {
028 this.ifExpression = ifExpression;
029 this.thenStatement = thenStatement;
030 }
031
032 public JsStatement getElseStatement() {
033 return elseStatement;
034 }
035
036 public JsExpression getIfExpression() {
037 return ifExpression;
038 }
039
040 public JsStatement getThenStatement() {
041 return thenStatement;
042 }
043
044 public void setElseStatement(JsStatement elseStatement) {
045 this.elseStatement = elseStatement;
046 }
047
048 public void setIfExpression(JsExpression ifExpression) {
049 this.ifExpression = ifExpression;
050 }
051
052 public void setThenStatement(JsStatement thenStatement) {
053 this.thenStatement = thenStatement;
054 }
055
056 @Override
057 public void accept(JsVisitor v) {
058 v.visitIf(this);
059 }
060
061 @Override
062 public void acceptChildren(JsVisitor visitor) {
063 visitor.accept(ifExpression);
064 visitor.accept(thenStatement);
065 if (elseStatement != null) {
066 visitor.accept(elseStatement);
067 }
068 }
069
070 @Override
071 public void traverse(JsVisitorWithContext v, JsContext ctx) {
072 if (v.visit(this, ctx)) {
073 ifExpression = v.accept(ifExpression);
074 thenStatement = v.acceptStatement(thenStatement);
075 if (elseStatement != null) {
076 elseStatement = v.acceptStatement(elseStatement);
077 }
078 }
079 v.endVisit(this, ctx);
080 }
081
082 @NotNull
083 @Override
084 public JsIf deepCopy() {
085 JsExpression ifCopy = AstUtil.deepCopy(ifExpression);
086 JsStatement thenCopy = AstUtil.deepCopy(thenStatement);
087 JsStatement elseCopy = AstUtil.deepCopy(elseStatement);
088
089 return new JsIf(ifCopy, thenCopy, elseCopy).withMetadataFrom(this);
090 }
091 }