From 0ca2f3f336039d315af6cafb379a4286cdb96164 Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Thu, 5 Mar 2015 16:41:37 +0300 Subject: [PATCH] Minor: prevent rare case when soft keyword was parsed as enum entry --- .../jetbrains/kotlin/parsing/JetParsing.java | 2 +- .../psi/namelessObjectAsEnumMember.kt | 7 ++++ .../psi/namelessObjectAsEnumMember.txt | 37 +++++++++++++++++++ .../parsing/JetParsingTestGenerated.java | 6 +++ 4 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/psi/namelessObjectAsEnumMember.kt create mode 100644 compiler/testData/psi/namelessObjectAsEnumMember.txt diff --git a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java index a0bcbd0eb98..350a84805e1 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/parsing/JetParsing.java @@ -46,7 +46,7 @@ public class JetParsing extends AbstractJetParsing { private static final TokenSet TOPLEVEL_OBJECT_FIRST = TokenSet.create(TYPE_ALIAS_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD, FUN_KEYWORD, VAL_KEYWORD, PACKAGE_KEYWORD); private static final TokenSet ENUM_MEMBER_FIRST = TokenSet.create(TYPE_ALIAS_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD, - FUN_KEYWORD, VAL_KEYWORD, IDENTIFIER); + FUN_KEYWORD, VAL_KEYWORD, IDENTIFIER, OBJECT_KEYWORD); private static final TokenSet CLASS_NAME_RECOVERY_SET = TokenSet.orSet(TokenSet.create(LT, LPAR, COLON, LBRACE), TOPLEVEL_OBJECT_FIRST); private static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, LPAR, COLON, LBRACE, GT); diff --git a/compiler/testData/psi/namelessObjectAsEnumMember.kt b/compiler/testData/psi/namelessObjectAsEnumMember.kt new file mode 100644 index 00000000000..d7dab7ddf26 --- /dev/null +++ b/compiler/testData/psi/namelessObjectAsEnumMember.kt @@ -0,0 +1,7 @@ +// test that inner keyword is not parsed as enum entry +public enum class A { + A + B + + inner object +} diff --git a/compiler/testData/psi/namelessObjectAsEnumMember.txt b/compiler/testData/psi/namelessObjectAsEnumMember.txt new file mode 100644 index 00000000000..db773842f92 --- /dev/null +++ b/compiler/testData/psi/namelessObjectAsEnumMember.txt @@ -0,0 +1,37 @@ +JetFile: namelessObjectAsEnumMember.kt + PACKAGE_DIRECTIVE + + CLASS + PsiComment(EOL_COMMENT)('// test that inner keyword is not parsed as enum entry') + PsiWhiteSpace('\n') + MODIFIER_LIST + PsiElement(public)('public') + PsiWhiteSpace(' ') + PsiElement(enum)('enum') + PsiWhiteSpace(' ') + PsiElement(class)('class') + PsiWhiteSpace(' ') + PsiElement(IDENTIFIER)('A') + PsiWhiteSpace(' ') + CLASS_BODY + PsiElement(LBRACE)('{') + PsiWhiteSpace('\n ') + ENUM_ENTRY + OBJECT_DECLARATION_NAME + PsiElement(IDENTIFIER)('A') + PsiWhiteSpace('\n ') + ENUM_ENTRY + OBJECT_DECLARATION_NAME + PsiElement(IDENTIFIER)('B') + PsiWhiteSpace('\n\n ') + OBJECT_DECLARATION + MODIFIER_LIST + PsiElement(inner)('inner') + PsiWhiteSpace(' ') + PsiElement(object)('object') + PsiWhiteSpace('\n') + OBJECT_DECLARATION_NAME + PsiErrorElement:Name expected + PsiElement(RBRACE)('}') + PsiErrorElement:Expecting '}' to close enum class body + \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java index d76f18b3a73..03227796fdd 100644 --- a/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/parsing/JetParsingTestGenerated.java @@ -391,6 +391,12 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest { doParsingTest(fileName); } + @TestMetadata("namelessObjectAsEnumMember.kt") + public void testNamelessObjectAsEnumMember() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/namelessObjectAsEnumMember.kt"); + doParsingTest(fileName); + } + @TestMetadata("NestedComments.kt") public void testNestedComments() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/NestedComments.kt");