JVM IR: use a simpler way to check if class is local

This commit is contained in:
Alexander Udalov
2020-08-04 11:26:27 +02:00
parent 6db5ad7310
commit 0727e9055b
2 changed files with 2 additions and 12 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm.codegen
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
import org.jetbrains.kotlin.codegen.signature.JvmSignatureWriter
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Visibilities
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.types.IrType
@@ -62,7 +63,7 @@ private fun IrSimpleType.buildPossiblyInnerType(classifier: IrClass?, index: Int
val toIndex = classifier.typeParameters.size + index
if (!classifier.isInner) {
assert(toIndex == arguments.size || classifier.isLocalClass()) {
assert(toIndex == arguments.size || classifier.visibility == Visibilities.LOCAL) {
"${arguments.size - toIndex} trailing arguments were found in this type: ${render()}"
}
@@ -272,17 +272,6 @@ val IrDeclaration.parentAsClass: IrClass
get() = parent as? IrClass
?: error("Parent of this declaration is not a class: ${render()}")
fun IrClass.isLocalClass(): Boolean {
var current: IrDeclarationParent? = this
while (current != null && current !is IrPackageFragment) {
if (current is IrDeclarationWithVisibility && current.visibility == Visibilities.LOCAL)
return true
current = (current as? IrDeclaration)?.parent
}
return false
}
tailrec fun IrElement.getPackageFragment(): IrPackageFragment? {
if (this is IrPackageFragment) return this
return when (val parent = (this as? IrDeclaration)?.parent) {