diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityDueToOverride.kt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityDueToOverride.kt index aee7c8bf409..06e0c081efd 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityDueToOverride.kt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantVisibilityDueToOverride.kt @@ -5,12 +5,12 @@ abstract class A { class C1 : A() { public override var attribute = super.attribute - public set + public set } abstract class B2 : A() { override var attribute = "b" - public set + public set } class C2 : B2() { diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt index 6fd4479fa50..6b011e8b46f 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmExternalDeclarationChecker.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.lexer.KtTokens object FirJvmExternalDeclarationChecker : FirBasicDeclarationChecker() { override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { + if (declaration is FirPropertyAccessor) return checkInternal(declaration, null, null, context, reporter) } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt index fa7d61d5226..b6d0011345d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExposedVisibilityDeclarationChecker.kt @@ -120,18 +120,20 @@ object FirExposedVisibilityDeclarationChecker : FirBasicDeclarationChecker() { ) } } - declaration.valueParameters.forEachIndexed { i, valueParameter -> - if (i < declaration.valueParameters.size) { - val (restricting, restrictingVisibility) = valueParameter.returnTypeRef.coneTypeSafe() - ?.findVisibilityExposure(context, functionVisibility) ?: return@forEachIndexed - reporter.reportOn( - valueParameter.source, - FirErrors.EXPOSED_PARAMETER_TYPE, - functionVisibility, - restricting, - restrictingVisibility, - context - ) + if (declaration !is FirPropertyAccessor) { + declaration.valueParameters.forEachIndexed { i, valueParameter -> + if (i < declaration.valueParameters.size) { + val (restricting, restrictingVisibility) = valueParameter.returnTypeRef.coneTypeSafe() + ?.findVisibilityExposure(context, functionVisibility) ?: return@forEachIndexed + reporter.reportOn( + valueParameter.source, + FirErrors.EXPOSED_PARAMETER_TYPE, + functionVisibility, + restricting, + restrictingVisibility, + context + ) + } } } checkMemberReceiver(declaration.receiverTypeRef, declaration as? FirCallableDeclaration, reporter, context) diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt index 204ba7553a8..b8c806f2fb3 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirModifierChecker.kt @@ -18,7 +18,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.FirPrimaryConstructor -import org.jetbrains.kotlin.fir.declarations.utils.hasBody import org.jetbrains.kotlin.fir.declarations.utils.isCompanion import org.jetbrains.kotlin.fir.declarations.utils.isInner import org.jetbrains.kotlin.fir.declarations.utils.isLocal @@ -34,17 +33,6 @@ object FirModifierChecker : FirBasicDeclarationChecker() { val source = declaration.source ?: return if (source.kind is FirFakeSourceElementKind) return - if (declaration is FirProperty) { - fun checkPropertyAccessor(propertyAccessor: FirPropertyAccessor?) { - if (propertyAccessor != null && !propertyAccessor.hasBody) { - check(propertyAccessor, context, reporter) - } - } - - checkPropertyAccessor(declaration.getter) - checkPropertyAccessor(declaration.setter) - } - source.getModifierList()?.let { checkModifiers(it, declaration, context, reporter) } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt index 729c62b3206..1aa3c337aaf 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/CanBeValChecker.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.extended import org.jetbrains.kotlin.KtNodeTypes import org.jetbrains.kotlin.contracts.description.EventOccurrencesRange -import org.jetbrains.kotlin.fir.FirFakeSourceElement +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.analysis.cfa.AbstractFirPropertyInitializationChecker import org.jetbrains.kotlin.fir.analysis.cfa.util.PathAwarePropertyInitializationInfo @@ -40,7 +40,7 @@ object CanBeValChecker : AbstractFirPropertyInitializationChecker() { for (property in unprocessedProperties) { val source = property.source - if (source is FirFakeSourceElement) continue + if (source?.kind is FirFakeSourceElementKind) continue if (source?.elementType == KtNodeTypes.DESTRUCTURING_DECLARATION) continue propertiesCharacteristics[property] = EventOccurrencesRange.ZERO } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/EmptyRangeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/EmptyRangeChecker.kt index e03d880bc7e..530fef7a65d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/EmptyRangeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/EmptyRangeChecker.kt @@ -5,7 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.extended -import org.jetbrains.kotlin.fir.FirFakeSourceElement +import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerOperatorCall object EmptyRangeChecker : FirFunctionCallChecker() { override fun check(expression: FirFunctionCall, context: CheckerContext, reporter: DiagnosticReporter) { - if (expression.source is FirFakeSourceElement) return + if (expression.source?.kind is FirFakeSourceElementKind) return val left = expression.rangeLeft ?: return val right = expression.rangeRight ?: return diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt index 593288a3431..4102de247f5 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/RedundantVisibilityModifierSyntaxChecker.kt @@ -7,12 +7,10 @@ package org.jetbrains.kotlin.fir.analysis.checkers.extended import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirFakeSourceElement import org.jetbrains.kotlin.fir.FirFakeSourceElementKind import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.context.findClosest -import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isLocalMember import org.jetbrains.kotlin.fir.analysis.checkers.findClosestClassOrObject import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol import org.jetbrains.kotlin.fir.analysis.checkers.overriddenFunctions @@ -42,7 +40,7 @@ object RedundantVisibilityModifierSyntaxChecker : FirDeclarationSyntaxChecker FirLightSourceElement(lighterASTNode, startOffset, endOffset, treeStructure, newKind) is FirPsiSourceElement -> FirFakeSourceElement(psi, newKind) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt index ab514dca0ce..5997b2cb82c 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/impl/FirDefaultPropertyAccessor.kt @@ -8,9 +8,7 @@ package org.jetbrains.kotlin.fir.declarations.impl import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.Visibility -import org.jetbrains.kotlin.fir.FirImplementationDetail -import org.jetbrains.kotlin.fir.FirModuleData -import org.jetbrains.kotlin.fir.FirSourceElement +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.contracts.impl.FirEmptyContractDescription import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildDefaultSetterValueParameter @@ -126,7 +124,7 @@ class FirDefaultPropertySetter( FirImplicitUnitTypeRef(source), valueParameters = mutableListOf( buildDefaultSetterValueParameter builder@{ - this@builder.source = source + this@builder.source = source?.fakeElement(FirFakeSourceElementKind.DefaultAccessor) this@builder.moduleData = moduleData this@builder.origin = origin this@builder.returnTypeRef = propertyTypeRef diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/accessors.fir.kt b/compiler/testData/diagnostics/tests/annotations/options/targets/accessors.fir.kt deleted file mode 100644 index b0eee1802be..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/accessors.fir.kt +++ /dev/null @@ -1,16 +0,0 @@ -@Target(AnnotationTarget.PROPERTY_GETTER) -annotation class smartget - -@Target(AnnotationTarget.PROPERTY_SETTER) -annotation class smartset - -@Target(AnnotationTarget.FUNCTION) -annotation class base - -class My(x: Int) { - @smartget var y = x - @base @smartget @smartset get - @base @smartget @smartset set - - @base @smartget @smartset fun foo() = y -} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/accessors.kt b/compiler/testData/diagnostics/tests/annotations/options/targets/accessors.kt index d54e84e8e97..5c1b0c698d7 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/accessors.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/accessors.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL @Target(AnnotationTarget.PROPERTY_GETTER) annotation class smartget diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/java.fir.kt b/compiler/testData/diagnostics/tests/annotations/options/targets/java.fir.kt deleted file mode 100644 index 0f6cb7c2657..00000000000 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/java.fir.kt +++ /dev/null @@ -1,82 +0,0 @@ -// FILE: test/AnnotationTargets.java - -package test; - -import java.lang.annotation.*; - -public class AnnotationTargets { - - public @interface base { - - } - - @Target(ElementType.ANNOTATION_TYPE) - public @interface meta { - - } - - @Target(ElementType.CONSTRUCTOR) - public @interface konstructor { - - } - - @Target(ElementType.FIELD) - public @interface fieldann { - - } - - - @Target(ElementType.LOCAL_VARIABLE) - public @interface local { - - } - - @Target(ElementType.METHOD) - public @interface method { - - } - - @Target(ElementType.PARAMETER) - public @interface parameter { - - } - - - @Target(ElementType.TYPE) - public @interface type { - - } - - @Target({ElementType.METHOD, ElementType.CONSTRUCTOR, ElementType.FIELD}) - public @interface multiple { - - } -} - -// FILE: test/AnnotationTargets.kt - -@file:AnnotationTargets.type -package test - -import test.AnnotationTargets.* - -@base @meta @type @konstructor annotation class KMeta - -@base @meta @type @method @multiple class KClass( - @base @fieldann @parameter val y: - @base @type Int) { - - @base @multiple @fieldann @local val x = 0 - @method @konstructor @type get - - @base @method @multiple @konstructor - fun foo(@parameter @type i: - @base @multiple Int - ): @fieldann @parameter Int { - - @local @base @multiple @fieldann val j = i + 1 - @base @multiple return j - } - - @base @method @konstructor constructor(): this(0) -} diff --git a/compiler/testData/diagnostics/tests/annotations/options/targets/java.kt b/compiler/testData/diagnostics/tests/annotations/options/targets/java.kt index c3ebd37f28a..0e0dcd6dc3d 100644 --- a/compiler/testData/diagnostics/tests/annotations/options/targets/java.kt +++ b/compiler/testData/diagnostics/tests/annotations/options/targets/java.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL // FILE: test/AnnotationTargets.java package test;