package br.uff.ic.gems.peixeespadacliente.tool;
import br.uff.ic.gems.peixeespadacliente.exception.RefactoringException;
import br.uff.ic.gems.peixeespadacliente.model.ProjectVCS;
import br.uff.ic.gems.peixeespadacliente.symptom.PullPushMethodSymptom;
import br.uff.ic.gems.peixeespadacliente.symptom.Symptom;
import java.util.ArrayList;
import java.util.List;
import net.sf.refactorit.classmodel.BinCIType;
import net.sf.refactorit.classmodel.BinMember;
import net.sf.refactorit.classmodel.BinMethod;
import net.sf.refactorit.refactorings.pullpush.PullPush;
import net.sf.refactorit.test.refactorings.NullContext;
/**
*
* @author João Felipe
*/
public abstract class PullPushMethodRefactoringTool extends PullPushRefactoringTool {
protected BinMethod currentMethod;
public PullPushMethodRefactoringTool(ProjectVCS projectVCS) {
super(projectVCS);
}
@Override
public boolean reloadRefactoring() {
try {
List<BinMethod> list = new ArrayList<BinMethod>(1);
list.add(currentMethod);
pullPush = new PullPush(new NullContext(getProject()), currentMethod.getParentType(), list);
pullPush.getResolver().setTargetType(currentTarget);
return true;
} catch (NullPointerException e) {
return false;
}
}
@Override
public boolean prepareSymptom(Symptom symptom) throws RefactoringException {
loadEnvironment();
// reloadEnv();
PullPushMethodSymptom pullPushMethodSymptom = (PullPushMethodSymptom) symptom;
currentTarget = getProject().getTypeRefForSourceName(pullPushMethodSymptom.getTargetQualifiedName()).getBinCIType();
BinCIType owner = getProject().getTypeRefForSourceName(pullPushMethodSymptom.getParentQualifiedName()).getBinCIType();
BinMember member = owner.getDeclaredMethod(pullPushMethodSymptom.getMemberName(), pullPushMethodSymptom.getBinParameters());
if (member == null) {
member = getMethodManually(pullPushMethodSymptom.getMemberName(), owner, pullPushMethodSymptom.getBinParameters());
}
currentMethod = (BinMethod) member;
return reloadRefactoring();
}
}