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