package jetbrains.mps.ide.refactoring;
/*Generated by MPS */
import jetbrains.mps.ide.platform.refactoring.RefactoringAccessEx;
import com.intellij.openapi.components.ApplicationComponent;
import jetbrains.mps.ide.MPSCoreComponents;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.ide.platform.refactoring.ModelElementTargetChooser;
import com.intellij.openapi.project.Project;
import org.jetbrains.mps.openapi.model.SModel;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.ide.platform.refactoring.RefactoringViewAction;
import jetbrains.mps.ide.findusages.model.SearchResults;
import jetbrains.mps.refactoring.framework.RefactoringContext;
import jetbrains.mps.ide.findusages.model.SearchTask;
import jetbrains.mps.ide.project.ProjectHelper;
import com.intellij.openapi.ui.Messages;
import jetbrains.mps.internal.collections.runtime.ListSequence;
import java.util.List;
import jetbrains.mps.ide.findusages.model.SearchResult;
public class RefactoringAccessImpl extends RefactoringAccessEx implements ApplicationComponent {
private static final int MAX_SEARCH_RESULTS = 30000;
public RefactoringAccessImpl(MPSCoreComponents coreComponents) {
}
@Override
public void initComponent() {
RefactoringAccessEx.setInstance(this);
}
@Override
public void disposeComponent() {
RefactoringAccessEx.setInstance(null);
}
@NonNls
@NotNull
@Override
public String getComponentName() {
return "MPS Workbench-specific Refactoring Access implementation";
}
@Override
public ModelElementTargetChooser createTargetChooser(Project project, SModel model) {
ModelOrNodeChooser rv = new ModelOrNodeChooser(project);
rv.select(model);
return rv;
}
@Override
public ModelElementTargetChooser createTargetChooser(Project project, SNode node) {
ModelOrNodeChooser rv = new ModelOrNodeChooser(project);
rv.select(node);
return rv;
}
@Deprecated
public void showRefactoringView(Project project, RefactoringViewAction callback, SearchResults searchResults, boolean hasModelsToGenerate, String name) {
showRefactoringView(project, callback, null, searchResults, null, name);
}
@Deprecated
public void showRefactoringView(RefactoringContext refactoringContext, RefactoringViewAction callback, SearchResults searchResults, boolean hasModelsToGenerate, String name) {
showRefactoringView(refactoringContext, callback, null, searchResults, null, name);
}
@Override
public void showRefactoringView(Project project, RefactoringViewAction refactoringViewAction, Runnable disposeAction, SearchResults searchResults, SearchTask searchTask, String name) {
RefactoringView refactoringView = project.getComponent(RefactoringView.class);
refactoringView.showRefactoringView(project, refactoringViewAction, disposeAction, truncateSearchResults(project, searchResults), searchTask, name);
}
@Override
public void showRefactoringView(RefactoringContext refactoringContext, RefactoringViewAction refactoringViewAction, Runnable disposeAction, SearchResults searchResults, SearchTask searchTask, String name) {
RefactoringView refactoringView = refactoringContext.getSelectedProject().getComponent(RefactoringView.class);
refactoringView.showRefactoringView(refactoringContext, refactoringViewAction, disposeAction, truncateSearchResults(ProjectHelper.toIdeaProject(refactoringContext.getSelectedProject()), searchResults), searchTask);
}
private SearchResults truncateSearchResults(Project project, SearchResults searchResults) {
if (searchResults.getSearchResults().size() > MAX_SEARCH_RESULTS) {
Messages.showWarningDialog(project, "More than " + MAX_SEARCH_RESULTS + " usages found. Only first " + MAX_SEARCH_RESULTS + " results will be displayed.", "Refactor");
SearchResults truncatedSearchResults = new SearchResults();
truncatedSearchResults.getSearchedNodes().addAll(searchResults.getSearchedNodes());
truncatedSearchResults.getSearchResults().addAll(ListSequence.fromList(((List<? extends SearchResult<Object>>) searchResults.getSearchResults())).take(MAX_SEARCH_RESULTS).toListSequence());
return truncatedSearchResults;
}
return searchResults;
}
}