/** * Create a model with a tree of nodes. * * <p>It's an instance method as I envision model to be owned by this class, which would keep * extra info about created model (e.g. number of initial nodes to get rid of constants like * (3*5*2 + 3*5 + 3) from the tests code * * @param nodesAtLevel number of child elements for each parent (i.e. of previous level) element. * Each node at level i has nodesAtLevel[i] children */ public SModel createModel(@Nullable int... nodesAtLevel) { final SNode top = createNode(nodesAtLevel); final jetbrains.mps.smodel.SModel modelData = new jetbrains.mps.smodel.SModel( new SModelReference( new ModuleReference("M", ModuleId.regular()), SModelId.generate(), "m")); for (SNode c : top.getChildren(ourRole)) { modelData.addRootNode(c); } assert myNeedEditableModel; return myModel = new TestModelBase(modelData); }
/** Igor Alshannikov May 31, 2007 */ public class AuxilaryRuntimeModel implements ModelOwner, CoreComponent { private static final SModelFqName myModelFqName = new SModelFqName("" + System.currentTimeMillis(), "$orphan-stuff$"); private static final SModelReference MY_MODEL_REFERENCE = new SModelReference(myModelFqName, SModelId.generate()); private static AuxilaryRuntimeModel INSTANCE; public AuxilaryRuntimeModel(SModelRepository repository) { ourInstance = new AuxModelDescriptor(); } private final SModelDescriptor ourInstance; public static SModelDescriptor getDescriptor() { return INSTANCE.ourInstance; } public static boolean isAuxModel(SModel model) { if (model == null) return false; SModelDescriptor descriptor = getDescriptor(); return model.getModelDescriptor() == descriptor; } @Override public void init() { if (INSTANCE != null) { throw new IllegalStateException("double initialization"); } INSTANCE = this; SModelRepository.getInstance().registerModelDescriptor(ourInstance, this); } @Override public void dispose() { ModelAccess.instance() .runWriteAction( new Runnable() { @Override public void run() { SModelRepository.getInstance() .unRegisterModelDescriptor(ourInstance, AuxilaryRuntimeModel.this); } }); INSTANCE = null; } private static class AuxModelDescriptor extends BaseSpecialModelDescriptor { public AuxModelDescriptor() { super(AuxilaryRuntimeModel.MY_MODEL_REFERENCE, false); } protected SModel createModel() { return new SModel(getSModelReference()) { protected void performUndoableAction(SNodeUndoableAction action) { if (!UndoHelper.getInstance().needRegisterUndo(this)) return; UndoHelper.getInstance().addUndoableAction(action); } protected boolean canFireEvent() { return false; } }; } } }