package fr.inria.diversify.sosie.logger.processor; import fr.inria.diversify.transformation.Transformation; import spoon.reflect.code.CtBlock; import spoon.reflect.code.CtStatement; import spoon.reflect.cu.CompilationUnit; import spoon.reflect.cu.SourcePosition; import spoon.reflect.declaration.CtConstructor; import spoon.reflect.declaration.CtExecutable; import java.util.List; /** * Created by marodrig on 25/11/2014. */ @Deprecated public class DepthOnlyMethodInstrumenter extends AbstractLoggingInstrumenter<CtExecutable> { public DepthOnlyMethodInstrumenter(List<Transformation> transformations) { super(transformations); } /* @Override public boolean isToBeProcessed(CtExecutable candidate) { return candidate instanceof CtMethod || candidate instanceof CtConstructor; }*/ @Override public void process(CtExecutable candidate) { CtBlock body = candidate.getBody(); if ( body == null ) return; int bodySize = body.getStatements().size(); if ( bodySize == 0 || (candidate instanceof CtConstructor && bodySize <= 1) ) return; CtStatement stmt; stmt = candidate instanceof CtConstructor ? body.getStatement(1) : body.getStatement(0); if ( stmt == null ) return; String id = idFor(getClass(stmt).getQualifiedName() + "." + candidate.getSignature()); String snippet= "\ttry{\n\t" + getLogName() + ".depthOnlyMethodCall(Thread.currentThread());\n"; SourcePosition sp = stmt.getPosition(); CompilationUnit compileUnit = sp.getCompilationUnit(); int index; if(stmt.getPosition().getLine() == candidate.getPosition().getLine()) { index = sp.getSourceStart(); } else { index = compileUnit.beginOfLineIndex(sp.getSourceStart()); } // compileUnit.addSourceCodeFragment(new SourceCodeFragment(index, snippet, 0)); sp = body.getLastStatement().getPosition(); compileUnit = sp.getCompilationUnit(); // compileUnit.addSourceCodeFragment(new SourceCodeFragment(sp.getSourceEnd()+2 , // "\n" + "\t}\n\tfinally{"+getLogName()+".methodOut(Thread.currentThread()); }", 0)); } }