FIR IDE: use WhenMissingCase in NoElseInWhen diagnostic

This commit is contained in:
Ilya Kirillov
2021-02-24 12:44:50 +01:00
parent f19a9af7b3
commit 9ce4decb73
4 changed files with 6 additions and 9 deletions
@@ -163,11 +163,6 @@ private object FirToKtConversionCreator {
KtVariableSymbol::class.createType(), KtVariableSymbol::class.createType(),
importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirProperty") importsToAdd = listOf("org.jetbrains.kotlin.fir.declarations.FirProperty")
), ),
WhenMissingCase::class to HLFunctionCallConversion(
"""TODO("WhenMissingCase conversion is not supported yet")""",
Any::class.createType(),
importsToAdd = listOf("org.jetbrains.kotlin.diagnostics.WhenMissingCase")
),
) )
private val allowedTypesWithoutTypeParams = setOf( private val allowedTypesWithoutTypeParams = setOf(
@@ -177,6 +172,7 @@ private object FirToKtConversionCreator {
EventOccurrencesRange::class, EventOccurrencesRange::class,
KtModifierKeywordToken::class, KtModifierKeywordToken::class,
Visibility::class, Visibility::class,
WhenMissingCase::class,
) )
private val KType.kClass: KClass<*> private val KType.kClass: KClass<*>
@@ -7,7 +7,6 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.diagnostics
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiTypeElement import com.intellij.psi.PsiTypeElement
import org.jetbrains.kotlin.diagnostics.WhenMissingCase
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration
@@ -1058,7 +1057,7 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
add(FirErrors.NO_ELSE_IN_WHEN) { firDiagnostic -> add(FirErrors.NO_ELSE_IN_WHEN) { firDiagnostic ->
NoElseInWhenImpl( NoElseInWhenImpl(
firDiagnostic.a.map { whenMissingCase -> firDiagnostic.a.map { whenMissingCase ->
TODO("WhenMissingCase conversion is not supported yet") whenMissingCase
}, },
firDiagnostic as FirPsiDiagnostic<*>, firDiagnostic as FirPsiDiagnostic<*>,
token, token,
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiTypeElement import com.intellij.psi.PsiTypeElement
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.diagnostics.WhenMissingCase
import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi import org.jetbrains.kotlin.idea.frontend.api.diagnostics.KtDiagnosticWithPsi
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtCallableSymbol
import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol import org.jetbrains.kotlin.idea.frontend.api.symbols.KtClassLikeSymbol
@@ -745,7 +746,7 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract class NoElseInWhen : KtFirDiagnostic<KtWhenExpression>() { abstract class NoElseInWhen : KtFirDiagnostic<KtWhenExpression>() {
override val diagnosticClass get() = NoElseInWhen::class override val diagnosticClass get() = NoElseInWhen::class
abstract val missingWhenCases: List<Any> abstract val missingWhenCases: List<WhenMissingCase>
} }
abstract class InvalidIfAsExpression : KtFirDiagnostic<KtIfExpression>() { abstract class InvalidIfAsExpression : KtFirDiagnostic<KtIfExpression>() {
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
import com.intellij.psi.PsiTypeElement import com.intellij.psi.PsiTypeElement
import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.diagnostics.WhenMissingCase
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef import org.jetbrains.kotlin.idea.frontend.api.fir.utils.weakRef
@@ -1198,7 +1199,7 @@ internal class UnsafeOperatorCallImpl(
} }
internal class NoElseInWhenImpl( internal class NoElseInWhenImpl(
override val missingWhenCases: List<Any>, override val missingWhenCases: List<WhenMissingCase>,
firDiagnostic: FirPsiDiagnostic<*>, firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken, override val token: ValidityToken,
) : KtFirDiagnostic.NoElseInWhen(), KtAbstractFirDiagnostic<KtWhenExpression> { ) : KtFirDiagnostic.NoElseInWhen(), KtAbstractFirDiagnostic<KtWhenExpression> {