Use nameSequence instead of file extensions to reduce memory allocations

#KTIJ-25470
This commit is contained in:
Vladimir Dolzhenko
2023-05-16 14:18:16 +02:00
committed by Space Team
parent 37c493f593
commit 4a1552e907
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.scripting.definitions
import com.intellij.ide.highlighter.JavaClassFileType
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.injected.editor.VirtualFileWindow
import com.intellij.openapi.application.ApplicationManager
@@ -69,6 +68,7 @@ fun findScriptDefinition(project: Project, script: SourceCode): ScriptDefinition
return scriptDefinitionProvider.findDefinition(script) ?: scriptDefinitionProvider.getDefaultDefinition()
}
private const val JAVA_CLASS_FILE_TYPE_DOT_DEFAULT_EXTENSION = ".class"
fun VirtualFile.isNonScript(): Boolean = when (this) {
is VirtualFileWindow -> {
// This file is an embedded Kotlin code snippet.
@@ -78,17 +78,17 @@ fun VirtualFile.isNonScript(): Boolean = when (this) {
if (isDirectory) {
true
} else {
val ext = extension
ext == KotlinFileType.EXTENSION ||
ext == JavaFileType.DEFAULT_EXTENSION ||
ext == JavaClassFileType.INSTANCE.defaultExtension ||
val nameSeq = nameSequence
nameSeq.endsWith(KotlinFileType.DOT_DEFAULT_EXTENSION) ||
nameSeq.endsWith(JavaFileType.DOT_DEFAULT_EXTENSION) ||
nameSeq.endsWith(JAVA_CLASS_FILE_TYPE_DOT_DEFAULT_EXTENSION) ||
!this.isKotlinFileType()
}
}
}
private fun VirtualFile.isKotlinFileType(): Boolean {
if (extension == KotlinParserDefinition.STD_SCRIPT_SUFFIX) return true
if (nameSequence.endsWith(KotlinParserDefinition.STD_SCRIPT_EXT)) return true
val typeRegistry = FileTypeRegistry.getInstance()
return typeRegistry.getFileTypeByFile(this) == KotlinFileType.INSTANCE ||