[K/N] IR version of isObjCObjectType
This commit is contained in:
@@ -11,7 +11,11 @@ import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|||||||
import org.jetbrains.kotlin.ir.declarations.*
|
import org.jetbrains.kotlin.ir.declarations.*
|
||||||
import org.jetbrains.kotlin.ir.descriptors.IrBasedClassConstructorDescriptor
|
import org.jetbrains.kotlin.ir.descriptors.IrBasedClassConstructorDescriptor
|
||||||
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
|
||||||
|
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
|
||||||
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
import org.jetbrains.kotlin.ir.types.classOrNull
|
import org.jetbrains.kotlin.ir.types.classOrNull
|
||||||
|
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||||
|
import org.jetbrains.kotlin.ir.types.superTypes
|
||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.name.NativeForwardDeclarationKind
|
import org.jetbrains.kotlin.name.NativeForwardDeclarationKind
|
||||||
@@ -25,6 +29,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.parentsWithSelf
|
|||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.TypeUtils
|
import org.jetbrains.kotlin.types.TypeUtils
|
||||||
import org.jetbrains.kotlin.types.typeUtil.supertypes
|
import org.jetbrains.kotlin.types.typeUtil.supertypes
|
||||||
|
import org.jetbrains.kotlin.utils.DFS
|
||||||
|
|
||||||
private fun IrFunction.isFakeOverrideInProgressOfBuilding() = this is IrFunctionWithLateBinding && !isBound && isFakeOverride
|
private fun IrFunction.isFakeOverrideInProgressOfBuilding() = this is IrFunctionWithLateBinding && !isBound && isFakeOverride
|
||||||
|
|
||||||
@@ -54,6 +59,12 @@ private fun IrClass.selfOrAnySuperClass(pred: (IrClass) -> Boolean): Boolean {
|
|||||||
fun IrClass.isObjCClass() = this.packageFqName != interopPackageName &&
|
fun IrClass.isObjCClass() = this.packageFqName != interopPackageName &&
|
||||||
selfOrAnySuperClass { it.hasEqualFqName(objCObjectFqName) }
|
selfOrAnySuperClass { it.hasEqualFqName(objCObjectFqName) }
|
||||||
|
|
||||||
|
fun IrType.isObjCObjectType(): Boolean = DFS.ifAny(
|
||||||
|
/* nodes = */ listOf(this.classifierOrFail),
|
||||||
|
/* neighbors = */ { current -> current.superTypes().map { it.classifierOrFail } },
|
||||||
|
/* predicate = */ { (it as? IrClassSymbol)?.owner?.hasEqualFqName(objCObjectFqName) == true }
|
||||||
|
)
|
||||||
|
|
||||||
fun ClassDescriptor.isExternalObjCClass(): Boolean = this.isObjCClass() &&
|
fun ClassDescriptor.isExternalObjCClass(): Boolean = this.isObjCClass() &&
|
||||||
this.parentsWithSelf.filterIsInstance<ClassDescriptor>().any {
|
this.parentsWithSelf.filterIsInstance<ClassDescriptor>().any {
|
||||||
it.annotations.findAnnotation(externalObjCClassFqName) != null
|
it.annotations.findAnnotation(externalObjCClassFqName) != null
|
||||||
|
|||||||
+1
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.ir.util.*
|
|||||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.ir.objcinterop.isObjCObjectType
|
||||||
|
|
||||||
internal fun IrType.isCEnumType(): Boolean {
|
internal fun IrType.isCEnumType(): Boolean {
|
||||||
if (isNullable()) return false
|
if (isNullable()) return false
|
||||||
|
|||||||
-19
@@ -1,19 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
|
||||||
* that can be found in the LICENSE file.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package org.jetbrains.kotlin.backend.konan.ir
|
|
||||||
|
|
||||||
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
|
|
||||||
import org.jetbrains.kotlin.ir.objcinterop.isObjCObjectType
|
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
|
||||||
import org.jetbrains.kotlin.ir.types.toKotlinType
|
|
||||||
|
|
||||||
// This file contains some IR utilities which actually use descriptors.
|
|
||||||
// TODO: port this code to IR.
|
|
||||||
|
|
||||||
|
|
||||||
@OptIn(ObsoleteDescriptorBasedAPI::class)
|
|
||||||
internal fun IrType.isObjCObjectType() = this.toKotlinType().isObjCObjectType()
|
|
||||||
|
|
||||||
+1
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
|
|||||||
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
import org.jetbrains.kotlin.ir.visitors.acceptVoid
|
||||||
import org.jetbrains.kotlin.util.OperatorNameConventions
|
import org.jetbrains.kotlin.util.OperatorNameConventions
|
||||||
import org.jetbrains.kotlin.backend.konan.llvm.*
|
import org.jetbrains.kotlin.backend.konan.llvm.*
|
||||||
|
import org.jetbrains.kotlin.ir.objcinterop.isObjCObjectType
|
||||||
|
|
||||||
internal class ExternalModulesDFG(val allTypes: List<DataFlowIR.Type.Declared>,
|
internal class ExternalModulesDFG(val allTypes: List<DataFlowIR.Type.Declared>,
|
||||||
val publicTypes: Map<Long, DataFlowIR.Type.Public>,
|
val publicTypes: Map<Long, DataFlowIR.Type.Public>,
|
||||||
|
|||||||
Reference in New Issue
Block a user