package jetbrains.mps.idea.core.refactoring;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.search.searches.ReferencesSearch;
import jetbrains.mps.findUsages.UsagesList;
import jetbrains.mps.ide.findusages.model.SearchResult;
import jetbrains.mps.ide.findusages.model.SearchResults;
import jetbrains.mps.ide.project.ProjectHelper;
import jetbrains.mps.idea.core.psi.impl.MPSPsiNode;
import jetbrains.mps.idea.core.psi.impl.MPSPsiProvider;
import jetbrains.mps.refactoring.framework.IRefactoring;
import jetbrains.mps.refactoring.framework.IRefactoringTarget;
import jetbrains.mps.refactoring.framework.RefactoringContext;
import jetbrains.mps.refactoring.framework.RefactoringUtil;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.model.SNode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
/**
* danilla 6/3/13
*/
public class PsiRenameRefactoringWrapper extends PsiAwareRefactoring {
public PsiRenameRefactoringWrapper() {
super(RefactoringUtil.getRefactoringByClassName("jetbrains.mps.lang.core.refactorings.Rename"));
}
protected PsiRenameRefactoringWrapper(IRefactoring base) {
super(base);
}
@Override
public void refactor(RefactoringContext refactoringContext) {
baseRefactoring.refactor(refactoringContext);
UsagesList usages = refactoringContext.getUsages();
if (!(usages instanceof SearchResults)) {
return;
}
SearchResults<SNode> searchResults = (SearchResults<SNode>) usages;
String newName = (String) refactoringContext.getParameter("newName");
for (SearchResult<SNode> result : searchResults.getSearchResults()) {
if (!(result instanceof PsiSearchResult)) continue;
PsiReference psiRef = ((PsiSearchResult) result).getReference();
psiRef.handleElementRename(newName);
}
}
}