private JCExpression transformOverridableBinaryOperator(Tree.BinaryOperatorExpression op, ProducedType leftType, ProducedType rightType) {
OperatorTranslation operator = Operators.getOperator(op.getClass());
if (operator == null) {
return make().Erroneous();
}
<BUG>boolean optimised = operator.isOptimisable(op, this);
JCExpression left = transformExpression(op.getLeftTerm(), getBoxingStrategy(optimised), leftType);

return transformOverridableBinaryOperator(op, operator, optimised, left, rightType);
</BUG>
}

private JCExpression transformOverridableBinaryOperator(Tree.BinaryOperatorExpression op, ProducedType leftType, ProducedType rightType) {
OperatorTranslation operator = Operators.getOperator(op.getClass());
if (operator == null) {
return make().Erroneous();
}
OptimisationStrategy optimisationStrategy = operator.getOptimisationStrategy(op, this);
JCExpression left = transformExpression(op.getLeftTerm(), optimisationStrategy.getBoxingStrategy(), leftType);
return transformOverridableBinaryOperator(op, operator, optimisationStrategy, left, rightType);
}
