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 }