public PrettyHybridProperty()

in hybrid/src/main/java/jetbrains/jetpad/hybrid/PrettyHybridProperty.java [60:117]


  public PrettyHybridProperty(
      ObservableList<SourceT> source,
      final IndexedTransform<SourceT, Token> read,
      IndexedTransform<Token, SourceT> write,
      Handler<Integer> removeHandler,
      Parser<? extends ModelT> parser,
      PrettyPrinter<? super ModelT> printer,
      ParsingContextFactory parsingContextFactory) {
    mySource = source;
    myWrite = write;
    myRemoveHandler = removeHandler;
    myParser = parser;
    myPrinter = printer;
    myParsingContextFactory = parsingContextFactory;

    inSync(new Runnable() {
      @Override
      public void run() {
        for (int i  = 0; i < mySource.size(); i++) {
          myTokens.add(read.apply(i, mySource.get(i)));
        }
      }
    });
    myValue = parse();

    mySource.addListener(new CollectionListener<SourceT>() {
      @Override
      public void onItemAdded(final CollectionItemEvent<? extends SourceT> event) {
        inSync(new Runnable() {
          @Override
          public void run() {
            myTokens.add(event.getIndex(), read.apply(event.getIndex(), event.getNewItem()));
          }
        });
      }

      @Override
      public void onItemSet(final CollectionItemEvent<? extends SourceT> event) {
        inSync(new Runnable() {
          @Override
          public void run() {
            myTokens.set(event.getIndex(), read.apply(event.getIndex(), event.getNewItem()));
          }
        });
      }

      @Override
      public void onItemRemoved(final CollectionItemEvent<? extends SourceT> event) {
        inSync(new Runnable() {
          @Override
          public void run() {
            myRemoveHandler.handle(event.getIndex());
            myTokens.remove(event.getIndex());
          }
        });
      }
    });
  }