diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 1913952e3c0..fd3fd60bd75 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiTypeElement import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.diagnostics.WhenMissingCase import org.jetbrains.kotlin.fir.FirEffectiveVisibility import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.PrivateForInline @@ -16,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.WhenMissingCase import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.ConeKotlinType diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index cea196d68cd..4b5d643edf6 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiTypeElement import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.diagnostics.WhenMissingCase import org.jetbrains.kotlin.fir.FirEffectiveVisibility import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.analysis.diagnostics.SourceElementPositioningStrategies @@ -16,7 +17,6 @@ import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirClass import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.WhenMissingCase import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt index 4f8c8b6b190..744030776be 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDiagnosticRenderers.kt @@ -6,11 +6,11 @@ package org.jetbrains.kotlin.fir.analysis.diagnostics import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.diagnostics.WhenMissingCase import org.jetbrains.kotlin.diagnostics.rendering.Renderer import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.expressions.WhenMissingCase import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.renderWithType import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirWhenExhaustivenessTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirWhenExhaustivenessTransformer.kt index 238d60a951c..97b96c8c9ff 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirWhenExhaustivenessTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirWhenExhaustivenessTransformer.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.diagnostics.WhenMissingCase import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/ExhaustivenessStatus.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/ExhaustivenessStatus.kt index cd041f73d9f..85693f0fdec 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/ExhaustivenessStatus.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/ExhaustivenessStatus.kt @@ -5,8 +5,7 @@ package org.jetbrains.kotlin.fir.expressions -import org.jetbrains.kotlin.name.CallableId -import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.diagnostics.WhenMissingCase sealed class ExhaustivenessStatus { object Exhaustive : ExhaustivenessStatus() @@ -17,50 +16,6 @@ sealed class ExhaustivenessStatus { } } -sealed class WhenMissingCase() { - abstract val branchConditionText: String - - object Unknown : WhenMissingCase() { - override fun toString(): String = "unknown" - - override val branchConditionText: String = "else" - } - - object NullIsMissing : WhenMissingCase() { - override val branchConditionText: String = "null" - } - - sealed class BooleanIsMissing(val value: Boolean) : WhenMissingCase() { - object True : BooleanIsMissing(true) - object False : BooleanIsMissing(false) - - override val branchConditionText: String = value.toString() - } - - class IsTypeCheckIsMissing(val classId: ClassId, val isSingleton: Boolean) : WhenMissingCase() { - override val branchConditionText: String = run { - val fqName = classId.asSingleFqName().toString() - if (isSingleton) fqName else "is $fqName" - } - - override fun toString(): String { - val name = classId.shortClassName.identifier - return if (isSingleton) name else "is $name" - } - } - - class EnumCheckIsMissing(val callableId: CallableId) : WhenMissingCase() { - override val branchConditionText: String = callableId.asFqNameForDebugInfo().toString() - - override fun toString(): String { - return callableId.callableName.identifier - } - } - - override fun toString(): String { - return branchConditionText - } -} val FirWhenExpression.isExhaustive: Boolean get() = exhaustivenessStatus == ExhaustivenessStatus.Exhaustive diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/WhenMissingCase.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/WhenMissingCase.kt new file mode 100644 index 00000000000..ffa9ef58e67 --- /dev/null +++ b/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/WhenMissingCase.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.diagnostics + +import org.jetbrains.kotlin.name.CallableId +import org.jetbrains.kotlin.name.ClassId + +sealed class WhenMissingCase { + abstract val branchConditionText: String + + object Unknown : WhenMissingCase() { + override fun toString(): String = "unknown" + + override val branchConditionText: String = "else" + } + + object NullIsMissing : WhenMissingCase() { + override val branchConditionText: String = "null" + } + + sealed class BooleanIsMissing(val value: Boolean) : WhenMissingCase() { + object True : BooleanIsMissing(true) + object False : BooleanIsMissing(false) + + override val branchConditionText: String = value.toString() + } + + class IsTypeCheckIsMissing(val classId: ClassId, val isSingleton: Boolean) : WhenMissingCase() { + override val branchConditionText: String = run { + val fqName = classId.asSingleFqName().toString() + if (isSingleton) fqName else "is $fqName" + } + + override fun toString(): String { + val name = classId.shortClassName.identifier + return if (isSingleton) name else "is $name" + } + } + + class EnumCheckIsMissing(val callableId: CallableId) : WhenMissingCase() { + override val branchConditionText: String = callableId.asFqNameForDebugInfo().toString() + + override fun toString(): String { + return callableId.callableName.identifier + } + } + + override fun toString(): String { + return branchConditionText + } +} \ No newline at end of file diff --git a/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt b/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt index e432dc1ae26..18105ca4984 100644 --- a/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt +++ b/idea/idea-frontend-fir/idea-frontend-fir-generator/src/org/jetbrains/kotlin/idea/frontend/api/fir/generator/HLDiagnosticConverter.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.generator import com.intellij.psi.PsiElement import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.descriptors.Visibility +import org.jetbrains.kotlin.diagnostics.WhenMissingCase import org.jetbrains.kotlin.fir.FirEffectiveVisibility import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.DiagnosticData import org.jetbrains.kotlin.fir.checkers.generator.diagnostics.DiagnosticList @@ -166,7 +167,7 @@ private object FirToKtConversionCreator { WhenMissingCase::class to HLFunctionCallConversion( """TODO("WhenMissingCase conversion is not supported yet")""", Any::class.createType(), - importsToAdd = listOf("org.jetbrains.kotlin.fir.expressions.WhenMissingCase") + importsToAdd = listOf("org.jetbrains.kotlin.diagnostics.WhenMissingCase") ), )