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
+1
View File
@@ -1,4 +1,5 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=Test, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Test, superNames=[]]
MODIFIER_LIST:[annotation]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=Test, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Test, superNames=[]]
MODIFIER_LIST:[]
ANNOTATION_ENTRY:[hasValueArguments=false, shortName=Deprecated]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=foo]
MODIFIER_LIST:[]
ANNOTATION_ENTRY:[hasValueArguments=false, shortName=Deprecated]
@@ -1,4 +1,5 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=foo]
VALUE_PARAMETER_LIST:
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
PRIMARY_CONSTRUCTOR:
MODIFIER_LIST:[private]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
CLASS:[fqName=T, isEnumEntry=false, isInterface=true, isLocal=false, isTopLevel=true, name=T, superNames=[]]
PROPERTY:[fqName=obj, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=false, isExtension=false, isTopLevel=true, isVar=false, name=obj]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=C, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=C, superNames=[]]
CLASS_BODY:
OBJECT_DECLARATION:[fqName=C.Companion, isCompanion=true, isLocal=false, isObjectLiteral=false, isTopLevel=false, name=Companion, superNames=[]]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=More, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=More, superNames=[]]
CLASS_BODY:
PROPERTY:[fqName=More.test, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=true, isExtension=false, isTopLevel=false, isVar=false, name=test]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=C, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=C, superNames=[]]
TYPE_PARAMETER_LIST:
TYPE_PARAMETER:[fqName=null, isInVariance=false, isOutVariance=false, name=T]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=C, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=C, superNames=[]]
CLASS_BODY:
MODIFIER_LIST:[]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
PROPERTY:[fqName=foo, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=true, isVar=false, name=foo]
TYPE_REFERENCE:
DYNAMIC_TYPE:
+1
View File
@@ -3,3 +3,4 @@ PsiJetFileStubImpl[package=some.test]
DOT_QUALIFIED_EXPRESSION:
REFERENCE_EXPRESSION:[referencedName=some]
REFERENCE_EXPRESSION:[referencedName=test]
IMPORT_LIST:
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
OBJECT_DECLARATION:[fqName=<no name>, isCompanion=false, isLocal=false, isObjectLiteral=false, isTopLevel=true, name=null, superNames=[]]
CLASS_BODY:
FUN:[fqName=null, hasBlockBody=false, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=false, name=testing]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=some, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=some]
VALUE_PARAMETER_LIST:
VALUE_PARAMETER:[fqName=null, hasDefaultValue=false, hasValOrVar=false, isMutable=false, name=t]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
CLASS_BODY:
CLASS:[fqName=A.B, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=false, name=B, superNames=[]]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
CLASS:[fqName=T, isEnumEntry=false, isInterface=true, isLocal=false, isTopLevel=true, name=T, superNames=[]]
FUN:[fqName=foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=foo]
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
CLASS:[fqName=T, isEnumEntry=false, isInterface=true, isLocal=false, isTopLevel=true, name=T, superNames=[]]
FUN:[fqName=foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=foo]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
CLASS:[fqName=T, isEnumEntry=false, isInterface=true, isLocal=false, isTopLevel=true, name=T, superNames=[]]
FUN:[fqName=foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=foo]
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=foo]
MODIFIER_LIST:[]
ANNOTATION:
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=f]
MODIFIER_LIST:[public]
CLASS:[fqName=null, isEnumEntry=false, isInterface=false, isLocal=true, isTopLevel=false, name=C, superNames=[]]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=f, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=f]
VALUE_PARAMETER_LIST:
OBJECT_DECLARATION:[fqName=null, isCompanion=false, isLocal=true, isObjectLiteral=false, isTopLevel=false, name=foo, superNames=[]]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
CLASS:[fqName=T, isEnumEntry=false, isInterface=true, isLocal=false, isTopLevel=true, name=T, superNames=[]]
OBJECT_DECLARATION:[fqName=Test, isCompanion=false, isLocal=false, isObjectLiteral=false, isTopLevel=true, name=Test, superNames=[A, T]]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=Test, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Test, superNames=[]]
PRIMARY_CONSTRUCTOR:
VALUE_PARAMETER_LIST:
@@ -1,3 +1,4 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
PROPERTY:[fqName=a, hasDelegate=true, hasDelegateExpression=true, hasInitializer=false, hasReturnTypeRef=false, isExtension=false, isTopLevel=true, isVar=false, name=a]
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=some, hasBlockBody=false, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=true, isTopLevel=true, name=some]
TYPE_REFERENCE:
USER_TYPE:[isAbsoluteInRootPackage=false]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
PROPERTY:[fqName=p, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=false, isExtension=false, isTopLevel=true, isVar=false, name=p]
OBJECT_DECLARATION:[fqName=null, isCompanion=false, isLocal=true, isObjectLiteral=true, isTopLevel=false, name=null, superNames=[]]
CLASS_BODY:
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
PROPERTY:[fqName=p, hasDelegate=true, hasDelegateExpression=true, hasInitializer=false, hasReturnTypeRef=false, isExtension=false, isTopLevel=true, isVar=false, name=p]
OBJECT_DECLARATION:[fqName=null, isCompanion=false, isLocal=true, isObjectLiteral=true, isTopLevel=false, name=null, superNames=[]]
CLASS_BODY:
+1
View File
@@ -3,4 +3,5 @@ PsiJetFileStubImpl[package=test.testing]
DOT_QUALIFIED_EXPRESSION:
REFERENCE_EXPRESSION:[referencedName=test]
REFERENCE_EXPRESSION:[referencedName=testing]
IMPORT_LIST:
PROPERTY:[fqName=test.testing.some, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=false, isExtension=false, isTopLevel=true, isVar=false, name=some]
+1
View File
@@ -1,6 +1,7 @@
PsiJetFileStubImpl[package=test]
PACKAGE_DIRECTIVE:
REFERENCE_EXPRESSION:[referencedName=test]
IMPORT_LIST:
CLASS:[fqName=test.A, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=A, superNames=[]]
PRIMARY_CONSTRUCTOR:
VALUE_PARAMETER_LIST:
@@ -1,3 +1,4 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
PROPERTY:[fqName=c, hasDelegate=false, hasDelegateExpression=false, hasInitializer=true, hasReturnTypeRef=false, isExtension=false, isTopLevel=true, isVar=false, name=c]
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
FUN:[fqName=foo, hasBlockBody=true, hasBody=true, hasTypeParameterListBeforeFunctionName=false, isExtension=false, isTopLevel=true, name=foo]
MODIFIER_LIST:[]
ANNOTATION_ENTRY:[hasValueArguments=false, shortName=Deprecated]
+1
View File
@@ -1,6 +1,7 @@
PsiJetFileStubImpl[package=test]
PACKAGE_DIRECTIVE:
REFERENCE_EXPRESSION:[referencedName=test]
IMPORT_LIST:
CLASS:[fqName=test.SecondaryConstructors, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=SecondaryConstructors, superNames=[]]
PRIMARY_CONSTRUCTOR:
VALUE_PARAMETER_LIST:
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=Test, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=Test, superNames=[]]
MODIFIER_LIST:[enum]
CLASS_BODY:
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
PROPERTY:[fqName=v, hasDelegate=false, hasDelegateExpression=false, hasInitializer=false, hasReturnTypeRef=true, isExtension=false, isTopLevel=true, isVar=false, name=v]
TYPE_REFERENCE:
USER_TYPE:[isAbsoluteInRootPackage=false]
+1
View File
@@ -1,5 +1,6 @@
PsiJetFileStubImpl[package=]
PACKAGE_DIRECTIVE:
IMPORT_LIST:
CLASS:[fqName=a, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=a, superNames=[]]
MODIFIER_LIST:[annotation]
CLASS:[fqName=b, isEnumEntry=false, isInterface=false, isLocal=false, isTopLevel=true, name=b, superNames=[]]