package fr.inria.diversify.transformation.mutation;
import spoon.reflect.code.BinaryOperatorKind;
import spoon.reflect.code.CtBinaryOperator;
import spoon.reflect.factory.Factory;
/**
* User: Simon
* Date: 13/02/14
* Time: 14:46
*/
public class MathMutation extends BinaryOperatorMutation {
public MathMutation() {
name = "math";
type = "mutation";
}
@Override
protected CtBinaryOperator getMutantOperator() {
Factory factory = transformationPoint.getFactory();
CtBinaryOperator mutant = factory.Code().createBinaryOperator(transformationPoint.getLeftHandOperand(), transformationPoint.getRightHandOperand(), transformationPoint.getKind());
mutant.setParent(transformationPoint.getParent());
BinaryOperatorKind kind = transformationPoint.getKind();
if(kind.equals(BinaryOperatorKind.PLUS))
mutant.setKind(BinaryOperatorKind.MINUS);
if(kind.equals(BinaryOperatorKind.MINUS))
mutant.setKind(BinaryOperatorKind.PLUS);
if(kind.equals(BinaryOperatorKind.MUL))
mutant.setKind(BinaryOperatorKind.DIV);
if(kind.equals(BinaryOperatorKind.DIV))
mutant.setKind(BinaryOperatorKind.MUL);
if(kind.equals(BinaryOperatorKind.MOD))
mutant.setKind(BinaryOperatorKind.MUL);
if(kind.equals(BinaryOperatorKind.BITAND))
mutant.setKind(BinaryOperatorKind.BITOR);
if(kind.equals(BinaryOperatorKind.BITOR))
mutant.setKind(BinaryOperatorKind.BITAND);
if(kind.equals(BinaryOperatorKind.SL))
mutant.setKind(BinaryOperatorKind.SR);
if(kind.equals(BinaryOperatorKind.SR))
mutant.setKind(BinaryOperatorKind.SL);
if(kind.equals(BinaryOperatorKind.USR))
mutant.setKind(BinaryOperatorKind.SL);
return mutant;
}
}