private ShrinkStep wrapChildShrink()

in src/main/java/org/jetbrains/jetCheck/StructureNode.java [97:136]


  private ShrinkStep wrapChildShrink(int index, @Nullable ShrinkStep step) {
    if (step == null) return shrinkChild(index - 1);

    NodeId oldChild = children.get(index).id;

    return new ShrinkStep() {

      @Override
      List<?> getEqualityObjects() {
        return Collections.singletonList(step);
      }

      @Nullable
      @Override
      StructureNode apply(StructureNode root) {
        return step.apply(root);
      }

      @Override
      ShrinkStep onSuccess(StructureNode smallerRoot) {
        StructureNode inheritor = (StructureNode)Objects.requireNonNull(smallerRoot.findChildById(id));
        int nextIndex = Math.min(index, inheritor.children.size() - 1);
        if (inheritor.children.get(nextIndex).id != oldChild) {
          return inheritor.shrink();
        }
        
        return inheritor.wrapChildShrink(nextIndex, step.onSuccess(smallerRoot));
      }

      @Override
      ShrinkStep onFailure() {
        return wrapChildShrink(index, step.onFailure());
      }

      @Override
      public String toString() {
        return "-" + step.toString();
      }
    };
  }