S/LC: avoid building light classes for decompiled built-ins

This commit is contained in:
Jinseong Jeon
2022-09-15 00:58:31 -07:00
committed by Ilya Kirillov
parent 0b63f294ab
commit f9e086a6e3
@@ -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<KtClassOrObject>().any { it.hasExpectModifier() }) {
return true
}