package fr.inria.diversify.sosie.logger.processor; import fr.inria.diversify.util.Log; import spoon.reflect.code.*; import spoon.reflect.reference.CtFieldReference; import spoon.reflect.visitor.CtScanner; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; /** * Created by Simon on 16/10/14. */ @Deprecated public class FieldReferenceVisitor extends CtScanner { protected Map<CtFieldReference,String> fields; protected Set<CtFieldReference> after; public FieldReferenceVisitor() { fields = new HashMap<>(); after = new HashSet<>(); } public <T, A extends T> void visitCtAssignment(CtAssignment<T, A> assignement) { if(assignement.getAssigned() instanceof CtFieldAccess) after.add(((CtFieldAccess) assignement.getAssigned()).getVariable()); super.visitCtAssignment(assignement); } @Override public <T> void visitCtFieldAccess(CtFieldAccess<T> targetedAccess) { if(targetedAccess.getTarget() != null && !(targetedAccess.getTarget() instanceof CtThisAccess)) { if(targetedAccess.getTarget().getType() == null) Log.debug(""); if(targetedAccess.getTarget().getType() != null && targetedAccess.getTarget().getType().isPrimitive()) { Log.debug(""); } } if(!targetedAccess.toString().startsWith("super")) fields.put(((CtFieldReference)targetedAccess.getVariable()),targetedAccess.toString()); super.visitCtFieldAccess(targetedAccess); } // public <T> void visitCtTargetedAccess(CtTargetedAccess<T> targetedAccess) { // if(targetedAccess.getTarget() != null && !(targetedAccess.getTarget() instanceof CtThisAccess)) { // if(targetedAccess.getTarget().getType() == null) // Log.debug(""); // if(targetedAccess.getTarget().getType() != null && targetedAccess.getTarget().getType().isPrimitive()) { // Log.debug(""); // } // } // if(!targetedAccess.toString().startsWith("super")) // fields.put(((CtFieldReference)targetedAccess.getVariable()),targetedAccess.toString()); // // super.visitCtTargetedAccess(targetedAccess); // } public <R> void visitCtReturn(CtReturn<R> returnStatement) { super.visitCtReturn(returnStatement); after.clear(); } public Map<CtFieldReference, String> getFields() { return fields; } public Set<CtFieldReference> getAfter() { return after; } }