001 /* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.commons.jexl2.parser; 019 020 /** 021 * A class originally generated by JJTree: 022 * /* JavaCCOptions:MULTI=true,NODE_USES_PARSER=true,VISITOR=true,TRACK_TOKENS=false,NODE_PREFIX=AST,NODE_EXTENDS=,NODE_FACTORY= *\/ 023 * Worksaround issue https://javacc.dev.java.net/issues/show_bug.cgi?id=227 024 * As soon as this issue if fixed and the maven plugin uses the correct version of Javacc, this 025 * class can go away. 026 * 027 * The technical goal is to ensure every reference made in the parser was to a JexlNode; unfortunately, 028 * as in javacc 4.1, it still uses a SimpleNode reference in the generated ParserVisitor. 029 * Besides, there is no need to keep the parser around in the node. 030 * 031 * The functional goal is to a allow a <em>volatile</em> value in the node 032 * so it can serve as a last evaluation cache even in multi-threaded executions. 033 */ 034 public class SimpleNode implements Node { 035 protected JexlNode parent; 036 protected JexlNode[] children; 037 protected int id; 038 /** volatile value so it can be used as a last evaluation cache. */ 039 protected volatile Object value; 040 041 public SimpleNode(int i) { 042 id = i; 043 } 044 045 public SimpleNode(Parser p, int i) { 046 this(i); 047 } 048 049 public void jjtOpen() { 050 } 051 052 public void jjtClose() { 053 } 054 055 public void jjtSetParent(Node n) { 056 parent = (JexlNode) n; 057 } 058 059 public JexlNode jjtGetParent() { 060 return parent; 061 } 062 063 public void jjtAddChild(Node n, int i) { 064 if (children == null) { 065 children = new JexlNode[i + 1]; 066 } else if (i >= children.length) { 067 JexlNode c[] = new JexlNode[i + 1]; 068 System.arraycopy(children, 0, c, 0, children.length); 069 children = c; 070 } 071 children[i] = (JexlNode) n; 072 } 073 074 public JexlNode jjtGetChild(int i) { 075 return children[i]; 076 } 077 078 public int jjtGetNumChildren() { 079 return (children == null) ? 0 : children.length; 080 } 081 082 public void jjtSetValue(Object value) { 083 this.value = value; 084 } 085 086 public Object jjtGetValue() { 087 return value; 088 } 089 090 /** Accept the visitor. **/ 091 public Object jjtAccept(ParserVisitor visitor, Object data) { 092 return visitor.visit(this, data); 093 } 094 095 /** Accept the visitor. **/ 096 public Object childrenAccept(ParserVisitor visitor, Object data) { 097 if (children != null) { 098 for (int i = 0; i < children.length; ++i) { 099 children[i].jjtAccept(visitor, data); 100 } 101 } 102 return data; 103 } 104 105 /* You can override these two methods in subclasses of SimpleNode to 106 customize the way the JexlNode appears when the tree is dumped. If 107 your output uses more than one line you should override 108 toString(String), otherwise overriding toString() is probably all 109 you need to do. */ 110 111 @Override 112 public String toString() { return ParserTreeConstants.jjtNodeName[id]; } 113 public String toString(String prefix) { return prefix + toString(); } 114 115 /* Override this method if you want to customize how the JexlNode dumps 116 out its children. */ 117 118 public void dump(String prefix) { 119 System.out.println(toString(prefix)); 120 if (children != null) { 121 for (int i = 0; i < children.length; ++i) { 122 SimpleNode n = children[i]; 123 if (n != null) { 124 n.dump(prefix + " "); 125 } 126 } 127 } 128 } 129 } 130 131 /* JavaCC - OriginalChecksum=7dff880883d088a37c1e3197e4b455a0 (do not edit this line) */