[kotlin] Optimize file.fileType calculation

#KTIJ-20095
This commit is contained in:
Vladimir Dolzhenko
2022-01-29 23:55:56 +01:00
committed by Space
parent bc3142f4da
commit 289b838d77
@@ -16,6 +16,10 @@
package org.jetbrains.kotlin.load.java
import com.intellij.ide.highlighter.JavaClassFileType
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.openapi.fileTypes.FileTypeRegistry
import com.intellij.openapi.fileTypes.UnknownFileType
import com.intellij.openapi.project.Project
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.psi.search.DelegatingGlobalSearchScope
@@ -68,9 +72,22 @@ abstract class AbstractJavaClassFinder : JavaClassFinder {
override val topPackageNames: Set<String>?
get() = (myBaseScope as? TopPackageNamesProvider)?.topPackageNames
override fun contains(file: VirtualFile) =
(file.isDirectory || file.fileType !== KotlinFileType.INSTANCE) &&
myBaseScope.contains(file)
override fun contains(file: VirtualFile): Boolean {
// KTIJ-20095: optimization to avoid heavy file.fileType calculation
val extension = file.extension
val ktFile =
when {
file.isDirectory -> false
extension == KotlinFileType.EXTENSION -> true
extension == JavaFileType.DEFAULT_EXTENSION || extension == JavaClassFileType.INSTANCE.defaultExtension -> false
else -> {
val fileTypeByFileName = FileTypeRegistry.getInstance().getFileTypeByFileName(file.name)
fileTypeByFileName == KotlinFileType.INSTANCE || fileTypeByFileName == UnknownFileType.INSTANCE &&
FileTypeRegistry.getInstance().isFileOfType(file, KotlinFileType.INSTANCE)
}
}
return !ktFile && myBaseScope.contains(file)
}
val base: GlobalSearchScope = myBaseScope