1 16 package com.google.gwt.dev.jjs.ast; 17 18 import com.google.gwt.dev.jjs.SourceInfo; 19 20 23 public class JArrayRef extends JExpression { 24 25 private JExpression instance; 26 private JExpression indexExpr; 27 28 public JArrayRef(JProgram program, SourceInfo info, JExpression instance, 29 JExpression indexExpr) { 30 super(program, info); 31 this.instance = instance; 32 this.indexExpr = indexExpr; 33 } 34 35 public JExpression getIndexExpr() { 36 return indexExpr; 37 } 38 39 public JExpression getInstance() { 40 return instance; 41 } 42 43 public JType getType() { 44 JType type = instance.getType(); 45 JNullType typeNull = program.getTypeNull(); 46 if (type == typeNull) { 47 return typeNull; 48 } 49 JArrayType arrayType = (JArrayType) type; 50 JType elementType = arrayType.getElementType(); 51 if (elementType instanceof JReferenceType 52 && !program.typeOracle.isInstantiatedType((JReferenceType) elementType)) { 53 return typeNull; 54 } 55 return elementType; 56 } 57 58 public boolean hasSideEffects() { 59 return instance.hasSideEffects() || indexExpr.hasSideEffects(); 60 } 61 62 public void traverse(JVisitor visitor, Context ctx) { 63 if (visitor.visit(this, ctx)) { 64 instance = visitor.accept(instance); 65 indexExpr = visitor.accept(indexExpr); 66 } 67 visitor.endVisit(this, ctx); 68 } 69 70 } 71 | Popular Tags |