package fr.inria.diversify.processor.main;
import fr.inria.diversify.diversification.InputProgram;
import spoon.reflect.code.CtCase;
import spoon.reflect.code.CtCatch;
import spoon.reflect.code.CtCodeSnippetStatement;
import spoon.reflect.declaration.CtExecutable;
/**
* User: Simon
* Date: 17/06/15
* Time: 10:05
*/
public class CatchProcessor extends AbstractLoggingInstrumenter<CtCatch> {
public CatchProcessor(InputProgram inputProgram) {
super(inputProgram);
}
@Override
public boolean isToBeProcessed(CtCatch candidate) {
return candidate.getParent(CtExecutable.class) != null;
}
@Override
public void process(CtCatch element) {
int methodId = methodId(getMethod(element));
int localId = getLocalId(element);
String snippet = getLogger() + ".writeCatch(Thread.currentThread(),\"" + methodId + "\",\""
+ localId + "\"," + element.getParameter().getSimpleName() + ")";
CtCodeSnippetStatement snippetStmt = getFactory().Code().createCodeSnippetStatement(snippet);
element.getBody().insertBegin(snippetStmt);
}
}