package jetbrains.mps.lang.editor.diagram.tests; /*Generated by MPS */ import jetbrains.jetpad.mapper.Mapper; import org.jetbrains.mps.openapi.model.SNode; import jetbrains.mps.nodeEditor.EditorComponent; import java.lang.reflect.InvocationTargetException; import jetbrains.mps.internal.collections.runtime.ListSequence; import java.util.ArrayList; import jetbrains.mps.openapi.editor.message.SimpleEditorMessage; import jetbrains.mps.ide.editor.checkers.ModelProblemMessage; import jetbrains.mps.errors.MessageStatus; import jetbrains.mps.openapi.editor.message.EditorMessageOwner; import jetbrains.mps.smodel.ModelAccess; import jetbrains.mps.openapi.editor.cells.EditorCell; import jetbrains.mps.nodeEditor.cells.CellFinderUtil; import jetbrains.mps.nodeEditor.cells.jetpad.AbstractJetpadCell; import java.awt.image.BufferedImage; import jetbrains.mps.baseLanguage.closures.runtime.Wrappers; import jetbrains.mps.nodeEditor.cells.jetpad.DiagramCell; public class DecoratorTestRunner { public static Mapper prepareAndGetMapper(SNode node, EditorComponent editorComponent, Class cellClass) throws InterruptedException, InvocationTargetException { editorComponent.getHighlightManager().mark(ListSequence.fromListAndArray(new ArrayList<SimpleEditorMessage>(), new ModelProblemMessage(node, MessageStatus.ERROR, null, "error", new EditorMessageOwner() {}))); ModelAccess.instance().flushEventQueue(); EditorCell cell = CellFinderUtil.findChildByClass(editorComponent.getRootCell(), cellClass, true); if (cell instanceof AbstractJetpadCell) { ((AbstractJetpadCell) cell).paint(new BufferedImage(cell.getWidth(), cell.getHeight(), BufferedImage.TYPE_INT_RGB).getGraphics()); } return getMapper(node, editorComponent); } public static Mapper getMapper(final SNode node, EditorComponent editorComponent) { final Wrappers._T<Mapper<? super SNode, ?>> descendantMapper = new Wrappers._T<Mapper<? super SNode, ?>>(); final DiagramCell diagramCell = CellFinderUtil.findChildByClass(editorComponent.getRootCell(), DiagramCell.class, true); if (diagramCell == null) { return null; } ModelAccess.instance().runReadAction(new Runnable() { public void run() { descendantMapper.value = diagramCell.getDecorationRootMapper().getDescendantMapper(node); } }); return descendantMapper.value; } }