private CellTrait createTrait()

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