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 expression for array access.
012 */
013 public final class JsArrayAccess extends JsExpressionImpl {
014 private JsExpression arrayExpression;
015 private JsExpression indexExpression;
016
017 public JsArrayAccess() {
018 super();
019 }
020
021 public JsArrayAccess(JsExpression arrayExpression, JsExpression indexExpression) {
022 this.arrayExpression = arrayExpression;
023 this.indexExpression = indexExpression;
024 }
025
026 public JsExpression getArrayExpression() {
027 return arrayExpression;
028 }
029
030 public JsExpression getIndexExpression() {
031 return indexExpression;
032 }
033
034 public void setArrayExpression(JsExpression arrayExpression) {
035 this.arrayExpression = arrayExpression;
036 }
037
038 public void setIndexExpression(JsExpression indexExpression) {
039 this.indexExpression = indexExpression;
040 }
041
042 @Override
043 public void accept(JsVisitor v) {
044 v.visitArrayAccess(this);
045 }
046
047 @Override
048 public void acceptChildren(JsVisitor visitor) {
049 visitor.accept(arrayExpression);
050 visitor.accept(indexExpression);
051 }
052
053 @Override
054 public void traverse(JsVisitorWithContext v, JsContext ctx) {
055 if (v.visit(this, ctx)) {
056 arrayExpression = v.accept(arrayExpression);
057 indexExpression = v.accept(indexExpression);
058 }
059 v.endVisit(this, ctx);
060 }
061
062 @NotNull
063 @Override
064 public JsArrayAccess deepCopy() {
065 JsExpression arrayCopy = AstUtil.deepCopy(arrayExpression);
066 JsExpression indexCopy = AstUtil.deepCopy(indexExpression);
067
068 return new JsArrayAccess(arrayCopy, indexCopy).withMetadataFrom(this);
069 }
070 }