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 }