Add recovery for import lists in the middle of the file

Note, that it only works for top-level declarations

^KT-7185 Fixed
This commit is contained in:
Denis Zharkov
2018-12-21 13:53:10 +03:00
parent e6710b6fa2
commit 65e6e21d0f
10 changed files with 371 additions and 8 deletions
+8 -5
View File
@@ -14,9 +14,12 @@ KtFile: FileStart_ERR.kt
PsiElement(DOT)('.')
PsiErrorElement:Expecting a top level declaration
PsiElement(IDENTIFIER)('bar')
PsiErrorElement:imports are only allowed in the beginning of file
<empty list>
PsiWhiteSpace('\n')
PsiErrorElement:Expecting a top level declaration
PsiElement(IDENTIFIER)('import')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting a top level declaration
PsiElement(IDENTIFIER)('foo')
IMPORT_LIST
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
+14
View File
@@ -0,0 +1,14 @@
package a
import a1
<<<HEAD
import a2
import a3
>>> BAR
fun bar() {}
import a2
import a4.df
fun foo() {}
+90
View File
@@ -0,0 +1,90 @@
KtFile: importsWithConflict.kt
PACKAGE_DIRECTIVE
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a')
PsiWhiteSpace('\n\n')
IMPORT_LIST
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a1')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting a top level declaration
PsiElement(LT)('<')
PsiErrorElement:Expecting a top level declaration
PsiElement(LT)('<')
PsiErrorElement:Expecting a top level declaration
PsiElement(LT)('<')
PsiErrorElement:Expecting a top level declaration
PsiElement(IDENTIFIER)('HEAD')
PsiErrorElement:imports are only allowed in the beginning of file
<empty list>
PsiWhiteSpace('\n')
IMPORT_LIST
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a2')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a3')
PsiWhiteSpace('\n')
PsiErrorElement:Expecting a top level declaration
PsiElement(GT)('>')
PsiErrorElement:Expecting a top level declaration
PsiElement(GT)('>')
PsiErrorElement:Expecting a top level declaration
PsiElement(GT)('>')
PsiWhiteSpace(' ')
PsiErrorElement:Expecting a top level declaration
PsiElement(IDENTIFIER)('BAR')
PsiWhiteSpace('\n\n')
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('bar')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiErrorElement:imports are only allowed in the beginning of file
<empty list>
PsiWhiteSpace('\n\n')
IMPORT_LIST
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a2')
PsiWhiteSpace('\n')
IMPORT_DIRECTIVE
PsiElement(import)('import')
PsiWhiteSpace(' ')
DOT_QUALIFIED_EXPRESSION
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('a4')
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('df')
PsiWhiteSpace('\n\n')
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('foo')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')