Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java')
-rw-r--r--jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java388
1 files changed, 0 insertions, 388 deletions
diff --git a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java b/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java
deleted file mode 100644
index 0b6ac7d01..000000000
--- a/jsf/plugins/org.eclipse.jst.jsf.core/src/org/eclipse/jst/jsf/validation/internal/el/operators/ModArithmeticBinaryOperator.java
+++ /dev/null
@@ -1,388 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006 Oracle Corporation.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Cameron Bateman/Oracle - initial API and implementation
- *
- ********************************************************************************/
-
-package org.eclipse.jst.jsf.validation.internal.el.operators;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-
-import org.eclipse.emf.common.util.Diagnostic;
-import org.eclipse.jdt.core.Signature;
-import org.eclipse.jst.jsf.common.internal.types.FloatLiteralType;
-import org.eclipse.jst.jsf.common.internal.types.IAssignable;
-import org.eclipse.jst.jsf.common.internal.types.IntegerLiteralType;
-import org.eclipse.jst.jsf.common.internal.types.LiteralType;
-import org.eclipse.jst.jsf.common.internal.types.TypeCoercer;
-import org.eclipse.jst.jsf.common.internal.types.TypeCoercionException;
-import org.eclipse.jst.jsf.common.internal.types.TypeConstants;
-import org.eclipse.jst.jsf.common.internal.types.TypeTransformer;
-import org.eclipse.jst.jsf.common.internal.types.ValueType;
-import org.eclipse.jst.jsf.validation.internal.el.diagnostics.DiagnosticFactory;
-
-/**
- * Represents the EL modulo operator: % or mod
- * Based JSP.2.3.5.3
- *
- * @author cbateman
- *
- */
-/*package*/ class ModArithmeticBinaryOperator extends ArithmeticBinaryOperator
-{
- private static final String MODULO = "modulo"; //$NON-NLS-1$
-
- ModArithmeticBinaryOperator(DiagnosticFactory diagnosticFactory) {
- super(diagnosticFactory);
- }
-
- public ValueType performOperation(ValueType firstArg, ValueType secondArg)
- {
- // JSP.2.3.5.3, step 1 if both null, then return zero
- if (TypeCoercer.typeIsNull(firstArg.getSignature())
- && TypeCoercer.typeIsNull(secondArg.getSignature()))
- {
- return IntegerLiteralType.ZERO;
- }
-
- final String boxedFirstArg = TypeTransformer.transformBoxPrimitives(firstArg.getSignature());
- final String boxedSecondArg = TypeTransformer.transformBoxPrimitives(secondArg.getSignature());
-
- // JSP.2.3.5.3, step 2, if either arg is BigDecimal, Float, Double
- // or String (ignoring whether it is value coercable), then coerce
- // to Double and do op
- if (TypeConstants.TYPE_BIG_DOUBLE.equals(boxedFirstArg)
- || TypeConstants.TYPE_BIG_DOUBLE.equals(boxedSecondArg)
- || TypeConstants.TYPE_BOXED_DOUBLE.equals(boxedFirstArg)
- || TypeConstants.TYPE_BOXED_DOUBLE.equals(boxedSecondArg)
- || TypeConstants.TYPE_BOXED_FLOAT.equals(boxedFirstArg)
- || TypeConstants.TYPE_BOXED_FLOAT.equals(boxedSecondArg))
- {
- // TODO: handle case where one is a literal or resolvable string value
- // that containss ".", "e" or "E"
- return performDouble(firstArg, secondArg);
- }
-
- // JSP.2.3.5.3, step 3, if either arg is a BigInteger, coerce
- // both to BigInteger
- if (TypeConstants.TYPE_BIG_INTEGER.equals(boxedFirstArg)
- || TypeConstants.TYPE_BIG_INTEGER.equals(boxedSecondArg))
- {
- return performBigInteger(firstArg, secondArg);
- }
-
- // JSP.2.3.5.3, step 4, otherwise try to perform as a Long op
- return performLong(firstArg, secondArg);
- }
-
- public Diagnostic validate(ValueType firstArg, ValueType secondArg) {
- if (TypeConstants.TYPE_JAVAOBJECT.equals(firstArg.getSignature()) ||
- TypeConstants.TYPE_JAVAOBJECT.equals(secondArg.getSignature())) {
- return Diagnostic.OK_INSTANCE;
- }
-
- // JSP.2.3.5.3, step 1 if both null, then return zero
- if (TypeCoercer.typeIsNull(firstArg.getSignature())
- && TypeCoercer.typeIsNull(secondArg.getSignature()))
- {
- return _diagnosticFactory.create_BINARY_OP_BOTH_OPERANDS_NULL(MODULO);
- }
-
- final String boxedFirstArg = TypeTransformer.transformBoxPrimitives(firstArg.getSignature());
- final String boxedSecondArg = TypeTransformer.transformBoxPrimitives(secondArg.getSignature());
-
- // JSP.2.3.5.3, step 2, if either arg is BigDecimal, Float, Double
- // or String (ignoring whether it is value coercable), then coerce
- // to Double and do op
- if (TypeConstants.TYPE_BIG_DOUBLE.equals(boxedFirstArg)
- || TypeConstants.TYPE_BIG_DOUBLE.equals(boxedSecondArg)
- || TypeConstants.TYPE_BOXED_DOUBLE.equals(boxedFirstArg)
- || TypeConstants.TYPE_BOXED_DOUBLE.equals(boxedSecondArg)
- || TypeConstants.TYPE_BOXED_FLOAT.equals(boxedFirstArg)
- || TypeConstants.TYPE_BOXED_FLOAT.equals(boxedSecondArg))
- {
- // TODO: handle case where one is a literal or resolvable string value
- // that containss ".", "e" or "E"
- return validateDouble(firstArg, secondArg);
- }
-
- // JSP.2.3.5.3, step 3, if either arg is a BigInteger, coerce
- // both to BigInteger
- if (TypeConstants.TYPE_BIG_INTEGER.equals(boxedFirstArg)
- || TypeConstants.TYPE_BIG_INTEGER.equals(boxedSecondArg))
- {
- return validateBigInteger(firstArg, secondArg);
- }
-
- // JSP.2.3.5.3, step 4, otherwise try to perform as a Long op
- return validateLong(firstArg, secondArg);
- }
-
- private ValueType performDouble(ValueType firstArg, ValueType secondArg)
- {
- try
- {
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(firstArg.getSignature()));
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(secondArg.getSignature()));
-
- Number secondValue = null;
-
- if (secondArg instanceof LiteralType)
- {
- secondValue = ((LiteralType)secondArg).coerceToNumber(Double.class);
-
- if (secondValue.doubleValue() == 0.0)
- {
- // division by zero
- return null;
- }
- }
-
- Number firstValue = null;
-
- if (firstArg instanceof LiteralType)
- {
- firstValue = ((LiteralType)firstArg).coerceToNumber(Double.class);
- }
-
- if (firstValue != null && secondValue != null)
- {
- return new FloatLiteralType(
- doRealOperation(new Double(firstValue.doubleValue()),
- new Double(secondValue.doubleValue())).doubleValue());
- }
-
- // if we get to here, the coercion is valid, so a Double will be
- // returned
- return new ValueType(Signature.SIG_DOUBLE, IAssignable.ASSIGNMENT_TYPE_RHS);
- }
- catch (TypeCoercionException tce)
- {
- // could not coerce, so null
- return null;
- }
- }
-
- private ValueType performBigInteger(ValueType firstArg, ValueType secondArg)
- {
- try
- {
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(firstArg.getSignature()));
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(secondArg.getSignature()));
-
- // check second arg for zero
- if (secondArg instanceof LiteralType)
- {
- if (((LiteralType)secondArg).coerceToNumber(BigInteger.class).equals(BigInteger.ZERO))
- {
- // division by zero
- return null;
- }
- }
-
- // since one of the args is BigInteger, they are not both literals,
- // so if we get to here, we have a successful mod of two
- // big integers to one big integer
- return new ValueType(TypeConstants.TYPE_BIG_INTEGER, IAssignable.ASSIGNMENT_TYPE_RHS);
- }
- catch (TypeCoercionException tce)
- {
- // no coercion
- return null;
- }
- }
-
- private ValueType performLong(ValueType firstArg, ValueType secondArg)
- {
- try
- {
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(firstArg.getSignature()));
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(secondArg.getSignature()));
-
- Number secondValue = null;
-
- if (secondArg instanceof LiteralType)
- {
- secondValue = ((LiteralType)secondArg).coerceToNumber(Long.class);
-
- if (secondValue.longValue() == 0)
- {
- // division by zero
- return null;
- }
- }
-
- Number firstValue = null;
-
- if (firstArg instanceof LiteralType)
- {
- firstValue = ((LiteralType)firstArg).coerceToNumber(Long.class);
- }
-
- if (firstValue != null && secondValue != null)
- {
- return new IntegerLiteralType(
- doRealOperation(Long.valueOf(firstValue.longValue()),
- Long.valueOf(secondValue.longValue())).longValue());
- }
-
- // if we get to here, the coercion is valid, so a Long will be
- // returned
- return new ValueType(Signature.SIG_LONG, IAssignable.ASSIGNMENT_TYPE_RHS);
- }
- catch (TypeCoercionException tce)
- {
- // could not coerce, so null
- return null;
- }
- }
-
- private Diagnostic validateDouble(ValueType firstArg, ValueType secondArg)
- {
- try
- {
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(firstArg.getSignature()));
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(secondArg.getSignature()));
-
- Number secondValue = null;
-
- if (secondArg instanceof LiteralType)
- {
- secondValue = ((LiteralType)secondArg).coerceToNumber(Double.class);
-
- if (secondValue.doubleValue() == 0.0)
- {
- // division by zero
- return _diagnosticFactory.create_BINARY_OP_POSSIBLE_DIVISION_BY_ZERO();
- }
- }
-
- Number firstValue = null;
-
- if (firstArg instanceof LiteralType)
- {
- firstValue = ((LiteralType)firstArg).coerceToNumber(Double.class);
- }
-
- if (firstValue != null && secondValue != null)
- {
- return _diagnosticFactory.
- create_BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME
- (MODULO, Double.toString(
- firstValue.doubleValue()%secondValue.doubleValue()));
- }
-
- // if we get to here, the coercion is valid, so a Double will be
- // returned and everything is good
- return Diagnostic.OK_INSTANCE;
- }
- catch (TypeCoercionException tce)
- {
- // could not coerce, so error
- return _diagnosticFactory.
- create_BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION(MODULO);
- }
- }
-
- private Diagnostic validateBigInteger(ValueType firstArg, ValueType secondArg)
- {
- try
- {
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(firstArg.getSignature()));
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(secondArg.getSignature()));
-
- // check second arg for zero
- if (secondArg instanceof LiteralType)
- {
- if (((LiteralType)secondArg).coerceToNumber(BigInteger.class).equals(BigInteger.ZERO))
- {
- // division by zero
- return _diagnosticFactory.create_BINARY_OP_POSSIBLE_DIVISION_BY_ZERO();
- }
- }
-
- // since one of the args is BigInteger, they are not both literals,
- // so if we get to here, we have a successful mod of two
- // big integers to one big integer
- return Diagnostic.OK_INSTANCE;
- }
- catch (TypeCoercionException tce)
- {
- // no coercion
- return _diagnosticFactory.
- create_BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION(MODULO);
- }
- }
-
- private Diagnostic validateLong(ValueType firstArg, ValueType secondArg)
- {
- try
- {
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(firstArg.getSignature()));
- TypeCoercer.coerceToNumber(TypeTransformer.transformBoxPrimitives(secondArg.getSignature()));
-
- Number secondValue = null;
-
- if (secondArg instanceof LiteralType)
- {
- secondValue = ((LiteralType)secondArg).coerceToNumber(Long.class);
-
- if (secondValue.longValue() == 0)
- {
- // division by zero
- return _diagnosticFactory.
- create_BINARY_OP_POSSIBLE_DIVISION_BY_ZERO();
- }
- }
-
- Number firstValue = null;
-
- if (firstArg instanceof LiteralType)
- {
- firstValue = ((LiteralType)firstArg).coerceToNumber(Long.class);
- }
-
- if (firstValue != null && secondValue != null)
- {
- return _diagnosticFactory.
- create_BINARY_OP_CONSTANT_EXPRESSION_ALWAYS_EVAL_SAME
- (MODULO, Long.toString(firstValue.longValue()%secondValue.longValue()));
- }
-
- // if we get to here, the coercion is valid, so a Long will be
- // returned
- return Diagnostic.OK_INSTANCE;
- }
- catch (TypeCoercionException tce)
- {
- // could not coerce, so error
- return _diagnosticFactory.
- create_BINARY_OP_COULD_NOT_MAKE_NUMERIC_COERCION(MODULO);
- }
- }
-
- protected Long doRealOperation(Long firstArg, Long secondArg) {
- return Long.valueOf(firstArg.longValue() % secondArg.longValue());
- }
-
- protected Double doRealOperation(Double firstArg, Double secondArg) {
- return new Double(firstArg.doubleValue() % secondArg.doubleValue());
- }
-
- protected BigDecimal doRealOperation(BigDecimal firstArg,
- BigDecimal secondArg) {
- return new BigDecimal(firstArg.doubleValue() % secondArg.doubleValue());
- }
-
- protected String getOperatorName() {
- return MODULO;
- }
-
-}

Back to the top