Allow targeted annotations in parameter list
This commit is contained in:
@@ -2124,10 +2124,37 @@ public class JetParsing extends AbstractJetParsing {
|
||||
}
|
||||
|
||||
public void parseModifierListWithUnescapedAnnotations(TokenSet lookFor, TokenSet stopAt) {
|
||||
int lastId = findLastBefore(lookFor, stopAt, false);
|
||||
int lastId = matchTokenStreamPredicate(new LastBefore(new AtSet(lookFor), new AnnotationTargetStop(stopAt, ANNOTATION_TARGETS), false));
|
||||
createTruncatedBuilder(lastId).parseModifierList(ALLOW_UNESCAPED_REGULAR_ANNOTATIONS);
|
||||
}
|
||||
|
||||
private class AnnotationTargetStop extends AbstractTokenStreamPredicate {
|
||||
private final TokenSet stopAt;
|
||||
private final TokenSet annotationTargets;
|
||||
|
||||
private IElementType previousToken;
|
||||
private IElementType tokenBeforePrevious;
|
||||
|
||||
public AnnotationTargetStop(TokenSet stopAt, TokenSet annotationTargets) {
|
||||
this.stopAt = stopAt;
|
||||
this.annotationTargets = annotationTargets;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean matching(boolean topLevel) {
|
||||
if (atSet(stopAt)) return true;
|
||||
|
||||
if (at(COLON) && !(tokenBeforePrevious == AT && (previousToken == IDENTIFIER || annotationTargets.contains(previousToken)))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
tokenBeforePrevious = previousToken;
|
||||
previousToken = tt();
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* functionType
|
||||
* : "(" (parameter | modifiers type){","}? ")" "->" type?
|
||||
@@ -2223,7 +2250,7 @@ public class JetParsing extends AbstractJetParsing {
|
||||
private boolean parseValueParameter(boolean rollbackOnFailure, boolean typeRequired) {
|
||||
PsiBuilder.Marker parameter = mark();
|
||||
|
||||
parseModifierListWithUnescapedAnnotations(TokenSet.create(COMMA, RPAR, COLON));
|
||||
parseModifierListWithUnescapedAnnotations(TokenSet.create(COMMA, RPAR));
|
||||
|
||||
if (at(VAR_KEYWORD) || at(VAL_KEYWORD)) {
|
||||
advance(); // VAR_KEYWORD | VAL_KEYWORD
|
||||
|
||||
Reference in New Issue
Block a user