Class MultiTextEdit

  • Direct Known Subclasses:
    MultiTextEditWithProgress

    public class MultiTextEdit
    extends TextEdit
    A multi-text edit can be used to aggregate several edits into one edit. The edit itself doesn't modify a document.

    Clients are allowed to implement subclasses of a multi-text edit.Subclasses must implement doCopy() to ensure the a copy of the right type is created. Not implementing doCopy() in subclasses will result in an assertion failure during copying.

    Since:
    3.0
    • Constructor Detail

      • MultiTextEdit

        public MultiTextEdit()
        Creates a new MultiTextEdit. The range of the edit is determined by the range of its children. Adding this edit to a parent edit sets its range to the range covered by its children. If the edit doesn't have any children its offset is set to the parent's offset and its length is set to 0.
      • MultiTextEdit

        public MultiTextEdit​(int offset,
                             int length)
        Creates a new MultiTextEdit for the given range. Adding a child to this edit which isn't covered by the given range will result in an exception.
        Parameters:
        offset - the edit's offset
        length - the edit's length.
        See Also:
        TextEdit.addChild(TextEdit), TextEdit.addChildren(TextEdit[])
      • MultiTextEdit

        protected MultiTextEdit​(MultiTextEdit other)
    • Method Detail

      • checkIntegrity

        protected void checkIntegrity()
                               throws MalformedTreeException
        Checks the edit's integrity.

        Note that this method should only be called by the edit framework and not by normal clients.

        This default implementation does nothing. Subclasses may override if needed.

        Throws:
        MalformedTreeException - if the edit isn't in a valid state and can therefore not be executed
      • getOffset

        public final int getOffset()
        Description copied from class: TextEdit
        Returns the offset of the edit. An offset is a 0-based character index. Returns -1 if the edit is marked as deleted.
        Overrides:
        getOffset in class TextEdit
        Returns:
        the offset of the edit
      • getLength

        public final int getLength()
        Description copied from class: TextEdit
        Returns the length of the edit. Returns -1 if the edit is marked as deleted.
        Overrides:
        getLength in class TextEdit
        Returns:
        the length of the edit
      • covers

        public final boolean covers​(TextEdit other)
        Description copied from class: TextEdit
        Returns true if the edit covers the given edit other. It is up to the concrete text edit to decide if a edit of length zero can cover another edit.
        Overrides:
        covers in class TextEdit
        Parameters:
        other - the other edit
        Returns:
        true if the edit covers the other edit; otherwise false is returned.
      • canZeroLengthCover

        protected boolean canZeroLengthCover()
        Description copied from class: TextEdit
        Returns true if an edit with length zero can cover another edit. Returns false otherwise.
        Overrides:
        canZeroLengthCover in class TextEdit
        Returns:
        whether an edit of length zero can cover another edit
      • doCopy

        protected TextEdit doCopy()
        Description copied from class: TextEdit
        Creates and returns a copy of this edit. The copy method should be implemented in a way so that the copy can executed without causing any harm to the original edit. Implementors of this method are responsible for creating deep or shallow copies of referenced object to fulfill this requirement.

        Implementers of this method should use the copy constructor Edit#Edit(Edit source) to initialize the edit part of the copy. Implementors aren't responsible to actually copy the children or to set the right parent.

        This method should not be called from outside the framework. Please use copy to create a copy of a edit tree.
        Specified by:
        doCopy in class TextEdit
        Returns:
        a copy of this edit.
        See Also:
        TextEdit.copy(), TextEdit.postProcessCopy(TextEditCopier), TextEditCopier
      • accept0

        protected void accept0​(TextEditVisitor visitor)
        Description copied from class: TextEdit
        Accepts the given visitor on a type-specific visit of the current edit. This method must be implemented in all concrete text edits.

        General template for implementation on each concrete TextEdit class:

         
         boolean visitChildren= visitor.visit(this);
         if (visitChildren) {
            acceptChildren(visitor);
         }
         
         
        Note that the caller (accept) takes care of invoking visitor.preVisit(this) and visitor.postVisit(this).
        Specified by:
        accept0 in class TextEdit
        Parameters:
        visitor - the visitor object