Package org.eclipse.m2m.atl.adt.ui.text

# Class AtlIndenter

java.lang.Object
org.eclipse.m2m.atl.adt.ui.text.AtlIndenter

public class AtlIndenter extends Object
Uses the `AtlHeuristicScanner`to get the indentation level for a certain position in a document.

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

## Constructor Summary

Constructors
Constructor
Description
`AtlIndenter(org.eclipse.jface.text.IDocument document, AtlHeuristicScanner scanner)`
Creates a new instance.

## Method Summary

Modifier and Type
Method
Description
`StringBuffer`
`computeIndentation(int offset)`
Computes the indentation at `offset`.
`StringBuffer`
`computeIndentation(int offset, boolean assumeOpeningBrace)`
Computes the indentation at `offset`.
`int`
`findReferencePosition(int offset)`
Returns the reference position regarding to indentation for `offset`, or `NOT_FOUND`.
`int`
`findReferencePosition(int offset, boolean danglingElse, boolean matchBrace, boolean matchParen, boolean matchCase)`
Returns the reference position regarding to indentation for `position`, or `NOT_FOUND`.`fIndent` will contain the relative indentation (in indentation units, not characters) after the call.
`int`
`findReferencePosition(int offset, int nextToken)`
Returns the reference position regarding to indentation for `position`, or `NOT_FOUND`.
`StringBuffer`
`getReferenceIndentation(int offset)`
Computes the indentation at the reference point of `position`.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### AtlIndenter

public AtlIndenter(org.eclipse.jface.text.IDocument document, AtlHeuristicScanner scanner)
Creates a new instance.

Parameters:
  `document` - the document to scan
  `scanner` - the `AtlHeuristicScanner` to be used for scanning the document. It must be installed on the same `IDocument`.

## Method Details

### computeIndentation

public StringBuffer computeIndentation(int offset)
Computes the indentation at `offset`.

Parameters:
  `offset` - the offset in the document
Returns:
  a String which reflects the correct indentation for the line in which offset resides, or `null` if it cannot be determined

### computeIndentation

public StringBuffer computeIndentation(int offset, boolean assumeOpeningBrace)
Computes the indentation at `offset`.

Parameters:
  `offset` - the offset in the document
  `assumeOpeningBrace` - `true` if an opening brace should be assumed
Returns:
  a String which reflects the correct indentation for the line in which offset resides, or `null` if it cannot be determined

### findReferencePosition

public int findReferencePosition(int offset)
Returns the reference position regarding to indentation for `offset`, or `NOT_FOUND`. This method calls `findReferencePosition(offset, nextChar)` where `nextChar` is the next character after `offset`.

Parameters:
  `offset` - the offset for which the reference is computed
Returns:
  the reference statement relative to which `offset` should be indented, or `AtlHeuristicScanner.NOT_FOUND`

### findReferencePosition

public int findReferencePosition(int offset, boolean danglingElse, boolean matchBrace, boolean matchParen, boolean matchCase)
Returns the reference position regarding to indentation for `position`, or `NOT_FOUND`.`fIndent` will contain the relative indentation (in indentation units, not characters) after the call. If there is a special alignment (e.g. for a method declaration where parameters should be aligned), `fAlign` will contain the absolute position of the alignment reference in `fDocument`, otherwise `fAlign` is set to `AtlHeuristicScanner.NOT_FOUND`.

Parameters:
  `offset` - the offset for which the reference is computed
  `danglingElse` - whether a dangling else should be assumed at `position`
  `matchBrace` - whether the position of the matching brace should be returned instead of doing code analysis
  `matchParen` - whether the position of the matching parenthesis should be returned instead of doing code analysis
  `matchCase` - whether the position of a switch statement reference should be returned (either an earlier case statement or the switch block brace)
Returns:
  the reference statement relative to which `position` should be indented, or `AtlHeuristicScanner.NOT_FOUND`

### findReferencePosition

public int findReferencePosition(int offset, int nextToken)
Returns the reference position regarding to indentation for `position`, or `NOT_FOUND`.

If `peekNextChar` is `true`, the next token after `offset` is read and taken into account when computing the indentation. Currently, if the next token is the first token on the line (i.e. only preceded by whitespace), the following tokens are specially handled:

- `switch` labels are indented relative to the switch block
- opening curly braces are aligned correctly with the introducing code
- closing curly braces are aligned properly with the introducing code of the matching opening brace
- closing parenthesis' are aligned with their opening peer
- the `else` keyword is aligned with its `if`, anything else is aligned normally (i.e. with the base of any introducing statements).
- if there is no token on the same line after `offset`, the indentation is the same as for an `else` keyword

Parameters:
  `offset` - the offset for which the reference is computed
  `nextToken` - the next token to assume in the document
Returns:
  the reference statement relative to which `offset` should be indented, or `AtlHeuristicScanner.NOT_FOUND`

### getReferenceIndentation

public StringBuffer getReferenceIndentation(int offset)
Computes the indentation at the reference point of `position`.

Parameters:
  `offset` - the offset in the document
Returns:
  a String which reflects the indentation at the line in which the reference position to `offset` resides, or `null` if it cannot be determined