IJ file type optimizations based on extension
#KTIJ-21668 Merge-request: KT-MR-6288 Merged-by: Vladimir Dolzhenko <Vladimir.Dolzhenko@jetbrains.com>
This commit is contained in:
committed by
Space
parent
4a6466e290
commit
efd5beb49b
+1
-1
@@ -33,7 +33,7 @@ open class KotlinMetadataStubBuilder(
|
|||||||
|
|
||||||
override fun buildFileStub(content: FileContent): PsiFileStub<*>? {
|
override fun buildFileStub(content: FileContent): PsiFileStub<*>? {
|
||||||
val virtualFile = content.file
|
val virtualFile = content.file
|
||||||
assert(virtualFile.fileType == fileType) { "Unexpected file type ${virtualFile.fileType}" }
|
assert(virtualFile.extension == fileType.defaultExtension || virtualFile.fileType == fileType) { "Unexpected file type ${virtualFile.fileType.name}" }
|
||||||
val file = readFile(virtualFile, content.content) ?: return null
|
val file = readFile(virtualFile, content.content) ?: return null
|
||||||
|
|
||||||
when (file) {
|
when (file) {
|
||||||
|
|||||||
+1
-1
@@ -40,7 +40,7 @@ abstract class KotlinMetadataDecompiler<out V : BinaryVersion>(
|
|||||||
|
|
||||||
abstract fun readFile(bytes: ByteArray, file: VirtualFile): KotlinMetadataStubBuilder.FileWithMetadata?
|
abstract fun readFile(bytes: ByteArray, file: VirtualFile): KotlinMetadataStubBuilder.FileWithMetadata?
|
||||||
|
|
||||||
override fun accepts(file: VirtualFile) = file.fileType == fileType
|
override fun accepts(file: VirtualFile) = file.extension == fileType.defaultExtension || file.fileType == fileType
|
||||||
|
|
||||||
override fun getStubBuilder() = metadataStubBuilder
|
override fun getStubBuilder() = metadataStubBuilder
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -33,7 +33,7 @@ class ClsJavaStubByVirtualFileCache {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun createStub(file: VirtualFile): PsiJavaFileStub? {
|
private fun createStub(file: VirtualFile): PsiJavaFileStub? {
|
||||||
if (file.fileType !== JavaClassFileType.INSTANCE) return null
|
if (file.extension != JavaClassFileType.INSTANCE.defaultExtension && file.fileType !== JavaClassFileType.INSTANCE) return null
|
||||||
|
|
||||||
try {
|
try {
|
||||||
return ClsFileImpl.buildFileStub(file, file.contentsToByteArray(false))
|
return ClsFileImpl.buildFileStub(file, file.contentsToByteArray(false))
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ class KotlinCoreEnvironment private constructor(
|
|||||||
private val VirtualFile.javaFiles: List<VirtualFile>
|
private val VirtualFile.javaFiles: List<VirtualFile>
|
||||||
get() = mutableListOf<VirtualFile>().apply {
|
get() = mutableListOf<VirtualFile>().apply {
|
||||||
VfsUtilCore.processFilesRecursively(this@javaFiles) { file ->
|
VfsUtilCore.processFilesRecursively(this@javaFiles) { file ->
|
||||||
if (file.fileType == JavaFileType.INSTANCE) {
|
if (file.extension == JavaFileType.DEFAULT_EXTENSION || file.fileType == JavaFileType.INSTANCE) {
|
||||||
add(file)
|
add(file)
|
||||||
}
|
}
|
||||||
true
|
true
|
||||||
|
|||||||
+1
-1
@@ -310,7 +310,7 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
// 'isDirectory' check is needed because otherwise directories such as 'frontend.java' would be recognized
|
// 'isDirectory' check is needed because otherwise directories such as 'frontend.java' would be recognized
|
||||||
// as Java source files, which makes no sense
|
// as Java source files, which makes no sense
|
||||||
override fun contains(file: VirtualFile) =
|
override fun contains(file: VirtualFile) =
|
||||||
file.fileType === JavaFileType.INSTANCE && !file.isDirectory
|
(file.extension == JavaFileType.DEFAULT_EXTENSION || file.fileType === JavaFileType.INSTANCE) && !file.isDirectory
|
||||||
|
|
||||||
override fun toString() = "All Java sources in the project"
|
override fun toString() = "All Java sources in the project"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@ inline fun List<KotlinSourceRoot>.forAllFiles(
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!vFile.isDirectory && vFile.fileType != KotlinFileType.INSTANCE) {
|
if (!vFile.isDirectory && vFile.extension != KotlinFileType.EXTENSION && vFile.fileType != KotlinFileType.INSTANCE) {
|
||||||
configuration.report(CompilerMessageSeverity.ERROR, "Source entry is not a Kotlin file: $sourceRootPath", reportLocation)
|
configuration.report(CompilerMessageSeverity.ERROR, "Source entry is not a Kotlin file: $sourceRootPath", reportLocation)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-1
@@ -62,7 +62,9 @@ class KotlinBinaryClassCache : Disposable {
|
|||||||
fun getKotlinBinaryClassOrClassFileContent(
|
fun getKotlinBinaryClassOrClassFileContent(
|
||||||
file: VirtualFile, fileContent: ByteArray? = null
|
file: VirtualFile, fileContent: ByteArray? = null
|
||||||
): KotlinClassFinder.Result? {
|
): KotlinClassFinder.Result? {
|
||||||
if (file.fileType !== JavaClassFileType.INSTANCE) return null
|
if (file.extension != JavaClassFileType.INSTANCE.defaultExtension &&
|
||||||
|
file.fileType !== JavaClassFileType.INSTANCE
|
||||||
|
) return null
|
||||||
|
|
||||||
if (file.name == PsiJavaModule.MODULE_INFO_CLS_FILE) return null
|
if (file.name == PsiJavaModule.MODULE_INFO_CLS_FILE) return null
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -9,7 +9,6 @@ import com.intellij.ide.highlighter.JavaClassFileType
|
|||||||
import com.intellij.openapi.diagnostic.ControlFlowException
|
import com.intellij.openapi.diagnostic.ControlFlowException
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.vfs.VirtualFile
|
import com.intellij.openapi.vfs.VirtualFile
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder.Result.KotlinClass
|
import org.jetbrains.kotlin.load.kotlin.KotlinClassFinder.Result.KotlinClass
|
||||||
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
import org.jetbrains.kotlin.load.kotlin.header.KotlinClassHeader
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -49,7 +48,7 @@ class VirtualFileKotlinClass private constructor(
|
|||||||
|
|
||||||
internal fun create(file: VirtualFile, fileContent: ByteArray?): KotlinClassFinder.Result? {
|
internal fun create(file: VirtualFile, fileContent: ByteArray?): KotlinClassFinder.Result? {
|
||||||
return perfCounter.time {
|
return perfCounter.time {
|
||||||
assert(file.fileType == JavaClassFileType.INSTANCE) { "Trying to read binary data from a non-class file $file" }
|
assert(file.extension == JavaClassFileType.INSTANCE.defaultExtension || file.fileType == JavaClassFileType.INSTANCE) { "Trying to read binary data from a non-class file $file" }
|
||||||
|
|
||||||
try {
|
try {
|
||||||
val byteContent = fileContent ?: file.contentsToByteArray(false)
|
val byteContent = fileContent ?: file.contentsToByteArray(false)
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ interface JavaModule {
|
|||||||
get() = moduleInfo.moduleName
|
get() = moduleInfo.moduleName
|
||||||
|
|
||||||
override val isSourceModule: Boolean
|
override val isSourceModule: Boolean
|
||||||
get() = moduleInfoFile.fileType == JavaFileType.INSTANCE
|
get() = moduleInfoFile.extension == JavaFileType.DEFAULT_EXTENSION || moduleInfoFile.fileType == JavaFileType.INSTANCE
|
||||||
|
|
||||||
override fun exports(packageFqName: FqName): Boolean {
|
override fun exports(packageFqName: FqName): Boolean {
|
||||||
return moduleInfo.exports.any { (fqName, toModules) ->
|
return moduleInfo.exports.any { (fqName, toModules) ->
|
||||||
|
|||||||
+2
-2
@@ -55,7 +55,7 @@ internal fun VirtualFile.getAnnotationEntries(project: Project): Iterable<KtAnno
|
|||||||
val psiFile: PsiFile = PsiManager.getInstance(project).findFile(this)
|
val psiFile: PsiFile = PsiManager.getInstance(project).findFile(this)
|
||||||
?: throw IllegalArgumentException("Unable to load PSI from $canonicalPath")
|
?: throw IllegalArgumentException("Unable to load PSI from $canonicalPath")
|
||||||
return (psiFile as? KtFile)?.annotationEntries
|
return (psiFile as? KtFile)?.annotationEntries
|
||||||
?: throw IllegalArgumentException("Unable to extract kotlin annotations from $name ($fileType)")
|
?: throw IllegalArgumentException("Unable to extract kotlin annotations from $name (${fileType.name})")
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -335,7 +335,7 @@ fun SourceCode.getKtFile(definition: ScriptDefinition, project: Project): KtFile
|
|||||||
val psiFile: PsiFile = PsiManager.getInstance(project).findFile(file)
|
val psiFile: PsiFile = PsiManager.getInstance(project).findFile(file)
|
||||||
?: throw IllegalArgumentException("Unable to load PSI from ${file.path}")
|
?: throw IllegalArgumentException("Unable to load PSI from ${file.path}")
|
||||||
(psiFile as? KtFile)
|
(psiFile as? KtFile)
|
||||||
?: throw IllegalArgumentException("Not a kotlin file ${file.path} (${file.fileType})")
|
?: throw IllegalArgumentException("Not a kotlin file ${file.path} (${file.fileType.name})")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user