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());
}
});
}
});
}