From cdba1c2dbe7ead1a28f1546c9c5c5ea693018479 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Thu, 11 Jun 2015 20:34:03 +0300 Subject: [PATCH] Parsing: allow accessors with '@' annotation on the same line --- .../jetbrains/kotlin/parsing/JetParsing.java | 2 +- .../psi/PropertiesFollowedByInitializers.kt | 2 + .../psi/PropertiesFollowedByInitializers.txt | 59 ++++++++++++++++++- 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java index 72bde262ada..e2559f8f3f9 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java @@ -1389,7 +1389,7 @@ public class JetParsing extends AbstractJetParsing { if (!at(LPAR)) { // Account for Jet-114 (val a : int get {...}) - TokenSet ACCESSOR_FIRST_OR_PROPERTY_END = TokenSet.orSet(MODIFIER_KEYWORDS, TokenSet.create(LBRACKET, GET_KEYWORD, SET_KEYWORD, EOL_OR_SEMICOLON, RBRACE)); + TokenSet ACCESSOR_FIRST_OR_PROPERTY_END = TokenSet.orSet(MODIFIER_KEYWORDS, TokenSet.create(LBRACKET, AT, GET_KEYWORD, SET_KEYWORD, EOL_OR_SEMICOLON, RBRACE)); if (!atSet(ACCESSOR_FIRST_OR_PROPERTY_END)) { errorUntil("Accessor body expected", TokenSet.orSet(ACCESSOR_FIRST_OR_PROPERTY_END, TokenSet.create(LBRACE, LPAR, EQ))); } diff --git a/compiler/testData/psi/PropertiesFollowedByInitializers.kt b/compiler/testData/psi/PropertiesFollowedByInitializers.kt index 3502844c45d..93fd66d0437 100644 --- a/compiler/testData/psi/PropertiesFollowedByInitializers.kt +++ b/compiler/testData/psi/PropertiesFollowedByInitializers.kt @@ -15,6 +15,8 @@ class Foo() { var b5 : Int get abstract set var b6 : Int get [a] abstract set var b7 : Int get [a] abstract {} + var b8 : Int get @a abstract set + var b9 : Int get @a abstract {} } class PublicVar() { public var foo = 0; } diff --git a/compiler/testData/psi/PropertiesFollowedByInitializers.txt b/compiler/testData/psi/PropertiesFollowedByInitializers.txt index b3d16824db9..416c2623610 100644 --- a/compiler/testData/psi/PropertiesFollowedByInitializers.txt +++ b/compiler/testData/psi/PropertiesFollowedByInitializers.txt @@ -262,6 +262,63 @@ JetFile: PropertiesFollowedByInitializers.kt PsiWhiteSpace(' ') PsiElement(abstract)('abstract') PsiWhiteSpace(' ') + FUN + PsiErrorElement:Expecting member declaration + + BLOCK + PsiElement(LBRACE)('{') + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(var)('var') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('b8') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Int') + PsiWhiteSpace(' ') + PROPERTY_ACCESSOR + PsiElement(get)('get') + PsiWhiteSpace(' ') + PROPERTY_ACCESSOR + MODIFIER_LIST + ANNOTATION_ENTRY + PsiElement(AT)('@') + CONSTRUCTOR_CALLEE + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace(' ') + PsiElement(abstract)('abstract') + PsiWhiteSpace(' ') + PsiElement(set)('set') + PsiWhiteSpace('\n ') + PROPERTY + PsiElement(var)('var') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('b9') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Int') + PsiWhiteSpace(' ') + PROPERTY_ACCESSOR + PsiElement(get)('get') + PsiWhiteSpace(' ') + PsiErrorElement:Property getter or setter expected + PsiElement(AT)('@') + PsiElement(IDENTIFIER)('a') + PsiWhiteSpace(' ') + PsiElement(abstract)('abstract') + PsiWhiteSpace(' ') FUN PsiErrorElement:Expecting member declaration @@ -463,4 +520,4 @@ JetFile: PropertiesFollowedByInitializers.kt PsiElement(EQ)('=') PsiWhiteSpace(' ') REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('now') + PsiElement(IDENTIFIER)('now') \ No newline at end of file