diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReassignmentAndInvisibleSetterChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReassignmentAndInvisibleSetterChecker.kt index 48fdf5dc424..80594702cee 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReassignmentAndInvisibleSetterChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirReassignmentAndInvisibleSetterChecker.kt @@ -18,6 +18,7 @@ import org.jetbrains.kotlin.fir.expressions.FirSmartCastExpression import org.jetbrains.kotlin.fir.expressions.FirVariableAssignment import org.jetbrains.kotlin.fir.originalForSubstitutionOverride import org.jetbrains.kotlin.fir.references.FirBackingFieldReference +import org.jetbrains.kotlin.fir.references.FirThisReference import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol import org.jetbrains.kotlin.fir.references.toResolvedValueParameterSymbol import org.jetbrains.kotlin.fir.resolve.calls.ExpressionReceiverValue @@ -30,6 +31,7 @@ object FirReassignmentAndInvisibleSetterChecker : FirVariableAssignmentChecker() checkInvisibleSetter(expression, context, reporter) checkValReassignmentViaBackingField(expression, context, reporter) checkValReassignmentOnValueParameter(expression, context, reporter) + checkAssignmentToThis(expression, context, reporter) } private fun checkInvisibleSetter( @@ -102,4 +104,14 @@ object FirReassignmentAndInvisibleSetterChecker : FirVariableAssignmentChecker() val valueParameter = expression.lValue.toResolvedValueParameterSymbol() ?: return reporter.reportOn(expression.lValue.source, FirErrors.VAL_REASSIGNMENT, valueParameter, context) } + + private fun checkAssignmentToThis( + expression: FirVariableAssignment, + context: CheckerContext, + reporter: DiagnosticReporter + ) { + if (expression.lValue is FirThisReference) { + reporter.reportOn(expression.lValue.source, FirErrors.VARIABLE_EXPECTED, context) + } + } } diff --git a/compiler/testData/diagnostics/tests/LValueAssignment.fir.kt b/compiler/testData/diagnostics/tests/LValueAssignment.fir.kt index 66d2a62cf01..6467dd3c6ba 100644 --- a/compiler/testData/diagnostics/tests/LValueAssignment.fir.kt +++ b/compiler/testData/diagnostics/tests/LValueAssignment.fir.kt @@ -22,7 +22,7 @@ class C() : B() { } fun bar(c: C) { - this = c //should be an error + this = c //should be an error } } @@ -31,7 +31,7 @@ fun getInt() = 0 class D() { inner class B() { fun foo() { - this@D = D() + this@D = D() } } } @@ -93,7 +93,7 @@ class Test() { ++2 --(r@ 2) - this++ + this++ var s : String = "r" s += "ss"