Added parsing of <#<template>#> blocks.

This commit is contained in:
Evgeny Gerashchenko
2012-01-31 20:18:49 +04:00
parent 3660b4668e
commit 29c465641b
4 changed files with 423 additions and 388 deletions
@@ -84,7 +84,8 @@ public class JetExpressionParsing extends AbstractJetParsing {
IDENTIFIER, // SimpleName
FIELD_IDENTIFIER, // Field reference
PACKAGE_KEYWORD // for absolute qualified names
PACKAGE_KEYWORD, // for absolute qualified names
IDE_TEMPLATE_START
);
private static final TokenSet STATEMENT_FIRST = TokenSet.orSet(
@@ -102,7 +103,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
);
/*package*/ static final TokenSet EXPRESSION_FOLLOW = TokenSet.create(
SEMICOLON, ARROW, COMMA, RBRACE, RPAR, RBRACKET
SEMICOLON, ARROW, COMMA, RBRACE, RPAR, RBRACKET, IDE_TEMPLATE_END
);
@SuppressWarnings({"UnusedDeclaration"})
@@ -506,6 +507,9 @@ public class JetExpressionParsing extends AbstractJetParsing {
if (at(LPAR)) {
parseParenthesizedExpression();
}
else if (at(IDE_TEMPLATE_START)) {
parseIdeTemplate();
}
else if (at(HASH)) {
parseTupleExpression();
}
@@ -1831,6 +1835,22 @@ public class JetExpressionParsing extends AbstractJetParsing {
parseExpression();
argument.done(VALUE_ARGUMENT);
}
/*
* "<#<" expression ">#>"
*/
private void parseIdeTemplate() {
PsiBuilder.Marker placeholder = mark();
advance();
if (at(IDE_TEMPLATE_END)) {
error("Expecting IDE template");
} else {
parseExpression();
}
expect(IDE_TEMPLATE_END, "");
placeholder.done(PARENTHESIZED);
}
public void parseObjectLiteral() {
PsiBuilder.Marker literal = mark();
@@ -197,6 +197,8 @@ LONG_TEMPLATE_ENTRY_END=\}
\!in{IDENTIFIER_PART} { yypushback(3); return JetTokens.EXCL; }
\!is{IDENTIFIER_PART} { yypushback(3); return JetTokens.EXCL; }
"<#<" { return JetTokens.IDE_TEMPLATE_START ; }
">#>" { return JetTokens.IDE_TEMPLATE_END ; }
"===" { return JetTokens.EQEQEQ ; }
"!==" { return JetTokens.EXCLEQEQEQ; }
"!in" { return JetTokens.NOT_IN; }
@@ -114,6 +114,9 @@ public interface JetTokens {
JetToken HASH = new JetToken("HASH");
JetToken AT = new JetToken("AT");
JetToken ATAT = new JetToken("ATAT");
JetToken IDE_TEMPLATE_START = new JetToken("IDE_TEMPLATE_START");
JetToken IDE_TEMPLATE_END = new JetToken("IDE_TEMPLATE_END");
TokenSet LABELS = TokenSet.create(AT, ATAT, LABEL_IDENTIFIER);
File diff suppressed because it is too large Load Diff