/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.template.soy.exprtree;
import com.google.template.soy.basetree.CopyState;
import com.google.template.soy.basetree.Node;
import com.google.template.soy.basetree.ParentNode;
import com.google.template.soy.types.SoyType;
/**
* This class defines the base interface for a node in the Soy expression parse tree, as well as a
* number of subinterfaces that extend the base interface in various aspects. Every concrete node
* implements some subset of these interfaces.
*
* <p>The top level definition is the base ExprNode interface.
*
* <p>Important: Do not use outside of Soy code (treat as superpackage-private).
*
*/
public interface ExprNode extends Node {
/**
* Enum of specific node kinds (coresponding to specific node types).
*
* <p>Important: Do not use outside of Soy code (treat as superpackage-private).
*/
public static enum Kind {
EXPR_ROOT_NODE,
NULL_NODE,
BOOLEAN_NODE,
INTEGER_NODE,
FLOAT_NODE,
STRING_NODE,
LIST_LITERAL_NODE,
MAP_LITERAL_NODE,
VAR_NODE,
VAR_REF_NODE,
FIELD_ACCESS_NODE,
ITEM_ACCESS_NODE,
GLOBAL_NODE,
NEGATIVE_OP_NODE,
NOT_OP_NODE,
TIMES_OP_NODE,
DIVIDE_BY_OP_NODE,
MOD_OP_NODE,
PLUS_OP_NODE,
MINUS_OP_NODE,
LESS_THAN_OP_NODE,
GREATER_THAN_OP_NODE,
LESS_THAN_OR_EQUAL_OP_NODE,
GREATER_THAN_OR_EQUAL_OP_NODE,
EQUAL_OP_NODE,
NOT_EQUAL_OP_NODE,
AND_OP_NODE,
OR_OP_NODE,
NULL_COALESCING_OP_NODE,
CONDITIONAL_OP_NODE,
FUNCTION_NODE,
PROTO_INIT_NODE,
}
/**
* Gets this node's kind (corresponding to this node's specific type).
*
* @return This node's kind (corresponding to this node's specific type).
*/
public Kind getKind();
/** Gets the data type of this node. */
public SoyType getType();
@Override
public ParentExprNode getParent();
/** See {@link Node#copy(CopyState)} for a description of the copy contract. */
@Override
public ExprNode copy(CopyState copyState);
// -----------------------------------------------------------------------------------------------
/** A node in an expression parse tree that may be a parent. */
public static interface ParentExprNode extends ExprNode, ParentNode<ExprNode> {}
// -----------------------------------------------------------------------------------------------
/** A node representing an operator (with operands as children). */
public static interface OperatorNode extends ParentExprNode {
public Operator getOperator();
}
// -----------------------------------------------------------------------------------------------
/** A node representing a primitive literal. */
public static interface PrimitiveNode extends ExprNode {}
}