|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.eclipse.cdt.internal.ui.text.CHeuristicScanner
public final class CHeuristicScanner
Utility methods for heuristic based C manipulations in an incomplete C source file.
An instance holds some internal position in the document and is therefore not threadsafe.
Field Summary | |
---|---|
static int |
NOT_FOUND
Returned by all methods when the requested position could not be found, or if a BadLocationException was thrown while scanning. |
static int |
UNBOUND
Special bound parameter that means either -1 (backward scanning) or fDocument.getLength() (forward scanning). |
Fields inherited from interface org.eclipse.cdt.internal.ui.text.Symbols |
---|
TokenARROW, TokenBREAK, TokenCASE, TokenCATCH, TokenCLASS, TokenCOLON, TokenCOMMA, TokenDEFAULT, TokenDELETE, TokenDO, TokenDOT, TokenDOUBLECOLON, TokenELSE, TokenENUM, TokenEOF, TokenEQUAL, TokenFOR, TokenGOTO, TokenGREATERTHAN, TokenIDENT, TokenIF, TokenLBRACE, TokenLBRACKET, TokenLESSTHAN, TokenLPAREN, TokenMINUS, TokenNAMESPACE, TokenNEW, TokenOTHER, TokenPRIVATE, TokenPROTECTED, TokenPUBLIC, TokenQUESTIONMARK, TokenRBRACE, TokenRBRACKET, TokenRETURN, TokenRPAREN, TokenSEMICOLON, TokenSHIFTRIGHT, TokenSTATIC, TokenSTRUCT, TokenSWITCH, TokenTILDE, TokenTRY, TokenUNION, TokenVIRTUAL, TokenWHILE |
Constructor Summary | |
---|---|
CHeuristicScanner(org.eclipse.jface.text.IDocument document)
Calls this(document, ICPartitions.C_PARTITIONING, IDocument.DEFAULT_CONTENT_TYPE) . |
|
CHeuristicScanner(org.eclipse.jface.text.IDocument document,
java.lang.String partitioning,
java.lang.String partition)
Creates a new instance. |
Method Summary | |
---|---|
int |
findClosingPeer(int start,
char openingPeer,
char closingPeer)
Returns the position of the closing peer character (forward search). |
int |
findNonWhitespaceBackward(int position,
int bound)
Finds the highest position in fDocument such that the position is <= position
and > bound and Character.isWhitespace(fDocument.getChar(pos)) evaluates to false
and the position is in the default partition. |
int |
findNonWhitespaceForward(int position,
int bound)
Finds the smallest position in fDocument such that the position is >= position
and < bound and Character.isWhitespace(fDocument.getChar(pos)) evaluates to false
and the position is in the default partition. |
int |
findNonWhitespaceForwardInAnyPartition(int position,
int bound)
Finds the smallest position in fDocument such that the position is >= position
and < bound and Character.isWhitespace(fDocument.getChar(pos)) evaluates to false . |
int |
findOpeningPeer(int start,
char openingPeer,
char closingPeer)
Returns the position of the opening peer character (backward search). |
int |
findOpeningPeer(int start,
int bound,
char openingPeer,
char closingPeer)
Returns the position of the opening peer character (backward search). |
org.eclipse.jface.text.IRegion |
findSurroundingBlock(int offset)
Computes the surrounding block around offset . |
int |
getPosition()
Returns the most recent internal scan position. |
boolean |
isBracelessBlockStart(int position,
int bound)
Checks if the line seems to be an open condition not followed by a block (i.e. an if, while, or for statement with just one following statement, see example below). |
boolean |
isDefaultPartition(int position)
Checks whether position resides in a default (C) partition of fDocument . |
boolean |
looksLikeClassInstanceCreationBackward(int start,
int bound)
Returns true if the document, when scanned backwards from start
appears to contain a class instance creation, i.e. a possibly qualified name preceded by a
new keyword. |
boolean |
looksLikeCompositeTypeDefinitionBackward(int start,
int bound)
Returns true if the document, when scanned backwards from start
appears to be a composite type (class, struct, union) or enum definition. |
boolean |
looksLikeFieldReferenceBackward(int start,
int bound)
Returns true if the document, when scanned backwards from start
appears to contain a field reference, i.e. a (optional) name preceded by a . |
int |
nextToken(int start,
int bound)
Returns the next token in forward direction, starting at start , and not extending
further than bound . |
int |
previousToken(int start,
int bound)
Returns the next token in backward direction, starting at start , and not extending
further than bound . |
int |
scanBackward(int position,
int bound,
char ch)
Finds the highest position in fDocument such that the position is <= position
and > bound and fDocument.getChar(position) == ch evaluates to true
and the position is in the default partition. |
int |
scanBackward(int position,
int bound,
char[] chars)
Finds the highest position in fDocument such that the position is <= position
and > bound and fDocument.getChar(position) == ch evaluates to true for at least one
ch in chars and the position is in the default partition. |
int |
scanBackward(int start,
int bound,
org.eclipse.cdt.internal.ui.text.CHeuristicScanner.StopCondition condition)
Finds the highest position p in fDocument such that bound < p <= start
and condition.stop(fDocument.getChar(p), p) evaluates to true . |
int |
scanForward(int position,
int bound,
char ch)
Finds the lowest position in fDocument such that the position is >= position
and < bound and fDocument.getChar(position) == ch evaluates to true
and the position is in the default partition. |
int |
scanForward(int position,
int bound,
char[] chars)
Finds the lowest position in fDocument such that the position is >= position
and < bound and fDocument.getChar(position) == ch evaluates to true for at least one
ch in chars and the position is in the default partition. |
int |
scanForward(int start,
int bound,
org.eclipse.cdt.internal.ui.text.CHeuristicScanner.StopCondition condition)
Finds the lowest position p in fDocument such that start <= p <
bound and condition.stop(fDocument.getChar(p), p) evaluates to true . |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
public static final int NOT_FOUND
BadLocationException
was thrown while scanning.
public static final int UNBOUND
fDocument.getLength()
(forward scanning).
Constructor Detail |
---|
public CHeuristicScanner(org.eclipse.jface.text.IDocument document, java.lang.String partitioning, java.lang.String partition)
document
- the document to scanpartitioning
- the partitioning to use for scanningpartition
- the partition to scan inpublic CHeuristicScanner(org.eclipse.jface.text.IDocument document)
this(document, ICPartitions.C_PARTITIONING, IDocument.DEFAULT_CONTENT_TYPE)
.
document
- the document to scan.Method Detail |
---|
public int getPosition()
public int nextToken(int start, int bound)
start
, and not extending
further than bound
. The return value is one of the constants defined in Symbols
.
After a call, getPosition()
will return the position just after the scanned token
(i.e. the next position that will be scanned).
start
- the first character position in the document to considerbound
- the first position not to consider any more
Symbols
describing the next tokenpublic int previousToken(int start, int bound)
start
, and not extending
further than bound
. The return value is one of the constants defined in Symbols
.
After a call, getPosition()
will return the position just before the scanned token
starts (i.e. the next position that will be scanned).
start
- the first character position in the document to considerbound
- the first position not to consider any more
Symbols
describing the previous tokenpublic int findClosingPeer(int start, char openingPeer, char closingPeer)
Note that start
must not point to the opening peer, but to the first
character being searched.
start
- the start positionopeningPeer
- the opening peer character (e.g. '{')closingPeer
- the closing peer character (e.g. '}')
NOT_FOUND
public int findOpeningPeer(int start, char openingPeer, char closingPeer)
Note that start
must not point to the closing peer, but to the first
character being searched.
start
- the start positionopeningPeer
- the opening peer character (e.g. '{')closingPeer
- the closing peer character (e.g. '}')
NOT_FOUND
public int findOpeningPeer(int start, int bound, char openingPeer, char closingPeer)
Note that start
must not point to the closing peer, but to the first
character being searched.
start
- the start positionbound
- the boundopeningPeer
- the opening peer character (e.g. '{')closingPeer
- the closing peer character (e.g. '}')
NOT_FOUND
public org.eclipse.jface.text.IRegion findSurroundingBlock(int offset)
offset
. The search is started at the
beginning of offset
, i.e. an opening brace at offset
will not be
part of the surrounding block, but a closing brace will.
offset
- the offset for which the surrounding block is computed
null
if none can be foundpublic int findNonWhitespaceForward(int position, int bound)
fDocument
such that the position is >= position
and < bound
and Character.isWhitespace(fDocument.getChar(pos))
evaluates to false
and the position is in the default partition.
position
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
> position
, or UNBOUND
position
, bound
) that resides in a C partition, or NOT_FOUND
if none can be foundpublic int findNonWhitespaceForwardInAnyPartition(int position, int bound)
fDocument
such that the position is >= position
and < bound
and Character.isWhitespace(fDocument.getChar(pos))
evaluates to false
.
position
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
> position
, or UNBOUND
position
, bound
), or NOT_FOUND
if none can be foundpublic int findNonWhitespaceBackward(int position, int bound)
fDocument
such that the position is <= position
and > bound
and Character.isWhitespace(fDocument.getChar(pos))
evaluates to false
and the position is in the default partition.
position
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
< position
, or UNBOUND
bound
, position
] that resides in a C partition, or NOT_FOUND
if none can be foundpublic int scanForward(int start, int bound, org.eclipse.cdt.internal.ui.text.CHeuristicScanner.StopCondition condition)
p
in fDocument
such that start
<= p <
bound
and condition.stop(fDocument.getChar(p), p)
evaluates to true
.
start
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
> start
, or UNBOUND
condition
- the StopCondition
to check
start
, bound
) for which condition
holds, or NOT_FOUND
if none can be foundpublic int scanForward(int position, int bound, char ch)
fDocument
such that the position is >= position
and < bound
and fDocument.getChar(position) == ch
evaluates to true
and the position is in the default partition.
position
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
> position
, or UNBOUND
ch
- the char
to search for
ch
in (bound
, position
] that resides in a C partition, or NOT_FOUND
if none can be foundpublic int scanForward(int position, int bound, char[] chars)
fDocument
such that the position is >= position
and < bound
and fDocument.getChar(position) == ch
evaluates to true
for at least one
ch in chars
and the position is in the default partition.
position
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
> position
, or UNBOUND
chars
- an array of char
to search for
position
, bound
) that resides in a C partition, or NOT_FOUND
if none can be foundpublic int scanBackward(int start, int bound, org.eclipse.cdt.internal.ui.text.CHeuristicScanner.StopCondition condition)
p
in fDocument
such that bound
< p
<= start
and condition.stop(fDocument.getChar(p), p)
evaluates to true
.
start
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
< start
, or UNBOUND
condition
- the StopCondition
to check
bound
, start
for which condition
holds, or NOT_FOUND
if none can be foundpublic int scanBackward(int position, int bound, char ch)
fDocument
such that the position is <= position
and > bound
and fDocument.getChar(position) == ch
evaluates to true
and the position is in the default partition.
position
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
< position
, or UNBOUND
ch
- the char
to search for
chars
in (bound
, position
] that resides in a C partition, or NOT_FOUND
if none can be foundpublic int scanBackward(int position, int bound, char[] chars)
fDocument
such that the position is <= position
and > bound
and fDocument.getChar(position) == ch
evaluates to true
for at least one
ch in chars
and the position is in the default partition.
position
- the first character position in fDocument
to be consideredbound
- the first position in fDocument
to not consider any more, with bound
< position
, or UNBOUND
chars
- an array of char
to search for
chars
in (bound
, position
] that resides in a C partition, or NOT_FOUND
if none can be foundpublic boolean isDefaultPartition(int position)
position
resides in a default (C) partition of fDocument
.
position
- the position to be checked
true
if position
is in the default partition of fDocument
, false
otherwisepublic boolean isBracelessBlockStart(int position, int bound)
if (condition) doStuff();
Algorithm: if the last non-WS, non-Comment code on the line is an if (condition), while (condition), for( expression), do, else, and there is no statement after that
position
- the insert position of the new characterbound
- the lowest position to consider
true
if the code is a conditional statement or loop without a block, false
otherwisepublic boolean looksLikeClassInstanceCreationBackward(int start, int bound)
true
if the document, when scanned backwards from start
appears to contain a class instance creation, i.e. a possibly qualified name preceded by a
new
keyword. The start
must be at the end of the type name, and
before any generic signature or constructor parameter list. The heuristic will return
true
if start
is at the following positions (|):
new std::vector<std::string>|(10) new str_vector |(10) new / * comment * / str_vector |(10)but not the following:
new std::vector<std::string>(10)| new std::vector<std::string>|(10) new vector (10)| vector |(10)
start
- the position where the type name of the class instance creation supposedly endsbound
- the first position in fDocument
to not consider any more, with
bound
< start
, or UNBOUND
true
if the current position looks like after the type name of a class
instance creationpublic boolean looksLikeFieldReferenceBackward(int start, int bound)
true
if the document, when scanned backwards from start
appears to contain a field reference, i.e. a (optional) name preceded by a .
or ->
or ::
.
start
- the position after the field reference operator.bound
- the first position in fDocument
to not consider any more, with
bound
< start
, or UNBOUND
true
if the current position looks like a field referencepublic boolean looksLikeCompositeTypeDefinitionBackward(int start, int bound)
true
if the document, when scanned backwards from start
appears to be a composite type (class, struct, union) or enum definition. Examples:
class A { struct A { class A : B { class A : virtual public B, protected C<T> { enum E {
start
- the position of the opening brace.bound
- the first position in fDocument
to not consider any more, with
bound
< start
, or UNBOUND
true
if the current position looks like a composite type definition
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |