in velocity-engine-core/src/main/java/org/apache/velocity/util/DuckType.java [148:214]
public static boolean asEmpty(Object value)
{
// empty variable
if (value == null)
{
return true;
}
// empty array
if (value.getClass().isArray())
{
return Array.getLength(value) == 0;// [] is false
}
// isEmpty() for object / string
Object isEmpty = get(value, Types.EMPTY);
if (isEmpty != NO_METHOD)
{
return (Boolean)isEmpty;
}
// isEmpty() for object / other char sequences
Object length = get(value, Types.LENGTH);
if (length != NO_METHOD && length instanceof Number)
{
return isZero((Number)length);
}
// size() object / collection
Object size = get(value, Types.SIZE);
if (size != NO_METHOD && size instanceof Number)
{
return isZero((Number)size);
}
// zero numbers are false
if (value instanceof Number)
{
return isZero((Number)value);
}
// null getAsString()
Object asString = get(value, Types.STRING);
if (asString == null)
{
return true;// duck null
}
// empty getAsString()
else if (asString != NO_METHOD)
{
return ((String)asString).length() == 0;
}
// null getAsNumber()
Object asNumber = get(value, Types.NUMBER);
if (asNumber == null)
{
return true;
}
// zero numbers are false
else if (asNumber != NO_METHOD && asNumber instanceof Number)
{
return isZero((Number)asNumber);
}
return false;
}