Added templates for class and trait.

This commit is contained in:
Evgeny Gerashchenko
2012-02-02 14:41:00 +04:00
parent 8d79ea4a2f
commit e4953f60fb
2 changed files with 45 additions and 34 deletions
@@ -388,7 +388,9 @@ public class JetParsing extends AbstractJetParsing {
assert _atSet(CLASS_KEYWORD, TRAIT_KEYWORD);
advance(); // CLASS_KEYWORD or TRAIT_KEYWORD
expect(IDENTIFIER, "Class name expected", CLASS_NAME_RECOVERY_SET);
if (!parseIdeTemplate()) {
expect(IDENTIFIER, "Class name expected", CLASS_NAME_RECOVERY_SET);
}
boolean typeParametersDeclared = parseTypeParameterList(TYPE_PARAMETER_GT_RECOVERY_SET);
PsiBuilder.Marker beforeConstructorModifiers = mark();
@@ -446,29 +448,31 @@ public class JetParsing extends AbstractJetParsing {
myBuilder.enableNewlines();
advance(); // LBRACE
while (!eof() && !at(RBRACE)) {
PsiBuilder.Marker entryOrMember = mark();
if (!parseIdeTemplate()) {
while (!eof() && !at(RBRACE)) {
PsiBuilder.Marker entryOrMember = mark();
TokenSet constructorNameFollow = TokenSet.create(SEMICOLON, COLON, LPAR, LT, LBRACE);
int lastId = findLastBefore(ENUM_MEMBER_FIRST, constructorNameFollow, false);
TokenDetector enumDetector = new TokenDetector(ENUM_KEYWORD);
createTruncatedBuilder(lastId).parseModifierList(MODIFIER_LIST, enumDetector, false);
TokenSet constructorNameFollow = TokenSet.create(SEMICOLON, COLON, LPAR, LT, LBRACE);
int lastId = findLastBefore(ENUM_MEMBER_FIRST, constructorNameFollow, false);
TokenDetector enumDetector = new TokenDetector(ENUM_KEYWORD);
createTruncatedBuilder(lastId).parseModifierList(MODIFIER_LIST, enumDetector, false);
IElementType type;
if (at(IDENTIFIER)) {
parseEnumEntry();
type = ENUM_ENTRY;
}
else {
type = parseMemberDeclarationRest(enumDetector.isDetected());
}
IElementType type;
if (at(IDENTIFIER)) {
parseEnumEntry();
type = ENUM_ENTRY;
}
else {
type = parseMemberDeclarationRest(enumDetector.isDetected());
}
if (type == null) {
errorAndAdvance("Expecting an enum entry or member declaration");
entryOrMember.drop();
}
else {
entryOrMember.done(type);
if (type == null) {
errorAndAdvance("Expecting an enum entry or member declaration");
entryOrMember.drop();
}
else {
entryOrMember.done(type);
}
}
}
@@ -522,11 +526,13 @@ public class JetParsing extends AbstractJetParsing {
myBuilder.enableNewlines();
expect(LBRACE, "Expecting a class body", TokenSet.create(LBRACE));
while (!eof()) {
if (at(RBRACE)) {
break;
if (!parseIdeTemplate()) {
while (!eof()) {
if (at(RBRACE)) {
break;
}
parseMemberDeclaration();
}
parseMemberDeclaration();
}
expect(RBRACE, "Missing '}");
myBuilder.restoreNewlinesState();