    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    package org.apache.commons.jexl2.parser;
    018
    019    import org.apache.commons.jexl2.JexlInfo;
    020
    021    /**
    022     * Base class for parser nodes - holds an 'image' of the token for later use.
    023     *
    024     * @since 2.0
    025     */
    026    public abstract class JexlNode extends SimpleNode implements JexlInfo {
    027        /** token value. */
    028        public String image;
    029
    030        public JexlNode(int id) {
    031            super(id);
    032        }
    033
    034        public JexlNode(Parser p, int id) {
    035            super(p, id);
    036        }
    037
    038        public JexlInfo getInfo() {
    039            JexlNode node = this;
    040            while (node != null) {
    041                if (node.value instanceof JexlInfo) {
    042                    return (JexlInfo) node.value;
    043                }
    044                node = node.jjtGetParent();
    045            }
    046            return null;
    047        }
    048
    049        /** {@inheritDoc} */
    050        public String debugString() {
    051            JexlInfo info = getInfo();
    052            return info != null? info.debugString() : "";
    053        }
    054    }