package jetbrains.mps.vcs.changesmanager.tree; /*Generated by MPS */ import com.intellij.openapi.components.AbstractProjectComponent; import jetbrains.mps.vcs.changesmanager.CurrentDifferenceRegistry; import java.util.Map; import jetbrains.mps.ide.ui.tree.MPSTree; import jetbrains.mps.internal.collections.runtime.MapSequence; import java.util.HashMap; import org.jetbrains.annotations.NotNull; import com.intellij.openapi.project.Project; import jetbrains.mps.ide.projectPane.logicalview.ProjectTree; import jetbrains.mps.ide.findusages.view.treeholder.treeview.UsagesTree; import jetbrains.mps.ide.hierarchy.AbstractHierarchyTree; public class TreeHighlighterFactory extends AbstractProjectComponent { private CurrentDifferenceRegistry myRegistry; private FeatureForestMapSupport myFeatureForestMapSupport; private final Map<MPSTree, TreeHighlighter> myTreeToHighlighter = MapSequence.fromMap(new HashMap<MPSTree, TreeHighlighter>()); public TreeHighlighterFactory(@NotNull Project project, @NotNull CurrentDifferenceRegistry registry, @NotNull FeatureForestMapSupport featureForestMapSupport) { super(project); myRegistry = registry; myFeatureForestMapSupport = featureForestMapSupport; } public void highlightTreeIfNeeded(MPSTree tree) { TreeHighlighter highlighter = null; if (tree instanceof ProjectTree) { highlighter = new TreeHighlighter(myRegistry, myFeatureForestMapSupport, tree, new ProjectTreeFeatureExtractor(), true); } else if (tree instanceof UsagesTree) { highlighter = new TreeHighlighter(myRegistry, myFeatureForestMapSupport, tree, new UsagesTreeFeatureExtractor(), false); } else if (tree instanceof AbstractHierarchyTree) { highlighter = new TreeHighlighter(myRegistry, myFeatureForestMapSupport, tree, new HierarchyFeatureExtractor(), false); } if (highlighter != null) { highlighter.init(); synchronized (myTreeToHighlighter) { MapSequence.fromMap(myTreeToHighlighter).put(tree, highlighter); } } } public void unhighlightTree(MPSTree tree) { synchronized (myTreeToHighlighter) { if (MapSequence.fromMap(myTreeToHighlighter).containsKey(tree)) { MapSequence.fromMap(myTreeToHighlighter).get(tree).dispose(); MapSequence.fromMap(myTreeToHighlighter).removeKey(tree); } } } public static TreeHighlighterFactory getInstance(Project project) { return project.getComponent(TreeHighlighterFactory.class); } }