Fixed KT-6128 Code completion does not work inside function literal if it's dependant on declarations below

#KT-6128 Fixed
This commit is contained in:
Valentin Kipyatkov
2014-10-24 00:36:14 +04:00
parent 357ea7a995
commit 304c826b47
11 changed files with 516 additions and 422 deletions
@@ -1250,7 +1250,7 @@ public class JetExpressionParsing extends AbstractJetParsing {
error(severalStatementsError); error(severalStatementsError);
} }
else { else {
errorUntil(severalStatementsError, TokenSet.create(EOL_OR_SEMICOLON)); errorUntil(severalStatementsError, TokenSet.create(EOL_OR_SEMICOLON, LBRACE, RBRACE));
} }
} }
} }
+2 -4
View File
@@ -491,8 +491,6 @@ JetFile: FunctionLiterals.kt
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiErrorElement:Expecting '} PsiWhiteSpace('\n')
<empty list> PsiElement(RBRACE)('}')
+154 -154
View File
@@ -234,158 +234,158 @@ JetFile: FunctionLiterals_ERR.kt
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ') PsiWhiteSpace('\n ')
FUNCTION_LITERAL_EXPRESSION FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL FUNCTION_LITERAL
PsiElement(LBRACE)('{') PsiElement(LBRACE)('{')
BLOCK BLOCK
BINARY_EXPRESSION BINARY_EXPRESSION
DOT_QUALIFIED_EXPRESSION DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('T') PsiElement(IDENTIFIER)('T')
PsiElement(DOT)('.') PsiElement(DOT)('.')
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('t') PsiElement(IDENTIFIER)('t')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
OPERATION_REFERENCE OPERATION_REFERENCE
PsiElement(MINUS)('-') PsiElement(MINUS)('-')
PARENTHESIZED PARENTHESIZED
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
BINARY_WITH_TYPE BINARY_WITH_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ')
OPERATION_REFERENCE
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('A')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line)
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('a')
PsiElement(RBRACE)('}') PsiWhiteSpace(' ')
PsiWhiteSpace('\n\n ') OPERATION_REFERENCE
FUNCTION_LITERAL_EXPRESSION PsiElement(COLON)(':')
FUNCTION_LITERAL PsiWhiteSpace(' ')
PsiElement(LBRACE)('{') TYPE_REFERENCE
VALUE_PARAMETER_LIST USER_TYPE
VALUE_PARAMETER REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('A')
PsiWhiteSpace(' ') PsiElement(RPAR)(')')
PsiErrorElement:To specify a type of a parameter or a return type, use the full notation: {(parameter : Type) : ReturnType -> ...} PsiWhiteSpace(' ')
PsiElement(COLON)(':') PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line)
PsiWhiteSpace(' ') PsiElement(ARROW)('->')
TYPE_REFERENCE PsiWhiteSpace(' ')
USER_TYPE PsiElement(IDENTIFIER)('a')
REFERENCE_EXPRESSION PsiElement(RBRACE)('}')
PsiElement(IDENTIFIER)('b') PsiWhiteSpace('\n\n ')
PsiWhiteSpace(' ') FUNCTION_LITERAL_EXPRESSION
VALUE_PARAMETER FUNCTION_LITERAL
PsiErrorElement:Expecting parameter name PsiElement(LBRACE)('{')
<empty list> VALUE_PARAMETER_LIST
PsiElement(ARROW)('->') VALUE_PARAMETER
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('a')
BLOCK PsiWhiteSpace(' ')
REFERENCE_EXPRESSION PsiErrorElement:To specify a type of a parameter or a return type, use the full notation: {(parameter : Type) : ReturnType -> ...}
PsiElement(IDENTIFIER)('f') PsiElement(COLON)(':')
PsiElement(RBRACE)('}') PsiWhiteSpace(' ')
PsiWhiteSpace('\n ') TYPE_REFERENCE
FUNCTION_LITERAL_EXPRESSION USER_TYPE
FUNCTION_LITERAL REFERENCE_EXPRESSION
PsiElement(LBRACE)('{') PsiElement(IDENTIFIER)('b')
TYPE_REFERENCE PsiWhiteSpace(' ')
USER_TYPE VALUE_PARAMETER
REFERENCE_EXPRESSION PsiErrorElement:Expecting parameter name
PsiElement(IDENTIFIER)('T') <empty list>
PsiElement(DOT)('.') PsiElement(ARROW)('->')
VALUE_PARAMETER_LIST PsiWhiteSpace(' ')
PsiErrorElement:Expecting a parameter list in parentheses (...) BLOCK
PsiElement(IDENTIFIER)('a') REFERENCE_EXPRESSION
PsiWhiteSpace(' ') PsiElement(IDENTIFIER)('f')
VALUE_PARAMETER PsiElement(RBRACE)('}')
PsiErrorElement:Expecting parameter declaration PsiWhiteSpace('\n ')
<empty list> FUNCTION_LITERAL_EXPRESSION
PsiElement(COLON)(':') FUNCTION_LITERAL
PsiWhiteSpace(' ') PsiElement(LBRACE)('{')
TYPE_REFERENCE TYPE_REFERENCE
USER_TYPE USER_TYPE
REFERENCE_EXPRESSION REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b') PsiElement(IDENTIFIER)('T')
PsiErrorElement:Expecting ') PsiElement(DOT)('.')
<empty list> VALUE_PARAMETER_LIST
PsiWhiteSpace(' ') PsiErrorElement:Expecting a parameter list in parentheses (...)
PsiElement(ARROW)('->') PsiElement(IDENTIFIER)('a')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
BLOCK VALUE_PARAMETER
REFERENCE_EXPRESSION PsiErrorElement:Expecting parameter declaration
PsiElement(IDENTIFIER)('f') <empty list>
PsiElement(RBRACE)('}') PsiElement(COLON)(':')
PsiWhiteSpace('\n\n ') PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION TYPE_REFERENCE
FUNCTION_LITERAL USER_TYPE
PsiElement(LBRACE)('{') REFERENCE_EXPRESSION
VALUE_PARAMETER_LIST PsiElement(IDENTIFIER)('b')
PsiElement(LPAR)('(') PsiErrorElement:Expecting ')
VALUE_PARAMETER <empty list>
PsiElement(IDENTIFIER)('a') PsiWhiteSpace(' ')
PsiElement(COMMA)(',') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
VALUE_PARAMETER BLOCK
PsiElement(IDENTIFIER)('b') REFERENCE_EXPRESSION
PsiElement(RPAR)(')') PsiElement(IDENTIFIER)('f')
PsiErrorElement:An -> is expected PsiElement(RBRACE)('}')
<empty list> PsiWhiteSpace('\n\n ')
PsiWhiteSpace(' ') FUNCTION_LITERAL_EXPRESSION
BLOCK FUNCTION_LITERAL
<empty list> PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}') VALUE_PARAMETER_LIST
PsiWhiteSpace('\n ') PsiElement(LPAR)('(')
FUNCTION_LITERAL_EXPRESSION VALUE_PARAMETER
FUNCTION_LITERAL PsiElement(IDENTIFIER)('a')
PsiElement(LBRACE)('{') PsiElement(COMMA)(',')
TYPE_REFERENCE PsiWhiteSpace(' ')
USER_TYPE VALUE_PARAMETER
REFERENCE_EXPRESSION PsiElement(IDENTIFIER)('b')
PsiElement(IDENTIFIER)('T') PsiElement(RPAR)(')')
PsiElement(DOT)('.') PsiErrorElement:An -> is expected
VALUE_PARAMETER_LIST <empty list>
PsiElement(LPAR)('(') PsiWhiteSpace(' ')
VALUE_PARAMETER BLOCK
PsiElement(IDENTIFIER)('a') <empty list>
PsiElement(COMMA)(',') PsiElement(RBRACE)('}')
PsiWhiteSpace(' ') PsiWhiteSpace('\n ')
VALUE_PARAMETER FUNCTION_LITERAL_EXPRESSION
PsiElement(IDENTIFIER)('b') FUNCTION_LITERAL
PsiElement(RPAR)(')') PsiElement(LBRACE)('{')
PsiErrorElement:An -> is expected TYPE_REFERENCE
<empty list> USER_TYPE
PsiWhiteSpace(' ') REFERENCE_EXPRESSION
BLOCK PsiElement(IDENTIFIER)('T')
<empty list> PsiElement(DOT)('.')
PsiElement(RBRACE)('}') VALUE_PARAMETER_LIST
PsiWhiteSpace('\n ') PsiElement(LPAR)('(')
FUNCTION_LITERAL_EXPRESSION VALUE_PARAMETER
FUNCTION_LITERAL PsiElement(IDENTIFIER)('a')
PsiElement(LBRACE)('{') PsiElement(COMMA)(',')
VALUE_PARAMETER_LIST PsiWhiteSpace(' ')
VALUE_PARAMETER VALUE_PARAMETER
PsiElement(IDENTIFIER)('a') PsiElement(IDENTIFIER)('b')
PsiElement(COMMA)(',') PsiElement(RPAR)(')')
PsiWhiteSpace(' ') PsiErrorElement:An -> is expected
VALUE_PARAMETER <empty list>
PsiErrorElement:Expecting parameter name PsiWhiteSpace(' ')
PsiElement(RBRACE)('}') BLOCK
PsiErrorElement:Expecting '->' or ',' <empty list>
<empty list> PsiElement(RBRACE)('}')
PsiWhiteSpace('\n') PsiWhiteSpace('\n ')
BLOCK FUNCTION_LITERAL_EXPRESSION
<empty list> FUNCTION_LITERAL
PsiElement(RBRACE)('}') PsiElement(LBRACE)('{')
PsiErrorElement:Expecting '}' VALUE_PARAMETER_LIST
<empty list> VALUE_PARAMETER
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_PARAMETER
PsiErrorElement:Expecting parameter name
PsiElement(RBRACE)('}')
PsiErrorElement:Expecting '->' or ','
<empty list>
PsiWhiteSpace('\n')
BLOCK
<empty list>
PsiElement(RBRACE)('}')
PsiErrorElement:Expecting '}
<empty list>
@@ -704,259 +704,254 @@ JetFile: functionLiterals.kt
PsiElement(ARROW)('->') PsiElement(ARROW)('->')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(INTEGER_LITERAL)('1') PsiElement(INTEGER_LITERAL)('1')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
DOT_QUALIFIED_EXPRESSION
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiElement(DOT)('.')
PARENTHESIZED
PsiElement(LPAR)('(')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('y')
PsiElement(RPAR)(')')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
DOT_QUALIFIED_EXPRESSION
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
DOT_QUALIFIED_EXPRESSION
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
PARENTHESIZED
PsiElement(LPAR)('(')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Baz')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Baz')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting an element
PsiElement(RPAR)(')')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiErrorElement:Expecting ')' PsiWhiteSpace('\n')
<empty list> PsiElement(COMMA)(',')
PsiErrorElement:Expecting '} PsiWhiteSpace(' ')
<empty list> VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
DOT_QUALIFIED_EXPRESSION
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiElement(DOT)('.')
PARENTHESIZED
PsiElement(LPAR)('(')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('y')
PsiElement(RPAR)(')')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Pair')
VALUE_ARGUMENT_LIST
PsiElement(LPAR)('(')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('b')
PsiElement(RPAR)(')')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
DOT_QUALIFIED_EXPRESSION
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
BLOCK
DOT_QUALIFIED_EXPRESSION
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
PARENTHESIZED
PsiElement(LPAR)('(')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Baz')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
TYPE_ARGUMENT_LIST
PsiElement(LT)('<')
TYPE_PROJECTION
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(GT)('>')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(COMMA)(',')
PsiWhiteSpace(' ')
VALUE_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
TYPE_REFERENCE
USER_TYPE
USER_TYPE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Foo')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Bar')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Baz')
PsiElement(DOT)('.')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
VALUE_PARAMETER
PsiElement(IDENTIFIER)('x')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
PsiElement(COLON)(':')
PsiWhiteSpace(' ')
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Int')
PsiWhiteSpace(' ')
PsiElement(ARROW)('->')
PsiWhiteSpace(' ')
BLOCK
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
@@ -0,0 +1,7 @@
// checks that invalid characters (inserted e.g. by completion) inside single-line block do not cause wrong scopes for declarations below
fun foo() {
x { v.s$ }
val v = ""
}
fun bar() { }
@@ -0,0 +1,62 @@
JetFile: InvalidCharInSingleLineLambda.kt
PsiComment(EOL_COMMENT)('// checks that invalid characters (inserted e.g. by completion) inside single-line block do not cause wrong scopes for declarations below')
PsiWhiteSpace('\n')
PACKAGE_DIRECTIVE
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n ')
CALL_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('x')
PsiWhiteSpace(' ')
FUNCTION_LITERAL_ARGUMENT
FUNCTION_LITERAL_EXPRESSION
FUNCTION_LITERAL
PsiElement(LBRACE)('{')
PsiWhiteSpace(' ')
BLOCK
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('v')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('s')
PsiErrorElement:Unexpected tokens (use ';' to separate expressions on the same line)
PsiElement(BAD_CHARACTER)('$')
PsiWhiteSpace(' ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n ')
PROPERTY
PsiElement(val)('val')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('v')
PsiWhiteSpace(' ')
PsiElement(EQ)('=')
PsiWhiteSpace(' ')
STRING_TEMPLATE
PsiElement(OPEN_QUOTE)('"')
PsiElement(CLOSING_QUOTE)('"')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n')
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiWhiteSpace(' ')
PsiElement(RBRACE)('}')
@@ -625,14 +625,19 @@ JetFile: SameLineStatementRecovery.kt
PsiElement(IDENTIFIER)('get') PsiElement(IDENTIFIER)('get')
PsiElement(LPAR)('(') PsiElement(LPAR)('(')
PsiElement(RPAR)(')') PsiElement(RPAR)(')')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(LBRACE)('{') FUNCTION_LITERAL_EXPRESSION
PsiWhiteSpace(' ') FUNCTION_LITERAL
PsiElement(return)('return') PsiElement(LBRACE)('{')
PsiWhiteSpace(' ') PsiWhiteSpace(' ')
PsiElement(INTEGER_LITERAL)('12') BLOCK
PsiWhiteSpace(' ') RETURN
PsiElement(RBRACE)('}') PsiElement(return)('return')
PsiWhiteSpace(' ')
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('12')
PsiWhiteSpace(' ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n') PsiWhiteSpace('\n')
PsiElement(RBRACE)('}') PsiElement(RBRACE)('}')
PsiWhiteSpace('\n\n') PsiWhiteSpace('\n\n')
@@ -1269,6 +1269,12 @@ public class JetParsingTestGenerated extends AbstractJetParsingTest {
doParsingTest(fileName); doParsingTest(fileName);
} }
@TestMetadata("InvalidCharInSingleLineLambda.kt")
public void testInvalidCharInSingleLineLambda() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/recovery/InvalidCharInSingleLineLambda.kt");
doParsingTest(fileName);
}
@TestMetadata("kt2172.kt") @TestMetadata("kt2172.kt")
public void testKt2172() throws Exception { public void testKt2172() throws Exception {
String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/recovery/kt2172.kt"); String fileName = JetTestUtils.navigationMetadata("compiler/testData/psi/recovery/kt2172.kt");
@@ -0,0 +1,9 @@
fun foo(p: Iterable<D>) {
p.filter { it.<caret> }
}
trait D {
fun bar()
}
// EXIST: bar
@@ -364,6 +364,12 @@ public class JSBasicCompletionTestGenerated extends AbstractJSBasicCompletionTes
doTest(fileName); doTest(fileName);
} }
@TestMetadata("InFunctionLiteral.kt")
public void testInFunctionLiteral() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InFunctionLiteral.kt");
doTest(fileName);
}
@TestMetadata("InGlobalPropertyInitializer.kt") @TestMetadata("InGlobalPropertyInitializer.kt")
public void testInGlobalPropertyInitializer() throws Exception { public void testInGlobalPropertyInitializer() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InGlobalPropertyInitializer.kt"); String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InGlobalPropertyInitializer.kt");
@@ -364,6 +364,12 @@ public class JvmBasicCompletionTestGenerated extends AbstractJvmBasicCompletionT
doTest(fileName); doTest(fileName);
} }
@TestMetadata("InFunctionLiteral.kt")
public void testInFunctionLiteral() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InFunctionLiteral.kt");
doTest(fileName);
}
@TestMetadata("InGlobalPropertyInitializer.kt") @TestMetadata("InGlobalPropertyInitializer.kt")
public void testInGlobalPropertyInitializer() throws Exception { public void testInGlobalPropertyInitializer() throws Exception {
String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InGlobalPropertyInitializer.kt"); String fileName = JetTestUtils.navigationMetadata("idea/testData/completion/basic/common/InGlobalPropertyInitializer.kt");