package jetbrains.mps.vcs.changesmanager.editor;
/*Generated by MPS */
import com.intellij.openapi.components.AbstractProjectComponent;
import java.util.Map;
import jetbrains.mps.nodeEditor.EditorComponent;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import com.intellij.util.messages.MessageBusConnection;
import com.intellij.openapi.project.Project;
import jetbrains.mps.nodeEditor.highlighter.EditorComponentCreateListener;
import org.jetbrains.annotations.NotNull;
import jetbrains.mps.nodeEditor.NodeEditorComponent;
import jetbrains.mps.nodeEditor.InspectorTool;
public class EditorHighlighterFactory extends AbstractProjectComponent {
private Map<EditorComponent, EditorHighlighter> myEditorsHighlighters = MapSequence.fromMap(new HashMap<EditorComponent, EditorHighlighter>());
private MessageBusConnection myMessageBusConnection;
public EditorHighlighterFactory(Project project) {
super(project);
}
@Override
public void projectOpened() {
myMessageBusConnection = myProject.getMessageBus().connect();
myMessageBusConnection.subscribe(EditorComponentCreateListener.EDITOR_COMPONENT_CREATION, new EditorHighlighterFactory.MyEditorComponentCreateListener());
}
@Override
public void projectClosed() {
myMessageBusConnection.disconnect();
}
private void addHighighlighterIfNeeded(@NotNull EditorComponent editorComponent) {
if (editorComponent instanceof NodeEditorComponent || editorComponent == myProject.getComponent(InspectorTool.class).getInspector()) {
MapSequence.fromMap(myEditorsHighlighters).put(editorComponent, new EditorHighlighter(myProject, editorComponent));
}
}
private void disposeHighlighterIfNeeded(@NotNull EditorComponent editorComponent) {
if (MapSequence.fromMap(myEditorsHighlighters).containsKey(editorComponent)) {
MapSequence.fromMap(myEditorsHighlighters).get(editorComponent).dispose();
MapSequence.fromMap(myEditorsHighlighters).removeKey(editorComponent);
}
}
public EditorHighlighter getHighlighter(@NotNull EditorComponent editorComponent) {
return MapSequence.fromMap(myEditorsHighlighters).get(editorComponent);
}
private class MyEditorComponentCreateListener implements EditorComponentCreateListener {
public MyEditorComponentCreateListener() {
}
@Override
public void editorComponentCreated(@NotNull EditorComponent editorComponent) {
addHighighlighterIfNeeded(editorComponent);
}
@Override
public void editorComponentDisposed(@NotNull EditorComponent editorComponent) {
disposeHighlighterIfNeeded(editorComponent);
}
}
}