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 }