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    }