Drop suppport for annotation syntax without '@' from parser
This commit is contained in:
@@ -33,7 +33,6 @@ import java.util.Set;
|
||||
|
||||
import static org.jetbrains.kotlin.JetNodeTypes.*;
|
||||
import static org.jetbrains.kotlin.lexer.JetTokens.*;
|
||||
import static org.jetbrains.kotlin.parsing.JetParsing.AnnotationParsingMode.ALLOW_UNESCAPED_REGULAR_ANNOTATIONS;
|
||||
import static org.jetbrains.kotlin.parsing.JetParsing.AnnotationParsingMode.ONLY_ESCAPED_REGULAR_ANNOTATIONS;
|
||||
import static org.jetbrains.kotlin.parsing.JetParsing.DeclarationParsingMode.LOCAL;
|
||||
|
||||
@@ -846,14 +845,14 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
if (at(LPAR)) {
|
||||
advanceAt(LPAR);
|
||||
|
||||
int valPos = matchTokenStreamPredicate(new FirstBefore(new At(VAL_KEYWORD), new AtSet(RPAR, LBRACE, RBRACE, SEMICOLON, EQ)));
|
||||
if (valPos >= 0) {
|
||||
PsiBuilder.Marker property = mark();
|
||||
myJetParsing.parseModifierList(ALLOW_UNESCAPED_REGULAR_ANNOTATIONS);
|
||||
PsiBuilder.Marker property = mark();
|
||||
myJetParsing.parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.create(EQ, RPAR));
|
||||
if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) {
|
||||
myJetParsing.parseProperty(true);
|
||||
property.done(PROPERTY);
|
||||
}
|
||||
else {
|
||||
property.rollbackTo();
|
||||
parseExpression();
|
||||
}
|
||||
|
||||
@@ -1035,7 +1034,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
private boolean parseLocalDeclaration() {
|
||||
PsiBuilder.Marker decl = mark();
|
||||
JetParsing.ModifierDetector detector = new JetParsing.ModifierDetector();
|
||||
myJetParsing.parseModifierList(detector, ONLY_ESCAPED_REGULAR_ANNOTATIONS);
|
||||
myJetParsing.parseModifierList(detector, ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.EMPTY);
|
||||
|
||||
IElementType declType = parseLocalDeclarationRest(detector.isEnumDetected());
|
||||
|
||||
@@ -1343,9 +1342,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
|
||||
PsiBuilder.Marker parameter = mark();
|
||||
|
||||
if (!at(IN_KEYWORD)) {
|
||||
myJetParsing.parseModifierListWithUnescapedAnnotations(
|
||||
TokenSet.create(IDENTIFIER, LPAR), TokenSet.create(IN_KEYWORD, RPAR, COLON)
|
||||
);
|
||||
myJetParsing.parseModifierListWithLookForStopAt(TokenSet.create(IDENTIFIER, LPAR), TokenSet.create(IN_KEYWORD, RPAR, COLON));
|
||||
}
|
||||
|
||||
if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) advance(); // VAL_KEYWORD or VAR_KEYWORD
|
||||
|
||||
@@ -196,7 +196,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
* ;
|
||||
*/
|
||||
PsiBuilder.Marker packageDirective = mark();
|
||||
parseModifierList(ALLOW_UNESCAPED_REGULAR_ANNOTATIONS);
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.EMPTY);
|
||||
|
||||
if (at(PACKAGE_KEYWORD)) {
|
||||
advance(); // PACKAGE_KEYWORD
|
||||
@@ -391,7 +391,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
PsiBuilder.Marker decl = mark();
|
||||
|
||||
ModifierDetector detector = new ModifierDetector();
|
||||
parseModifierList(detector, ALLOW_UNESCAPED_REGULAR_ANNOTATIONS);
|
||||
parseModifierList(detector, ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.EMPTY);
|
||||
|
||||
IElementType keywordToken = tt();
|
||||
IElementType declType = null;
|
||||
@@ -434,9 +434,10 @@ public class JetParsing extends AbstractJetParsing {
|
||||
* (modifier | annotation)*
|
||||
*/
|
||||
boolean parseModifierList(
|
||||
@NotNull AnnotationParsingMode annotationParsingMode
|
||||
@NotNull AnnotationParsingMode annotationParsingMode,
|
||||
@Nullable TokenSet noModifiersBefore
|
||||
) {
|
||||
return parseModifierList(null, annotationParsingMode);
|
||||
return parseModifierList(null, annotationParsingMode, noModifiersBefore);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -446,7 +447,8 @@ public class JetParsing extends AbstractJetParsing {
|
||||
*/
|
||||
boolean parseModifierList(
|
||||
@Nullable Consumer<IElementType> tokenConsumer,
|
||||
@NotNull AnnotationParsingMode annotationParsingMode
|
||||
@NotNull AnnotationParsingMode annotationParsingMode,
|
||||
@Nullable TokenSet noModifiersBefore
|
||||
) {
|
||||
PsiBuilder.Marker list = mark();
|
||||
boolean empty = true;
|
||||
@@ -458,7 +460,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
if (at(AT) && annotationParsingMode.allowAnnotations) {
|
||||
parseAnnotationOrList(annotationParsingMode);
|
||||
}
|
||||
else if (tryParseModifier(tokenConsumer)) {
|
||||
else if (tryParseModifier(tokenConsumer, noModifiersBefore)) {
|
||||
// modifier advanced
|
||||
}
|
||||
else if (annotationParsingMode.allowShortAnnotations && at(IDENTIFIER)) {
|
||||
@@ -479,17 +481,20 @@ public class JetParsing extends AbstractJetParsing {
|
||||
return !empty;
|
||||
}
|
||||
|
||||
private boolean tryParseModifier(@Nullable Consumer<IElementType> tokenConsumer) {
|
||||
private boolean tryParseModifier(@Nullable Consumer<IElementType> tokenConsumer, @Nullable TokenSet noModifiersBefore) {
|
||||
PsiBuilder.Marker marker = mark();
|
||||
|
||||
if (atSet(MODIFIER_KEYWORDS)) {
|
||||
IElementType tt = tt();
|
||||
if (tokenConsumer != null) {
|
||||
tokenConsumer.consume(tt);
|
||||
IElementType lookahead = lookahead(1);
|
||||
if (noModifiersBefore == null || lookahead != null && !noModifiersBefore.contains(lookahead)) {
|
||||
IElementType tt = tt();
|
||||
if (tokenConsumer != null) {
|
||||
tokenConsumer.consume(tt);
|
||||
}
|
||||
advance(); // MODIFIER
|
||||
marker.collapse(tt);
|
||||
return true;
|
||||
}
|
||||
advance(); // MODIFIER
|
||||
marker.collapse(tt);
|
||||
return true;
|
||||
}
|
||||
|
||||
marker.rollbackTo();
|
||||
@@ -805,7 +810,8 @@ public class JetParsing extends AbstractJetParsing {
|
||||
PsiBuilder.Marker beforeConstructorModifiers = mark();
|
||||
PsiBuilder.Marker primaryConstructorMarker = mark();
|
||||
boolean hasConstructorModifiers = parseModifierList(
|
||||
declarationParsingMode != LOCAL ? PRIMARY_CONSTRUCTOR_MODIFIER_LIST : PRIMARY_CONSTRUCTOR_MODIFIER_LIST_LOCAL
|
||||
declarationParsingMode != LOCAL ? PRIMARY_CONSTRUCTOR_MODIFIER_LIST : PRIMARY_CONSTRUCTOR_MODIFIER_LIST_LOCAL,
|
||||
TokenSet.EMPTY
|
||||
);
|
||||
|
||||
// Some modifiers found, but no parentheses following: class has already ended, and we are looking at something else
|
||||
@@ -945,7 +951,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
private ParseEnumEntryResult parseEnumEntry() {
|
||||
PsiBuilder.Marker entry = mark();
|
||||
|
||||
parseModifierListWithStopAt(TokenSet.create(COMMA, SEMICOLON, RBRACE), ONLY_ESCAPED_REGULAR_ANNOTATIONS);
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.create(COMMA, COLON, SEMICOLON, RBRACE));
|
||||
|
||||
if (!atSet(SOFT_KEYWORDS_AT_MEMBER_START) && at(IDENTIFIER)) {
|
||||
PsiBuilder.Marker nameAsDeclaration = mark();
|
||||
@@ -1052,7 +1058,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
PsiBuilder.Marker decl = mark();
|
||||
|
||||
ModifierDetector detector = new ModifierDetector();
|
||||
parseModifierList(detector, ALLOW_UNESCAPED_REGULAR_ANNOTATIONS_AT_MEMBER_MODIFIER_LIST);
|
||||
parseModifierList(detector, ALLOW_UNESCAPED_REGULAR_ANNOTATIONS_AT_MEMBER_MODIFIER_LIST, TokenSet.EMPTY);
|
||||
|
||||
IElementType declType = parseMemberDeclarationRest(detector.isEnumDetected(), detector.isDefaultDetected());
|
||||
|
||||
@@ -1177,33 +1183,6 @@ public class JetParsing extends AbstractJetParsing {
|
||||
mark.done(CONSTRUCTOR_DELEGATION_REFERENCE);
|
||||
}
|
||||
|
||||
/*
|
||||
* initializer
|
||||
* : annotations constructorInvocation // type parameters may (must?) be omitted
|
||||
* ;
|
||||
*/
|
||||
private void parseInitializer() {
|
||||
PsiBuilder.Marker initializer = mark();
|
||||
parseAnnotations(ONLY_ESCAPED_REGULAR_ANNOTATIONS);
|
||||
|
||||
IElementType type;
|
||||
if (atSet(TYPE_REF_FIRST)) {
|
||||
PsiBuilder.Marker reference = mark();
|
||||
parseTypeRef();
|
||||
reference.done(CONSTRUCTOR_CALLEE);
|
||||
type = DELEGATOR_SUPER_CALL;
|
||||
}
|
||||
else {
|
||||
errorWithRecovery("Expecting constructor call (<class-name>(...))",
|
||||
TokenSet.orSet(TOP_LEVEL_DECLARATION_FIRST, TokenSet.create(RBRACE, LBRACE, COMMA, SEMICOLON)));
|
||||
initializer.drop();
|
||||
return;
|
||||
}
|
||||
myExpressionParsing.parseValueArgumentList();
|
||||
|
||||
initializer.done(type);
|
||||
}
|
||||
|
||||
/*
|
||||
* typeAlias
|
||||
* : modifiers "typealias" SimpleName (typeParameters typeConstraints)? "=" type
|
||||
@@ -1248,12 +1227,8 @@ public class JetParsing extends AbstractJetParsing {
|
||||
}
|
||||
|
||||
public IElementType parseProperty(boolean local) {
|
||||
if (at(VAL_KEYWORD) || at(VAR_KEYWORD)) {
|
||||
advance(); // VAL_KEYWORD or VAR_KEYWORD
|
||||
}
|
||||
else {
|
||||
errorAndAdvance("Expecting 'val' or 'var'");
|
||||
}
|
||||
assert (at(VAL_KEYWORD) || at(VAR_KEYWORD));
|
||||
advance();
|
||||
|
||||
boolean typeParametersDeclared = at(LT) && parseTypeParameterList(TokenSet.create(IDENTIFIER, EQ, COLON, SEMICOLON));
|
||||
|
||||
@@ -1359,7 +1334,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
}
|
||||
PsiBuilder.Marker property = mark();
|
||||
|
||||
parseModifierListWithUnescapedAnnotations(TokenSet.create(COMMA, RPAR, COLON, IN_KEYWORD, EQ));
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.create(COMMA, RPAR, COLON, IN_KEYWORD, EQ));
|
||||
|
||||
expect(IDENTIFIER, "Expecting a name", recoverySet);
|
||||
|
||||
@@ -1391,7 +1366,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
private boolean parsePropertyGetterOrSetter() {
|
||||
PsiBuilder.Marker getterOrSetter = mark();
|
||||
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS);
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.EMPTY);
|
||||
|
||||
if (!at(GET_KEYWORD) && !at(SET_KEYWORD)) {
|
||||
getterOrSetter.rollbackTo();
|
||||
@@ -1418,7 +1393,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
if (setter) {
|
||||
PsiBuilder.Marker parameterList = mark();
|
||||
PsiBuilder.Marker setterParameter = mark();
|
||||
parseModifierListWithUnescapedAnnotations(TokenSet.create(RPAR, COMMA, COLON));
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.create(COMMA, COLON, RPAR));
|
||||
expect(IDENTIFIER, "Expecting parameter name", TokenSet.create(RPAR, COLON, LBRACE, EQ));
|
||||
|
||||
if (at(COLON)) {
|
||||
@@ -1804,7 +1779,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
|
||||
PsiBuilder.Marker mark = mark();
|
||||
|
||||
parseModifierListWithUnescapedAnnotations(TokenSet.create(COMMA, GT, COLON));
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, TokenSet.create(GT, COMMA, COLON));
|
||||
|
||||
expect(IDENTIFIER, "Type parameter name expected", TokenSet.EMPTY);
|
||||
|
||||
@@ -2085,7 +2060,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
// TokenSet stopAt = TokenSet.create(COMMA, COLON, GT);
|
||||
// parseModifierListWithUnescapedAnnotations(MODIFIER_LIST, lookFor, stopAt);
|
||||
// Currently we do not allow annotations
|
||||
parseModifierList(NO_ANNOTATIONS);
|
||||
parseModifierList(NO_ANNOTATIONS, TokenSet.create(COMMA, COLON, GT));
|
||||
|
||||
if (at(MUL)) {
|
||||
advance(); // MUL
|
||||
@@ -2109,21 +2084,9 @@ public class JetParsing extends AbstractJetParsing {
|
||||
return atGT;
|
||||
}
|
||||
|
||||
public void parseModifierListWithUnescapedAnnotations(TokenSet stopAt) {
|
||||
parseModifierListWithLookForStopAt(TokenSet.create(IDENTIFIER), stopAt, ALLOW_UNESCAPED_REGULAR_ANNOTATIONS);
|
||||
}
|
||||
|
||||
public void parseModifierListWithStopAt(TokenSet stopAt, AnnotationParsingMode mode) {
|
||||
parseModifierListWithLookForStopAt(TokenSet.create(IDENTIFIER), stopAt, mode);
|
||||
}
|
||||
|
||||
public void parseModifierListWithUnescapedAnnotations(TokenSet lookFor, TokenSet stopAt) {
|
||||
parseModifierListWithLookForStopAt(lookFor, stopAt, ALLOW_UNESCAPED_REGULAR_ANNOTATIONS);
|
||||
}
|
||||
|
||||
public void parseModifierListWithLookForStopAt(TokenSet lookFor, TokenSet stopAt, AnnotationParsingMode mode) {
|
||||
public void parseModifierListWithLookForStopAt(TokenSet lookFor, TokenSet stopAt) {
|
||||
int lastId = matchTokenStreamPredicate(new LastBefore(new AtSet(lookFor), new AnnotationTargetStop(stopAt, ANNOTATION_TARGETS), false));
|
||||
createTruncatedBuilder(lastId).parseModifierList(mode);
|
||||
createTruncatedBuilder(lastId).parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, null);
|
||||
}
|
||||
|
||||
private class AnnotationTargetStop extends AbstractTokenStreamPredicate {
|
||||
@@ -2174,6 +2137,8 @@ public class JetParsing extends AbstractJetParsing {
|
||||
return functionType;
|
||||
}
|
||||
|
||||
private static final TokenSet NO_MODIFIER_BEFORE_FOR_VALUE_PARAMETER = TokenSet.create(COMMA, COLON, EQ, RPAR);
|
||||
|
||||
/*
|
||||
* functionParameters
|
||||
* : "(" functionParameter{","}? ")" // default values
|
||||
@@ -2207,7 +2172,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
if (isFunctionTypeContents) {
|
||||
if (!tryParseValueParameter(typeRequired)) {
|
||||
PsiBuilder.Marker valueParameter = mark();
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS); // lazy, out, ref
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, NO_MODIFIER_BEFORE_FOR_VALUE_PARAMETER); // lazy, out, ref
|
||||
parseTypeRef();
|
||||
closeDeclarationWithCommentBinders(valueParameter, VALUE_PARAMETER, false);
|
||||
}
|
||||
@@ -2248,7 +2213,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
private boolean parseValueParameter(boolean rollbackOnFailure, boolean typeRequired) {
|
||||
PsiBuilder.Marker parameter = mark();
|
||||
|
||||
parseModifierListWithUnescapedAnnotations(TokenSet.create(COMMA, RPAR));
|
||||
parseModifierList(ONLY_ESCAPED_REGULAR_ANNOTATIONS, NO_MODIFIER_BEFORE_FOR_VALUE_PARAMETER);
|
||||
|
||||
if (at(VAR_KEYWORD) || at(VAL_KEYWORD)) {
|
||||
advance(); // VAR_KEYWORD | VAL_KEYWORD
|
||||
|
||||
@@ -275,7 +275,7 @@ public class JetProperty extends JetTypeParameterListOwnerStub<KotlinPropertyStu
|
||||
@NotNull
|
||||
public PsiElement getValOrVarKeyword() {
|
||||
PsiElement element = findChildByType(VAL_VAR_TOKEN_SET);
|
||||
assert element != null : "Val or var should always exist for property";
|
||||
assert element != null : "Val or var should always exist for property" + this.getText();
|
||||
return element;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user