[K/N][IR][caches] Fixed problems with inline classes
Fixes https://youtrack.jetbrains.com/issue/KT-50978
This commit is contained in:
@@ -75,6 +75,7 @@ class IrLazyClass(
|
|||||||
private fun shouldBuildStub(descriptor: DeclarationDescriptor): Boolean =
|
private fun shouldBuildStub(descriptor: DeclarationDescriptor): Boolean =
|
||||||
descriptor !is DeclarationDescriptorWithVisibility ||
|
descriptor !is DeclarationDescriptorWithVisibility ||
|
||||||
!DescriptorVisibilities.isPrivate(descriptor.visibility) ||
|
!DescriptorVisibilities.isPrivate(descriptor.visibility) ||
|
||||||
|
// This exception is needed for K/N caches usage.
|
||||||
isObject && descriptor is ClassConstructorDescriptor
|
isObject && descriptor is ClassConstructorDescriptor
|
||||||
|
|
||||||
override var typeParameters: List<IrTypeParameter> by lazyVar(stubGenerator.lock) {
|
override var typeParameters: List<IrTypeParameter> by lazyVar(stubGenerator.lock) {
|
||||||
|
|||||||
+3
-1
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.backend.konan
|
package org.jetbrains.kotlin.backend.konan
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.backend.common.atMostOne
|
||||||
import org.jetbrains.kotlin.backend.common.ir.isTopLevel
|
import org.jetbrains.kotlin.backend.common.ir.isTopLevel
|
||||||
import org.jetbrains.kotlin.backend.konan.descriptors.findPackage
|
import org.jetbrains.kotlin.backend.konan.descriptors.findPackage
|
||||||
import org.jetbrains.kotlin.backend.konan.ir.getSuperClassNotAny
|
import org.jetbrains.kotlin.backend.konan.ir.getSuperClassNotAny
|
||||||
@@ -305,7 +306,8 @@ internal object IrTypeInlineClassesSupport : InlineClassesSupport<IrClass, IrTyp
|
|||||||
|
|
||||||
override fun getInlinedClassUnderlyingType(clazz: IrClass): IrType =
|
override fun getInlinedClassUnderlyingType(clazz: IrClass): IrType =
|
||||||
clazz.constructors.firstOrNull { it.isPrimary }?.valueParameters?.single()?.type
|
clazz.constructors.firstOrNull { it.isPrimary }?.valueParameters?.single()?.type
|
||||||
?: clazz.declarations.filterIsInstance<IrProperty>().single { it.backingField != null }.backingField!!.type
|
?: clazz.declarations.filterIsInstance<IrProperty>().atMostOne { it.backingField != null }?.backingField?.type
|
||||||
|
?: clazz.inlineClassRepresentation!!.underlyingType
|
||||||
|
|
||||||
override fun getPackageFqName(clazz: IrClass) =
|
override fun getPackageFqName(clazz: IrClass) =
|
||||||
clazz.packageFqName
|
clazz.packageFqName
|
||||||
|
|||||||
Reference in New Issue
Block a user