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.PullPushFieldSymptom; 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.BinField; import net.sf.refactorit.classmodel.BinMember; import net.sf.refactorit.refactorings.pullpush.PullPush; import net.sf.refactorit.test.refactorings.NullContext; /** * * @author João Felipe */ public abstract class PullPushFieldRefactoringTool extends PullPushRefactoringTool { protected BinField currentField; public PullPushFieldRefactoringTool(ProjectVCS projectVCS) { super(projectVCS); } @Override public boolean reloadRefactoring() { try { List<BinField> list = new ArrayList<BinField>(1); list.add(currentField); pullPush = new PullPush(new NullContext(getProject()), currentField.getParentType(), list); pullPush.getResolver().setTargetType(currentTarget); return true; } catch (NullPointerException e) { return false; } } @Override public boolean prepareSymptom(Symptom symptom) throws RefactoringException { loadEnvironment(); PullPushFieldSymptom pullPushFieldSymptom = (PullPushFieldSymptom) symptom; currentTarget = getProject().getTypeRefForSourceName(pullPushFieldSymptom.getTargetQualifiedName()).getBinCIType(); BinCIType owner = getProject().getTypeRefForSourceName(pullPushFieldSymptom.getParentQualifiedName()).getBinCIType(); BinMember member = owner.getDeclaredField(pullPushFieldSymptom.getMemberQualifiedName()); if (member == null) { member = getFieldManually(pullPushFieldSymptom.getMemberName(), owner); } currentField = (BinField) member; return reloadRefactoring(); } }