package jetbrains.mps.lang.structure.pluginSolution.plugin;
/*Generated by MPS */
import jetbrains.mps.smodel.structure.Extension;
import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes;
import jetbrains.mps.openapi.editor.EditorContext;
import org.jetbrains.mps.openapi.model.SNode;
import com.intellij.openapi.application.ApplicationManager;
import org.jetbrains.mps.openapi.module.SRepository;
import java.util.List;
import jetbrains.mps.refactoring.participant.RefactoringParticipant;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.ArrayList;
import jetbrains.mps.lang.core.plugin.RenameReferencesParticipant;
import jetbrains.mps.refactoring.participant.RefactoringUI;
import org.jetbrains.mps.openapi.util.ProgressMonitor;
import jetbrains.mps.progress.EmptyProgressMonitor;
import jetbrains.mps.ide.findusages.model.SearchResults;
import jetbrains.mps.ide.findusages.model.SearchTask;
import jetbrains.mps.refactoring.participant.RefactoringSession;
import org.jetbrains.mps.openapi.module.SearchScope;
import jetbrains.mps.ide.findusages.model.scopes.ModulesScope;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.refactoring.participant.RefactoringSessionImpl;
import java.util.Map;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import jetbrains.mps.ide.platform.actions.core.RefactoringProcessor;
public class ImplicitNodeRenamer_extension extends Extension.Default<_FunctionTypes._return_P4_E0<? extends Boolean, ? super EditorContext, ? super SNode, ? super String, ? super String>> {
public ImplicitNodeRenamer_extension() {
super("jetbrains.mps.lang.structure.NodeRenamer");
}
public _FunctionTypes._return_P4_E0<? extends Boolean, ? super EditorContext, ? super SNode, ? super String, ? super String> get() {
return new _FunctionTypes._return_P4_E0<Boolean, EditorContext, SNode, String, String>() {
public Boolean invoke(final EditorContext context, final SNode node, String oldName, final String newName) {
ApplicationManager.getApplication().invokeLater(new Runnable() {
public void run() {
final SRepository repository = context.getRepository();
final List<? extends RefactoringParticipant<?, ?, SNode, String>> participants = ListSequence.fromListAndArray(new ArrayList<RefactoringParticipant<?, ?, SNode, String>>(), new RenameReferencesParticipant());
final RefactoringUI refactoringUI = new RefactoringUI() {
public void prepare(Runnable task) {
task.run();
}
public void runSearch(final _FunctionTypes._void_P1_E0<? super ProgressMonitor> task) {
task.invoke(new EmptyProgressMonitor());
}
public List<RefactoringParticipant.Option> selectParticipants(List<RefactoringParticipant.Option> options) {
return options;
}
public void showRefactoringView(final Runnable task, String refactoringName, SearchResults searchResults, SearchTask searchTask, RefactoringSession session) {
task.run();
}
};
final List<SNode> initialStates = ListSequence.fromListAndArray(new ArrayList<SNode>(), node);
final SearchScope scope = new ModulesScope(SNodeOperations.getModel(node).getModule());
final RefactoringSessionImpl refactoringSession = new RefactoringSessionImpl();
final _FunctionTypes._return_P1_E0<? extends Map<SNode, String>, ? super Iterable<RefactoringParticipant.ParticipantApplied<?, ?, SNode, String, SNode, String>>> doRefactor = new _FunctionTypes._return_P1_E0<Map<SNode, String>, Iterable<RefactoringParticipant.ParticipantApplied<?, ?, SNode, String, SNode, String>>>() {
public Map<SNode, String> invoke(Iterable<RefactoringParticipant.ParticipantApplied<?, ?, SNode, String, SNode, String>> participantStates) {
Map<SNode, String> m = MapSequence.<SNode, String>fromMapAndKeysArray(new HashMap<SNode, String>(), node).withValues(newName);
return m;
}
};
repository.getModelAccess().executeCommand(new Runnable() {
public void run() {
RefactoringProcessor.performRefactoring(new RefactoringParticipant.CollectingParticipantStateFactory<SNode, String>(), refactoringUI, refactoringSession, repository, scope, "Rename node", participants, initialStates, doRefactor, new _FunctionTypes._void_P0_E0() {
public void invoke() {
refactoringSession.performAllRegistered();
}
});
}
});
}
});
return false;
}
};
}
}