[kotlin] Optimize file.fileType calculation
#KTIJ-20095
This commit is contained in:
committed by
Space
parent
bc3142f4da
commit
289b838d77
+20
-3
@@ -16,6 +16,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.load.java
|
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.project.Project
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
import com.intellij.psi.search.DelegatingGlobalSearchScope
|
||||||
@@ -68,9 +72,22 @@ abstract class AbstractJavaClassFinder : JavaClassFinder {
|
|||||||
override val topPackageNames: Set<String>?
|
override val topPackageNames: Set<String>?
|
||||||
get() = (myBaseScope as? TopPackageNamesProvider)?.topPackageNames
|
get() = (myBaseScope as? TopPackageNamesProvider)?.topPackageNames
|
||||||
|
|
||||||
override fun contains(file: VirtualFile) =
|
override fun contains(file: VirtualFile): Boolean {
|
||||||
(file.isDirectory || file.fileType !== KotlinFileType.INSTANCE) &&
|
// KTIJ-20095: optimization to avoid heavy file.fileType calculation
|
||||||
myBaseScope.contains(file)
|
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
|
val base: GlobalSearchScope = myBaseScope
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user