From 9e20e8150003153d8aab2d4572b055547203d098 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Sun, 9 Jan 2011 15:19:42 +0300 Subject: [PATCH] Need references in decomposer's properties list. --- .../lang/parsing/JetExpressionParsing.java | 6 ++--- .../jet/lang/parsing/JetParsing.java | 6 ++++- idea/testData/psi/Decomposers.txt | 15 +++++++---- idea/testData/psi/Decomposers_ERR.txt | 21 ++++++++++----- idea/testData/psi/EOLsOnRollback.txt | 3 ++- idea/testData/psi/LocalDeclarations.txt | 3 ++- idea/testData/psi/SimpleClassMembers.txt | 27 ++++++++++++------- idea/testData/psi/SimpleClassMembers_ERR.txt | 9 ++++--- 8 files changed, 60 insertions(+), 30 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java index 6b27590edac..b2088f3b510 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetExpressionParsing.java @@ -330,10 +330,10 @@ public class JetExpressionParsing extends AbstractJetParsing { else if (at(IDENTIFIER)) { if (JetParsing.MODIFIER_KEYWORD_MAP.containsKey(myBuilder.getTokenText())) { if (!parseLocalDeclaration()) { - parseSimpleName(); + parseSimpleNameExpression(); } } else { - parseSimpleName(); + parseSimpleNameExpression(); } } else if (at(LBRACE)) { @@ -544,7 +544,7 @@ public class JetExpressionParsing extends AbstractJetParsing { /* * SimpleName */ - private void parseSimpleName() { + public void parseSimpleNameExpression() { PsiBuilder.Marker simpleName = mark(); expect(IDENTIFIER, "Expecting an identifier [Interal error]"); simpleName.done(REFERENCE_EXPRESSION); diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 5cb88d7f762..46355cc3d00 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -276,7 +276,11 @@ public class JetParsing extends AbstractJetParsing { if (!at(RPAR)) { while (true) { parseAttributeList(); - if (!expect(IDENTIFIER, "Expecting a property name", TokenSet.create(COMMA, RPAR))) { + if (at(IDENTIFIER)) { + myExpressionParsing.parseSimpleNameExpression(); + } + else { + errorWithRecovery("Expecting a property name", TokenSet.create(COMMA, RPAR)); skipUntil(TokenSet.create(COMMA, RPAR, EOL_OR_SEMICOLON)); } if (!at(COMMA)) { diff --git a/idea/testData/psi/Decomposers.txt b/idea/testData/psi/Decomposers.txt index cc0b1e4b766..bcf41415905 100644 --- a/idea/testData/psi/Decomposers.txt +++ b/idea/testData/psi/Decomposers.txt @@ -5,10 +5,12 @@ JetFile: Decomposers.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(RPAR)(')') PsiWhiteSpace('\n') DECOMPOSER @@ -50,10 +52,12 @@ JetFile: Decomposers.jet PsiElement(IDENTIFIER)('bar') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(RPAR)(')') PsiWhiteSpace('\n') DECOMPOSER @@ -90,7 +94,8 @@ JetFile: Decomposers.jet PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('s') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('s') PsiElement(RPAR)(')') PsiWhiteSpace('\n') DECOMPOSER diff --git a/idea/testData/psi/Decomposers_ERR.txt b/idea/testData/psi/Decomposers_ERR.txt index aa3e2bd550d..0d1c7259966 100644 --- a/idea/testData/psi/Decomposers_ERR.txt +++ b/idea/testData/psi/Decomposers_ERR.txt @@ -5,7 +5,8 @@ JetFile: Decomposers_ERR.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiErrorElement:Expecting ',' or a closing ')' PsiWhiteSpace(' ') @@ -48,7 +49,8 @@ JetFile: Decomposers_ERR.jet PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(RPAR)(')') PsiWhiteSpace('\n') DECOMPOSER @@ -86,7 +88,8 @@ JetFile: Decomposers_ERR.jet PsiElement(IDENTIFIER)('a') PsiElement(RBRACKET)(']') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('s') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('s') PsiElement(COMMA)(',') PsiErrorElement:Expecting a property name @@ -114,10 +117,12 @@ JetFile: Decomposers_ERR.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(RPAR)(')') PsiErrorElement:Cannot define an extension decomposer on a tuple @@ -167,10 +172,12 @@ JetFile: Decomposers_ERR.jet PsiElement(IDENTIFIER)('bar') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(RPAR)(')') PsiErrorElement:Expecting namespace or top level declaration PsiElement(DOT)('.') diff --git a/idea/testData/psi/EOLsOnRollback.txt b/idea/testData/psi/EOLsOnRollback.txt index f2004af8192..6d8bd9bc36e 100644 --- a/idea/testData/psi/EOLsOnRollback.txt +++ b/idea/testData/psi/EOLsOnRollback.txt @@ -61,7 +61,8 @@ JetFile: EOLsOnRollback.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('df') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('df') PsiElement(RPAR)(')') PsiWhiteSpace('\n\n ') PROPERTY diff --git a/idea/testData/psi/LocalDeclarations.txt b/idea/testData/psi/LocalDeclarations.txt index e6ab84e64b1..5b29857b89c 100644 --- a/idea/testData/psi/LocalDeclarations.txt +++ b/idea/testData/psi/LocalDeclarations.txt @@ -153,7 +153,8 @@ JetFile: LocalDeclarations.jet PsiElement(IDENTIFIER)('foo') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('bar') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('bar') PsiElement(RPAR)(')') PsiWhiteSpace('\n') PsiElement(RBRACE)('}') \ No newline at end of file diff --git a/idea/testData/psi/SimpleClassMembers.txt b/idea/testData/psi/SimpleClassMembers.txt index 6e0bc94439a..8541fd0bab4 100644 --- a/idea/testData/psi/SimpleClassMembers.txt +++ b/idea/testData/psi/SimpleClassMembers.txt @@ -93,13 +93,16 @@ JetFile: SimpleClassMembers.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('b') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('b') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('c') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('c') PsiElement(RPAR)(')') PsiWhiteSpace('\n\n ') CONSTRUCTOR @@ -338,13 +341,16 @@ JetFile: SimpleClassMembers.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('b') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('b') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('c') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('c') PsiElement(RPAR)(')') PsiWhiteSpace('\n\n ') CONSTRUCTOR @@ -433,13 +439,16 @@ JetFile: SimpleClassMembers.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('b') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('b') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('c') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('c') PsiElement(RPAR)(')') PsiWhiteSpace('\n\n ') CONSTRUCTOR diff --git a/idea/testData/psi/SimpleClassMembers_ERR.txt b/idea/testData/psi/SimpleClassMembers_ERR.txt index 387ffd70c42..77e4f8f8e40 100644 --- a/idea/testData/psi/SimpleClassMembers_ERR.txt +++ b/idea/testData/psi/SimpleClassMembers_ERR.txt @@ -85,13 +85,16 @@ JetFile: SimpleClassMembers_ERR.jet PsiWhiteSpace(' ') DECOMPOSER_PROPERTY_LIST PsiElement(LPAR)('(') - PsiElement(IDENTIFIER)('a') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('a') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('b') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('b') PsiElement(COMMA)(',') PsiWhiteSpace(' ') - PsiElement(IDENTIFIER)('c') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('c') PsiErrorElement:Expecting ',' or a closing ')' PsiWhiteSpace('\n\n ')