diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt index 488d36d26e9..f91c2ab16f0 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/cir/factory/CirTypeFactory.kt @@ -11,9 +11,6 @@ import org.jetbrains.kotlin.descriptors.commonizer.cir.* import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirClassTypeImpl import org.jetbrains.kotlin.descriptors.commonizer.cir.impl.CirTypeAliasTypeImpl import org.jetbrains.kotlin.descriptors.commonizer.utils.* -import org.jetbrains.kotlin.descriptors.commonizer.utils.declarationDescriptor -import org.jetbrains.kotlin.descriptors.commonizer.utils.extractExpandedType -import org.jetbrains.kotlin.descriptors.commonizer.utils.internedClassId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.types.* @@ -118,6 +115,7 @@ object CirTypeFactory { ) } + @Suppress("MemberVisibilityCanBePrivate") fun createTypeParameterType( index: Int, isMarkedNullable: Boolean @@ -197,7 +195,12 @@ object CirTypeFactory { var index = index var parent = containingDeclaration - while ((parent as? ClassifierDescriptorWithTypeParameters)?.isInner != false) { + if (parent is CallableMemberDescriptor) { + parent = parent.containingDeclaration as? ClassifierDescriptorWithTypeParameters ?: return index + index += parent.declaredTypeParameters.size + } + + while (parent is ClassifierDescriptorWithTypeParameters) { parent = parent.containingDeclaration as? ClassifierDescriptorWithTypeParameters ?: break index += parent.declaredTypeParameters.size } diff --git a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/metadata/buildingVisitor.kt b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/metadata/buildingVisitor.kt index 9df8b1e14b1..11bd0e19ec6 100644 --- a/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/metadata/buildingVisitor.kt +++ b/native/commonizer/src/org/jetbrains/kotlin/descriptors/commonizer/metadata/buildingVisitor.kt @@ -148,9 +148,7 @@ private class MetadataBuildingVisitor(private val statsCollector: StatsCollector val fullClassName = classContext.currentPath.toString() val directNestedClasses: Collection = node.classes.mapNotNull { (nestedClassName, nestedClassNode) -> - val isInnerClass = classContext.get(nestedClassNode)?.isInner ?: return@mapNotNull null - val outerClassTypeParametersCount = if (isInnerClass) classTypeParametersCount else 0 - val nestedClassContext = classContext.classifierContext(nestedClassName, isInnerClass, outerClassTypeParametersCount) + val nestedClassContext = classContext.classifierContext(nestedClassName, classTypeParametersCount) val nestedClass: KmClass = nestedClassNode.accept(this, nestedClassContext)?.cast() ?: return@mapNotNull null classConsumer.consume(nestedClass) statsCollector?.logClass(nestedClass, nestedClassContext) @@ -305,6 +303,7 @@ internal data class MetadataBuildingVisitorContext( override fun toString() = "" } + @Suppress("MemberVisibilityCanBePrivate") class Module(val moduleName: Name) : Path() { override fun toString() = moduleName.strip() } @@ -355,17 +354,15 @@ internal data class MetadataBuildingVisitorContext( fun classifierContext( classifierName: Name, - isInner: Boolean = false, outerClassTypeParametersCount: Int = 0 ): MetadataBuildingVisitorContext { val newPath = when (currentPath) { is Path.Package -> { - check(!isInner) check(outerClassTypeParametersCount == 0) currentPath.nestedClassifier(classifierName) } is Path.Classifier -> { - check((isInner && outerClassTypeParametersCount >= 0) || (!isInner && outerClassTypeParametersCount == 0)) + check(outerClassTypeParametersCount >= 0) currentPath.nestedClassifier(classifierName) } else -> error("Illegal state") @@ -375,7 +372,7 @@ internal data class MetadataBuildingVisitorContext( targetIndex = targetIndex, target = target, isCommon = isCommon, - typeParameterIndexOffset = if (isInner) typeParameterIndexOffset + outerClassTypeParametersCount else 0, + typeParameterIndexOffset = typeParameterIndexOffset + outerClassTypeParametersCount, currentPath = newPath ) }