in hybrid/src/main/java/jetbrains/jetpad/hybrid/TextTokenCell.java [83:139]
private CellTrait createTrait() {
return new TokenCellTraits.TokenCellTrait(false) {
@Override
protected CellTrait[] getBaseTraits(Cell cell) {
return new CellTrait[] {
new TokenCellTraits.LeftLeafTokenCellTrait(),
new TokenCellTraits.RightLeafTokenCellTrait(),
TextEditing.validTextEditing(myToken.getValidator(), tokenTextColor(), false)
};
}
@Override
public Object get(final Cell cell, CellTraitPropertySpec<?> spec) {
if (spec == TextEditing.FIRST_ALLOWED) return !noSpaceToLeft();
if (spec == TextEditing.LAST_ALLOWED) return !noSpaceToRight();
if (spec == TextEditing.RT_ON_END) return myToken.isRtOnEnd();
if (spec == TextEditing.EAGER_COMPLETION) return true;
if (myToken.noSpaceToLeft() || myToken.noSpaceToRight()) {
if (spec == ProjectionalSynchronizers.DELETE_ON_EMPTY) return true;
if (spec == CellLists.NO_SPACE_TO_LEFT) return noSpaceToLeft();
if (spec == CellLists.NO_SPACE_TO_RIGHT) return noSpaceToRight();
}
if (spec == TextEditing.AFTER_TYPE) {
return new Supplier<Boolean>() {
@Override
public Boolean get() {
return tokenOperations(cell).afterType(TextTokenCell.this);
}
};
}
if (spec == TextEditing.AFTER_PASTE) {
return new Supplier<Boolean>() {
@Override
public Boolean get() {
return tokenOperations(cell).afterPaste(TextTokenCell.this);
}
};
}
return super.get(cell, spec);
}
@Override
protected void provideProperties(Cell cell, PropertyCollector collector) {
collector.add(CellNavigationController.PAIR_CELL, new Supplier<Cell>() {
@Override
public Cell get() {
return mySync.getPair(TextTokenCell.this);
}
});
super.provideProperties(cell, collector);
}
};
}