package jetbrains.mps.ide.java.platform.refactorings; /*Generated by MPS */ import jetbrains.mps.openapi.editor.EditorContext; import java.util.List; import com.intellij.openapi.project.Project; import jetbrains.mps.internal.collections.runtime.ListSequence; import jetbrains.mps.nodeEditor.EditorMessage; import jetbrains.mps.nodeEditor.NodeHighlightManager; import jetbrains.mps.nodeEditor.EditorComponent; public abstract class DuplicatesProcessor<T> { protected EditorContext myEditorContext; public DuplicatesProcessor(EditorContext context) { this.myEditorContext = context; } public void process(List<T> duplicates, Project project) { boolean replaceAll = false; for (T duplicate : ListSequence.fromList(duplicates)) { if (!(replaceAll)) { List<EditorMessage> messages = this.createEditorMessages(duplicate); NodeHighlightManager highlightManager = ((EditorComponent) myEditorContext.getEditorComponent()).getHighlightManager(); highlightManager.mark(messages); AskDialog dialog = new AskDialog(project, "Process Duplicates"); dialog.show(); AskDialog.DialogResults shouldSubstitute = dialog.getResult(); for (EditorMessage message : ListSequence.fromList(messages)) { highlightManager.unmark(message); } highlightManager.repaintAndRebuildEditorMessages(); if (shouldSubstitute == AskDialog.DialogResults.Replace) { this.substitute(duplicate); } else if (shouldSubstitute == AskDialog.DialogResults.All) { this.substitute(duplicate); replaceAll = true; } else if (shouldSubstitute == AskDialog.DialogResults.Cancel) { break; } } else { this.substitute(duplicate); } } } protected abstract List<EditorMessage> createEditorMessages(T duplicate); public abstract void substitute(T duplicate); }