class TaskListItem extends ListItem {
    protected boolean isOrderedItem = false;
    protected boolean canChangeMarker = true;

    @Override
    public void getAstExtra(@NotNull StringBuilder out) {
        super.getAstExtra(out);
        if (isOrderedItem) out.append(" isOrderedItem");
        out.append(isItemDoneMarker() ? " isDone" : " isNotDone");
    }

    @Override
    public boolean isParagraphWrappingDisabled(Paragraph node, ListOptions listOptions, DataHolder options) {<FILL_FUNCTION_BODY>}

    public TaskListItem() {
    }

    public TaskListItem(BasedSequence chars) {
        super(chars);
    }

    public TaskListItem(BasedSequence chars, List<BasedSequence> segments) {
        super(chars, segments);
    }

    public TaskListItem(BlockContent blockContent) {
        super(blockContent);
    }

    public TaskListItem(ListItem block) {
        super(block);
        isOrderedItem = block instanceof OrderedListItem;
    }

    @Override
    public void setOpeningMarker(BasedSequence openingMarker) {
        throw new IllegalStateException();
    }

    public boolean isItemDoneMarker() {
        return !markerSuffix.matches("[ ]");
    }

    @Override
    public boolean isOrderedItem() {
        return isOrderedItem;
    }

    public void setOrderedItem(boolean orderedItem) {
        isOrderedItem = orderedItem;
    }

    @Override
    public boolean canChangeMarker() {
        return canChangeMarker;
    }

    public void setCanChangeMarker(boolean canChangeMarker) {
        this.canChangeMarker = canChangeMarker;
    }
}

        assert node.getParent() == this;

        // see if this is the first paragraph child item we handle our own paragraph wrapping for that one
        Node child = getFirstChild();
        while (child != null && !(child instanceof Paragraph)) child = child.getNext();
        return child == node;
    
<methods>public void <init>() ,public void <init>(com.vladsch.flexmark.ast.ListItem) ,public void <init>(com.vladsch.flexmark.util.sequence.BasedSequence) ,public void <init>(com.vladsch.flexmark.util.sequence.BasedSequence, List<com.vladsch.flexmark.util.sequence.BasedSequence>) ,public void <init>(com.vladsch.flexmark.util.ast.BlockContent) ,public boolean canChangeMarker() ,public void getAstExtra(@NotNull StringBuilder) ,public com.vladsch.flexmark.util.ast.Node getLastBlankLineChild() ,public com.vladsch.flexmark.util.sequence.BasedSequence getMarkerSuffix() ,public com.vladsch.flexmark.util.sequence.BasedSequence getOpeningMarker() ,public int getPriority() ,public @NotNull BasedSequence [] getSegments() ,public boolean isContainsBlankLine() ,public boolean isHadBlankAfterItemParagraph() ,public boolean isInTightList() ,public boolean isItemParagraph(com.vladsch.flexmark.ast.Paragraph) ,public boolean isLoose() ,public boolean isOrderedItem() ,public boolean isOwnTight() ,public boolean isParagraphEndWrappingDisabled(com.vladsch.flexmark.ast.Paragraph) ,public boolean isParagraphInTightListItem(com.vladsch.flexmark.ast.Paragraph) ,public boolean isParagraphStartWrappingDisabled(com.vladsch.flexmark.ast.Paragraph) ,public boolean isParagraphWrappingDisabled(com.vladsch.flexmark.ast.Paragraph, com.vladsch.flexmark.parser.ListOptions, com.vladsch.flexmark.util.data.DataHolder) ,public boolean isTight() ,public void setContainsBlankLine(boolean) ,public void setHadBlankAfterItemParagraph(boolean) ,public void setLoose(boolean) ,public void setMarkerSuffix(com.vladsch.flexmark.util.sequence.BasedSequence) ,public void setOpeningMarker(com.vladsch.flexmark.util.sequence.BasedSequence) ,public void setPriority(int) ,public void setTight(boolean) <variables>private boolean containsBlankLine,private boolean hadBlankAfterItemParagraph,protected com.vladsch.flexmark.util.sequence.BasedSequence markerSuffix,protected com.vladsch.flexmark.util.sequence.BasedSequence openingMarker,private int priority,private boolean tight