org.jetbrains.kotlin.js.backend.ast.JsIf Maven / Gradle / Ivy
// 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);
}
}