Class AtlHeuristicScanner

java.lang.Object
org.eclipse.m2m.atl.adt.ui.text.AtlHeuristicScanner
All Implemented Interfaces:
Symbols

public class AtlHeuristicScanner extends Object implements Symbols
Utility methods for heuristic based manipulations in an incomplete source file.

An instance holds some internal position in the document and is therefore not threadsafe.

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    protected class 
    Acts like character match, but skips all scopes introduced by parenthesis, brackets, and braces.
    static interface 
    Specifies the stop condition, upon which the scanXXX methods will decide whether to keep scanning or not.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final int
    Returned by all methods when the requested position could not be found, or if a BadLocationException was thrown while scanning.
    static final int
    Special bound parameter that means either -1 (backward scanning) or fDocument.getLength() (forward scanning).
  • Constructor Summary

    Constructors
    Constructor
    Description
    AtlHeuristicScanner(org.eclipse.jface.text.IDocument document)
    Calls this(document, IAtlPartitions.Atl_PARTITIONING, IDocument.DEFAULT_CONTENT_TYPE).
    AtlHeuristicScanner(org.eclipse.jface.text.IDocument document, String partitioning, String partition)
    Creates a new instance.
  • Method Summary

    Modifier and Type
    Method
    Description
    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).
    org.eclipse.jface.text.IRegion
    Computes the surrounding block around offset.
    int
    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.
    boolean
    isDefaultPartition(int position)
    Checks whether position resides in a default (Atl) partition of fDocument.
    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 for at least one ch in chars 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, AtlHeuristicScanner.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, AtlHeuristicScanner.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

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • NOT_FOUND

      public static final int NOT_FOUND
      Returned by all methods when the requested position could not be found, or if a BadLocationException was thrown while scanning.
      See Also:
    • UNBOUND

      public static final int UNBOUND
      Special bound parameter that means either -1 (backward scanning) or fDocument.getLength() (forward scanning).
      See Also:
  • Constructor Details

    • AtlHeuristicScanner

      public AtlHeuristicScanner(org.eclipse.jface.text.IDocument document)
      Calls this(document, IAtlPartitions.Atl_PARTITIONING, IDocument.DEFAULT_CONTENT_TYPE).
      Parameters:
      document - the document to scan.
    • AtlHeuristicScanner

      public AtlHeuristicScanner(org.eclipse.jface.text.IDocument document, String partitioning, String partition)
      Creates a new instance.
      Parameters:
      document - the document to scan
      partitioning - the partitioning to use for scanning
      partition - the partition to scan in
  • Method Details

    • findClosingPeer

      public int findClosingPeer(int start, char openingPeer, char closingPeer)
      Returns the position of the closing peer character (forward search). Any scopes introduced by opening peers are skipped. All peers accounted for must reside in the default partition.

      Note that start must not point to the opening peer, but to the first character being searched.

      Parameters:
      start - the start position
      openingPeer - the opening peer character (e.g. '{')
      closingPeer - the closing peer character (e.g. '}')
      Returns:
      the matching peer character position, or NOT_FOUND
    • findNonWhitespaceBackward

      public 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.
      Parameters:
      position - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound < position, or UNBOUND
      Returns:
      the highest position of a non-whitespace character in (bound, position] that resides in a Atl partition, or NOT_FOUND if none can be found
    • findNonWhitespaceForward

      public 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.
      Parameters:
      position - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound > position, or UNBOUND
      Returns:
      the smallest position of a non-whitespace character in [position, bound) that resides in a Atl partition, or NOT_FOUND if none can be found
    • findNonWhitespaceForwardInAnyPartition

      public 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.
      Parameters:
      position - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound > position, or UNBOUND
      Returns:
      the smallest position of a non-whitespace character in [position, bound), or NOT_FOUND if none can be found
    • findOpeningPeer

      public int findOpeningPeer(int start, char openingPeer, char closingPeer)
      Returns the position of the opening peer character (backward search). Any scopes introduced by closing peers are skipped. All peers accounted for must reside in the default partition.

      Note that start must not point to the closing peer, but to the first character being searched.

      Parameters:
      start - the start position
      openingPeer - the opening peer character (e.g. '{')
      closingPeer - the closing peer character (e.g. '}')
      Returns:
      the matching peer character position, or NOT_FOUND
    • findSurroundingBlock

      public org.eclipse.jface.text.IRegion findSurroundingBlock(int offset)
      Computes the surrounding block around 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.
      Parameters:
      offset - the offset for which the surrounding block is computed
      Returns:
      a region describing the surrounding block, or null if none can be found
    • getPosition

      public int getPosition()
      Returns the most recent internal scan position.
      Returns:
      the most recent internal scan position.
    • isBracelessBlockStart

      public 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).
       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

      Parameters:
      position - the insert position of the new character
      bound - the lowest position to consider
      Returns:
      true if the code is a conditional statement or loop without a block, false otherwise
    • isDefaultPartition

      public boolean isDefaultPartition(int position)
      Checks whether position resides in a default (Atl) partition of fDocument.
      Parameters:
      position - the position to be checked
      Returns:
      true if position is in the default partition of fDocument, false otherwise
    • nextToken

      public int nextToken(int start, int bound)
      Returns the next token in forward direction, starting at 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).
      Parameters:
      start - the first character position in the document to consider
      bound - the first position not to consider any more
      Returns:
      a constant from Symbols describing the next token
    • previousToken

      public int previousToken(int start, int bound)
      Returns the next token in backward direction, starting at 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).
      Parameters:
      start - the first character position in the document to consider
      bound - the first position not to consider any more
      Returns:
      a constant from Symbols describing the previous token
    • scanBackward

      public 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 for at least one ch in chars and the position is in the default partition.
      Parameters:
      position - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound < position, or UNBOUND
      ch - the char to search for
      Returns:
      the highest position of one element in chars in (bound, position] that resides in a Atl partition, or NOT_FOUND if none can be found
    • scanBackward

      public 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.
      Parameters:
      position - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound < position, or UNBOUND
      chars - an array of char to search for
      Returns:
      the highest position of one element in chars in (bound, position] that resides in a Atl partition, or NOT_FOUND if none can be found
    • scanBackward

      public int scanBackward(int start, int bound, AtlHeuristicScanner.StopCondition condition)
      Finds the highest position p in fDocument such that bound < p <= start and condition.stop(fDocument.getChar(p), p) evaluates to true.
      Parameters:
      start - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound < start, or UNBOUND
      condition - the StopCondition to check
      Returns:
      the highest position in (bound, start for which condition holds, or NOT_FOUND if none can be found
    • scanForward

      public 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.
      Parameters:
      position - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound > position, or UNBOUND
      ch - the char to search for
      Returns:
      the lowest position of ch in (bound, position] that resides in a Atl partition, or NOT_FOUND if none can be found
    • scanForward

      public 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.
      Parameters:
      position - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound > position, or UNBOUND
      chars - an array of char to search for
      Returns:
      the lowest position of a non-whitespace character in [position, bound ) that resides in a Atl partition, or NOT_FOUND if none can be found
    • scanForward

      public int scanForward(int start, int bound, AtlHeuristicScanner.StopCondition condition)
      Finds the lowest position p in fDocument such that start <= p < bound and condition.stop(fDocument.getChar(p), p) evaluates to true.
      Parameters:
      start - the first character position in fDocument to be considered
      bound - the first position in fDocument to not consider any more, with bound > start, or UNBOUND
      condition - the StopCondition to check
      Returns:
      the lowest position in [start, bound) for which condition holds, or NOT_FOUND if none can be found