The following document contains the results of PMD's CPD 4.1.
File | Line |
---|---|
org/peaseplate/internal/lang/command/AbstractCompareCommand.java | 33 |
org/peaseplate/internal/lang/command/AbstractEqualityCommand.java | 33 |
public AbstractEqualityCommand(TemplateLocator locator, int line, int column, ICommand leftCommand, ICommand rightCommand) { super(locator, line, column, leftCommand, rightCommand); } public abstract String getSign(); /** * @see org.peaseplate.internal.lang.command.ICommand#call(BuildContext) */ public Object call(BuildContext context) throws TemplateRuntimeException { Object result = null; ConversionService conversionService = context.getEngine().getConversionService(); Object left = callLeftCommand(context); Object right = callRightCommand(context); Class<?> leftType = (left != null) ? left.getClass() : Void.class; Class<?> rightType = (right != null) ? right.getClass() : Void.class; try { if ( (leftType == StringBuilder.class) || (rightType == StringBuilder.class) || (leftType == StringBuffer.class) || (rightType == StringBuffer.class) || (leftType == String.class) || (rightType == String.class) ) result = evaluateComparable( conversionService.convert(left, String.class), conversionService.convert(right, String.class) ); else if ((leftType == BigDecimal.class) || (rightType == BigDecimal.class)) result = evaluateComparable( conversionService.convert(left, BigDecimal.class), conversionService.convert(right, BigDecimal.class) ); else if ((leftType == BigInteger.class) || (rightType == BigInteger.class)) result = evaluateComparable( conversionService.convert(left, BigInteger.class), conversionService.convert(right, BigInteger.class) ); else if ( (leftType == double.class) || (leftType == Double.class) || (rightType == double.class) || (rightType == Double.class) ) result = evaluateComparable( conversionService.convert(left, Double.class), conversionService.convert(right, Double.class) ); else if ( (leftType == float.class) || (leftType == Float.class) || (rightType == float.class) || (rightType == Float.class) ) result = evaluateComparable( conversionService.convert(left, Float.class), conversionService.convert(right, Float.class) ); else if ( (leftType == long.class) || (leftType == Long.class) || (rightType == long.class) || (rightType == Long.class) ) result = evaluateComparable( conversionService.convert(left, Long.class), conversionService.convert(right, Long.class) ); else if ( (leftType == int.class) || (leftType == Integer.class) || (rightType == int.class) || (rightType == Integer.class) ) result = evaluateComparable( conversionService.convert(left, Integer.class), conversionService.convert(right, Integer.class) ); else if ( (leftType == char.class) || (leftType == Character.class) || (rightType == char.class) || (rightType == Character.class) ) result = evaluateComparable( conversionService.convert(left, Character.class), conversionService.convert(right, Character.class) ); else if ( (leftType == short.class) || (leftType == Short.class) || (rightType == short.class) || (rightType == Short.class) ) result = evaluateComparable( conversionService.convert(left, Short.class), conversionService.convert(right, Short.class) ); else if ( (leftType == byte.class) || (leftType == Byte.class) || (rightType == byte.class) || (rightType == Byte.class) ) result = evaluateComparable( conversionService.convert(left, Byte.class), conversionService.convert(right, Byte.class) ); else if ( (leftType == boolean.class) || (leftType == Boolean.class) || (rightType == boolean.class) || (rightType == Boolean.class) ) result = evaluateComparable( conversionService.convert(left, Boolean.class), conversionService.convert(right, Boolean.class) ); else if ((leftType == Void.class) && (rightType == Void.class)) result = evaluateNull(); else result = evaluateNonComparable(left, right); } catch (ConversionException e) { if (e.getValue() == left) throw new TemplateRuntimeException( getLeftCommand().getLocator(), getLeftCommand().getLine(), getLeftCommand().getColumn(), "Could not convert left operator to " + e.getType(), e ); else if (e.getValue() == right) throw new TemplateRuntimeException( getRightCommand().getLocator(), getRightCommand().getLine(), getRightCommand().getColumn(), "Could not convert right operator to " + e.getType(), e ); else throw new TemplateRuntimeException( getLocator(), getLine(), getColumn(), "Could not convert operator to " + e.getType(), e ); } return result; } public Boolean evaluateNull() throws TemplateRuntimeException { throw new TemplateRuntimeException( getLocator(), getLine(), getColumn(), "Operation " + getSign() + " not supported on operands both null" ); } public <TYPE> Boolean evaluateComparable(Comparable<TYPE> left, Comparable<TYPE> right) throws TemplateRuntimeException { Class<?> leftType = (left != null) ? left.getClass() : Void.class; Class<?> rightType = (right != null) ? right.getClass() : Void.class; throw new TemplateRuntimeException( getLocator(), getLine(), getColumn(), "Operation " + getSign() + " not supported on operands of type " + leftType + " and " + rightType ); } public Boolean evaluateNonComparable(Object left, Object right) throws TemplateRuntimeException { Class<?> leftType = (left != null) ? left.getClass() : Void.class; Class<?> rightType = (right != null) ? right.getClass() : Void.class; throw new TemplateRuntimeException( getLocator(), getLine(), getColumn(), "Operation " + getSign() + " not supported on operands of type " + leftType + " and " + rightType ); } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "(" + getLeftCommand() + " " + getSign() + " " + getRightCommand() + ")"; } } |