From 072546ed5dd26f17f354c70814fefff26f20778e Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 26 Dec 2011 02:30:51 +0400 Subject: [PATCH] KT-868 unable to add a 'size' and 'empty' property to java.util.Map via extension methods --- .../jet/lang/parsing/JetParsing.java | 4 +- .../testData/psi/ExtensionsWithQNReceiver.jet | 3 + .../testData/psi/ExtensionsWithQNReceiver.txt | 77 +++++++++++++++++++ compiler/testData/psi/Properties_ERR.txt | 28 ++++--- 4 files changed, 99 insertions(+), 13 deletions(-) create mode 100644 compiler/testData/psi/ExtensionsWithQNReceiver.jet create mode 100644 compiler/testData/psi/ExtensionsWithQNReceiver.txt diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java index 2566b9b5291..cf12d7e12b5 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/parsing/JetParsing.java @@ -826,12 +826,12 @@ public class JetParsing extends AbstractJetParsing { boolean typeParametersDeclared = at(LT) ? parseTypeParameterList(TokenSet.create(IDENTIFIER, EQ, COLON, SEMICOLON)) : false; - TokenSet propertyNameFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON); + TokenSet propertyNameFollow = TokenSet.create(COLON, EQ, LBRACE, SEMICOLON, VAL_KEYWORD, VAR_KEYWORD, FUN_KEYWORD, CLASS_KEYWORD); myBuilder.disableJoiningComplexTokens(); // TODO: extract constant - int lastDot = matchTokenStreamPredicate(new FirstBefore( + int lastDot = matchTokenStreamPredicate(new LastBefore( new AtSet(DOT, SAFE_ACCESS), new AbstractTokenStreamPredicate() { @Override diff --git a/compiler/testData/psi/ExtensionsWithQNReceiver.jet b/compiler/testData/psi/ExtensionsWithQNReceiver.jet new file mode 100644 index 00000000000..78ae76a6a32 --- /dev/null +++ b/compiler/testData/psi/ExtensionsWithQNReceiver.jet @@ -0,0 +1,3 @@ +val java.util.Map<*,*>.size : Int + +fun java.util.Map<*,*>.size() : Int = 1 diff --git a/compiler/testData/psi/ExtensionsWithQNReceiver.txt b/compiler/testData/psi/ExtensionsWithQNReceiver.txt new file mode 100644 index 00000000000..1baa3c557fc --- /dev/null +++ b/compiler/testData/psi/ExtensionsWithQNReceiver.txt @@ -0,0 +1,77 @@ +JetFile: ExtensionsWithQNReceiver.jet + NAMESPACE + NAMESPACE_HEADER + + PROPERTY + PsiElement(val)('val') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('java') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('util') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Map') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + PsiElement(MUL)('*') + PsiElement(COMMA)(',') + TYPE_PROJECTION + PsiElement(MUL)('*') + PsiElement(GT)('>') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('size') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Int') + PsiWhiteSpace('\n\n') + FUN + PsiElement(fun)('fun') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('java') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('util') + PsiElement(DOT)('.') + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Map') + TYPE_ARGUMENT_LIST + PsiElement(LT)('<') + TYPE_PROJECTION + PsiElement(MUL)('*') + PsiElement(COMMA)(',') + TYPE_PROJECTION + PsiElement(MUL)('*') + PsiElement(GT)('>') + PsiElement(DOT)('.') + PsiElement(IDENTIFIER)('size') + VALUE_PARAMETER_LIST + PsiElement(LPAR)('(') + PsiElement(RPAR)(')') + PsiWhiteSpace(' ') + PsiElement(COLON)(':') + PsiWhiteSpace(' ') + TYPE_REFERENCE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('Int') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + INTEGER_CONSTANT + PsiElement(INTEGER_LITERAL)('1') \ No newline at end of file diff --git a/compiler/testData/psi/Properties_ERR.txt b/compiler/testData/psi/Properties_ERR.txt index 7105c2c18b5..8f0b36a5412 100644 --- a/compiler/testData/psi/Properties_ERR.txt +++ b/compiler/testData/psi/Properties_ERR.txt @@ -72,12 +72,15 @@ JetFile: Properties_ERR.jet PsiWhiteSpace(' ') TYPE_REFERENCE USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('foo') + PsiElement(DOT)('.') REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('foo') + PsiElement(IDENTIFIER)('bar') PsiElement(DOT)('.') - PsiElement(IDENTIFIER)('bar') - PsiErrorElement:Property getter or setter expected - PsiElement(DOT)('.') + PsiErrorElement:Expecting property name + PsiWhiteSpace('\n') PROPERTY PsiElement(val)('val') @@ -148,16 +151,19 @@ JetFile: Properties_ERR.jet PsiWhiteSpace(' ') TYPE_REFERENCE USER_TYPE + USER_TYPE + REFERENCE_EXPRESSION + PsiElement(IDENTIFIER)('f') + PsiElement(DOT)('.') REFERENCE_EXPRESSION - PsiElement(IDENTIFIER)('f') + PsiElement(IDENTIFIER)('d') PsiElement(DOT)('.') - PsiElement(IDENTIFIER)('d') - PsiErrorElement:Property getter or setter expected - PsiElement(DOT)('.') + PsiErrorElement:Expecting property name PsiElement(MINUS)('-') - PsiWhiteSpace(' ') - PsiElement(EQ)('=') - PsiWhiteSpace(' ') + PsiWhiteSpace(' ') + PsiElement(EQ)('=') + PsiWhiteSpace(' ') + REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('f') PsiWhiteSpace('\n\n') PROPERTY