private void rehighlightNode(@NotNull MPSTreeNode node, @NotNull Feature feature) { unhighlightNode(node); SModel model = SModelRepository.getInstance().getModelDescriptor(feature.getModelReference()); if (model instanceof EditableSModel && !(model.isReadOnly())) { if (feature instanceof ModelFeature) { // do not try to compute changes in case we need only model status TreeMessage message = getMessage((ModelFeature) feature); if (message != null) { node.addTreeMessage(message); } return; } EditableSModel emd = (EditableSModel) model; myRegistry.getCurrentDifference(emd).setEnabled(true); ModelChange change = myMap.get(feature); if (change == null) { change = myMap.getAddedAncestorValue(feature); } if (change != null) { node.addTreeMessage(getMessage(change, emd)); } else if (myMap.isAncestorOfAddedFeature(feature)) { node.addTreeMessage(getMessage(FileStatus.MODIFIED)); } } }
public synchronized void dispose() { if (!(myInitialized)) { return; } myInitialized = false; if (myGlobalModelListener != null) { GlobalSModelEventsManager.getInstance().removeGlobalModelListener(myGlobalModelListener); } FileStatusManager.getInstance(myRegistry.getProject()) .removeFileStatusListener(myFileStatusListener); myTree.removeTreeNodeListener(myTreeNodeListener); myMap.removeListener(myFeatureListener); myQueue.dispose(); }
public synchronized void init() { if (myInitialized) { return; } myInitialized = true; myMap.addListener(myFeatureListener); myTree.addTreeNodeListener(myTreeNodeListener); FileStatusManager.getInstance(myRegistry.getProject()) .addFileStatusListener(myFileStatusListener); if (myGlobalModelListener != null) { GlobalSModelEventsManager.getInstance().addGlobalModelListener(myGlobalModelListener); } ModelAccess.instance() .runReadInEDT( new Runnable() { public void run() { registerNodeRecursively(myTree.getRootNode()); } }); }