Create import list psi element even if no directives are present

Fix a problem where deleting last import directive via "optimize imports" could lead to incorrect psi structure resulting in CCE, see EA-64291
New imports are inserted at the head (after package directive if present) of the file (before any comments) if no imports were present
Add test for inserting import to file where a first statement is a comment
Drop code dealing with non-existing import list in ImportInsertHelperImpl
AbstractQuickFixTest: check for unexpected actions before changes to the file are made as it relies on the first line having specific format
This commit is contained in:
Pavel V. Talanov
2015-06-08 15:13:33 +03:00
parent 4c4f730c53
commit 07d35d305e
461 changed files with 1275 additions and 472 deletions
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: AnnotatedExpressions.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -44,4 +46,4 @@ JetFile: AnnotatedExpressions.kt
REFERENCE_EXPRESSION
PsiElement(this)('this')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -12,6 +12,8 @@ JetFile: Annotations.kt
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
@@ -327,4 +329,4 @@ JetFile: Annotations.kt
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: AnnotationsOnPatterns.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -48,4 +50,4 @@ JetFile: AnnotationsOnPatterns.kt
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -12,6 +12,8 @@ JetFile: Annotations_ERR.kt
PsiElement(DOT)('.')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('goo')
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
@@ -283,4 +285,4 @@ JetFile: Annotations_ERR.kt
CLASS_BODY
PsiElement(LBRACE)('{')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -53,6 +53,8 @@ JetFile: ShortAnnotations.kt
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('aa')
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n\n')
CLASS
MODIFIER_LIST
@@ -993,4 +995,4 @@ JetFile: ShortAnnotations.kt
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: TypeAnnotations.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
PsiElement(class)('class')
PsiWhiteSpace(' ')
@@ -194,4 +196,4 @@ JetFile: TypeAnnotations.kt
TYPE_REFERENCE
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('Unit')
PsiElement(IDENTIFIER)('Unit')
@@ -1,6 +1,8 @@
JetFile: annotationAtFileStart.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
MODIFIER_LIST
ANNOTATION_ENTRY
@@ -13,4 +15,4 @@ JetFile: annotationAtFileStart.kt
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('A')
PsiElement(IDENTIFIER)('A')
@@ -1,6 +1,8 @@
JetFile: annotationValueArgumentsAmbiguity.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -108,4 +110,4 @@ JetFile: annotationValueArgumentsAmbiguity.kt
PsiElement(INTEGER_LITERAL)('1')
PsiElement(RPAR)(')')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
@@ -1,6 +1,8 @@
JetFile: declarationsJustAtTyped.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
MODIFIER_LIST
PsiElement(private)('private')
@@ -304,4 +306,4 @@ JetFile: declarationsJustAtTyped.kt
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: enumEntries.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
MODIFIER_LIST
PsiElement(enum)('enum')
@@ -169,4 +171,4 @@ JetFile: enumEntries.kt
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
@@ -1,6 +1,8 @@
JetFile: expressionJustAtTyped.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -220,4 +222,4 @@ JetFile: expressionJustAtTyped.kt
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
@@ -1,10 +1,12 @@
JetFile: modifierAtFileStart.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
MODIFIER_LIST
PsiElement(public)('@public')
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('A')
PsiElement(IDENTIFIER)('A')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: primaryConstructor.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
PsiElement(class)('class')
PsiWhiteSpace(' ')
@@ -215,4 +217,4 @@ JetFile: primaryConstructor.kt
PsiElement(RBRACKET)(']')
VALUE_PARAMETER_LIST
PsiElement(LPAR)('(')
PsiElement(RPAR)(')')
PsiElement(RPAR)(')')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: validDeclarations.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
MODIFIER_LIST
PsiElement(private)('private')
@@ -577,4 +579,4 @@ JetFile: validDeclarations.kt
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: validExpressions.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -372,4 +374,4 @@ JetFile: validExpressions.kt
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: forParameters.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -520,4 +522,4 @@ JetFile: forParameters.kt
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: lambda.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -338,4 +340,4 @@ JetFile: lambda.kt
<empty list>
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: lambdaRecovery.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -304,4 +306,4 @@ JetFile: lambdaRecovery.kt
<empty list>
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: basic.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
MODIFIER_LIST
ANNOTATION
@@ -153,4 +155,4 @@ JetFile: basic.kt
PsiWhiteSpace('\n ')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: recovery.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
CLASS
MODIFIER_LIST
ANNOTATION
@@ -132,4 +134,4 @@ JetFile: recovery.kt
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
+3 -1
View File
@@ -1,6 +1,8 @@
JetFile: multiDeclaration.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
PsiElement(fun)('fun')
PsiWhiteSpace(' ')
@@ -156,4 +158,4 @@ JetFile: multiDeclaration.kt
INTEGER_CONSTANT
PsiElement(INTEGER_LITERAL)('1')
PsiWhiteSpace('\n')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
@@ -4,6 +4,8 @@ JetFile: fileAnnotationInWrongPlace.kt
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n\n')
PROPERTY
MODIFIER_LIST
@@ -101,4 +103,4 @@ JetFile: fileAnnotationInWrongPlace.kt
PsiWhiteSpace('\n')
PsiElement(trait)('trait')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T')
@@ -34,4 +34,6 @@ JetFile: manyAnnotationBlocks.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
@@ -32,4 +32,6 @@ JetFile: manyInOneAnnotationBlock.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
@@ -57,4 +57,6 @@ JetFile: nonFIleAnnotationBeforePackage.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('boo')
PsiElement(IDENTIFIER)('boo')
IMPORT_LIST
<empty list>
+3 -1
View File
@@ -14,4 +14,6 @@ JetFile: single.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
@@ -1,6 +1,8 @@
JetFile: withoutFileAnnotationAndPackageDeclaration.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
MODIFIER_LIST
ANNOTATION_ENTRY
@@ -37,4 +39,4 @@ JetFile: withoutFileAnnotationAndPackageDeclaration.kt
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('ann')
PsiElement(IDENTIFIER)('ann')
+4 -2
View File
@@ -9,9 +9,11 @@ JetFile: withoutPackage.kt
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n')
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n')
FUN
MODIFIER_LIST
ANNOTATION_ENTRY
@@ -53,4 +55,4 @@ JetFile: withoutPackage.kt
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
@@ -9,9 +9,11 @@ JetFile: withoutPackageWithSimpleAnnotation.kt
USER_TYPE
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiWhiteSpace('\n')
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n')
FUN
MODIFIER_LIST
ANNOTATION_ENTRY
@@ -49,4 +51,4 @@ JetFile: withoutPackageWithSimpleAnnotation.kt
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
@@ -4,6 +4,8 @@ JetFile: fileAnnotationInWrongPlace.kt
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n\n')
PROPERTY
MODIFIER_LIST
@@ -90,4 +92,4 @@ JetFile: fileAnnotationInWrongPlace.kt
PsiWhiteSpace('\n')
PsiElement(interface)('interface')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('T')
PsiElement(IDENTIFIER)('T')
@@ -36,4 +36,6 @@ JetFile: manyAnnotationBlocks.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
@@ -31,4 +31,6 @@ JetFile: manyInOneAnnotationBlock.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
@@ -83,4 +83,6 @@ JetFile: nonFIleAnnotationBeforePackage.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('boo')
PsiElement(IDENTIFIER)('boo')
IMPORT_LIST
<empty list>
+3 -1
View File
@@ -17,4 +17,6 @@ JetFile: single.kt
PsiElement(package)('package')
PsiWhiteSpace(' ')
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('bar')
PsiElement(IDENTIFIER)('bar')
IMPORT_LIST
<empty list>
@@ -1,6 +1,8 @@
JetFile: withoutFileAnnotationAndPackageDeclaration.kt
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
FUN
MODIFIER_LIST
ANNOTATION
@@ -39,4 +41,4 @@ JetFile: withoutFileAnnotationAndPackageDeclaration.kt
PsiWhiteSpace(' ')
PsiElement(class)('class')
PsiWhiteSpace(' ')
PsiElement(IDENTIFIER)('ann')
PsiElement(IDENTIFIER)('ann')
@@ -12,9 +12,11 @@ JetFile: withoutPackage.kt
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n')
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n')
FUN
MODIFIER_LIST
ANNOTATION
@@ -57,4 +59,4 @@ JetFile: withoutPackage.kt
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')
@@ -12,9 +12,11 @@ JetFile: withoutPackageWithSimpleAnnotation.kt
REFERENCE_EXPRESSION
PsiElement(IDENTIFIER)('foo')
PsiElement(RBRACKET)(']')
PsiWhiteSpace('\n')
PACKAGE_DIRECTIVE
<empty list>
IMPORT_LIST
<empty list>
PsiWhiteSpace('\n')
FUN
MODIFIER_LIST
ANNOTATION_ENTRY
@@ -54,4 +56,4 @@ JetFile: withoutPackageWithSimpleAnnotation.kt
PsiWhiteSpace(' ')
BLOCK
PsiElement(LBRACE)('{')
PsiElement(RBRACE)('}')
PsiElement(RBRACE)('}')