Esempio n. 1
0
 /**
  * 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);
 }
Esempio n. 2
0
/** 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;
        }
      };
    }
  }
}