From 7fbb8ad0448ec3231170050807573f9799e44aa3 Mon Sep 17 00:00:00 2001 From: Oleg Sukhodolsky Date: Thu, 12 Jul 2012 11:34:51 +0400 Subject: [PATCH] Refactoring: common functionality moved from HAML|Slim parsers to IndentationParser --- .../indentation/IndentationParser.java | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java b/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java index 8ac2a889a340..e155434fdc99 100644 --- a/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java +++ b/platform/lang-impl/src/com/intellij/indentation/IndentationParser.java @@ -12,21 +12,31 @@ import org.jetbrains.annotations.NotNull; * @author oleg */ public abstract class IndentationParser implements PsiParser { + @NotNull private final IElementType myEolTokenType; + @NotNull private final IElementType myIndentTokenType; + @NotNull private final IElementType myBlockElementType; + @NotNull + private final IElementType myDocumentType; - public IndentationParser(final IElementType blockElementType, - final IElementType eolTokenType, - final IElementType indentTokenType) { + public IndentationParser( + @NotNull IElementType documentType, + @NotNull final IElementType blockElementType, + @NotNull final IElementType eolTokenType, + @NotNull final IElementType indentTokenType) + { + myDocumentType = documentType; myBlockElementType = blockElementType; myEolTokenType = eolTokenType; myIndentTokenType = indentTokenType; } @NotNull - public ASTNode parse(final IElementType root, final PsiBuilder builder) { + public final ASTNode parse(final IElementType root, final PsiBuilder builder) { final PsiBuilder.Marker fileMarker = builder.mark(); + final PsiBuilder.Marker documentMarker = builder.mark(); final Stack> stack = new Stack>(); stack.push(Pair.create(0, builder.mark())); @@ -61,7 +71,7 @@ public abstract class IndentationParser implements PsiParser { startLineMarker = null; } // Close indentation blocks - while (!stack.isEmpty() && currentIndent < stack.peek().first){ + while (!stack.isEmpty() && currentIndent < stack.peek().first) { stack.pop().second.done(myBlockElementType); } @@ -93,23 +103,18 @@ public abstract class IndentationParser implements PsiParser { stack.pop().second.done(myBlockElementType); } - return buildTree(fileMarker, builder, root); - } - - protected ASTNode buildTree(final PsiBuilder.Marker fileMarker, - final PsiBuilder builder, - final IElementType root) { + documentMarker.done(myDocumentType); fileMarker.done(root); return builder.getTreeBuilt(); } - protected void advanceLexer(PsiBuilder builder) { + protected void advanceLexer(@NotNull PsiBuilder builder) { builder.advanceLexer(); } - private void passEOLsAndIndents(final PsiBuilder builder) { + private void passEOLsAndIndents(@NotNull final PsiBuilder builder) { IElementType tokenType = builder.getTokenType(); - while (tokenType == myEolTokenType || tokenType == myIndentTokenType){ + while (tokenType == myEolTokenType || tokenType == myIndentTokenType) { builder.advanceLexer(); tokenType = builder.getTokenType(); }