FIR: support separate ASSIGNMENT_IN_EXPRESSION_CONTEXT

This commit is contained in:
Mikhail Glukhikh
2021-04-16 11:06:43 +03:00
parent 9894b97058
commit 6b95bcdbdb
7 changed files with 34 additions and 7 deletions
@@ -19,6 +19,7 @@ import org.jetbrains.kotlin.fir.declarations.FirTypeParameter
import org.jetbrains.kotlin.fir.declarations.FirVariable
import org.jetbrains.kotlin.fir.psi
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -94,6 +95,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.ASSIGNMENT_IN_EXPRESSION_CONTEXT) { firDiagnostic ->
AssignmentInExpressionContextImpl(
firDiagnostic as FirPsiDiagnostic<*>,
token,
)
}
add(FirErrors.BREAK_OR_CONTINUE_OUTSIDE_A_LOOP) { firDiagnostic ->
BreakOrContinueOutsideALoopImpl(
firDiagnostic as FirPsiDiagnostic<*>,
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -87,6 +88,10 @@ sealed class KtFirDiagnostic<PSI: PsiElement> : KtDiagnosticWithPsi<PSI> {
override val diagnosticClass get() = ExpressionExpected::class
}
abstract class AssignmentInExpressionContext : KtFirDiagnostic<KtBinaryExpression>() {
override val diagnosticClass get() = AssignmentInExpressionContext::class
}
abstract class BreakOrContinueOutsideALoop : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = BreakOrContinueOutsideALoop::class
}
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtArrayAccessExpression
import org.jetbrains.kotlin.psi.KtBinaryExpression
import org.jetbrains.kotlin.psi.KtClass
import org.jetbrains.kotlin.psi.KtClassOrObject
import org.jetbrains.kotlin.psi.KtDeclaration
@@ -109,6 +110,13 @@ internal class ExpressionExpectedImpl(
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class AssignmentInExpressionContextImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,
) : KtFirDiagnostic.AssignmentInExpressionContext(), KtAbstractFirDiagnostic<KtBinaryExpression> {
override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic)
}
internal class BreakOrContinueOutsideALoopImpl(
firDiagnostic: FirPsiDiagnostic<*>,
override val token: ValidityToken,