From 39939c72137f2db93d327530527155aa61d5b1c2 Mon Sep 17 00:00:00 2001 From: Tianyu Geng Date: Tue, 5 Oct 2021 15:23:16 -0700 Subject: [PATCH] FIR IDE: add helper checking if a type is flexbily nullable --- .../analysis/api/components/KtTypeInfoProvider.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeInfoProvider.kt b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeInfoProvider.kt index a08d24ba4da..d846a55e8bb 100644 --- a/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeInfoProvider.kt +++ b/analysis/analysis-api/src/org/jetbrains/kotlin/analysis/api/components/KtTypeInfoProvider.kt @@ -5,10 +5,13 @@ package org.jetbrains.kotlin.analysis.api.components -import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.analysis.api.symbols.KtClassOrObjectSymbol import org.jetbrains.kotlin.analysis.api.symbols.KtTypeAliasSymbol -import org.jetbrains.kotlin.analysis.api.types.* +import org.jetbrains.kotlin.analysis.api.types.KtFlexibleType +import org.jetbrains.kotlin.analysis.api.types.KtNonErrorClassType +import org.jetbrains.kotlin.analysis.api.types.KtType +import org.jetbrains.kotlin.analysis.api.types.KtTypeNullability +import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.name.ClassId public abstract class KtTypeInfoProvider : KtAnalysisSessionComponent() { @@ -34,6 +37,9 @@ public interface KtTypeInfoProviderMixIn : KtAnalysisSessionMixIn { /** Returns true if the type is explicitly marked as nullable. This means it's safe to assign `null` to a variable with this type. */ public val KtType.isMarkedNullable: Boolean get() = this.nullability == KtTypeNullability.NULLABLE + /** Returns true if the type is a platform flexible type and may or may not be marked nullable. */ + public val KtType.hasFlexibleNullability: Boolean get() = this is KtFlexibleType && this.upperBound.isMarkedNullable != this.lowerBound.isMarkedNullable + public val KtType.isUnit: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.UNIT) public val KtType.isInt: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.INT) public val KtType.isLong: Boolean get() = isClassTypeWithClassId(DefaultTypeClassIds.LONG)