Package org.eclipse.m2m.atl.adt.ui.text
Class AtlIndenter
java.lang.Object
org.eclipse.m2m.atl.adt.ui.text.AtlIndenter
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
ConstructorsConstructorDescriptionAtlIndenter
(org.eclipse.jface.text.IDocument document, AtlHeuristicScanner scanner) Creates a new instance. -
Method Summary
Modifier and TypeMethodDescriptioncomputeIndentation
(int offset) Computes the indentation atoffset
.computeIndentation
(int offset, boolean assumeOpeningBrace) Computes the indentation atoffset
.int
findReferencePosition
(int offset) Returns the reference position regarding to indentation foroffset
, orNOT_FOUND
.int
findReferencePosition
(int offset, boolean danglingElse, boolean matchBrace, boolean matchParen, boolean matchCase) Returns the reference position regarding to indentation forposition
, orNOT_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 forposition
, orNOT_FOUND
.getReferenceIndentation
(int offset) Computes the indentation at the reference point ofposition
.
-
Constructor Details
-
AtlIndenter
Creates a new instance.- Parameters:
document
- the document to scanscanner
- theAtlHeuristicScanner
to be used for scanning the document. It must be installed on the sameIDocument
.
-
-
Method Details
-
computeIndentation
Computes the indentation atoffset
.- 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
Computes the indentation atoffset
.- Parameters:
offset
- the offset in the documentassumeOpeningBrace
-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 foroffset
, orNOT_FOUND
. This method callsfindReferencePosition(offset, nextChar)
wherenextChar
is the next character afteroffset
.- Parameters:
offset
- the offset for which the reference is computed- Returns:
- the reference statement relative to which
offset
should be indented, orAtlHeuristicScanner.NOT_FOUND
-
findReferencePosition
public int findReferencePosition(int offset, boolean danglingElse, boolean matchBrace, boolean matchParen, boolean matchCase) Returns the reference position regarding to indentation forposition
, orNOT_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 infDocument
, otherwisefAlign
is set toAtlHeuristicScanner.NOT_FOUND
.- Parameters:
offset
- the offset for which the reference is computeddanglingElse
- whether a dangling else should be assumed atposition
matchBrace
- whether the position of the matching brace should be returned instead of doing code analysismatchParen
- whether the position of the matching parenthesis should be returned instead of doing code analysismatchCase
- 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, orAtlHeuristicScanner.NOT_FOUND
-
findReferencePosition
public int findReferencePosition(int offset, int nextToken) Returns the reference position regarding to indentation forposition
, orNOT_FOUND
.If
peekNextChar
istrue
, the next token afteroffset
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 itsif
, 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 anelse
keyword
- Parameters:
offset
- the offset for which the reference is computednextToken
- the next token to assume in the document- Returns:
- the reference statement relative to which
offset
should be indented, orAtlHeuristicScanner.NOT_FOUND
-
getReferenceIndentation
Computes the indentation at the reference point ofposition
.- 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, ornull
if it cannot be determined
-