KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > google > gwt > dev > jjs > ast > JArrayRef


1 /*
2  * Copyright 2007 Google Inc.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
5  * use this file except in compliance with the License. You may obtain a copy of
6  * the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13  * License for the specific language governing permissions and limitations under
14  * the License.
15  */

16 package com.google.gwt.dev.jjs.ast;
17
18 import com.google.gwt.dev.jjs.SourceInfo;
19
20 /**
21  * Java array reference expression.
22  */

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