leftValue = new Integer(0);
if (rightValue == null)
// division by zero!
rightValue = new Integer(0);
Type type = op.getJQLType();
if (type instanceof NumericWrapperClassType)
type = ((NumericWrapperClassType)type).getPrimitiveType();
if (type.equals(typetab.intType))
value = new Integer(((Number)leftValue).intValue() %
((Number)rightValue).intValue());
else if (type.equals(typetab.longType))
value = new Long(((Number)leftValue).longValue() %
((Number)rightValue).longValue());
else if (type.equals(typetab.floatType))
value = new Float(((Number)leftValue).floatValue() %
((Number)rightValue).floatValue());
else if (type.equals(typetab.doubleType))
value = new Double(((Number)leftValue).doubleValue() %
((Number)rightValue).doubleValue());
else if (type.equals(typetab.bigDecimalType))
{
BigDecimal leftBigDecimal = getBigDecimalValue(leftValue);
BigDecimal rightBigDecimal = getBigDecimalValue(rightValue);
//use ROUND_HALF_EVEN so that it is consistent with div
BigDecimal quotient = leftBigDecimal.divide(rightBigDecimal,
0, BigDecimal.ROUND_HALF_EVEN);
value = leftBigDecimal.subtract(
rightBigDecimal.multiply(quotient));
}
else if (type.equals(typetab.bigIntegerType))
value = getBigIntegerValue(leftValue).remainder(
getBigIntegerValue(rightValue));
else
errorMsg.fatal(I18NHelper.getMessage(messages,
"jqlc.optimizer.checkmodop.invalidtype", //NOI18N