From 92407c509f4384d82f9074227aaad4564942f08d Mon Sep 17 00:00:00 2001 From: Zalim Bashorov Date: Tue, 26 Jun 2018 14:35:51 +0300 Subject: [PATCH] IR BE common: add KotlinType based utils (cherry picked from commit d8be3a6) --- .../common/utils/kotlinTypeBasedUtils.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt diff --git a/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt new file mode 100644 index 00000000000..a77cc0d630e --- /dev/null +++ b/compiler/ir/backend.common/src/org/jetbrains/kotlin/backend/common/utils/kotlinTypeBasedUtils.kt @@ -0,0 +1,38 @@ +/* + * 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/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.backend.common.utils + +import org.jetbrains.kotlin.backend.common.descriptors.isFunctionOrKFunctionType +import org.jetbrains.kotlin.builtins.KotlinBuiltIns +import org.jetbrains.kotlin.builtins.isFunctionTypeOrSubtype +import org.jetbrains.kotlin.ir.symbols.IrClassSymbol +import org.jetbrains.kotlin.ir.types.IrType +import org.jetbrains.kotlin.ir.types.toIrType +import org.jetbrains.kotlin.ir.types.toKotlinType +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.types.CommonSupertypes +import org.jetbrains.kotlin.types.isNullable +import org.jetbrains.kotlin.types.typeUtil.isInterface +import org.jetbrains.kotlin.types.typeUtil.isSubtypeOf +import org.jetbrains.kotlin.types.typeUtil.isTypeParameter + +fun IrType.isNullable() = toKotlinType().isNullable() + +fun IrType.isInterface() = toKotlinType().isInterface() + +fun IrType.isPrimitiveArray() = KotlinBuiltIns.isPrimitiveArray(toKotlinType()) + +fun IrType.isTypeParameter() = toKotlinType().isTypeParameter() + +fun IrType.isFunctionOrKFunction() = toKotlinType().isFunctionOrKFunctionType + +fun IrType.isFunctionTypeOrSubtype() = toKotlinType().isFunctionTypeOrSubtype + +fun List.commonSupertype() = CommonSupertypes.commonSupertype(map(IrType::toKotlinType)).toIrType()!! + +fun IrType.isSubtypeOf(superType: IrType) = toKotlinType().isSubtypeOf(superType.toKotlinType()) + +fun IrType.isSubtypeOfClass(superClass: IrClassSymbol) = DescriptorUtils.isSubtypeOfClass(toKotlinType(), superClass.descriptor)