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 public final class JsConditional extends JsExpressionImpl {
011 private JsExpression testExpression;
012 private JsExpression elseExpression;
013 private JsExpression thenExpression;
014
015 public JsConditional() {
016 }
017
018 public JsConditional(JsExpression testExpression, JsExpression thenExpression, JsExpression elseExpression) {
019 this.testExpression = testExpression;
020 this.thenExpression = thenExpression;
021 this.elseExpression = elseExpression;
022 }
023
024 public JsExpression getElseExpression() {
025 return elseExpression;
026 }
027
028 public JsExpression getTestExpression() {
029 return testExpression;
030 }
031
032 public JsExpression getThenExpression() {
033 return thenExpression;
034 }
035
036 public void setElseExpression(JsExpression elseExpression) {
037 this.elseExpression = elseExpression;
038 }
039
040 public void setTestExpression(JsExpression testExpression) {
041 this.testExpression = testExpression;
042 }
043
044 public void setThenExpression(JsExpression thenExpression) {
045 this.thenExpression = thenExpression;
046 }
047
048 @Override
049 public void accept(JsVisitor v) {
050 v.visitConditional(this);
051 }
052
053 @Override
054 public void acceptChildren(JsVisitor visitor) {
055 visitor.accept(testExpression);
056 visitor.accept(thenExpression);
057 visitor.accept(elseExpression);
058 }
059
060 @Override
061 public void traverse(JsVisitorWithContext v, JsContext ctx) {
062 if (v.visit(this, ctx)) {
063 testExpression = v.accept(testExpression);
064 thenExpression = v.accept(thenExpression);
065 elseExpression = v.accept(elseExpression);
066 }
067 v.endVisit(this, ctx);
068 }
069
070 @NotNull
071 @Override
072 public JsConditional deepCopy() {
073 JsExpression testCopy = AstUtil.deepCopy(testExpression);
074 JsExpression thenCopy = AstUtil.deepCopy(thenExpression);
075 JsExpression elseCopy = AstUtil.deepCopy(elseExpression);
076
077 return new JsConditional(testCopy, thenCopy, elseCopy).withMetadataFrom(this);
078 }
079 }