From 9e7f6332d14a5ee9e8833269ef3b782e752eb359 Mon Sep 17 00:00:00 2001 From: yantimirov-timur Date: Wed, 3 Mar 2021 17:46:26 +0300 Subject: [PATCH] [FIR] Complete WRONG_SETTER_TYPE_PARAMETER checker --- ...TouchedTilContractsPhaseTestGenerated.java | 5 +++ .../testData/resolve/settersGetters.fir.txt | 13 ++++++ .../testData/resolve/settersGetters.kt | 8 ++++ .../runners/FirDiagnosticTestGenerated.java | 6 +++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 +++ .../diagnostics/FirDiagnosticsList.kt | 4 ++ .../fir/analysis/diagnostics/FirErrors.kt | 1 + .../declaration/FirPropertyAccessorChecker.kt | 40 +++++++++++++++++++ .../diagnostics/FirDefaultErrorMessages.kt | 17 +++++++- .../fir/checkers/CommonDeclarationCheckers.kt | 1 + .../diagnostics/tests/Properties.fir.kt | 4 +- .../annotationRenderingInTypes.fir.kt | 2 +- .../tests/regressions/kt251.fir.kt | 4 +- .../diagnostics/KtFirDataClassConverters.kt | 15 +++++++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 11 +++++ .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 17 ++++++++ idea/testData/checker/Properties.fir.kt | 4 +- idea/testData/checker/regression/kt251.fir.kt | 4 +- 18 files changed, 151 insertions(+), 11 deletions(-) create mode 100644 compiler/fir/analysis-tests/testData/resolve/settersGetters.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolve/settersGetters.kt create mode 100644 compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyAccessorChecker.kt diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index 1d8d86245df..e7da6a2ca2e 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -359,6 +359,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract runTest("compiler/fir/analysis-tests/testData/resolve/sealedClass.kt"); } + @TestMetadata("settersGetters.kt") + public void testSettersGetters() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/settersGetters.kt"); + } + @TestMetadata("simpleClass.kt") public void testSimpleClass() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/simpleClass.kt"); diff --git a/compiler/fir/analysis-tests/testData/resolve/settersGetters.fir.txt b/compiler/fir/analysis-tests/testData/resolve/settersGetters.fir.txt new file mode 100644 index 00000000000..9b3f339d22d --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/settersGetters.fir.txt @@ -0,0 +1,13 @@ +FILE: settersGetters.kt + public final class SomeClass : R|kotlin/Any| { + public constructor(): R|SomeClass| { + super() + } + + public final var foo: R|kotlin/Int| = Int(0) + public get(): R|kotlin/Int| + public set(value: R|kotlin/String|): R|kotlin/Unit| { + this@R|/SomeClass|.F|/SomeClass.foo| = R|/value| + } + + } diff --git a/compiler/fir/analysis-tests/testData/resolve/settersGetters.kt b/compiler/fir/analysis-tests/testData/resolve/settersGetters.kt new file mode 100644 index 00000000000..76a3a26ecca --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/settersGetters.kt @@ -0,0 +1,8 @@ +class SomeClass { + + var foo: Int = 0 + set(value: String){ + field = value + } + +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index a54b4c15fc8..e26b4bbbe6e 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -422,6 +422,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolve/sealedClass.kt"); } + @Test + @TestMetadata("settersGetters.kt") + public void testSettersGetters() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/settersGetters.kt"); + } + @Test @TestMetadata("simpleClass.kt") public void testSimpleClass() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 25955a71cb3..2c46833fd02 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -425,6 +425,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolve/sealedClass.kt"); } + @Test + @TestMetadata("settersGetters.kt") + public void testSettersGetters() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/settersGetters.kt"); + } + @Test @TestMetadata("simpleClass.kt") public void testSimpleClass() throws Exception { 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 24b8d907763..9d42f9305bf 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 @@ -468,6 +468,10 @@ object DIAGNOSTICS_LIST : DiagnosticList() { val CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT by error(PositioningStrategy.CONST_MODIFIER) val CONST_VAL_WITH_GETTER by error() val CONST_VAL_WITH_DELEGATE by error() + val WRONG_SETTER_PARAMETER_TYPE by error { + parameter("expectedType") + parameter("actualType") + } } val MPP_PROJECTS by object : DiagnosticGroup("Multi-platform projects") { 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 7ebcc957c29..cd5523b33ac 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 @@ -293,6 +293,7 @@ object FirErrors { val CONST_VAL_NOT_TOP_LEVEL_OR_OBJECT by error0(SourceElementPositioningStrategies.CONST_MODIFIER) val CONST_VAL_WITH_GETTER by error0() val CONST_VAL_WITH_DELEGATE by error0() + val WRONG_SETTER_PARAMETER_TYPE by error2() // Multi-platform projects val EXPECTED_DECLARATION_WITH_BODY by error0(SourceElementPositioningStrategies.DECLARATION_SIGNATURE) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyAccessorChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyAccessorChecker.kt new file mode 100644 index 00000000000..6936b2bad70 --- /dev/null +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirPropertyAccessorChecker.kt @@ -0,0 +1,40 @@ +/* + * 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.fir.analysis.checkers.declaration + +import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext +import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_PARAMETER_TYPE +import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn +import org.jetbrains.kotlin.fir.analysis.diagnostics.withSuppressedDiagnostics +import org.jetbrains.kotlin.fir.declarations.FirProperty +import org.jetbrains.kotlin.fir.types.ConeClassErrorType +import org.jetbrains.kotlin.fir.types.coneType + + +object FirPropertyAccessorChecker : FirPropertyChecker() { + override fun check(declaration: FirProperty, context: CheckerContext, reporter: DiagnosticReporter) { + val setter = declaration.setter ?: return + val valueSetterParameter = setter.valueParameters.first() + if (valueSetterParameter.isVararg) { + return + } + val valueSetterType = valueSetterParameter.returnTypeRef.coneType + val valueSetterTypeSource = valueSetterParameter.returnTypeRef.source + val propertyType = declaration.returnTypeRef.coneType + if (propertyType is ConeClassErrorType || valueSetterType is ConeClassErrorType) { + return + } + + if (valueSetterType != propertyType) { + withSuppressedDiagnostics(setter, context) { + withSuppressedDiagnostics(valueSetterParameter, context) { + reporter.reportOn(valueSetterTypeSource, WRONG_SETTER_PARAMETER_TYPE, propertyType, valueSetterType, context) + } + } + } + } +} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt index 89df27ed401..33fe6e4df64 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirDefaultErrorMessages.kt @@ -239,6 +239,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.VAR_TYPE_MISMATCH import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_INVOCATION_KIND import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_MODIFIER_TARGET import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_NUMBER_OF_TYPE_ARGUMENTS +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.WRONG_SETTER_PARAMETER_TYPE @Suppress("unused") class FirDefaultErrorMessages : DefaultErrorMessages.Extension { @@ -469,7 +470,10 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension { map.put(INLINE_CLASS_NOT_FINAL, "Inline classes can be only final") map.put(ABSENCE_OF_PRIMARY_CONSTRUCTOR_FOR_INLINE_CLASS, "Primary constructor is required for inline class") map.put(INLINE_CLASS_CONSTRUCTOR_WRONG_PARAMETERS_SIZE, "Inline class must have exactly one primary constructor parameter") - map.put(INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER, "Value class primary constructor must have only final read-only (val) property parameter") + map.put( + INLINE_CLASS_CONSTRUCTOR_NOT_FINAL_READ_ONLY_PARAMETER, + "Value class primary constructor must have only final read-only (val) property parameter" + ) map.put(PROPERTY_WITH_BACKING_FIELD_INSIDE_INLINE_CLASS, "Inline class cannot have properties with backing fields") map.put(DELEGATED_PROPERTY_INSIDE_INLINE_CLASS, "Inline class cannot have delegated properties") map.put(INLINE_CLASS_HAS_INAPPLICABLE_PARAMETER_TYPE, "Inline class cannot have value parameter of type ''{0}''", TO_STRING) @@ -477,7 +481,10 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension { map.put(INLINE_CLASS_CANNOT_EXTEND_CLASSES, "Inline class cannot extend classes") map.put(INLINE_CLASS_CANNOT_BE_RECURSIVE, "Inline class cannot be recursive") map.put(RESERVED_MEMBER_INSIDE_INLINE_CLASS, "Member with the name ''{0}'' is reserved for future releases", TO_STRING) - map.put(SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_INLINE_CLASS, "Secondary constructors with bodies are reserved for for future releases") + map.put( + SECONDARY_CONSTRUCTOR_WITH_BODY_INSIDE_INLINE_CLASS, + "Secondary constructors with bodies are reserved for for future releases" + ) map.put(INNER_CLASS_INSIDE_INLINE_CLASS, "Inline class cannot have inner classes") map.put(VALUE_CLASS_CANNOT_BE_CLONEABLE, "Value class cannot be Cloneable") @@ -635,6 +642,12 @@ class FirDefaultErrorMessages : DefaultErrorMessages.Extension { map.put(PRIVATE_SETTER_FOR_ABSTRACT_PROPERTY, "Private setters are not allowed for abstract properties") map.put(PRIVATE_SETTER_FOR_OPEN_PROPERTY, "Private setters are not allowed for open properties") map.put(VAL_WITH_SETTER, "A 'val'-property cannot have a setter") + map.put( + WRONG_SETTER_PARAMETER_TYPE, + "Setter parameter type must be equal to the type of the property, i.e. ''{0}''", + RENDER_TYPE, + RENDER_TYPE + ) // Multi-platform projects map.put(EXPECTED_DECLARATION_WITH_BODY, "Expected declaration must not have a body") diff --git a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt index 425fb763b78..4f1a393aa15 100644 --- a/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt +++ b/compiler/fir/entrypoint/src/org/jetbrains/kotlin/fir/checkers/CommonDeclarationCheckers.kt @@ -40,6 +40,7 @@ object CommonDeclarationCheckers : DeclarationCheckers() { FirInapplicableLateinitChecker, FirDestructuringDeclarationChecker, FirConstPropertyChecker, + FirPropertyAccessorChecker ) override val classCheckers: Set = setOf( diff --git a/compiler/testData/diagnostics/tests/Properties.fir.kt b/compiler/testData/diagnostics/tests/Properties.fir.kt index ea6460b9b95..5bf038019ae 100644 --- a/compiler/testData/diagnostics/tests/Properties.fir.kt +++ b/compiler/testData/diagnostics/tests/Properties.fir.kt @@ -1,13 +1,13 @@ var x : Int = 1 + x get() : Int = 1 - set(value : Long) { + set(value : Long) { field = value.toInt() field = 1.toLong() } val xx : Int = 1 + x get() : Int = 1 - set(value : Long) {} + set(value : Long) {} val p : Int = 1 get() = 1 diff --git a/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.fir.kt b/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.fir.kt index 4a84aaf69cc..18a2fec23fe 100644 --- a/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.fir.kt +++ b/compiler/testData/diagnostics/tests/annotations/annotationRenderingInTypes.fir.kt @@ -18,7 +18,7 @@ fun test2(a: @Ann Array) { var test3: Int = 0 - set(s: @Ann String) {} + set(s: @Ann String) {} fun f4(fn: (@Ann Int, @Ann Int) -> Unit) {} diff --git a/compiler/testData/diagnostics/tests/regressions/kt251.fir.kt b/compiler/testData/diagnostics/tests/regressions/kt251.fir.kt index 603b5de0d3a..f2d93703c93 100644 --- a/compiler/testData/diagnostics/tests/regressions/kt251.fir.kt +++ b/compiler/testData/diagnostics/tests/regressions/kt251.fir.kt @@ -2,7 +2,7 @@ class A() { var x: Int = 0 get() = "s" - set(value: String) { + set(value: String) { field = value } val y: Int @@ -13,7 +13,7 @@ class A() { } var a: Any = 1 - set(v: String) { + set(v: String) { field = v } val b: Int diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt index 6d722502ef6..c3e469b43a3 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -18,6 +18,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.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDestructuringDeclaration @@ -440,6 +441,12 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.SUPERTYPES_FOR_ANNOTATION_CLASS) { firDiagnostic -> + SupertypesForAnnotationClassImpl( + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } add(FirErrors.EXPOSED_TYPEALIAS_EXPANDED_TYPE) { firDiagnostic -> ExposedTypealiasExpandedTypeImpl( firDiagnostic.a.toVisibility(), @@ -1324,6 +1331,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.WRONG_SETTER_PARAMETER_TYPE) { firDiagnostic -> + WrongSetterParameterTypeImpl( + firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.a), + firSymbolBuilder.typeBuilder.buildKtType(firDiagnostic.b), + firDiagnostic as FirPsiDiagnostic<*>, + token, + ) + } add(FirErrors.EXPECTED_DECLARATION_WITH_BODY) { firDiagnostic -> ExpectedDeclarationWithBodyImpl( firDiagnostic as FirPsiDiagnostic<*>, diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt index 329e393adfe..e934b41a532 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnostics.kt @@ -24,6 +24,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.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDestructuringDeclaration @@ -319,6 +320,10 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = VarAnnotationParameter::class } + abstract class SupertypesForAnnotationClass : KtFirDiagnostic() { + override val diagnosticClass get() = SupertypesForAnnotationClass::class + } + abstract class ExposedTypealiasExpandedType : KtFirDiagnostic() { override val diagnosticClass get() = ExposedTypealiasExpandedType::class abstract val elementVisibility: Visibility @@ -937,6 +942,12 @@ sealed class KtFirDiagnostic : KtDiagnosticWithPsi { override val diagnosticClass get() = ConstValWithDelegate::class } + abstract class WrongSetterParameterType : KtFirDiagnostic() { + override val diagnosticClass get() = WrongSetterParameterType::class + abstract val expectedType: KtType + abstract val actualType: KtType + } + abstract class ExpectedDeclarationWithBody : KtFirDiagnostic() { override val diagnosticClass get() = ExpectedDeclarationWithBody::class } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 06418d55778..4b3829c80bd 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -26,6 +26,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.KtClass import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtDeclaration import org.jetbrains.kotlin.psi.KtDestructuringDeclaration @@ -512,6 +513,13 @@ internal class VarAnnotationParameterImpl( override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) } +internal class SupertypesForAnnotationClassImpl( + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.SupertypesForAnnotationClass(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + internal class ExposedTypealiasExpandedTypeImpl( override val elementVisibility: Visibility, override val restrictingDeclaration: KtSymbol, @@ -1514,6 +1522,15 @@ internal class ConstValWithDelegateImpl( override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) } +internal class WrongSetterParameterTypeImpl( + override val expectedType: KtType, + override val actualType: KtType, + firDiagnostic: FirPsiDiagnostic<*>, + override val token: ValidityToken, +) : KtFirDiagnostic.WrongSetterParameterType(), KtAbstractFirDiagnostic { + override val firDiagnostic: FirPsiDiagnostic<*> by weakRef(firDiagnostic) +} + internal class ExpectedDeclarationWithBodyImpl( firDiagnostic: FirPsiDiagnostic<*>, override val token: ValidityToken, diff --git a/idea/testData/checker/Properties.fir.kt b/idea/testData/checker/Properties.fir.kt index 8f95099ec38..56328fe5c10 100644 --- a/idea/testData/checker/Properties.fir.kt +++ b/idea/testData/checker/Properties.fir.kt @@ -1,13 +1,13 @@ var x : Int = 1 + x get() : Int = 1 - set(value : Long) { + set(value : Long) { field = value.toInt() field = 1.toLong() } val xx : Int = 1 + x get() : Int = 1 - set(value : Long) {} + set(value : Long) {} val p : Int = 1 get() = 1 diff --git a/idea/testData/checker/regression/kt251.fir.kt b/idea/testData/checker/regression/kt251.fir.kt index 88ff66ca34c..9436dd4d1b4 100644 --- a/idea/testData/checker/regression/kt251.fir.kt +++ b/idea/testData/checker/regression/kt251.fir.kt @@ -1,7 +1,7 @@ class A() { var x: Int = 0 get() = "s" - set(value: String) { + set(value: String) { field = value } val y: Int @@ -12,7 +12,7 @@ class A() { } var a: Any = 1 - set(v: String) { + set(v: String) { field = v } val b: Int