Class TextRegion
- java.lang.Object
-
- net.sourceforge.pmd.lang.document.TextRegion
-
- All Implemented Interfaces:
Comparable<TextRegion>
public final class TextRegion extends Object implements Comparable<TextRegion>
A contiguous range of text in aTextDocument
. Empty regions may be thought of like caret positions in an IDE. An empty region at offsetn
does not contain the character at offsetn
in the document, but if it were a caret, typing a characterc
would makec
the character at offsetn
in the document.Line and column information may be added by
TextDocument.toLocation(TextRegion)
.Regions are not bound to a specific document, keeping a reference to them does not prevent the document from being garbage-collected.
Regions are represented as a simple offset+length tuple. In a document, valid start offsets range from 0 to
TextDocument.getLength()
(inclusive). The sumstartOffset + length
must range fromstartOffset
togetLength()
(inclusive).Those rules make the region starting at
TextDocument.getLength()
with length 0 a valid region (the caret position at the end of the document).For example, for a document of length 1 (
"c"
), there are only three valid regions:[[c : caret position at offset 0 (empty region) [c[ : range containing the character c[[ : caret position at offset 1 (empty region)
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static TextRegion
caretAt(int startOffset)
Builds a new region with zero length and placed at the given offset.int
compareTo(@NonNull TextRegion o)
Compares the start offset, then the length of a region.boolean
contains(int offset)
Returns true if this region contains the character at the given offset.boolean
contains(TextRegion other)
Returns true if this region contains the entirety of the other region.boolean
equals(Object o)
static TextRegion
fromBothOffsets(int startOffset, int endOffset)
Builds a new region from start and end offset.static TextRegion
fromOffsetLength(int startOffset, int length)
Builds a new region from offset and length.int
getEndOffset()
0-based, exclusive index.int
getLength()
Returns the length of the region in characters.int
getStartOffset()
0-based, inclusive index.TextRegion
growLeft(int delta)
Returns a region that ends at the same point, but starts 'delta' characters before this region.TextRegion
growRight(int delta)
Returns a region that starts at the same point, but ends 'delta' characters after this region.int
hashCode()
static @Nullable TextRegion
intersect(TextRegion r1, TextRegion r2)
Computes the intersection of this region with the other.boolean
isEmpty()
Returns true if the region contains no characters.static boolean
isValidRegion(int startOffset, int endOffset, TextDocument doc)
Checks that the parameters are a valid region, this is provided to debug, will be a noop unless assertions are enabled.boolean
overlaps(TextRegion other)
Returns true if this region overlaps the other region by at least one character.String
toString()
static TextRegion
union(TextRegion r1, TextRegion r2)
Computes the union of this region with the other.
-
-
-
Method Detail
-
getStartOffset
public int getStartOffset()
0-based, inclusive index.
-
getEndOffset
public int getEndOffset()
0-based, exclusive index.
-
getLength
public int getLength()
Returns the length of the region in characters. This is the difference between start offset and end offset. All characters have length 1, including'\t'
. The sequence"\r\n"
has length 2 and not 1.
-
isEmpty
public boolean isEmpty()
Returns true if the region contains no characters. In that case it can be viewed as a caret position, and e.g. used for text insertion.
-
contains
public boolean contains(int offset)
Returns true if this region contains the character at the given offset. Note that a region with length zero does not even contain the character at its start offset.- Parameters:
offset
- Offset of a character
-
contains
public boolean contains(TextRegion other)
Returns true if this region contains the entirety of the other region. Any region contains itself.- Parameters:
other
- Other region
-
overlaps
public boolean overlaps(TextRegion other)
Returns true if this region overlaps the other region by at least one character. This is a symmetric, reflexive relation.- Parameters:
other
- Other region
-
growLeft
public TextRegion growLeft(int delta)
Returns a region that ends at the same point, but starts 'delta' characters before this region. If the delta is negative, then this shifts the start of the region to the right (but the end stays fixed).- Throws:
AssertionError
- If the parameter cannot produce a valid region
-
growRight
public TextRegion growRight(int delta)
Returns a region that starts at the same point, but ends 'delta' characters after this region. If the delta is negative, then this shifts the end of the region to the left (but the start stays fixed).- Throws:
AssertionError
- If the delta is negative and less than the length of this region
-
intersect
public static @Nullable TextRegion intersect(TextRegion r1, TextRegion r2)
Computes the intersection of this region with the other. This is the largest region that this region and the parameter both contain. It may have length zero, or not exist (if the regions are completely disjoint).- Returns:
- The intersection, if it exists
-
union
public static TextRegion union(TextRegion r1, TextRegion r2)
Computes the union of this region with the other. This is the smallest region that contains both this region and the parameter.- Returns:
- The union of both regions
-
fromOffsetLength
public static TextRegion fromOffsetLength(int startOffset, int length)
Builds a new region from offset and length.- Throws:
AssertionError
- If either parameter is negative
-
fromBothOffsets
public static TextRegion fromBothOffsets(int startOffset, int endOffset)
Builds a new region from start and end offset.- Parameters:
startOffset
- Start offsetendOffset
- End offset- Throws:
AssertionError
- If either offset is negative, or the two offsets are not ordered
-
caretAt
public static TextRegion caretAt(int startOffset)
Builds a new region with zero length and placed at the given offset.- Parameters:
startOffset
- Offset for start and end of the position.- Throws:
AssertionError
- If the offset is negative
-
isValidRegion
public static boolean isValidRegion(int startOffset, int endOffset, TextDocument doc)
Checks that the parameters are a valid region, this is provided to debug, will be a noop unless assertions are enabled.
-
compareTo
public int compareTo(@NonNull TextRegion o)
Compares the start offset, then the length of a region.- Specified by:
compareTo
in interfaceComparable<TextRegion>
-
-