From 3c8c20f8d29cb68eac2f02727aada5ae736d30c7 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Wed, 5 Jul 2023 09:27:04 +0000 Subject: [PATCH] Do not do unnecessary writeBooleanAttribute Merge-request: KT-MR-10945 Merged-by: Vladimir Dolzhenko --- .../stub/file/ClsKotlinBinaryClassCache.kt | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) 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 a87c6502bf9..7ed25e2c9e0 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 @@ -42,10 +42,11 @@ class ClsKotlinBinaryClassCache { return false } - getKotlinBinaryFromCache(file)?.let { + val binaryFromCache = getKotlinBinaryFromCache(file) + binaryFromCache?.let { return it.isKotlinBinary } - return kotlinJvmBinaryClass(file, fileContent, JvmMetadataVersion.INSTANCE) != null + return kotlinJvmBinaryClass(file, fileContent, JvmMetadataVersion.INSTANCE, binaryFromCache?.isKotlinBinary) != null } fun getKotlinBinaryClass(file: VirtualFile, fileContent: ByteArray? = null): KotlinJvmBinaryClass? { @@ -54,13 +55,19 @@ class ClsKotlinBinaryClassCache { return null } - return kotlinJvmBinaryClass(file, fileContent, cached?.headerData?.metadataVersion ?: JvmMetadataVersion.INSTANCE) + return kotlinJvmBinaryClass( + file, + fileContent, + cached?.headerData?.metadataVersion ?: JvmMetadataVersion.INSTANCE, + cached?.isKotlinBinary + ) } private fun kotlinJvmBinaryClass( file: VirtualFile, fileContent: ByteArray?, - jvmMetadataVersion: JvmMetadataVersion + jvmMetadataVersion: JvmMetadataVersion, + isKotlinBinary: Boolean? ): KotlinJvmBinaryClass? { if (ModelBranch.getFileBranch(file) != null) return null val classFileContent = try { @@ -75,7 +82,7 @@ class ClsKotlinBinaryClassCache { val kotlinBinaryClass = classFileContent?.toKotlinJvmBinaryClass() val isKotlinBinaryClass = kotlinBinaryClass != null - if (file is VirtualFileWithId) { + if (file is VirtualFileWithId && isKotlinBinaryClass != isKotlinBinary) { attributeService.writeBooleanAttribute(KOTLIN_IS_COMPILED_FILE_ATTRIBUTE, file, isKotlinBinaryClass) } @@ -88,7 +95,8 @@ class ClsKotlinBinaryClassCache { } fun getKotlinBinaryClassHeaderData(file: VirtualFile, fileContent: ByteArray? = null): KotlinBinaryClassHeaderData? { - getKotlinBinaryFromCache(file)?.let { cached -> + val kotlinBinaryData = getKotlinBinaryFromCache(file) + kotlinBinaryData?.let { cached -> if (!cached.isKotlinBinary) { return null } @@ -97,7 +105,8 @@ class ClsKotlinBinaryClassCache { } } - val kotlinBinaryClass = kotlinJvmBinaryClass(file, fileContent, JvmMetadataVersion.INSTANCE) ?: return null + val kotlinBinaryClass = + kotlinJvmBinaryClass(file, fileContent, JvmMetadataVersion.INSTANCE, kotlinBinaryData?.isKotlinBinary) ?: return null return createHeaderInfo(kotlinBinaryClass) }