Fix CCE caused by KotlinPackageSourcesMemberNamesIndex

FileContentImpl::getPsiFile is not-nullable and at the same time
it contains an explicit case of its fileType to LanguageFileType
that leads to the following exception in case when kt-file is marked as plain text:

java.lang.ClassCastException: com.intellij.openapi.file.exclude.EnforcedPlainTextFileTypeFactory$1 cannot be cast to com.intellij.openapi.fileTypes.LanguageFileType
	at com.intellij.util.indexing.FileContentImpl.createFileFromText(FileContentImpl.java:135)
	at com.intellij.util.indexing.FileContentImpl.getPsiFile(FileContentImpl.java:104)

 #EA-114338 Fixed
This commit is contained in:
Denis Zharkov
2018-02-19 10:31:33 +03:00
parent f790635b30
commit cef7205f14
@@ -30,10 +30,13 @@ object KotlinPackageSourcesMemberNamesIndex : FileBasedIndexExtension<String, Co
override fun getInputFilter(): FileBasedIndex.InputFilter =
FileBasedIndex.InputFilter { file -> file.extension == KotlinFileType.EXTENSION }
override fun getVersion(): Int = 1
override fun getVersion(): Int = 2
override fun getIndexer(): DataIndexer<String, Collection<String>, FileContent> =
DataIndexer { inputData ->
// Check if ".kt" file is marked as plain text
if (inputData.fileType !is KotlinFileType) return@DataIndexer emptyMap()
val ktFile = inputData.psiFile as? KtFile ?: return@DataIndexer emptyMap()
val packageName = ktFile.packageDirective?.fqName?.asString() ?: ""