From 45864d91d69d048bea5e99b178c33b3fa9db74de Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Sun, 2 Jan 2011 17:09:47 +0300 Subject: [PATCH] Bug in properties fixed --- .../jet/lang/parsing/JetParsing.java | 8 ++-- idea/testData/psi/Properties.jet | 5 ++- idea/testData/psi/Properties.txt | 41 ++++++++++++++++++- 3 files changed, 49 insertions(+), 5 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 7670d42d5c6..850eb5d7e0d 100644 --- a/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/idea/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -726,6 +726,8 @@ public class JetParsing extends AbstractJetParsing { } public JetNodeType parseProperty(boolean local) { + // TODO: how to write an extension ptoperty for a generic type? (val List.i -- what is T?!) + assert at(VAL_KEYWORD) || at(VAR_KEYWORD); advance(); // VAL_KEYWORD or VAR_KEYWORD @@ -744,9 +746,9 @@ public class JetParsing extends AbstractJetParsing { @Override public boolean matching(boolean topLevel) { if (topLevel && (at(EQ) || at(COLON))) return true; - if (topLevel && lookahead(1) == IDENTIFIER) { - IElementType lookahead2 = lookahead(2); - return lookahead2 != LT && lookahead2 != DOT; + if (topLevel && at(IDENTIFIER)) { + IElementType lookahead = lookahead(1); + return lookahead != LT && lookahead != DOT; } return false; } diff --git a/idea/testData/psi/Properties.jet b/idea/testData/psi/Properties.jet index d8ffd4e646b..4a83dbd182d 100644 --- a/idea/testData/psi/Properties.jet +++ b/idea/testData/psi/Properties.jet @@ -69,4 +69,7 @@ fun foo() { val foo = 5 get() = 5 set(int : x) = 5 -} \ No newline at end of file +} + +val IList.lastIndex : Int + get() = this.size - 1 diff --git a/idea/testData/psi/Properties.txt b/idea/testData/psi/Properties.txt index 9771e28117e..198b2b8a11f 100644 --- a/idea/testData/psi/Properties.txt +++ b/idea/testData/psi/Properties.txt @@ -678,4 +678,43 @@ JetFile: Properties.jet INTEGER_CONSTANT PsiElement(INTEGER_LITERAL)('5') PsiWhiteSpace('\n') - PsiElement(RBRACE)('}') \ No newline at end of file + PsiElement(RBRACE)('}') + PsiWhiteSpace('\n\n') + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('IList') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('T') + PsiElement(GT)('>') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('lastIndex') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + PsiElement(IDENTIFIER)('Int') + PsiWhiteSpace('\n ') + PROPERTY_ACCESSOR + PsiElement(get)('get') + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + BINARY_EXPRESSION + DOT_QIALIFIED_EXPRESSION + PsiElement(this)('this') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('size') + PsiWhiteSpace(' ') + PsiElement(MINUS)('-') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') \ No newline at end of file