Minor: prevent rare case when soft keyword was parsed as enum entry
This commit is contained in:
@@ -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,
|
private static final TokenSet TOPLEVEL_OBJECT_FIRST = TokenSet.create(TYPE_ALIAS_KEYWORD, TRAIT_KEYWORD, CLASS_KEYWORD,
|
||||||
FUN_KEYWORD, VAL_KEYWORD, PACKAGE_KEYWORD);
|
FUN_KEYWORD, VAL_KEYWORD, PACKAGE_KEYWORD);
|
||||||
private static final TokenSet ENUM_MEMBER_FIRST = TokenSet.create(TYPE_ALIAS_KEYWORD, TRAIT_KEYWORD, CLASS_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 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);
|
private static final TokenSet TYPE_PARAMETER_GT_RECOVERY_SET = TokenSet.create(WHERE_KEYWORD, LPAR, COLON, LBRACE, GT);
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
// test that inner keyword is not parsed as enum entry
|
||||||
|
public enum class A {
|
||||||
|
A
|
||||||
|
B
|
||||||
|
|
||||||
|
inner object
|
||||||
|
}
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
JetFile: namelessObjectAsEnumMember.kt
|
||||||
|
PACKAGE_DIRECTIVE
|
||||||
|
<empty list>
|
||||||
|
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
|
||||||
|
<empty list>
|
||||||
@@ -391,6 +391,12 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest {
|
|||||||
doParsingTest(fileName);
|
doParsingTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("namelessObjectAsEnumMember.kt")
|
||||||
|
public void testNamelessObjectAsEnumMember() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/namelessObjectAsEnumMember.kt");
|
||||||
|
doParsingTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("NestedComments.kt")
|
@TestMetadata("NestedComments.kt")
|
||||||
public void testNestedComments() throws Exception {
|
public void testNestedComments() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/NestedComments.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/NestedComments.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user