commit | a4d3c7e187acc3291b1404b2e650c15ebd33dcfb | [log] [tgz] |
---|---|---|
author | Mikhail Zarechenskiy <mikhail.zarechenskiy@jetbrains.com> | Mon May 02 11:58:31 2022 +0200 |
committer | Mikhail Zarechenskiy <mikhail.zarechenskiy@jetbrains.com> | Mon May 02 12:01:41 2022 +0200 |
tree | a9c563d7e9ba129b7a228a35f8cf5490fd13acb9 | |
parent | 15d58aff923433f0be30f33f666336a7358aaf33 [diff] |
KotlinBinaryClassCache: restore missing fixes after merge to Kotlin repo - Avoid lookups in branches: https://github.com/JetBrains/intellij-community/commit/c904c56bb4ac9764935aed09e2107636e2e5bb68 - Don't fail during index of incorrect class files: https://github.com/JetBrains/intellij-community/commit/3af051e3d30e773d9dfe6cb388a42387b8636c6b ^KTIJ-21472 In Progress Also, this commit fixes projectLeak in Intellij Aggregator _LastInSuiteTest.testProjectLeak[Java Tests / 3]
diff --git a/analysis/decompiled/decompiler-to-file-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/file/ClsKotlinBinaryClassCache.kt b/analysis/decompiled/decompiler-to-file-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/file/ClsKotlinBinaryClassCache.kt index 336d132..f8e0bcf 100644 --- a/analysis/decompiled/decompiler-to-file-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/file/ClsKotlinBinaryClassCache.kt +++ b/analysis/decompiled/decompiler-to-file-stubs/src/org/jetbrains/kotlin/analysis/decompiler/stub/file/ClsKotlinBinaryClassCache.kt
@@ -6,7 +6,9 @@ package org.jetbrains.kotlin.analysis.decompiler.stub.file import com.intellij.ide.highlighter.JavaClassFileType +import com.intellij.model.ModelBranch import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.diagnostic.ControlFlowException import com.intellij.openapi.util.Key import com.intellij.openapi.vfs.VirtualFile import com.intellij.openapi.vfs.VirtualFileWithId @@ -59,7 +61,15 @@ file: VirtualFile, fileContent: ByteArray? ): KotlinJvmBinaryClass? { - val kotlinBinaryClass = KotlinBinaryClassCache.getKotlinBinaryClassOrClassFileContent(file, fileContent)?.toKotlinJvmBinaryClass() + if (ModelBranch.getFileBranch(file) != null) return null + val classFileContent = try { + KotlinBinaryClassCache.getKotlinBinaryClassOrClassFileContent(file, fileContent) + } catch (e: Exception) { + if (e is ControlFlowException) throw e + return null + } + + val kotlinBinaryClass = classFileContent?.toKotlinJvmBinaryClass() val isKotlinBinaryClass = kotlinBinaryClass != null if (file is VirtualFileWithId) {