###############################################################################
# Copyright (c) 2001, 2008 Oracle Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License 2.0
# which accompanies this distribution, and is available at
# https://www.eclipse.org/legal/epl-2.0/
#
# SPDX-License-Identifier: EPL-2.0
# 
# Contributors:
#     Oracle Corporation - initial API and implementation
###############################################################################
GENERAL_SYNTAX_ERROR=Syntax error in EL
EMPTY_EL_EXPRESSION=Empty EL expression

VM_ROOT_NAME_NOT_FOUND = {0} cannot be resolved
VM_PROP_NAME_NOT_FOUND = {0} cannot be resolved as a member of {1}
CANNOT_APPLY_OPERATORS_TO_MB=Cannot apply expression operators to method bindings
MISSING_CLOSING_EXPR_BRACKET=Missing closing bracket on expression

POSSIBLE_DIV_BY_ZERO=Possible division by zero
UNARY_OP_EMPTY_ALWAYS_FALSE_ON_TYPE=This empty expression always evaluates to false.  Only string, maps, arrays and collection have meaningful values for the empty operator
UNARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN=Not operator does not support type coercion. 
TERNARY_OP_CANNOT_COERCE_CHOICE_TO_BOOLEAN_ID=Could not coerce choice argument to boolean
BINARY_OP_BOTH_OPERANDS_NULL={0} with operand ''null'' is always zero
BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION=Could not make numeric conversion for {0} operation
BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME=This {0} will always result a value of {1}
BINARY_OP_EQUALITY_COMP_WITH_NULL_ALWAYS_EVAL_SAME=Comparisons with null always evaluates to {0}
BINARY_OP_CANNOT_COERCE_ARGUMENT_TO_BOOLEAN=Cannot coerce {0} argument to boolean
BINARY_OP_FIRST_ARGUMENT_SHORT_CIRCUITS=The first boolean argument is always {0}.  The second argument will never be evaluated and the {1} will always evaluate to {0}.
BINARY_OP_SECOND_ARGUMENT_ALWAYS_EVAL_SAME=The second boolean argument is always {0}.  The {1} will always evaluate to {0}
BINARY_OP_NO_AVAILABLE_TYPE_COERCION=Cannot coerce arguments for this operator
BINARY_OP_COULD_NOT_COERCE_LITERALS_TO_NUMBERS=Could not coerce literals to numbers
UNARY_OP_CONSTANT_EXPRESSION_EVAL_SAME=This {0} will always result a value of {1}
UNARY_OP_MINUS_ON_NULL_ALWAYS_ZERO=Unary minus applied to null is always zero
UNARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION=Could not make numeric conversion for {0} operation
UNARY_OP_STRING_CONVERSION_NOT_GUARANTEED=Type coercion for {0} operator not guaranteed for possible runtime types: {1}
TERNARY_OP_CHOICE_IS_ALWAYS_SAME=Choice argument is always {0}.  {1} argument is always returned
BINARY_OP_DOT_WITH_VALUEB_NULL=Applying the {0} operator with null second argument always results in null
BINARY_OP_DOT_WITH_DOTTED_KEY_SHOULD_USE_ARRAY=Array syntax is preferred when accessing Map properties with keys containing dots (i.e. {0}[''{1}''])
POSSIBLE_ARRAY_INDEX_OUT_OF_BOUNDS=Possible array index out of bound on list/array access with value: {0}
BINARY_COMPARISON_WITH_ENUM_AND_CONST_ALWAYS_SAME=Comparison using {0} will always evaluate to {1}.  Enumeration type {2} does not have a constant named {3}
BINARY_OP_COMPARISON_OF_ENUMS_INCOMPATIBLE=Comparison of incompatible enumeration vales may cause a ClassCastException.
BINARY_COMPARISON_WITH_TWO_ENUMS_ALWAYS_SAME=Comparison using {0} will always evaulate to {1}.  Enumeration type {2} is not equality comparable with {3}
BINARY_COMPARISON_WITH_ENUM_AND_UNCOERCABLE_NONCONST_ALWAYS_SAME=Comparison using {0} will always evaulate to {1}.  Enumeration type {2} is not equality comparable with non-enumeration type {3}
MEMBER_IS_INTERMEDIATE={0} is an intermediate property which does not have its own value associated with it.