public ParsingHybridProperty()

in hybrid/src/main/java/jetbrains/jetpad/hybrid/ParsingHybridProperty.java [56:121]


  public ParsingHybridProperty(
      Parser<? extends ModelT> parser,
      PrettyPrinter<? super ModelT> printer,
      ObservableList<Token> tokens, ParsingContextFactory parsingContextFactory) {
    myParser = parser;
    myPrinter = printer;
    mySourceTokens = tokens;
    myParsingContextFactory = parsingContextFactory;
    initUpdate();
    myValue = parse();
    updateFromSource(null);
    mySourceTokens.addListener(new CollectionListener<Token>() {
      @Override
      public void onItemAdded(final CollectionItemEvent<? extends Token> event) {
        if (event.getNewItem() instanceof CommentToken) {
          executeInUpdate(new Runnable() {
            @Override
            public void run() {
              myPrettyTokens.add(event.getIndex(), event.getNewItem());
            }
          });
        } else {
          updateFromSource(event);
        }
      }

      @Override
      public void onItemSet(final CollectionItemEvent<? extends Token> event) {
        if (event.getNewItem() instanceof CommentToken) {
          executeInUpdate(new Runnable() {
            @Override
            public void run() {
              myPrettyTokens.set(event.getIndex(), event.getNewItem());
            }
          });
          if (!(event.getOldItem() instanceof CommentToken)) {
            updateFromSource(event);
          }
        } else if (event.getOldItem() instanceof CommentToken) {
          executeInUpdate(new Runnable() {
            @Override
            public void run() {
              myPrettyTokens.set(event.getIndex(), event.getNewItem());
            }
          });
          updateFromSource(event);
        } else {
          updateFromSource(event);
        }
      }

      @Override
      public void onItemRemoved(final CollectionItemEvent<? extends Token> event) {
        if (event.getOldItem() instanceof CommentToken) {
          executeInUpdate(new Runnable() {
            @Override
            public void run() {
              myPrettyTokens.remove(event.getIndex());
            }
          });
        } else {
          updateFromSource(event);
        }
      }
    });
  }