// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file // for details. All rights reserved. Use of this source code is governed by a // BSD-style license that can be found in the LICENSE file. package org.jetbrains.kotlin.js.backend.ast; import org.jetbrains.kotlin.js.util.AstUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * Represents a JavaScript if statement. */ public final class JsIf extends SourceInfoAwareJsNode implements JsStatement { @NotNull private JsExpression ifExpression; @NotNull private JsStatement thenStatement; @Nullable private JsStatement elseStatement; public JsIf(@NotNull JsExpression ifExpression, @NotNull JsStatement thenStatement, @Nullable JsStatement elseStatement) { this.ifExpression = ifExpression; this.thenStatement = thenStatement; this.elseStatement = elseStatement; } public JsIf(@NotNull JsExpression ifExpression, @NotNull JsStatement thenStatement) { this(ifExpression, thenStatement, null); } @Nullable public JsStatement getElseStatement() { return elseStatement; } @NotNull public JsExpression getIfExpression() { return ifExpression; } @NotNull public JsStatement getThenStatement() { return thenStatement; } public void setElseStatement(@Nullable JsStatement elseStatement) { this.elseStatement = elseStatement; } public void setIfExpression(@NotNull JsExpression ifExpression) { this.ifExpression = ifExpression; } public void setThenStatement(@NotNull JsStatement thenStatement) { this.thenStatement = thenStatement; } @Override public void accept(JsVisitor v) { v.visitIf(this); } @Override public void acceptChildren(JsVisitor visitor) { visitor.accept(ifExpression); visitor.accept(thenStatement); if (elseStatement != null) { visitor.accept(elseStatement); } } @Override public void traverse(JsVisitorWithContext v, JsContext ctx) { if (v.visit(this, ctx)) { ifExpression = v.accept(ifExpression); thenStatement = v.acceptStatement(thenStatement); if (elseStatement != null) { elseStatement = v.acceptStatement(elseStatement); } } v.endVisit(this, ctx); } @NotNull @Override public JsIf deepCopy() { JsExpression ifCopy = AstUtil.deepCopy(ifExpression); JsStatement thenCopy = AstUtil.deepCopy(thenStatement); JsStatement elseCopy = AstUtil.deepCopy(elseStatement); return new JsIf(ifCopy, thenCopy, elseCopy).withMetadataFrom(this); } }