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