JVM IR: use a simpler way to check if class is local
This commit is contained in:
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.backend.jvm.codegen
|
|||||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.codegen.signature.JvmSignatureWriter
|
import org.jetbrains.kotlin.codegen.signature.JvmSignatureWriter
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
import org.jetbrains.kotlin.ir.types.IrSimpleType
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
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
|
val toIndex = classifier.typeParameters.size + index
|
||||||
if (!classifier.isInner) {
|
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()}"
|
"${arguments.size - toIndex} trailing arguments were found in this type: ${render()}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -272,17 +272,6 @@ val IrDeclaration.parentAsClass: IrClass
|
|||||||
get() = parent as? IrClass
|
get() = parent as? IrClass
|
||||||
?: error("Parent of this declaration is not a class: ${render()}")
|
?: 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? {
|
tailrec fun IrElement.getPackageFragment(): IrPackageFragment? {
|
||||||
if (this is IrPackageFragment) return this
|
if (this is IrPackageFragment) return this
|
||||||
return when (val parent = (this as? IrDeclaration)?.parent) {
|
return when (val parent = (this as? IrDeclaration)?.parent) {
|
||||||
|
|||||||
Reference in New Issue
Block a user