/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser.expressions;
import gw.internal.gosu.parser.Expression;
import gw.internal.gosu.parser.Symbol;
import gw.internal.gosu.parser.CannotExecuteGosuException;
import gw.lang.parser.expressions.IExistsExpression;
import gw.lang.reflect.java.JavaTypes;
/**
* Represents an 'exists' expression in the Gosu grammar:
* <pre>
* <i>exists-expression</i>
* <b>exists(</b> <identifier> <b>in</b> <expression> [ <b>index</b> <identifier> ] <b>where</b> <expression> <b>)</b>
* </pre>
* <p/>
*
* @see gw.lang.parser.IGosuParser
*
* @deprecated
*/
public final class ExistsExpression extends Expression implements IExistsExpression
{
/**
* The (declared) Identifier part of the expression.
*/
private Symbol _identifier;
/**
* The (declared) index Identifier part of the expression.
*/
private Symbol _indexIdentifier;
/**
* The source expression evaluating to an Array or Collection to iterate over.
*/
private Expression _inExpression;
/**
* The conditional (test) expression evaluated for each value in the array.
*/
private Expression _whereExpression;
private int _iNameOffset;
public ExistsExpression()
{
_type = JavaTypes.pBOOLEAN();
}
public Symbol getIdentifier()
{
return _identifier;
}
public void setIdentifier( Symbol identifier )
{
_identifier = identifier;
}
public Symbol getIndexIdentifier()
{
return _indexIdentifier;
}
public void setIndexIdentifier( Symbol indexIdentifier )
{
_indexIdentifier = indexIdentifier;
}
public Expression getInExpression()
{
return _inExpression;
}
public void setInExpression( Expression inExpression )
{
_inExpression = inExpression;
}
public Expression getWhereExpression()
{
return _whereExpression;
}
public void setWhereExpression( Expression whereExpression )
{
_whereExpression = whereExpression;
}
public Object evaluate()
{
if( !isCompileTimeConstant() )
{
return super.evaluate();
}
throw new CannotExecuteGosuException();
}
@Override
public String toString()
{
String strIndex = _indexIdentifier == null ? null : _indexIdentifier.getName();
if( strIndex != null )
{
strIndex = " index " + strIndex;
}
else
{
strIndex = "";
}
return "exists( " + getIdentifier().getName() + " in " + getInExpression().toString() + strIndex + " where " + getWhereExpression().toString() + " )";
}
@Override
public int getNameOffset( String identifierName )
{
return _iNameOffset;
}
@Override
public void setNameOffset( int iOffset, String identifierName )
{
_iNameOffset = iOffset;
}
public boolean declares( String identifierName )
{
return identifierName.equals( getIdentifier().getName() );
}
public String[] getDeclarations() {
return new String[] {getIdentifier().getName().toString()};
}
}