From f9e086a6e318bacd56e56ccd7145db009698cfa1 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 15 Sep 2022 00:58:31 -0700 Subject: [PATCH] S/LC: avoid building light classes for decompiled built-ins --- .../asJava/classes/KtLightClassForSourceDeclaration.kt | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt index cd8d67403a2..905333ff503 100644 --- a/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt +++ b/analysis/light-classes-base/src/org/jetbrains/kotlin/asJava/classes/KtLightClassForSourceDeclaration.kt @@ -21,13 +21,13 @@ import org.jetbrains.kotlin.asJava.ImpreciseResolveResult import org.jetbrains.kotlin.asJava.ImpreciseResolveResult.UNSURE import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.config.JvmDefaultMode -import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.load.java.structure.LightClassOriginKind import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.debugText.getDebugText import org.jetbrains.kotlin.psi.psiUtil.hasExpectModifier import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.psi.stubs.KotlinClassOrObjectStub +import org.jetbrains.kotlin.serialization.deserialization.builtins.BuiltInSerializerProtocol import javax.swing.Icon abstract class KtLightClassForSourceDeclaration( @@ -211,11 +211,19 @@ fun KtClassOrObject.defaultJavaAncestorQualifiedName(): String? { } fun KtClassOrObject.shouldNotBeVisibleAsLightClass(): Boolean { + val containingFile = containingFile if (containingFile is KtCodeFragment) { // Avoid building light classes for code fragments return true } + // Avoid building light classes for decompiled built-ins + if ((containingFile as? KtFile)?.isCompiled == true && + containingFile.virtualFile.extension == BuiltInSerializerProtocol.BUILTINS_FILE_EXTENSION + ) { + return true + } + if (parentsWithSelf.filterIsInstance().any { it.hasExpectModifier() }) { return true }