1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.jexl.parser;
17
18 import org.apache.commons.jexl.JexlContext;
19
20 /***
21 * reference - any variable expression
22 *
23 * @author <a href="mailto:geirm@apache.org">Geir Magnusson Jr.</a>
24 * @version $Id: ASTReference.java,v 1.3 2004/02/28 13:45:20 yoavs Exp $
25 */
26 public class ASTReference extends SimpleNode
27 {
28 SimpleNode root;
29
30 public ASTReference(int id)
31 {
32 super(id);
33 }
34
35 public ASTReference(Parser p, int id)
36 {
37 super(p, id);
38 }
39
40
41 /*** Accept the visitor. **/
42 public Object jjtAccept(ParserVisitor visitor, Object data)
43 {
44 return visitor.visit(this, data);
45 }
46
47 public Object value(JexlContext jc)
48 throws Exception
49 {
50 return execute(null,jc);
51 }
52
53 public void jjtClose()
54 {
55 root = (SimpleNode) jjtGetChild(0);
56 }
57
58 public Object execute(Object obj, JexlContext jc)
59 throws Exception
60 {
61 Object o = root.value(jc);
62
63
64
65
66 for(int i=1; i<jjtGetNumChildren(); i++)
67 {
68 o = ( (SimpleNode) jjtGetChild(i)).execute(o,jc);
69
70 if(o==null)
71 return null;
72 }
73
74 return o;
75 }
76
77 public String getRootString()
78 throws Exception
79 {
80 if ( root instanceof ASTIdentifier)
81 return ((ASTIdentifier) root).getIdentifierString();
82
83 if (root instanceof ASTArrayAccess)
84 return ((ASTArrayAccess) root).getIdentifierString();
85
86 throw new Exception("programmer error : ASTReference : root not known"
87 + root );
88 }
89 }