diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/NonNullNever.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/NonNullNever.fir.txt index 79e06670c4a..14cd6f1aeaf 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/NonNullNever.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/NonNullNever.fir.txt @@ -1,11 +1,11 @@ -@R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class MyNullable : R|kotlin/Annotation| { +@R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|()) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class MyNullable : R|kotlin/Annotation| { public constructor(): R|MyNullable| } public open class NonNullNever : R|kotlin/Any| { - @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) public open field field: R|kotlin/String?| + @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|()) public open field field: R|kotlin/String?| - @R|MyNullable|() public open fun foo(@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) x: R|kotlin/String?|, @R|MyNullable|() y: R|ft|): R|ft| + @R|MyNullable|() public open fun foo(@R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|()) x: R|kotlin/String?|, @R|MyNullable|() y: R|ft|): R|ft| public constructor(): R|NonNullNever| diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/Strange.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/Strange.fir.txt index ca2b86dbc67..c0a68745acf 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/Strange.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/Strange.fir.txt @@ -1,7 +1,7 @@ public open class Strange : R|kotlin/Any| { - @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.UNKNOWN|()) public open field field: R|ft| + @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.UNKNOWN|()) public open field field: R|ft| - @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.MAYBE|()) public open fun foo(@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.ALWAYS|()) x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.NEVER|()) y: R|kotlin/CharSequence?|): R|kotlin/String?| + @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.MAYBE|()) public open fun foo(@R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.ALWAYS|()) x: R|@EnhancedNullability kotlin/String|, @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.NEVER|()) y: R|kotlin/CharSequence?|): R|kotlin/String?| @R|javax/annotation/Nonnull|() public open fun bar(): R|@EnhancedNullability kotlin/String| diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/FieldsAreNullable.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/FieldsAreNullable.fir.txt index e5d5ed7c754..17e9afadb38 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/FieldsAreNullable.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/FieldsAreNullable.fir.txt @@ -10,7 +10,7 @@ public constructor(): R|A| } -@R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.FIELD|())) public final annotation class FieldsAreNullable : R|kotlin/Annotation| { +@R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.FIELD|())) public final annotation class FieldsAreNullable : R|kotlin/Annotation| { public constructor(): R|FieldsAreNullable| } diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibility.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibility.fir.txt index 28b60ce2636..d7d402af06e 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibility.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibility.fir.txt @@ -6,19 +6,19 @@ public constructor(): R|A| } -@R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|spr/UnknownNullability|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class ForceFlexibility : R|kotlin/Annotation| { +@R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|spr/UnknownNullability|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class ForceFlexibility : R|kotlin/Annotation| { public constructor(): R|spr/ForceFlexibility| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { public constructor(): R|spr/NonNullApi| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.MAYBE|()) @R|javax/annotation/meta/TypeQualifierNickname|() public final annotation class Nullable : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.MAYBE|()) @R|javax/annotation/meta/TypeQualifierNickname|() public final annotation class Nullable : R|kotlin/Annotation| { public constructor(): R|spr/Nullable| } -@R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.UNKNOWN|()) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class UnknownNullability : R|kotlin/Annotation| { +@R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.UNKNOWN|()) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class UnknownNullability : R|kotlin/Annotation| { public constructor(): R|spr/UnknownNullability| } diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibleOverOverrides.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibleOverOverrides.fir.txt index 9aae0c419ad..71f2d826974 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibleOverOverrides.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/ForceFlexibleOverOverrides.fir.txt @@ -5,7 +5,7 @@ public open fun baz(@R|spr/UnknownNullability|() x: R|@EnhancedNullability kotlin/String|): R|kotlin/Unit| - public open fun foobar(@R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.UNKNOWN|()) x: R|ft|): R|kotlin/Unit| + public open fun foobar(@R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.UNKNOWN|()) x: R|ft|): R|kotlin/Unit| public constructor(): R|A| @@ -20,15 +20,15 @@ public abstract interface B : R|kotlin/Any| { public abstract fun foobar(@R|javax/annotation/Nonnull|() x: R|@EnhancedNullability kotlin/String|): R|kotlin/Unit| } -@R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|spr/UnknownNullability|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class ForceFlexibility : R|kotlin/Annotation| { +@R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|spr/UnknownNullability|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class ForceFlexibility : R|kotlin/Annotation| { public constructor(): R|spr/ForceFlexibility| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { public constructor(): R|spr/NonNullApi| } -@R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.UNKNOWN|()) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class UnknownNullability : R|kotlin/Annotation| { +@R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/meta/TypeQualifierNickname|() @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.UNKNOWN|()) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class UnknownNullability : R|kotlin/Annotation| { public constructor(): R|spr/UnknownNullability| } diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/NullabilityFromOverridden.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/NullabilityFromOverridden.fir.txt index f3c11425b1d..9efca94a605 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/NullabilityFromOverridden.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/NullabilityFromOverridden.fir.txt @@ -54,11 +54,11 @@ public constructor(): R|C| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NonNullApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NonNullApi : R|kotlin/Annotation| { public constructor(): R|NonNullApi| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NullableApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NullableApi : R|kotlin/Annotation| { public constructor(): R|NullableApi| } diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/OverridingDefaultQualifier.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/OverridingDefaultQualifier.fir.txt index 9557eaaf2d1..6c0453010f8 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/OverridingDefaultQualifier.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/OverridingDefaultQualifier.fir.txt @@ -40,15 +40,15 @@ } } -@R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.FIELD|())) public final annotation class FieldsAreNullable : R|kotlin/Annotation| { +@R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.FIELD|())) public final annotation class FieldsAreNullable : R|kotlin/Annotation| { public constructor(): R|FieldsAreNullable| } -@R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NonNullApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NonNullApi : R|kotlin/Annotation| { public constructor(): R|NonNullApi| } -@R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NullableApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/CheckForNull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|(), R|java/lang/annotation/ElementType.FIELD|())) public final annotation class NullableApi : R|kotlin/Annotation| { public constructor(): R|NullableApi| } diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullable.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullable.fir.txt index 254685a3342..590e2ac7e29 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullable.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullable.fir.txt @@ -10,11 +10,11 @@ public constructor(): R|A| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { public constructor(): R|spr/NonNullApi| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.MAYBE|()) @R|javax/annotation/meta/TypeQualifierNickname|() public final annotation class Nullable : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.MAYBE|()) @R|javax/annotation/meta/TypeQualifierNickname|() public final annotation class Nullable : R|kotlin/Annotation| { public constructor(): R|spr/Nullable| } diff --git a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt index d9da7324299..314e8c2f2ea 100644 --- a/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt +++ b/compiler/fir/analysis-tests/testData/enhancement/jsr305/typeQualifierDefault/SpringNullablePackage.fir.txt @@ -10,11 +10,11 @@ public open class A : R|kotlin/Any| { public constructor(): R|test/A| } -@R|kotlin/annotation/Target|(()) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|((R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg()) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|() @R|javax/annotation/meta/TypeQualifierDefault|(value = (R|java/lang/annotation/ElementType.METHOD|(), R|java/lang/annotation/ElementType.PARAMETER|())) public final annotation class NonNullApi : R|kotlin/Annotation| { public constructor(): R|spr/NonNullApi| } -@R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|(R|javax/annotation/meta/When.MAYBE|()) @R|javax/annotation/meta/TypeQualifierNickname|() public final annotation class Nullable : R|kotlin/Annotation| { +@R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) @R|kotlin/annotation/MustBeDocumented|() @R|javax/annotation/Nonnull|(when = R|javax/annotation/meta/When.MAYBE|()) @R|javax/annotation/meta/TypeQualifierNickname|() public final annotation class Nullable : R|kotlin/Annotation| { public constructor(): R|spr/Nullable| } diff --git a/compiler/fir/analysis-tests/testData/resolve/annotationUsedAsAnnotationArgument.fir.txt b/compiler/fir/analysis-tests/testData/resolve/annotationUsedAsAnnotationArgument.fir.txt index 62029809d55..9da0aa234fc 100644 --- a/compiler/fir/analysis-tests/testData/resolve/annotationUsedAsAnnotationArgument.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/annotationUsedAsAnnotationArgument.fir.txt @@ -1,17 +1,17 @@ FILE: annotationUsedAsAnnotationArgument.kt - @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) @R|kotlin/annotation/Retention|(Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) public final annotation class Ann : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) @R|kotlin/annotation/Retention|(value = Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) public final annotation class Ann : R|kotlin/Annotation| { public constructor(): R|Ann| { super() } } - @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) @R|kotlin/annotation/Retention|(Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) public final annotation class Ann2 : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) @R|kotlin/annotation/Retention|(value = Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) public final annotation class Ann2 : R|kotlin/Annotation| { public constructor(): R|Ann2| { super() } } - @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) @R|kotlin/annotation/Retention|(Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) public final annotation class Ann3 : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) @R|kotlin/annotation/Retention|(value = Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) public final annotation class Ann3 : R|kotlin/Annotation| { public constructor(arg: R|kotlin/Int|, s: R|kotlin/String|): R|Ann3| { super() } @@ -23,5 +23,5 @@ FILE: annotationUsedAsAnnotationArgument.kt public get(): R|kotlin/String| } - @R|Ann3|(@R|Ann3|(@R|Ann|() Int(5), String()) @R|Ann2|() Int(1), String()) public final val a: R|kotlin/Int| = Int(0) + @R|Ann3|(arg = @R|Ann3|(arg = @R|Ann|() Int(5), s = String()) @R|Ann2|() Int(1), s = String()) public final val a: R|kotlin/Int| = Int(0) public get(): R|kotlin/Int| diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfAnnotations.fir.txt b/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfAnnotations.fir.txt index 37e0a235660..dd1b628f464 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfAnnotations.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfAnnotations.fir.txt @@ -35,7 +35,7 @@ FILE: argumentsOfAnnotations.kt public get(): R|kotlin/Int| } - @R|AnnVarargs|(Int(1), String(a), String(b), String(c), Int(2)) public final class B : R|kotlin/Any| { + @R|AnnVarargs|(x = Int(1), y = Int(2)) public final class B : R|kotlin/Any| { public constructor(): R|B| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfJavaAnnotation.fir.txt b/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfJavaAnnotation.fir.txt index 83f09862610..58830a3b12d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfJavaAnnotation.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/argumentsOfJavaAnnotation.fir.txt @@ -1,5 +1,5 @@ FILE: main.kt - @R|Ann|(x = Int(10), s = String()) @R|Ann|(Int(10), String()) @R|Ann|(x = Int(10), s = String(), y = Int(10)) public final class A : R|kotlin/Any| { + @R|Ann|(x = Int(10), s = String()) @R|Ann|(s = Int(10), x = String()) @R|Ann|(x = Int(10), s = String(), y = Int(10)) public final class A : R|kotlin/Any| { public constructor(): R|A| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/integerLiteralTypes.fir.txt b/compiler/fir/analysis-tests/testData/resolve/arguments/integerLiteralTypes.fir.txt index d5a3012d9ad..92eef93c4db 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/integerLiteralTypes.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/integerLiteralTypes.fir.txt @@ -61,6 +61,6 @@ FILE: integerLiteralTypes.kt public get(): R|kotlin/Byte| } - @R|Ann|(Byte(10)) public final fun test_6(): R|kotlin/Unit| { - @R|Ann|(Int(300)) lval x: R|kotlin/String| = String() + @R|Ann|(x = Byte(10)) public final fun test_6(): R|kotlin/Unit| { + @R|Ann|(x = Int(300)) lval x: R|kotlin/String| = String() } diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/javaAnnotationsWithArrayValue.fir.txt b/compiler/fir/analysis-tests/testData/resolve/arguments/javaAnnotationsWithArrayValue.fir.txt index 063d926c3a1..dcf4645e2a8 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/javaAnnotationsWithArrayValue.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/javaAnnotationsWithArrayValue.fir.txt @@ -1,7 +1,7 @@ FILE: main.kt - @R|Ann|(vararg(String(a), String(b))) public final fun test_1(): R|kotlin/Unit| { + @R|Ann|(value = vararg(String(a), String(b))) public final fun test_1(): R|kotlin/Unit| { } - @R|Ann|((String(a), String(b))) public final fun test_2(): R|kotlin/Unit| { + @R|Ann|(value = (String(a), String(b))) public final fun test_2(): R|kotlin/Unit| { } - @R|Ann|(vararg(*(String(a), String(b)))) public final fun test_3(): R|kotlin/Unit| { + @R|Ann|(value = vararg(*(String(a), String(b)))) public final fun test_3(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.fir.txt b/compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.fir.txt index a77e91a1646..fb3c97f0695 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/namedArrayInAnnotation.fir.txt @@ -8,7 +8,7 @@ FILE: namedArrayInAnnotation.kt public get(): R|kotlin/Array| } - @R|Ann|(vararg(strings = (String(hello)))) public final class A : R|kotlin/Any| { + @R|Ann|(strings = vararg(strings = (String(hello)))) public final class A : R|kotlin/Any| { public constructor(): R|A| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.fir.txt b/compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.fir.txt index 1dce1127110..28631931439 100644 --- a/compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/arguments/nestedClassInAnnotationArgument.fir.txt @@ -13,7 +13,7 @@ FILE: nestedClassInAnnotationArgument.kt super() } - @R|Ann|((Q|A.EmptyList|)) public final fun foo(): R|kotlin/Unit| { + @R|Ann|(kClass = (Q|A.EmptyList|)) public final fun foo(): R|kotlin/Unit| { } public final object EmptyList : R|kotlin/Any| { diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentKClassLiteralTypeError.fir.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentKClassLiteralTypeError.fir.txt index 1ba09c290b2..c25aabb0e9e 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentKClassLiteralTypeError.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentKClassLiteralTypeError.fir.txt @@ -10,7 +10,7 @@ FILE: annotationArgumentKClassLiteralTypeError.kt } public final val R|T|.test: R|kotlin/Any| public inline get(): R|kotlin/Any| { - ^ @R|Ann|(((R|T|), (Q|kotlin/Array|))) object : R|kotlin/Any| { + ^ @R|Ann|(a = ((R|T|), (Q|kotlin/Array|))) object : R|kotlin/Any| { private constructor(): R|| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeConst.fir.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeConst.fir.txt index bb594e91471..7c942e554b3 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeConst.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeConst.fir.txt @@ -50,5 +50,5 @@ FILE: annotationArgumentMustBeConst.kt public get(): R|kotlin/Int| } - @R|Ann1|(vararg(R|/foo|, R|/foo|.R|kotlin/String.plus|(R|/bar|), (R|/foo|, String( ), R|/bar|), (R|/baz|(), String( )))) @R|Ann2|((R|/bar|, R|/baz|(), R|/bar|.R|kotlin/Int.plus|(R|/cnst|))) @R|Ann3|(R|/arr|) public final fun test(): R|kotlin/Unit| { + @R|Ann1|(a = vararg(R|/foo|, R|/foo|.R|kotlin/String.plus|(R|/bar|), (R|/foo|, String( ), R|/bar|), (R|/baz|(), String( )))) @R|Ann2|(a = (R|/bar|, R|/baz|(), R|/bar|.R|kotlin/Int.plus|(R|/cnst|))) @R|Ann3|(a = R|/arr|) public final fun test(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeEnumConst.fir.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeEnumConst.fir.txt index 80b651cce37..f278178eb08 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeEnumConst.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeEnumConst.fir.txt @@ -26,5 +26,5 @@ FILE: annotationArgumentMustBeEnumConst.kt public final var bar: R|TestEnum| = Q|TestEnum|.R|/TestEnum.Foo| public get(): R|TestEnum| public set(value: R|TestEnum|): R|kotlin/Unit| - @R|Ann|(vararg(R|/foo|, R|/bar|)) public final fun test(): R|kotlin/Unit| { + @R|Ann|(a = vararg(R|/foo|, R|/bar|)) public final fun test(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeKClassLiteral.fir.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeKClassLiteral.fir.txt index 64d02c7943b..2fba68a464b 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeKClassLiteral.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/annotationArgumentMustBeKClassLiteral.fir.txt @@ -19,5 +19,5 @@ FILE: annotationArgumentMustBeKClassLiteral.kt public final fun bar(): R|kotlin/reflect/KClass| { ^bar (Q|Foo|) } - @R|Ann|(((String()), (Boolean(true)), (Int(1)))) @R|Ann|((R|/foo|, R|/bar|())) public final fun test1(): R|kotlin/Unit| { + @R|Ann|(a = ((String()), (Boolean(true)), (Int(1)))) @R|Ann|(a = (R|/foo|, R|/bar|())) public final fun test1(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt index 475470bd1dd..6ea658df38f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/nonConstValInAnnotationArgument.fir.txt @@ -15,7 +15,7 @@ FILE: nonConstValInAnnotationArgument.kt public set(value: R|kotlin/Int|): R|kotlin/Unit| public final const val cnst: R|kotlin/Int| = Int(2) public get(): R|kotlin/Int| - @R|Ann|((R|/foo|, R|/foo|.R|kotlin/String.plus|(R|/cnst|.R|kotlin/Any.toString|()))) public final fun test(): R|kotlin/Unit| { + @R|Ann|(a = (R|/foo|, R|/foo|.R|kotlin/String.plus|(R|/cnst|.R|kotlin/Any.toString|()))) public final fun test(): R|kotlin/Unit| { } public final const val A: R|kotlin/String| = String(foo) public get(): R|kotlin/String| @@ -30,5 +30,5 @@ FILE: nonConstValInAnnotationArgument.kt public get(): R|kotlin/String| } - @R|S|(R|/A|.R|kotlin/String.plus|(R|/B|)) public final fun foo(): R|kotlin/Unit| { + @R|S|(s = R|/A|.R|kotlin/String.plus|(R|/B|)) public final fun foo(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/annotationWithReturn.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/annotationWithReturn.fir.txt index 644c00b5163..9b4379d1b7f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/annotationWithReturn.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/annotationWithReturn.fir.txt @@ -1,5 +1,5 @@ FILE: annotationWithReturn.kt - @FILE:R|Some|(^ R|/x|) + @FILE:R|Some|(value = ^ R|/x|) public final const val x: R|kotlin/Int| = Int(42) public get(): R|kotlin/Int| public final annotation class Some : R|kotlin/Annotation| { diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/annotations.fir.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/annotations.fir.txt index 67412742ae4..4f541792793 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/annotations.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/annotations.fir.txt @@ -1,5 +1,5 @@ FILE: annotations.kt - @R|kotlin/annotation/Retention|(Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) public final annotation class MyAnn : R|kotlin/Annotation| { + @R|kotlin/annotation/Retention|(value = Q|kotlin/annotation/AnnotationRetention|.R|kotlin/annotation/AnnotationRetention.SOURCE|) @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.EXPRESSION|)) public final annotation class MyAnn : R|kotlin/Annotation| { public constructor(): R|MyAnn| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/CanBeValChecker.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/CanBeValChecker.fir.txt index 76a9af6435f..1a987f68c6c 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/CanBeValChecker.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/CanBeValChecker.fir.txt @@ -91,7 +91,7 @@ FILE: CanBeValChecker.kt } public final fun withAnnotation(p: R|kotlin/collections/List|): R|kotlin/Unit| { - @R|kotlin/Suppress|(vararg(String(UNCHECKED_CAST))) lvar v: R|kotlin/collections/List| = (R|/p| as R|kotlin/collections/List|) + @R|kotlin/Suppress|(names = vararg(String(UNCHECKED_CAST))) lvar v: R|kotlin/collections/List| = (R|/p| as R|kotlin/collections/List|) R|kotlin/io/print|(R|/v|) } public final fun withReadonlyDeligate(): R|kotlin/Unit| { diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantExplicitTypeChecker.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantExplicitTypeChecker.fir.txt index 69fb3c9d3f0..f53a14ce921 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantExplicitTypeChecker.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantExplicitTypeChecker.fir.txt @@ -1,5 +1,5 @@ FILE: RedundantExplicitTypeChecker.kt - @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|)) public final annotation class A : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|)) public final annotation class A : R|kotlin/Annotation| { public constructor(): R|A| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.fir.txt index fa6dc41e51c..e7b214f3c7a 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/RedundantSetterParameterTypeChecker.fir.txt @@ -1,5 +1,5 @@ FILE: RedundantSetterParameterTypeChecker.kt - @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|)) public final annotation class Ann : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|)) public final annotation class Ann : R|kotlin/Annotation| { public constructor(): R|Ann| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariable.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariable.fir.txt index 9207c3b5295..7e63af6ad16 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariable.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/localVariable.fir.txt @@ -50,7 +50,7 @@ FILE: localVariable.kt } } - @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|)) public final annotation class Anno : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|)) public final annotation class Anno : R|kotlin/Annotation| { public constructor(): R|Anno| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/usedInAnnotationArguments.fir.txt b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/usedInAnnotationArguments.fir.txt index 035b543f596..32d4189ad68 100644 --- a/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/usedInAnnotationArguments.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/extendedCheckers/unused/usedInAnnotationArguments.fir.txt @@ -10,6 +10,6 @@ FILE: usedInAnnotationArguments.kt } public final fun foo(): R|kotlin/Int| { lval x: R|kotlin/Int| = Int(3) - @R|Ann|(R|/x|) lval y: R|kotlin/Int| = Int(5) + @R|Ann|(value = R|/x|) lval y: R|kotlin/Int| = Int(5) ^foo R|/y| } diff --git a/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.fir.txt b/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.fir.txt index d725b82ecf7..4cdb1d6d46b 100644 --- a/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/multifile/Annotations.fir.txt @@ -1,5 +1,5 @@ FILE: annotations.kt - @R|kotlin/annotation/Target|(vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FILE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FUNCTION|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|)) public final annotation class Simple : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FILE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.FUNCTION|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|, Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|)) public final annotation class Simple : R|kotlin/Annotation| { public constructor(): R|annotations/Simple| { super() } @@ -58,20 +58,20 @@ FILE: annotations.kt } FILE: main.kt @FILE:R|annotations/Simple|() - @R|annotations/WithInt|(Int(42)) public abstract class First : R|kotlin/Any| { + @R|annotations/WithInt|(value = Int(42)) public abstract class First : R|kotlin/Any| { public constructor(): R|test/First| { super() } - @R|annotations/Simple|() public abstract fun foo(@R|annotations/WithString|(String(abc)) arg: R|@R|annotations/Simple|() kotlin/Double|): R|kotlin/Unit| + @R|annotations/Simple|() public abstract fun foo(@R|annotations/WithString|(s = String(abc)) arg: R|@R|annotations/Simple|() kotlin/Double|): R|kotlin/Unit| - @R|annotations/Complex|(R|annotations/WithInt.WithInt|(Int(7)), R|annotations/WithString.WithString|(String())) public abstract val v: R|kotlin/String| + @R|annotations/Complex|(wi = R|annotations/WithInt.WithInt|(Int(7)), ws = R|annotations/WithString.WithString|(String())) public abstract val v: R|kotlin/String| public get(): R|kotlin/String| } - @R|annotations/WithString|(String(xyz)) public final class Second : R|@R|annotations/WithInt|(Int(0)) test/First| { + @R|annotations/WithString|(s = String(xyz)) public final class Second : R|@R|annotations/WithInt|(value = Int(0)) test/First| { public constructor(y: R|kotlin/Char|): R|test/Second| { - super() + super() } public final val y: R|kotlin/Char| = R|/y| @@ -85,9 +85,9 @@ FILE: main.kt ^ String() } - @R|annotations/WithString|(String(constructor)) public constructor(): R|test/Second| { + @R|annotations/WithString|(s = String(constructor)) public constructor(): R|test/Second| { this(Char(10)) } } - @R|annotations/WithInt|(Int(24)) @R|annotations/VeryComplex|(Float(3.14), Double(6.67E-11), Boolean(false), Long(123456789012345), Null(null)) public final typealias Third = R|@R|annotations/Simple|() test/Second| + @R|annotations/WithInt|(value = Int(24)) @R|annotations/VeryComplex|(f = Float(3.14), d = Double(6.67E-11), b = Boolean(false), l = Long(123456789012345), n = Null(null)) public final typealias Third = R|@R|annotations/Simple|() test/Second| diff --git a/compiler/fir/analysis-tests/testData/resolve/suppress/allWarnings.fir.txt b/compiler/fir/analysis-tests/testData/resolve/suppress/allWarnings.fir.txt index 6c20e88a786..1c59b9e5a9d 100644 --- a/compiler/fir/analysis-tests/testData/resolve/suppress/allWarnings.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/suppress/allWarnings.fir.txt @@ -1,5 +1,5 @@ FILE: allWarnings.kt - @R|kotlin/Suppress|(vararg(String(warnings))) public final class A : R|kotlin/Any| { + @R|kotlin/Suppress|(names = vararg(String(warnings))) public final class A : R|kotlin/Any| { public constructor(): R|A| { super() } diff --git a/compiler/fir/analysis-tests/testData/resolve/suppress/multipleWarnings.fir.txt b/compiler/fir/analysis-tests/testData/resolve/suppress/multipleWarnings.fir.txt index b34ddd212ea..954a75fa1f8 100644 --- a/compiler/fir/analysis-tests/testData/resolve/suppress/multipleWarnings.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/suppress/multipleWarnings.fir.txt @@ -1,10 +1,10 @@ FILE: multipleWarnings.kt - @R|kotlin/Suppress|(vararg(String(REDUNDANT_VISIBILITY_MODIFIER))) public final class A : R|kotlin/Any| { + @R|kotlin/Suppress|(names = vararg(String(REDUNDANT_VISIBILITY_MODIFIER))) public final class A : R|kotlin/Any| { public constructor(): R|A| { super() } - @R|kotlin/Suppress|(vararg(String(REDUNDANT_MODALITY_MODIFIER))) public final fun foo(): R|kotlin/Unit| { + @R|kotlin/Suppress|(names = vararg(String(REDUNDANT_MODALITY_MODIFIER))) public final fun foo(): R|kotlin/Unit| { } } diff --git a/compiler/fir/analysis-tests/testData/resolve/suppress/singleError.fir.txt b/compiler/fir/analysis-tests/testData/resolve/suppress/singleError.fir.txt index 81c85d22164..d27e5c3a9b0 100644 --- a/compiler/fir/analysis-tests/testData/resolve/suppress/singleError.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/suppress/singleError.fir.txt @@ -1,6 +1,6 @@ FILE: singleError.kt public final fun foo(x: R|kotlin/String|): R|kotlin/Unit| { } - @R|kotlin/Suppress|(vararg(String(ARGUMENT_TYPE_MISMATCH))) public final fun bar(): R|kotlin/Unit| { + @R|kotlin/Suppress|(names = vararg(String(ARGUMENT_TYPE_MISMATCH))) public final fun bar(): R|kotlin/Unit| { #(Int(10)) } diff --git a/compiler/fir/analysis-tests/testData/resolve/suppress/singleWarning.fir.txt b/compiler/fir/analysis-tests/testData/resolve/suppress/singleWarning.fir.txt index 60a8e07837b..876bcf96d1f 100644 --- a/compiler/fir/analysis-tests/testData/resolve/suppress/singleWarning.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolve/suppress/singleWarning.fir.txt @@ -1,3 +1,3 @@ FILE: singleWarning.kt - @R|kotlin/Suppress|(vararg(String(REDUNDANT_VISIBILITY_MODIFIER))) public final fun foo(): R|kotlin/Unit| { + @R|kotlin/Suppress|(names = vararg(String(REDUNDANT_VISIBILITY_MODIFIER))) public final fun foo(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/notNull.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/notNull.fir.txt index c647b287806..48d6bcd41bb 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/notNull.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/notNull.fir.txt @@ -1,5 +1,5 @@ FILE: notNull.kt - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun foo(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun foo(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NULL) -> x != null @@ -14,7 +14,7 @@ FILE: notNull.kt ^foo R|/x| } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun bar(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun bar(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(WILDCARD) -> x != null @@ -29,7 +29,7 @@ FILE: notNull.kt ^bar R|/x| } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun baz(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun baz(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NULL) -> x != null diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/propertyGetter.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/propertyGetter.fir.txt index 315c65699a5..6b2754ed1af 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/propertyGetter.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/bad/returnsImplies/propertyGetter.fir.txt @@ -1,5 +1,5 @@ FILE: propertyGetter.kt - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun R|kotlin/Any?|.isNotNull(): R|kotlin/Boolean| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun R|kotlin/Any?|.isNotNull(): R|kotlin/Boolean| [R|Contract description] < Returns(TRUE) -> this != null @@ -8,7 +8,7 @@ FILE: propertyGetter.kt [StubStatement] ^isNotNull !=(this@R|/isNotNull|, Null(null)) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final val R|kotlin/Any?|.isNotNull: R|kotlin/Boolean| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final val R|kotlin/Any?|.isNotNull: R|kotlin/Boolean| public get(): R|kotlin/Boolean| [R|Contract description] < diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/conditionLogic.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/conditionLogic.fir.txt index 3e45ef0de81..4213b9b0bb9 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/conditionLogic.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/conditionLogic.fir.txt @@ -1,5 +1,5 @@ FILE: conditionLogic.kt - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NOT_NULL) -> !x == null @@ -8,7 +8,7 @@ FILE: conditionLogic.kt [StubStatement] ^test1 R|/x| } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NOT_NULL) -> x is kotlin/String && x != null @@ -17,7 +17,7 @@ FILE: conditionLogic.kt [StubStatement] ^test2 R|/x| } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test3(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test3(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NOT_NULL) -> x is kotlin/String? || x is kotlin/Any? @@ -26,7 +26,7 @@ FILE: conditionLogic.kt [StubStatement] ^test3 R|/x| } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test4(x: R|kotlin/String?|, y: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test4(x: R|kotlin/String?|, y: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x != null && y != null @@ -35,7 +35,7 @@ FILE: conditionLogic.kt [StubStatement] ^test4 !=(R|/x|, Null(null)) && !=(R|/y|, Null(null)) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test5(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test5(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x != null || x is kotlin/Any @@ -44,7 +44,7 @@ FILE: conditionLogic.kt [StubStatement] ^test5 !=(R|/x|, Null(null)) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test6(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test6(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x is kotlin/String? && x != null @@ -53,7 +53,7 @@ FILE: conditionLogic.kt [StubStatement] ^test6 (R|/x| is R|kotlin/String|) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test7(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test7(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x is kotlin/String? && x != null || x is kotlin/Int @@ -62,7 +62,7 @@ FILE: conditionLogic.kt [StubStatement] ^test7 (R|/x| is R|kotlin/String|) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test8(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test8(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x is kotlin/String || x is kotlin/Int @@ -71,7 +71,7 @@ FILE: conditionLogic.kt [StubStatement] ^test8 (R|/x| is R|kotlin/String|) || (R|/x| is R|kotlin/Int|) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test9(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test9(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x is kotlin/String || x is kotlin/Int @@ -86,7 +86,7 @@ FILE: conditionLogic.kt ^test9 (R|/x| is R|kotlin/Int|) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test10(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test10(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x is kotlin/Comparable<*> || x is kotlin/CharSequence @@ -95,7 +95,7 @@ FILE: conditionLogic.kt [StubStatement] ^test10 (R|/x| is R|kotlin/String|) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test11(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test11(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x is kotlin/Comparable<*> && x is kotlin/CharSequence @@ -104,7 +104,7 @@ FILE: conditionLogic.kt [StubStatement] ^test11 (R|/x| is R|kotlin/String|) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test12(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test12(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x is kotlin/Comparable<*> && x is kotlin/CharSequence || x is kotlin/Number @@ -113,7 +113,7 @@ FILE: conditionLogic.kt [StubStatement] ^test12 (R|/x| is R|kotlin/String|) || (R|/x| is R|kotlin/Int|) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test13(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test13(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> (!)x !is kotlin/Comparable<*> || x !is kotlin/CharSequence && (!x is kotlin/Number) diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/inapplicable.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/inapplicable.fir.txt index 668bfa3f9d1..492bd71cef3 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/inapplicable.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/inapplicable.fir.txt @@ -1,5 +1,5 @@ FILE: inapplicable.kt - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun wrongFalse(x: R|kotlin/String?|): R|kotlin/Boolean| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun wrongFalse(x: R|kotlin/String?|): R|kotlin/Boolean| [R|Contract description] < Returns(FALSE) -> x != null @@ -8,7 +8,7 @@ FILE: inapplicable.kt [StubStatement] ^wrongFalse Boolean(true) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun wrongTrue(x: R|kotlin/String?|): R|kotlin/Boolean| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun wrongTrue(x: R|kotlin/String?|): R|kotlin/Boolean| [R|Contract description] < Returns(TRUE) -> x != null @@ -17,7 +17,7 @@ FILE: inapplicable.kt [StubStatement] ^wrongTrue Boolean(false) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun nullableConstant(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun nullableConstant(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NULL) -> x != null @@ -29,7 +29,7 @@ FILE: inapplicable.kt public final fun string(): R|kotlin/String| { ^string String() } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun nullableReturn(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun nullableReturn(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NULL) -> x != null @@ -38,7 +38,7 @@ FILE: inapplicable.kt [StubStatement] ^nullableReturn R|/string|() } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun returnsNull(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun returnsNull(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NOT_NULL) -> x != null @@ -47,7 +47,7 @@ FILE: inapplicable.kt [StubStatement] ^returnsNull Null(null) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun wrongReturnType(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun wrongReturnType(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x != null diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/notNull.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/notNull.fir.txt index df8552b3ffd..396be52c438 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/notNull.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/notNull.fir.txt @@ -1,5 +1,5 @@ FILE: notNull.kt - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Boolean| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Boolean| [R|Contract description] < Returns(FALSE) -> x != null @@ -8,7 +8,7 @@ FILE: notNull.kt [StubStatement] ^test1 ==(R|/x|, Null(null)) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Boolean| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Boolean| [R|Contract description] < Returns(TRUE) -> x != null @@ -17,7 +17,7 @@ FILE: notNull.kt [StubStatement] ^test2 !=(R|/x|, Null(null)) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test3(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test3(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x != null @@ -32,7 +32,7 @@ FILE: notNull.kt ^test3 Boolean(false) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test4(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test4(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x != null @@ -48,7 +48,7 @@ FILE: notNull.kt ^test4 Boolean(false) } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test5(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test5(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x != null diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/safeCall.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/safeCall.fir.txt index 95b83f45c51..325ff1c3df4 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/safeCall.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/safeCall.fir.txt @@ -1,5 +1,5 @@ FILE: safeCall.kt - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Int?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Int?| [R|Contract description] < Returns(NOT_NULL) -> x != null @@ -8,7 +8,7 @@ FILE: safeCall.kt [StubStatement] ^test1 R|/x|?.{ $subj$.R|kotlin/String.length| } } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Int?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Int?| [R|Contract description] < Returns(NOT_NULL) -> x is kotlin/Boolean diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/trickyCases.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/trickyCases.fir.txt index db6b38a1be5..5c3224eccce 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/trickyCases.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/contracts/fromSource/good/returnsImplies/trickyCases.fir.txt @@ -1,5 +1,5 @@ FILE: trickyCases.kt - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test1(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(NOT_NULL) -> x != null @@ -8,7 +8,7 @@ FILE: trickyCases.kt [StubStatement] ^test1 R|/x| } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test2(x: R|kotlin/String?|): R|kotlin/Any?| [R|Contract description] < Returns(TRUE) -> x != null @@ -25,7 +25,7 @@ FILE: trickyCases.kt } } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test3(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test3(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(NOT_NULL) -> x != null @@ -42,7 +42,7 @@ FILE: trickyCases.kt } } - @R|kotlin/OptIn|(vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test4(x: R|kotlin/Any?|): R|kotlin/Any?| + @R|kotlin/OptIn|(markerClass = vararg((Q|kotlin/contracts/ExperimentalContracts|))) public final fun test4(x: R|kotlin/Any?|): R|kotlin/Any?| [R|Contract description] < Returns(NOT_NULL) -> x != null diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/AnnotationWithEnum.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/AnnotationWithEnum.fir.txt index e03e6833019..fa12564c523 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/AnnotationWithEnum.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/AnnotationWithEnum.fir.txt @@ -1,3 +1,3 @@ FILE: jvm.kt - @R|some/Nls|(R|some/Nls.Capitalization.Title|) public final fun f(): R|kotlin/Unit| { + @R|some/Nls|(capitalization = R|some/Nls.Capitalization.Title|) public final fun f(): R|kotlin/Unit| { } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.fir.txt index 8044236a67a..3f5fe2987cd 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/lowPriorityInResolution.fir.txt @@ -1,5 +1,5 @@ FILE: lowPriorityInResolution.kt - @R|kotlin/Suppress|(vararg(String(INVISIBLE_MEMBER), String(INVISIBLE_REFERENCE))) @R|kotlin/internal/LowPriorityInOverloadResolution|() public final fun foo(): R|kotlin/Int| { + @R|kotlin/Suppress|(names = vararg(String(INVISIBLE_MEMBER), String(INVISIBLE_REFERENCE))) @R|kotlin/internal/LowPriorityInOverloadResolution|() public final fun foo(): R|kotlin/Int| { ^foo Int(1) } public final fun foo(): R|kotlin/String| { diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt index 54ba7f2b530..a75661001e3 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/Main.kt @@ -39,7 +39,8 @@ fun main(args: Array) { alias("LogicExpressionChecker") alias("ReturnExpressionChecker") alias("BlockChecker") - alias("AnnotationCallChecker") + alias("AnnotationChecker") + alias("AnnotationCallChecker") alias("CheckNotNullCallChecker") alias("ElvisExpressionChecker") alias("GetClassCallChecker") diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmExpressionCheckers.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmExpressionCheckers.kt index 46837cb8395..9051da70194 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmExpressionCheckers.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/JvmExpressionCheckers.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers import org.jetbrains.kotlin.fir.analysis.checkers.expression.ExpressionCheckers -import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationCallChecker +import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationChecker import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirQualifiedAccessExpressionChecker import org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression.* @@ -23,7 +23,7 @@ object JvmExpressionCheckers : ExpressionCheckers() { FirSuperCallWithDefaultsChecker, ) - override val annotationCallCheckers: Set + override val annotationCheckers: Set get() = setOf( FirDeprecatedJavaAnnotationsChecker, FirJvmPackageNameAnnotationsChecker, diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmFieldApplicabilityChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmFieldApplicabilityChecker.kt index 711294b25c8..2a2f693466d 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmFieldApplicabilityChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmFieldApplicabilityChecker.kt @@ -34,8 +34,10 @@ import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.FirTypeRef +import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_CLASS_ID +import org.jetbrains.kotlin.name.JvmNames.JVM_MULTIFILE_CLASS_ID object FirJvmFieldApplicabilityChecker : FirPropertyChecker() { override fun check(declaration: FirProperty, context: CheckerContext, reporter: DiagnosticReporter) { @@ -130,7 +132,7 @@ object FirJvmFieldApplicabilityChecker : FirPropertyChecker() { private fun isInsideJvmMultifileClassFile(context: CheckerContext): Boolean { return context.findClosest()?.annotations?.any { - (it.calleeReference as? FirResolvedNamedReference)?.name?.asString() == JVM_MULTIFILE_CLASS_SHORT + it.annotationTypeRef.coneType.classId == JVM_MULTIFILE_CLASS_ID } == true } -} \ No newline at end of file +} diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt index 61d744006a3..82ff66e4a70 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmNameChecker.kt @@ -17,8 +17,8 @@ import org.jetbrains.kotlin.fir.declarations.utils.isOpen import org.jetbrains.kotlin.fir.declarations.utils.isOverride import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.expressions.FirConstExpression -import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.resolve.getContainingClass +import org.jetbrains.kotlin.fir.types.classId import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds @@ -62,7 +62,7 @@ object FirJvmNameChecker : FirBasicDeclarationChecker() { private fun FirAnnotatedDeclaration.findJvmNameAnnotation(): FirAnnotation? { return annotations.firstOrNull { - it.calleeReference.safeAs()?.name == StandardClassIds.JvmName.shortClassName + it.annotationTypeRef.coneType.classId == StandardClassIds.JvmName } } diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmStaticChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmStaticChecker.kt index af537a280ec..8c295427f9e 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmStaticChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirJvmStaticChecker.kt @@ -25,6 +25,8 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol +import org.jetbrains.kotlin.fir.types.classId +import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.StandardClassIds @@ -244,7 +246,7 @@ object FirJvmStaticChecker : FirAnnotatedDeclarationChecker() { private fun FirAnnotatedDeclaration.findAnnotation(classId: ClassId): FirAnnotation? { return annotations.firstOrNull { - it.calleeReference.safeAs()?.name == classId.shortClassName + it.annotationTypeRef.coneType.classId == classId } } } diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirDeprecatedJavaAnnotationsChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirDeprecatedJavaAnnotationsChecker.kt index a1b78293808..b7a68825b39 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirDeprecatedJavaAnnotationsChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirDeprecatedJavaAnnotationsChecker.kt @@ -8,7 +8,7 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.fir.FirRealSourceElementKind import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext -import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationCallChecker +import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationChecker import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn @@ -19,7 +19,7 @@ import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName -object FirDeprecatedJavaAnnotationsChecker : FirAnnotationCallChecker() { +object FirDeprecatedJavaAnnotationsChecker : FirAnnotationChecker() { private val javaToKotlinNameMap: Map = mapOf( diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJvmPackageNameAnnotationsChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJvmPackageNameAnnotationsChecker.kt index d81e6a06326..85a35858681 100644 --- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJvmPackageNameAnnotationsChecker.kt +++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/expression/FirJvmPackageNameAnnotationsChecker.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.fir.analysis.jvm.checkers.expression import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext -import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationCallChecker +import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirAnnotationChecker import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn @@ -16,9 +16,12 @@ import org.jetbrains.kotlin.fir.declarations.getStringArgument import org.jetbrains.kotlin.fir.expressions.FirAnnotation import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.coneTypeSafe -import org.jetbrains.kotlin.name.* +import org.jetbrains.kotlin.name.ClassId +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.name.isValidJavaFqName -object FirJvmPackageNameAnnotationsChecker : FirAnnotationCallChecker() { +object FirJvmPackageNameAnnotationsChecker : FirAnnotationChecker() { private val jvmPackageNameClassId = ClassId.topLevel(FqName("kotlin.jvm.JvmPackageName")) private val stringParameterName = Name.identifier("name") diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt index f6f36620b3b..1ebe56b13b3 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ComposedExpressionCheckers.kt @@ -39,6 +39,8 @@ class ComposedExpressionCheckers : ExpressionCheckers() { get() = _returnExpressionCheckers override val blockCheckers: Set get() = _blockCheckers + override val annotationCheckers: Set + get() = _annotationCheckers override val annotationCallCheckers: Set get() = _annotationCallCheckers override val checkNotNullCallCheckers: Set @@ -85,6 +87,7 @@ class ComposedExpressionCheckers : ExpressionCheckers() { private val _logicExpressionCheckers: MutableSet = mutableSetOf() private val _returnExpressionCheckers: MutableSet = mutableSetOf() private val _blockCheckers: MutableSet = mutableSetOf() + private val _annotationCheckers: MutableSet = mutableSetOf() private val _annotationCallCheckers: MutableSet = mutableSetOf() private val _checkNotNullCallCheckers: MutableSet = mutableSetOf() private val _elvisExpressionCheckers: MutableSet = mutableSetOf() @@ -117,6 +120,7 @@ class ComposedExpressionCheckers : ExpressionCheckers() { _logicExpressionCheckers += checkers.logicExpressionCheckers _returnExpressionCheckers += checkers.returnExpressionCheckers _blockCheckers += checkers.blockCheckers + _annotationCheckers += checkers.annotationCheckers _annotationCallCheckers += checkers.annotationCallCheckers _checkNotNullCallCheckers += checkers.checkNotNullCallCheckers _elvisExpressionCheckers += checkers.elvisExpressionCheckers diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt index 360d7f1dcff..4e0ed573070 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/ExpressionCheckers.kt @@ -30,6 +30,7 @@ abstract class ExpressionCheckers { open val logicExpressionCheckers: Set = emptySet() open val returnExpressionCheckers: Set = emptySet() open val blockCheckers: Set = emptySet() + open val annotationCheckers: Set = emptySet() open val annotationCallCheckers: Set = emptySet() open val checkNotNullCallCheckers: Set = emptySet() open val elvisExpressionCheckers: Set = emptySet() @@ -60,7 +61,8 @@ abstract class ExpressionCheckers { @CheckersComponentInternal internal val allLogicExpressionCheckers: Set by lazy { logicExpressionCheckers + basicExpressionCheckers } @CheckersComponentInternal internal val allReturnExpressionCheckers: Set by lazy { returnExpressionCheckers + basicExpressionCheckers } @CheckersComponentInternal internal val allBlockCheckers: Set by lazy { blockCheckers + basicExpressionCheckers } - @CheckersComponentInternal internal val allAnnotationCallCheckers: Set by lazy { annotationCallCheckers + basicExpressionCheckers + callCheckers } + @CheckersComponentInternal internal val allAnnotationCheckers: Set by lazy { annotationCheckers + basicExpressionCheckers } + @CheckersComponentInternal internal val allAnnotationCallCheckers: Set by lazy { annotationCallCheckers + annotationCheckers + basicExpressionCheckers + callCheckers } @CheckersComponentInternal internal val allCheckNotNullCallCheckers: Set by lazy { checkNotNullCallCheckers + basicExpressionCheckers + callCheckers } @CheckersComponentInternal internal val allElvisExpressionCheckers: Set by lazy { elvisExpressionCheckers + basicExpressionCheckers } @CheckersComponentInternal internal val allGetClassCallCheckers: Set by lazy { getClassCallCheckers + basicExpressionCheckers + callCheckers } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt index 367d3f12a7c..0336b553cc6 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirExpressionCheckerAliases.kt @@ -11,6 +11,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression */ import org.jetbrains.kotlin.fir.expressions.FirAnnotation +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirArrayOfCall import org.jetbrains.kotlin.fir.expressions.FirBinaryLogicExpression import org.jetbrains.kotlin.fir.expressions.FirBlock @@ -53,7 +54,8 @@ typealias FirLoopJumpChecker = FirExpressionChecker typealias FirLogicExpressionChecker = FirExpressionChecker typealias FirReturnExpressionChecker = FirExpressionChecker typealias FirBlockChecker = FirExpressionChecker -typealias FirAnnotationCallChecker = FirExpressionChecker +typealias FirAnnotationChecker = FirExpressionChecker +typealias FirAnnotationCallChecker = FirExpressionChecker typealias FirCheckNotNullCallChecker = FirExpressionChecker typealias FirElvisExpressionChecker = FirExpressionChecker typealias FirGetClassCallChecker = FirExpressionChecker diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt index 040781d9881..7c6a85554ca 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirAnnotationHelpers.kt @@ -81,7 +81,6 @@ fun FirRegularClass.getAllowedAnnotationTargets(): Set { fun FirClassLikeSymbol<*>.getAllowedAnnotationTargets(): Set { val targetAnnotation = getTargetAnnotation() ?: return defaultAnnotationTargets - if (targetAnnotation.argumentList.arguments.isEmpty()) return emptySet() val arguments = targetAnnotation.findArgumentByName(TARGET_PARAMETER_NAME)?.unfoldArrayOrVararg().orEmpty() return arguments.mapNotNullTo(mutableSetOf()) { argument -> diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt index 34370004274..bf5e8e2da52 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/FirSinceKotlinHelpers.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirConstExpression -import org.jetbrains.kotlin.fir.expressions.arguments import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.resolve.symbolProvider import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -20,6 +19,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.resolve.checkers.OptInNames @@ -41,6 +41,8 @@ private data class FirSinceKotlinValue( val wasExperimentalMarkerClasses: List ) +private val SINCE_KOTLIN_VERSION_NAME = Name.identifier("version") + fun FirAnnotatedDeclaration.checkSinceKotlinVersionAccessibility(context: CheckerContext): FirSinceKotlinAccessibility { val value = getOwnSinceKotlinVersion(context.session) val version = value?.apiVersion @@ -65,7 +67,7 @@ private fun FirAnnotatedDeclaration.getOwnSinceKotlinVersion(session: FirSession // TODO: use-site targeted annotations fun FirAnnotatedDeclaration.consider() { - val sinceKotlinSingleArgument = getAnnotationByClassId(StandardClassIds.SinceKotlin)?.arguments?.singleOrNull() + val sinceKotlinSingleArgument = getAnnotationByClassId(StandardClassIds.SinceKotlin)?.findArgumentByName(SINCE_KOTLIN_VERSION_NAME) val apiVersion = ((sinceKotlinSingleArgument as? FirConstExpression<*>)?.value as? String)?.let(ApiVersion.Companion::parse) if (apiVersion != null) { // TODO: combine wasExperimentalMarkerClasses in case of several associated declarations with the same maximal API version diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt index 64db01d7d94..c59ebce83e9 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirAnnotationChecker.kt @@ -194,9 +194,9 @@ object FirAnnotationChecker : FirAnnotatedDeclarationChecker() { if (deprecated == null) { reporter.reportOn(deprecatedSinceKotlin.source, FirErrors.DEPRECATED_SINCE_KOTLIN_WITHOUT_DEPRECATED, context) } else { - val argumentMapping = deprecated.argumentMapping ?: return - for (value in argumentMapping.values) { - if (value.name.identifier == "level") { + val argumentMapping = deprecated.argumentMapping.mapping + for (name in argumentMapping.keys) { + if (name.identifier == "level") { reporter.reportOn( deprecatedSinceKotlin.source, FirErrors.DEPRECATED_SINCE_KOTLIN_WITH_DEPRECATED_LEVEL, diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationArgumentChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationArgumentChecker.kt index c4c9bd244b6..ed08b67a5ec 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationArgumentChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirAnnotationArgumentChecker.kt @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirDiagnosticFactory0 import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn -import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.findArgumentByName import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.languageVersionSettings @@ -34,10 +33,10 @@ object FirAnnotationArgumentChecker : FirAnnotationCallChecker() { sinceKotlinFqName, ) - override fun check(expression: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter) { - val argumentMapping = expression.argumentMapping ?: return + override fun check(expression: FirAnnotationCall, context: CheckerContext, reporter: DiagnosticReporter) { + val argumentMapping = expression.argumentMapping.mapping val fqName = expression.fqName(context.session) - for ((arg, _) in argumentMapping) { + for (arg in argumentMapping.values) { val argExpression = (arg as? FirNamedArgumentExpression)?.expression ?: arg checkAnnotationArgumentWithSubElements(argExpression, context.session, reporter, context) ?.let { reporter.reportOn(argExpression.source, it, context) } @@ -148,7 +147,7 @@ object FirAnnotationArgumentChecker : FirAnnotationCallChecker() { private fun checkDeprecatedSinceKotlin( source: FirSourceElement?, fqName: FqName?, - argumentMapping: LinkedHashMap, + argumentMapping: Map, context: CheckerContext, reporter: DiagnosticReporter ) { @@ -162,10 +161,10 @@ object FirAnnotationArgumentChecker : FirAnnotationCallChecker() { var warningSince: ApiVersion? = null var errorSince: ApiVersion? = null var hiddenSince: ApiVersion? = null - for (argument in argumentMapping) { - val identifier = argument.value.name.identifier + for ((name, argument) in argumentMapping) { + val identifier = name.identifier if (identifier == "warningSince" || identifier == "errorSince" || identifier == "hiddenSince") { - val version = parseVersionExpressionOrReport(argument.key, context, reporter) + val version = parseVersionExpressionOrReport(argument, context, reporter) if (version != null) { when (identifier) { "warningSince" -> warningSince = version diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInAnnotationCallChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInAnnotationCallChecker.kt index 6d46bff7a2f..d19c602f4c6 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInAnnotationCallChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirOptInAnnotationCallChecker.kt @@ -14,14 +14,15 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.findArgumentByName -import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall +import org.jetbrains.kotlin.fir.expressions.arguments import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.resolve.checkers.OptInNames object FirOptInAnnotationCallChecker : FirAnnotationCallChecker() { - override fun check(expression: FirAnnotation, context: CheckerContext, reporter: DiagnosticReporter) { + override fun check(expression: FirAnnotationCall, context: CheckerContext, reporter: DiagnosticReporter) { val lookupTag = expression.annotationTypeRef.coneTypeSafe()?.lookupTag ?: return val classId = lookupTag.classId val isMarker = classId == OptInNames.REQUIRES_OPT_IN_CLASS_ID diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt index 4002daf47a5..f2ae7bb458b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/extended/UnusedChecker.kt @@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.reportOn import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.expressions.FirAnnotation +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference @@ -253,8 +254,12 @@ object UnusedChecker : FirControlFlowChecker() { dataForNode: PathAwareVariableStatusInfo, annotation: FirAnnotation, ): PathAwareVariableStatusInfo { - val qualifiedAccesses = annotation.argumentList.arguments.mapNotNull { it as? FirQualifiedAccess }.toTypedArray() - return visitQualifiedAccesses(dataForNode, *qualifiedAccesses) + return if (annotation is FirAnnotationCall) { + val qualifiedAccesses = annotation.argumentList.arguments.mapNotNull { it as? FirQualifiedAccess }.toTypedArray() + visitQualifiedAccesses(dataForNode, *qualifiedAccesses) + } else { + dataForNode + } } private fun visitQualifiedAccesses( diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt index 117f4ce74ba..b1963ab44ea 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollector.kt @@ -10,13 +10,14 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.collectors.components.AbstractDiagnosticCollectorComponent import org.jetbrains.kotlin.fir.analysis.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.fir.declarations.FirDeclaration +import org.jetbrains.kotlin.fir.declarations.findArgumentByName +import org.jetbrains.kotlin.fir.declarations.unwrapVarargValue import org.jetbrains.kotlin.fir.expressions.FirConstExpression -import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression -import org.jetbrains.kotlin.fir.expressions.arguments import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.SessionHolder import org.jetbrains.kotlin.fir.types.ConeClassLikeType import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.StandardClassIds abstract class AbstractDiagnosticCollector( @@ -37,6 +38,8 @@ abstract class AbstractDiagnosticCollector( const val SUPPRESS_ALL_WARNINGS = "warnings" const val SUPPRESS_ALL_ERRORS = "errors" + private val SUPPRESS_NAMES_NAME = Name.identifier("names") + fun getDiagnosticsSuppressedForContainer(annotationContainer: FirAnnotationContainer): List? { val annotations = annotationContainer.annotations.filter { val type = it.annotationTypeRef.coneType as? ConeClassLikeType ?: return@filter false @@ -44,9 +47,9 @@ abstract class AbstractDiagnosticCollector( } if (annotations.isEmpty()) return null return annotations.flatMap { annotationCall -> - annotationCall.arguments.filterIsInstance().flatMap { varargArgument -> - varargArgument.arguments.mapNotNull { (it as? FirConstExpression<*>)?.value as? String? } - } + annotationCall.findArgumentByName(SUPPRESS_NAMES_NAME)?.unwrapVarargValue()?.mapNotNull { + (it as? FirConstExpression<*>)?.value as? String? + } ?: emptyList() } } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt index c677b401cf5..1376cb2758b 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/AbstractDiagnosticCollectorVisitor.kt @@ -204,8 +204,8 @@ abstract class AbstractDiagnosticCollectorVisitor( visitWithQualifiedAccessOrAnnotationCall(propertyAccessExpression) } - override fun visitAnnotation(annotation: FirAnnotation, data: Nothing?) { - visitWithQualifiedAccessOrAnnotationCall(annotation) + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Nothing?) { + visitWithQualifiedAccessOrAnnotationCall(annotationCall) } override fun visitVariableAssignment(variableAssignment: FirVariableAssignment, data: Nothing?) { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt index b9a4d4fce1a..abfc5db1c7d 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ErrorNodeDiagnosticCollectorComponent.kt @@ -51,7 +51,7 @@ class ErrorNodeDiagnosticCollectorComponent( // Use the source of the enclosing FirQualifiedAccess if it is exactly the call to the erroneous callee. when (it) { is FirQualifiedAccess -> it.calleeReference == errorNamedReference - is FirAnnotation -> it.calleeReference == errorNamedReference + is FirAnnotationCall -> it.calleeReference == errorNamedReference else -> false } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt index 204458dd355..11ebd0f1852 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/collectors/components/ExpressionCheckersDiagnosticComponent.kt @@ -29,7 +29,11 @@ class ExpressionCheckersDiagnosticComponent( } override fun visitAnnotation(annotation: FirAnnotation, data: CheckerContext) { - checkers.allAnnotationCallCheckers.check(annotation, data, reporter) + checkers.allAnnotationCheckers.check(annotation, data, reporter) + } + + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: CheckerContext) { + checkers.allAnnotationCallCheckers.check(annotationCall, data, reporter) } override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: CheckerContext) { diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirAnnotationSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirAnnotationSerializer.kt index 8b00d747d9e..497f8123f70 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirAnnotationSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirAnnotationSerializer.kt @@ -6,12 +6,14 @@ package org.jetbrains.kotlin.fir.serialization import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList +import org.jetbrains.kotlin.fir.expressions.FirAnnotation +import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.serialization.constant.ConstantValue import org.jetbrains.kotlin.fir.serialization.constant.toConstantValue -import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.fir.types.coneType +import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.metadata.ProtoBuf import org.jetbrains.kotlin.name.Name @@ -30,16 +32,8 @@ class FirAnnotationSerializer(private val session: FirSession, internal val stri addArgument(argument) } - val argumentList = annotation.argumentList - if (argumentList is FirResolvedArgumentList) { - for ((argumentExpression, parameter) in argumentList.mapping) { - addArgument(argumentExpression, parameter.name) - } - } else { - for (argumentExpression in argumentList.arguments) { - if (argumentExpression !is FirNamedArgumentExpression) continue - addArgument(argumentExpression, argumentExpression.name) - } + for ((name, argument) in annotation.argumentMapping.mapping) { + addArgument(argument, name) } }.build() diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt index 13abfa49e68..7b7cdf5c958 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/FirElementSerializer.kt @@ -24,7 +24,6 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotation import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyAnnotationArgumentMapping -import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations import org.jetbrains.kotlin.fir.resolve.* import org.jetbrains.kotlin.fir.resolve.calls.varargElementType import org.jetbrains.kotlin.fir.resolve.inference.isSuspendFunctionType @@ -851,9 +850,9 @@ class FirElementSerializer private constructor( writeVersionRequirement(LanguageFeature.ReleaseCoroutines) private fun serializeVersionRequirementFromRequireKotlin(annotation: FirAnnotation): ProtoBuf.VersionRequirement.Builder? { - val args = annotation.argumentList + val argumentMapping = annotation.argumentMapping.mapping - val versionString = (args[RequireKotlinConstants.VERSION]?.toConstantValue() as? StringValue)?.value ?: return null + val versionString = (argumentMapping[RequireKotlinConstants.VERSION]?.toConstantValue() as? StringValue)?.value ?: return null val matchResult = RequireKotlinConstants.VERSION_REGEX.matchEntire(versionString) ?: return null val major = matchResult.groupValues.getOrNull(1)?.toIntOrNull() ?: return null @@ -866,12 +865,12 @@ class FirElementSerializer private constructor( writeVersionFull = { proto.versionFull = it } ) - val message = (args[RequireKotlinConstants.MESSAGE]?.toConstantValue() as? StringValue)?.value + val message = (argumentMapping[RequireKotlinConstants.MESSAGE]?.toConstantValue() as? StringValue)?.value if (message != null) { proto.message = stringTable.getStringIndex(message) } - when ((args[RequireKotlinConstants.LEVEL]?.toConstantValue() as? EnumValue)?.enumEntryName?.asString()) { + when ((argumentMapping[RequireKotlinConstants.LEVEL]?.toConstantValue() as? EnumValue)?.enumEntryName?.asString()) { DeprecationLevel.ERROR.name -> { // ERROR is the default level } @@ -879,7 +878,7 @@ class FirElementSerializer private constructor( DeprecationLevel.HIDDEN.name -> proto.level = ProtoBuf.VersionRequirement.Level.HIDDEN } - when ((args[RequireKotlinConstants.VERSION_KIND]?.toConstantValue() as? EnumValue)?.enumEntryName?.asString()) { + when ((argumentMapping[RequireKotlinConstants.VERSION_KIND]?.toConstantValue() as? EnumValue)?.enumEntryName?.asString()) { ProtoBuf.VersionRequirement.VersionKind.LANGUAGE_VERSION.name -> { // LANGUAGE_VERSION is the default kind } @@ -889,7 +888,7 @@ class FirElementSerializer private constructor( proto.versionKind = ProtoBuf.VersionRequirement.VersionKind.API_VERSION } - val errorCode = (args[RequireKotlinConstants.ERROR_CODE]?.toConstantValue() as? IntValue)?.value + val errorCode = (argumentMapping[RequireKotlinConstants.ERROR_CODE]?.toConstantValue() as? IntValue)?.value if (errorCode != null && errorCode != -1) { proto.errorCode = errorCode } diff --git a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/constant/FirToConstantValueTransformer.kt b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/constant/FirToConstantValueTransformer.kt index 92a35ae7d4e..01be9b06a4f 100644 --- a/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/constant/FirToConstantValueTransformer.kt +++ b/compiler/fir/fir-serialization/src/org/jetbrains/kotlin/fir/serialization/constant/FirToConstantValueTransformer.kt @@ -9,7 +9,10 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirEnumEntry import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.render -import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.fir.types.classId +import org.jetbrains.kotlin.fir.types.coneTypeSafe +import org.jetbrains.kotlin.fir.types.coneTypeUnsafe import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor import org.jetbrains.kotlin.types.ConstantValueKind @@ -62,6 +65,10 @@ internal object FirToConstantValueTransformer : FirDefaultVisitor { + return visitAnnotation(annotationCall, data) + } + override fun visitGetClassCall( getClassCall: FirGetClassCall, data: Nothing? diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt index 27c44fca8a5..d585577ee95 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrImplicitCastInserter.kt @@ -40,6 +40,8 @@ class Fir2IrImplicitCastInserter( override fun visitAnnotation(annotation: FirAnnotation, data: IrElement): IrElement = data + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: IrElement): IrElement = data + override fun visitAnonymousObjectExpression(anonymousObjectExpression: FirAnonymousObjectExpression, data: IrElement): IrElement = data override fun visitAnonymousFunctionExpression(anonymousFunctionExpression: FirAnonymousFunctionExpression, data: IrElement): IrElement { diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index 808d4bbcd37..7eb84bed451 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -376,6 +376,10 @@ class Fir2IrVisitor( return callGenerator.convertToIrConstructorCall(annotation) } + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): IrElement { + return callGenerator.convertToIrConstructorCall(annotationCall) + } + override fun visitQualifiedAccessExpression(qualifiedAccessExpression: FirQualifiedAccessExpression, data: Any?): IrElement { val explicitReceiverExpression = convertToIrReceiverExpression( qualifiedAccessExpression.explicitReceiver, qualifiedAccessExpression.calleeReference diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt index 3a2a1e49503..1e56ffdfccc 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/CallAndReferenceGenerator.kt @@ -11,11 +11,13 @@ import org.jetbrains.kotlin.fir.backend.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isCompanion import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.expressions.builder.buildAnnotationCall import org.jetbrains.kotlin.fir.expressions.impl.FirNoReceiverExpression import org.jetbrains.kotlin.fir.references.FirDelegateFieldReference import org.jetbrains.kotlin.fir.references.FirReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.references.FirSuperReference +import org.jetbrains.kotlin.fir.references.builder.buildResolvedNamedReference import org.jetbrains.kotlin.fir.references.impl.FirReferencePlaceholderForResolvedAnnotations import org.jetbrains.kotlin.fir.resolve.FirSamResolverImpl import org.jetbrains.kotlin.fir.resolve.calls.getExpectedTypeForSAMConversion @@ -45,6 +47,7 @@ import org.jetbrains.kotlin.ir.util.render import org.jetbrains.kotlin.psi2ir.generators.hasNoSideEffects import org.jetbrains.kotlin.psi2ir.generators.isUnchanging import org.jetbrains.kotlin.types.AbstractTypeChecker +import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull class CallAndReferenceGenerator( private val components: Fir2IrComponents, @@ -423,7 +426,27 @@ class CallAndReferenceGenerator( ) } } - }.applyCallArguments(annotation, annotationMode = true) + }.applyCallArguments(annotation.toAnnotationCall(), annotationMode = true) + } + + private fun FirAnnotation.toAnnotationCall(): FirAnnotationCall? { + if (this is FirAnnotationCall) return this + return buildAnnotationCall { + useSiteTarget = this@toAnnotationCall.useSiteTarget + annotationTypeRef = this@toAnnotationCall.annotationTypeRef + val symbol = annotationTypeRef.coneType.toSymbol(session) as? FirRegularClassSymbol ?: return null + val constructorSymbol = symbol.declarationSymbols.firstIsInstanceOrNull() ?: return null + val argumentToParameterToMapping = constructorSymbol.valueParameterSymbols.mapNotNull { + val parameter = it.fir + val argument = this@toAnnotationCall.argumentMapping.mapping[parameter.name] ?: return@mapNotNull null + argument to parameter + }.toMap(LinkedHashMap()) + argumentList = buildResolvedArgumentList(argumentToParameterToMapping) + calleeReference = buildResolvedNamedReference { + name = symbol.classId.shortClassName + resolvedSymbol = constructorSymbol + } + } } internal fun convertToGetObject(qualifier: FirResolvedQualifier): IrExpression { @@ -487,7 +510,7 @@ class CallAndReferenceGenerator( val calleeReference = when (call) { is FirFunctionCall -> call.calleeReference is FirDelegatedConstructorCall -> call.calleeReference - is FirAnnotation -> call.calleeReference + is FirAnnotationCall -> call.calleeReference else -> null } val function = if (calleeReference == FirReferencePlaceholderForResolvedAnnotations) { diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt index 6562fcd6dd5..444c47e8247 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/JavaUtils.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.types.ConstantValueKind +import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull import java.lang.Deprecated import java.lang.annotation.Documented import java.lang.annotation.Retention @@ -113,6 +114,14 @@ private fun List.mapJavaTargetArguments(session: FirSess } val classId = ClassId.topLevel(StandardNames.FqNames.annotationTarget) resultSet.mapTo(arguments) { buildEnumCall(session, classId, Name.identifier(it.name)) } + varargElementType = buildResolvedTypeRef { + type = ConeClassLikeTypeImpl( + ConeClassLikeLookupTagImpl(classId), + emptyArray(), + isNullable = false, + ConeAttributes.Empty + ).createOutArrayType() + } } } @@ -134,15 +143,15 @@ private fun fillAnnotationArgumentMapping( annotationArguments: Collection, destination: MutableMap ) { - if (annotationArguments.none { it.name != null }) return val annotationClassSymbol = session.symbolProvider.getClassLikeSymbolByClassId(lookupTag.classId).also { lookupTag.bindSymbolToLookupTag(session, it) - } ?: return - val annotationConstructor = - (annotationClassSymbol.fir as FirRegularClass).declarations.filterIsInstance().first() + } + val annotationConstructor = (annotationClassSymbol?.fir as FirRegularClass?) + ?.declarations + ?.firstIsInstanceOrNull() annotationArguments.associateTo(destination) { argument -> val name = argument.name ?: JavaSymbolProvider.VALUE_METHOD_NAME - val parameter = annotationConstructor.valueParameters.find { it.name == name } + val parameter = annotationConstructor?.valueParameters?.find { it.name == name } name to argument.toFirExpression(session, javaTypeParameterStack, parameter?.returnTypeRef) } } @@ -205,7 +214,6 @@ private fun JavaAnnotation.toFirAnnotationCall( "Deprecated in Java" ).setProperType(session) } - null -> {} else -> { fillAnnotationArgumentMapping(session, javaTypeParameterStack, lookupTag!!, arguments, mapping) } diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt index 1af9f85bf29..b7ed92b6e40 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/enhancement/FirAnnotationTypeQualifierResolver.kt @@ -37,7 +37,7 @@ class FirAnnotationTypeQualifierResolver( get() = coneClassLikeType?.lookupTag?.classId?.asSingleFqName() override fun FirAnnotation.enumArguments(onlyValue: Boolean): Iterable = - arguments.flatMap { argument -> + argumentMapping.mapping.values.flatMap { argument -> if (!onlyValue || argument !is FirNamedArgumentExpression || argument.name == DEFAULT_ANNOTATION_MEMBER_NAME) argument.toEnumNames() else @@ -47,6 +47,7 @@ class FirAnnotationTypeQualifierResolver( private fun FirExpression.toEnumNames(): List = when (this) { is FirArrayOfCall -> arguments.flatMap { it.toEnumNames() } + is FirVarargArgumentsExpression -> arguments.flatMap { it.toEnumNames() } else -> listOfNotNull(toResolvedCallableSymbol()?.callableId?.callableName?.asString()) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index 04e75e52066..79a42a2d187 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -489,7 +489,7 @@ class FirCallResolver( } } - fun resolveAnnotationCall(annotation: FirAnnotation): FirAnnotation? { + fun resolveAnnotationCall(annotation: FirAnnotationCall): FirAnnotationCall? { val reference = annotation.calleeReference as? FirSimpleNamedReference ?: return null annotation.argumentList.transformArguments(transformer, ResolutionMode.ContextDependent) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt index dc98c711fbf..aa018336ba7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/FirAnnotationUtils.kt @@ -9,12 +9,14 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.* +import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.types.ConeClassLikeType +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.coneTypeSafe import org.jetbrains.kotlin.name.ClassId @@ -26,6 +28,9 @@ private val RETENTION_CLASS_ID = ClassId.fromString("kotlin/annotation/Retention private val TARGET_CLASS_ID = ClassId.fromString("kotlin/annotation/Target") private val JVM_FIELD_CLASS_ID = ClassId.fromString("kotlin/jvm/JvmField") +private val RETENTION_VALUE_NAME = Name.identifier("value") +private val TARGET_ALLOWED_TARGET_NAME = Name.identifier("allowedTargets") + private fun FirAnnotation.toAnnotationLookupTag(): ConeClassLikeLookupTag? = // this cast fails when we have generic-typed annotations @T (annotationTypeRef.coneType as? ConeClassLikeType)?.lookupTag @@ -49,7 +54,7 @@ fun FirAnnotationContainer.nonSourceAnnotations(session: FirSession): List meta.toAnnotationClassId() == RETENTION_CLASS_ID && - meta.argumentList.arguments.singleOrNull()?.callableNameOfMetaAnnotationArgument == Name.identifier("SOURCE") + meta.findArgumentByName(RETENTION_VALUE_NAME)?.callableNameOfMetaAnnotationArgument == Name.identifier("SOURCE") } } @@ -59,9 +64,15 @@ inline val FirProperty.hasJvmFieldAnnotation: Boolean val FirAnnotation.isJvmFieldAnnotation: Boolean get() = toAnnotationClassId() == JVM_FIELD_CLASS_ID -fun FirAnnotation.useSiteTargetsFromMetaAnnotation(session: FirSession): Set = - toAnnotationClass(session)?.annotations?.find { it.toAnnotationClassId() == TARGET_CLASS_ID }?.argumentList?.arguments - ?.toAnnotationUseSiteTargets() ?: DEFAULT_USE_SITE_TARGETS +fun FirAnnotation.useSiteTargetsFromMetaAnnotation(session: FirSession): Set { + return toAnnotationClass(session) + ?.annotations + ?.find { it.toAnnotationClassId() == TARGET_CLASS_ID } + ?.findArgumentByName(TARGET_ALLOWED_TARGET_NAME) + ?.unwrapVarargValue() + ?.toAnnotationUseSiteTargets() + ?: DEFAULT_USE_SITE_TARGETS +} private fun List.toAnnotationUseSiteTargets(): Set = flatMapTo(mutableSetOf()) { arg -> @@ -122,11 +133,18 @@ fun List.getAnnotationsByFqName(fqName: FqName): List { + return when (this) { + is FirVarargArgumentsExpression -> arguments + is FirArrayOfCall -> arguments + else -> listOf(this) } +} + +fun FirAnnotation.findArgumentByName(name: Name): FirExpression? { + argumentMapping.mapping[name]?.let { return it } + if (this !is FirAnnotationCall) return null + // NB: we have to consider both cases, because deserializer does not create argument mapping for (argument in arguments) { if (argument is FirNamedArgumentExpression && argument.name == name) { @@ -152,3 +170,10 @@ fun FirAnnotationContainer.getJvmNameFromAnnotation(target: AnnotationUseSiteTar call.getStringArgument(name)?.takeIf { target == null || call.useSiteTarget == target } } } + +val FirAnnotation.resolved: Boolean + get() { + if (annotationTypeRef !is FirResolvedTypeRef) return false + if (this !is FirAnnotationCall) return true + return calleeReference is FirResolvedNamedReference || calleeReference is FirErrorNamedReference + } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/GeneratedDeclarationValidation.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/GeneratedDeclarationValidation.kt index 38083928392..5a0ffdbb106 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/GeneratedDeclarationValidation.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/GeneratedDeclarationValidation.kt @@ -7,7 +7,7 @@ package org.jetbrains.kotlin.fir.declarations import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirAnnotationResolveStatus +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirArgumentList import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList import org.jetbrains.kotlin.fir.references.FirNamedReference @@ -31,10 +31,13 @@ object FirGeneratedElementsValidator : FirDefaultVisitor() { } override fun visitAnnotation(annotation: FirAnnotation, data: Any?) { - require(annotation.resolveStatus == FirAnnotationResolveStatus.Resolved) annotation.acceptChildren(this, null) } + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: Any?) { + annotationCall.acceptChildren(this, null) + } + override fun visitRegularClass(regularClass: FirRegularClass, data: Any?) { regularClass.acceptChildren(this, null) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt index 236f123ce1b..efa4ae72850 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/declarations/deprecationUtils.kt @@ -7,8 +7,6 @@ package org.jetbrains.kotlin.fir.declarations import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.config.ApiVersion -import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo -import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.FirAnnotationContainer import org.jetbrains.kotlin.fir.FirElement @@ -20,6 +18,8 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name +import org.jetbrains.kotlin.resolve.deprecation.DeprecationInfo +import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue import org.jetbrains.kotlin.resolve.deprecation.SimpleDeprecationInfo import org.jetbrains.kotlin.utils.addIfNotNull import org.jetbrains.kotlin.utils.addToStdlib.safeAs @@ -98,12 +98,15 @@ private fun FirAnnotation.getVersionFromArgument(name: Name): ApiVersion? = private fun FirAnnotation.getDeprecationLevel(): DeprecationLevelValue? { //take last because Annotation might be not resolved yet and arguments passed without explicit names - val arg = findArgumentByName(LEVEL_NAME) ?: arguments.lastOrNull() - return arg?.let { argument -> - val targetExpression = argument as? FirQualifiedAccessExpression ?: return null - val targetName = (targetExpression.calleeReference as? FirNamedReference)?.name?.asString() ?: return null - DeprecationLevelValue.values().find { it.name == targetName } - } + val argument = if (resolved) { + argumentMapping.mapping[LEVEL_NAME] + } else { + val call = this as? FirAnnotationCall ?: return null + call.arguments.firstOrNull { it is FirNamedArgumentExpression && it.name == LEVEL_NAME }?.unwrapArgument() ?: arguments.lastOrNull() + } ?: return null + val targetExpression = argument as? FirQualifiedAccessExpression ?: return null + val targetName = (targetExpression.calleeReference as? FirNamedReference)?.name?.asString() ?: return null + return DeprecationLevelValue.values().find { it.name == targetName } } private fun List.extractDeprecationInfoPerUseSite( diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt index 7a69f64904c..d9e60c1ffc9 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/FirDataFlowAnalyzer.kt @@ -1267,12 +1267,12 @@ abstract class FirDataFlowAnalyzer( // ----------------------------------- Annotations ----------------------------------- - fun enterAnnotationCall(annotation: FirAnnotation) { - graphBuilder.enterAnnotationCall(annotation).mergeIncomingFlow() + fun enterAnnotation(annotation: FirAnnotation) { + graphBuilder.enterAnnotation(annotation).mergeIncomingFlow() } - fun exitAnnotationCall(annotation: FirAnnotation) { - graphBuilder.exitAnnotationCall(annotation).mergeIncomingFlow() + fun exitAnnotation(annotation: FirAnnotation) { + graphBuilder.exitAnnotation(annotation).mergeIncomingFlow() } // ----------------------------------- Init block ----------------------------------- diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt index e7c93099b98..6ad2a95cd97 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/dfa/cfg/ControlFlowGraphBuilder.kt @@ -1177,7 +1177,7 @@ class ControlFlowGraphBuilder { // ----------------------------------- Annotations ----------------------------------- - fun enterAnnotationCall(annotation: FirAnnotation): AnnotationEnterNode { + fun enterAnnotation(annotation: FirAnnotation): AnnotationEnterNode { val graph = ControlFlowGraph(null, "STUB_GRAPH_FOR_ANNOTATION_CALL", ControlFlowGraph.Kind.AnnotationCall) pushGraph(graph, Mode.Body) return createAnnotationEnterNode(annotation).also { @@ -1185,7 +1185,7 @@ class ControlFlowGraphBuilder { } } - fun exitAnnotationCall(annotation: FirAnnotation): AnnotationExitNode { + fun exitAnnotation(annotation: FirAnnotation): AnnotationExitNode { val node = createAnnotationExitNode(annotation) popAndAddEdge(node) popGraph() diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt index 01df78299a3..3d054338a56 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt @@ -15,8 +15,13 @@ import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext import org.jetbrains.kotlin.fir.resolve.inference.model.ConeFixVariableConstraintPosition import org.jetbrains.kotlin.fir.returnExpressions -import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.resolve.calls.inference.components.* +import org.jetbrains.kotlin.fir.types.ConeClassErrorType +import org.jetbrains.kotlin.fir.types.ConeKotlinType +import org.jetbrains.kotlin.fir.types.ConeTypeVariable +import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintSystemCompletionContext +import org.jetbrains.kotlin.resolve.calls.inference.components.ConstraintSystemCompletionMode +import org.jetbrains.kotlin.resolve.calls.inference.components.TypeVariableDependencyInformationProvider +import org.jetbrains.kotlin.resolve.calls.inference.components.TypeVariableDirectionCalculator import org.jetbrains.kotlin.resolve.calls.inference.model.NewConstraintSystemImpl import org.jetbrains.kotlin.resolve.calls.inference.model.NotEnoughInformationForTypeParameter import org.jetbrains.kotlin.resolve.calls.inference.model.VariableWithConstraints @@ -467,7 +472,7 @@ fun FirStatement.processAllContainingCallCandidates(processBlocks: Boolean, proc rhs.processAllContainingCallCandidates(processBlocks, processor) } - is FirAnnotation -> { + is FirAnnotationCall -> { processCandidateIfApplicable(processor, processBlocks) arguments.forEach { it.processAllContainingCallCandidates(processBlocks, processor) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt index 97a4e106cde..e11a2dcfe71 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirCallCompletionResultsWriterTransformer.kt @@ -257,40 +257,40 @@ class FirCallCompletionResultsWriterTransformer( return constructor.returnTypeRef.coneType.isArrayOrPrimitiveArray } - override fun transformAnnotation( - annotation: FirAnnotation, + override fun transformAnnotationCall( + annotationCall: FirAnnotationCall, data: ExpectedArgumentType? ): FirStatement { - val calleeReference = annotation.calleeReference as? FirNamedReferenceWithCandidate - ?: return annotation - annotation.transformCalleeReference( + val calleeReference = annotationCall.calleeReference as? FirNamedReferenceWithCandidate + ?: return annotationCall + annotationCall.transformCalleeReference( StoreCalleeReference, calleeReference.toResolvedReference(), ) val subCandidate = calleeReference.candidate val expectedArgumentsTypeMapping = runIf(!calleeReference.isError) { subCandidate.createArgumentsMapping() } withFirArrayOfCallTransformer { - annotation.argumentList.transformArguments(this, expectedArgumentsTypeMapping) + annotationCall.argumentList.transformArguments(this, expectedArgumentsTypeMapping) var index = 0 subCandidate.argumentMapping = subCandidate.argumentMapping?.let { LinkedHashMap(it.size).let { newMapping -> subCandidate.argumentMapping?.mapKeysTo(newMapping) { (_, _) -> - annotation.argumentList.arguments[index++] + annotationCall.argumentList.arguments[index++] } } } } if (calleeReference.isError) { subCandidate.argumentMapping?.let { - annotation.replaceArgumentList(buildArgumentListForErrorCall(annotation.argumentList, it)) + annotationCall.replaceArgumentList(buildArgumentListForErrorCall(annotationCall.argumentList, it)) } } else { subCandidate.handleVarargs() subCandidate.argumentMapping?.let { - annotation.replaceArgumentList(buildResolvedArgumentList(it, annotation.argumentList.source)) + annotationCall.replaceArgumentList(buildResolvedArgumentList(it, annotationCall.argumentList.source)) } } - return annotation + return annotationCall } private fun Candidate.handleVarargs() { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt index 698a36aa4af..d0b5cc96b05 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirTypeResolveTransformer.kt @@ -9,10 +9,7 @@ import kotlinx.collections.immutable.toImmutableList import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.isFromVararg -import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirBlock -import org.jetbrains.kotlin.fir.expressions.FirDelegatedConstructorCall -import org.jetbrains.kotlin.fir.expressions.FirStatement +import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeCyclicTypeBound import org.jetbrains.kotlin.fir.scopes.FirScope @@ -207,4 +204,8 @@ open class FirTypeResolveTransformer( annotation.transformAnnotationTypeRef(this, data) return annotation } + + override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: Any?): FirStatement { + return transformAnnotation(annotationCall, data) + } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt index ddf00b79da2..45e5b0b283d 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirBodyResolveTransformer.kt @@ -15,7 +15,10 @@ import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.calls.ResolutionContext import org.jetbrains.kotlin.fir.resolve.dfa.DataFlowAnalyzerContext -import org.jetbrains.kotlin.fir.resolve.transformers.* +import org.jetbrains.kotlin.fir.resolve.transformers.FirProviderInterceptor +import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator +import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculatorForFullBodyResolve +import org.jetbrains.kotlin.fir.resolve.transformers.ScopeClassDeclaration import org.jetbrains.kotlin.fir.scopes.FirCompositeScope import org.jetbrains.kotlin.fir.scopes.impl.createCurrentScopeList import org.jetbrains.kotlin.fir.types.FirImplicitTypeRef @@ -207,6 +210,10 @@ open class FirBodyResolveTransformer( return expressionsTransformer.transformAnnotation(annotation, data) } + override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): FirStatement { + return expressionsTransformer.transformAnnotationCall(annotationCall, data) + } + override fun transformDelegatedConstructorCall( delegatedConstructorCall: FirDelegatedConstructorCall, data: ResolutionMode diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index c239d487fb0..4686ff6aef7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -16,6 +16,8 @@ import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.expressions.builder.buildErrorExpression import org.jetbrains.kotlin.fir.expressions.builder.buildFunctionCall import org.jetbrains.kotlin.fir.expressions.builder.buildVariableAssignment +import org.jetbrains.kotlin.fir.expressions.impl.FirResolvedArgumentList +import org.jetbrains.kotlin.fir.expressions.impl.toAnnotationArgumentMapping import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.references.builder.buildErrorNamedReference import org.jetbrains.kotlin.fir.references.builder.buildExplicitSuperReference @@ -893,24 +895,23 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform } override fun transformAnnotation(annotation: FirAnnotation, data: ResolutionMode): FirStatement { - if (annotation.resolveStatus == FirAnnotationResolveStatus.Resolved) return annotation - return resolveAnnotationCall(annotation, FirAnnotationResolveStatus.Resolved) + if (annotation.resolved) return annotation + annotation.transformAnnotationTypeRef(transformer, ResolutionMode.ContextIndependent) + return annotation } - protected fun resolveAnnotationCall( - annotation: FirAnnotation, - status: FirAnnotationResolveStatus - ): FirAnnotation { + override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): FirStatement { + if (annotationCall.resolved) return annotationCall + annotationCall.transformAnnotationTypeRef(transformer, ResolutionMode.ContextIndependent) return withFirArrayOfCallTransformer { - annotation.transformAnnotationTypeRef(transformer, ResolutionMode.ContextIndependent) - if (status == FirAnnotationResolveStatus.PartiallyResolved) return annotation - dataFlowAnalyzer.enterAnnotationCall(annotation) - val result = callResolver.resolveAnnotationCall(annotation) - dataFlowAnalyzer.exitAnnotationCall(result ?: annotation) - if (result == null) return annotation + dataFlowAnalyzer.enterAnnotation(annotationCall) + val result = callResolver.resolveAnnotationCall(annotationCall) + dataFlowAnalyzer.exitAnnotation(result ?: annotationCall) + if (result == null) return annotationCall callCompleter.completeCall(result, noExpectedType) - result.replaceResolveStatus(status) - annotation + // TODO: FirBlackBoxCodegenTestGenerated.Annotations.testDelegatedPropertySetter, it fails with hard cast + (result.argumentList as? FirResolvedArgumentList)?.let { annotationCall.replaceArgumentMapping((it).toAnnotationArgumentMapping()) } + annotationCall } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt index 12387ea3083..194bdd5e3b7 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/contracts/FirContractResolveTransformer.kt @@ -49,6 +49,10 @@ open class FirContractResolveTransformer( return annotation } + override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): FirStatement { + return annotationCall + } + protected open class FirDeclarationsContractResolveTransformer(transformer: FirBodyResolveTransformer) : FirDeclarationsResolveTransformer(transformer) { override fun transformSimpleFunction( simpleFunction: FirSimpleFunction, diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt index 43522ee7bfa..fce998d1565 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/plugin/FirAnnotationArgumentsResolveTransformer.kt @@ -138,14 +138,16 @@ private class FirExpressionsResolveTransformerForSpecificAnnotations( ) : FirExpressionsResolveTransformer(transformer) { override fun transformAnnotation(annotation: FirAnnotation, data: ResolutionMode): FirStatement { - if (annotation.resolveStatus >= FirAnnotationResolveStatus.PartiallyResolved) return annotation - dataFlowAnalyzer.enterAnnotationCall(annotation) + dataFlowAnalyzer.enterAnnotation(annotation) annotation.transformChildren(transformer, ResolutionMode.ContextDependent) - dataFlowAnalyzer.exitAnnotationCall(annotation) - annotation.replaceResolveStatus(FirAnnotationResolveStatus.PartiallyResolved) + dataFlowAnalyzer.exitAnnotation(annotation) return annotation } + override fun transformAnnotationCall(annotationCall: FirAnnotationCall, data: ResolutionMode): FirStatement { + return transformAnnotation(annotationCall, data) + } + override fun transformExpression(expression: FirExpression, data: ResolutionMode): FirStatement { return expression.transformChildren(transformer, data) as FirStatement } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt index 9ba30c83d5c..3a51be21bbe 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ConeTypeContext.kt @@ -11,10 +11,7 @@ import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.* -import org.jetbrains.kotlin.fir.expressions.FirConstExpression -import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression -import org.jetbrains.kotlin.fir.expressions.FirVarargArgumentsExpression -import org.jetbrains.kotlin.fir.expressions.arguments +import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.resolve.correspondingSupertypesCache import org.jetbrains.kotlin.fir.resolve.directExpansionType import org.jetbrains.kotlin.fir.resolve.fullyExpandedType @@ -496,8 +493,9 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty val annotationCall = customAnnotations.firstOrNull { it.typeRef.coneTypeSafe()?.fullyExpandedType(session)?.classId?.asSingleFqName() == fqName } ?: return null - val argument = when (val argument = annotationCall.arguments.firstOrNull() ?: return null) { + val argument = when (val argument = annotationCall.argumentMapping.mapping.values.firstOrNull() ?: return null) { is FirVarargArgumentsExpression -> argument.arguments.firstOrNull() + is FirArrayOfCall -> argument.arguments.firstOrNull() is FirNamedArgumentExpression -> argument.expression else -> argument } ?: return null diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index cb1056a60b3..5a3f50ef0e2 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -26,6 +26,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid +import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.types.Variance @@ -938,6 +939,10 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM print(")") } + override fun visitAnnotationCall(annotationCall: FirAnnotationCall) { + visitAnnotation(annotationCall) + } + override fun visitAnnotation(annotation: FirAnnotation) { print("@") annotation.useSiteTarget?.let { @@ -945,7 +950,14 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM print(":") } annotation.annotationTypeRef.accept(this) - visitCall(annotation) + when (annotation) { + is FirAnnotationCall -> if (annotation.calleeReference.let { it is FirResolvedNamedReference || it is FirErrorNamedReference }) { + annotation.renderArgumentMapping() + } else { + visitCall(annotation) + } + else -> annotation.renderArgumentMapping() + } if (annotation.useSiteTarget == AnnotationUseSiteTarget.FILE) { println() } else { @@ -953,6 +965,29 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } } + private fun FirAnnotation.renderArgumentMapping() { + print("(") + if (mode.renderCallArguments) { + argumentMapping.mapping.renderSeparated() + } else { + if (argumentMapping.mapping.isNotEmpty()) { + print("...") + } + } + print(")") + } + + private fun Map.renderSeparated() { + for ((index, element) in this.entries.withIndex()) { + val (name, argument) = element + if (index > 0) { + print(", ") + } + print("$name = ") + argument.accept(this@FirRenderer) + } + } + override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall) { val dispatchReceiver = delegatedConstructorCall.dispatchReceiver if (dispatchReceiver !is FirNoReceiverExpression) { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationArgumentMappingImpl.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationArgumentMappingImpl.kt index 78e342f5ad3..a28a2565663 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationArgumentMappingImpl.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/expressions/impl/FirAnnotationArgumentMappingImpl.kt @@ -9,6 +9,7 @@ import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSourceElement import org.jetbrains.kotlin.fir.expressions.FirAnnotationArgumentMapping import org.jetbrains.kotlin.fir.expressions.FirExpression +import org.jetbrains.kotlin.fir.expressions.unwrapArgument import org.jetbrains.kotlin.fir.visitors.FirTransformer import org.jetbrains.kotlin.fir.visitors.FirVisitor import org.jetbrains.kotlin.name.Name @@ -36,3 +37,13 @@ object FirEmptyAnnotationArgumentMapping : FirAnnotationArgumentMapping() { return this } } + +fun FirResolvedArgumentList.toAnnotationArgumentMapping(): FirAnnotationArgumentMapping { + return FirAnnotationArgumentMappingImpl( + source = null, + mapping = mapping.entries.associateBy( + keySelector = { it.value.name }, + valueTransform = { it.key.unwrapArgument() } + ) + ) +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/implicitNothingInDelegate.fir.txt b/compiler/testData/diagnostics/testsWithStdLib/implicitNothingInDelegate.fir.txt index b7a4a84b2a3..0c34466069d 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/implicitNothingInDelegate.fir.txt +++ b/compiler/testData/diagnostics/testsWithStdLib/implicitNothingInDelegate.fir.txt @@ -1,5 +1,5 @@ FILE: implicitNothingInDelegate.kt - @R|kotlin/Suppress|(vararg(String(INVISIBLE_REFERENCE), String(INVISIBLE_MEMBER))) public final operator fun R|kotlin/collections/Map|.getValue(thisRef: R|kotlin/Any?|, property: R|kotlin/reflect/KProperty<*>|): R|V1| { + @R|kotlin/Suppress|(names = vararg(String(INVISIBLE_REFERENCE), String(INVISIBLE_MEMBER))) public final operator fun R|kotlin/collections/Map|.getValue(thisRef: R|kotlin/Any?|, property: R|kotlin/reflect/KProperty<*>|): R|V1| { ^getValue Null(null)!! } public final val m2: R|kotlin/collections/Map| = R|kotlin/collections/mapOf|(String(baz).R|kotlin/to|(String(bat))) diff --git a/compiler/testData/ir/irText/declarations/annotations/javaAnnotationWithSingleArrayArgument.fir.txt b/compiler/testData/ir/irText/declarations/annotations/javaAnnotationWithSingleArrayArgument.fir.txt new file mode 100644 index 00000000000..076ccf0515f --- /dev/null +++ b/compiler/testData/ir/irText/declarations/annotations/javaAnnotationWithSingleArrayArgument.fir.txt @@ -0,0 +1,251 @@ +FILE fqName: fileName:/C.kt + CLASS ANNOTATION_CLASS name:Anno modality:FINAL visibility:public superTypes:[kotlin.Annotation] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Anno + CONSTRUCTOR visibility:public <> (token:kotlin.String) returnType:.Anno [primary] + VALUE_PARAMETER name:token index:0 type:kotlin.String + PROPERTY name:token visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:token type:kotlin.String visibility:private [final] + EXPRESSION_BODY + GET_VAR 'token: kotlin.String declared in .Anno.' type=kotlin.String origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Anno) returnType:kotlin.String + correspondingProperty: PROPERTY name:token visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Anno + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .Anno' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:token type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + receiver: GET_VAR ': .Anno declared in .Anno.' type=.Anno origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS ENUM_CLASS name:E modality:FINAL visibility:public superTypes:[kotlin.Enum<.E>] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.E + CONSTRUCTOR visibility:private <> () returnType:.E [primary] + BLOCK_BODY + ENUM_CONSTRUCTOR_CALL 'public constructor (name: kotlin.String, ordinal: kotlin.Int) [primary] declared in kotlin.Enum' + : .E + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_CLASS name:E modality:FINAL visibility:public superTypes:[kotlin.Enum<.E>]' + ENUM_ENTRY name:EA + init: EXPRESSION_BODY + ENUM_CONSTRUCTOR_CALL 'private constructor () [primary] declared in .E' + FUN ENUM_CLASS_SPECIAL_MEMBER name:values visibility:public modality:FINAL <> () returnType:kotlin.Array<.E> + SYNTHETIC_BODY kind=ENUM_VALUES + FUN ENUM_CLASS_SPECIAL_MEMBER name:valueOf visibility:public modality:FINAL <> (value:kotlin.String) returnType:.E + VALUE_PARAMETER name:value index:0 type:kotlin.String + SYNTHETIC_BODY kind=ENUM_VALUEOF + FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] + overridden: + protected final fun clone (): kotlin.Any declared in kotlin.Enum + $this: VALUE_PARAMETER name: type:kotlin.Enum + FUN FAKE_OVERRIDE name:compareTo visibility:public modality:FINAL <> ($this:kotlin.Enum, other:.E) returnType:kotlin.Int [fake_override,operator] + overridden: + public final fun compareTo (other: E of kotlin.Enum): kotlin.Int [operator] declared in kotlin.Enum + $this: VALUE_PARAMETER name: type:kotlin.Enum + VALUE_PARAMETER name:other index:0 type:.E + FUN FAKE_OVERRIDE name:equals visibility:public modality:FINAL <> ($this:kotlin.Enum, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public final fun equals (other: kotlin.Any?): kotlin.Boolean [operator] declared in kotlin.Enum + $this: VALUE_PARAMETER name: type:kotlin.Enum + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Int [fake_override] + overridden: + public final fun hashCode (): kotlin.Int declared in kotlin.Enum + $this: VALUE_PARAMETER name: type:kotlin.Enum + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Enum) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String declared in kotlin.Enum + $this: VALUE_PARAMETER name: type:kotlin.Enum + PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val] + overridden: + public final name: kotlin.String [val] + FUN FAKE_OVERRIDE name: visibility:public modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.String [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:name visibility:public modality:FINAL [fake_override,val] + overridden: + public final fun (): kotlin.String declared in kotlin.Enum + $this: VALUE_PARAMETER name: type:kotlin.Enum + PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val] + overridden: + public final ordinal: kotlin.Int [val] + FUN FAKE_OVERRIDE name: visibility:public modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Int [fake_override] + correspondingProperty: PROPERTY FAKE_OVERRIDE name:ordinal visibility:public modality:FINAL [fake_override,val] + overridden: + public final fun (): kotlin.Int declared in kotlin.Enum + $this: VALUE_PARAMETER name: type:kotlin.Enum + CLASS ANNOTATION_CLASS name:Annos modality:FINAL visibility:public superTypes:[kotlin.Annotation] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Annos + CONSTRUCTOR visibility:public <> (value:kotlin.Array<.Anno>) returnType:.Annos [primary] + VALUE_PARAMETER name:value index:0 type:kotlin.Array<.Anno> + PROPERTY name:value visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array<.Anno> visibility:private [final] + EXPRESSION_BODY + GET_VAR 'value: kotlin.Array<.Anno> declared in .Annos.' type=kotlin.Array<.Anno> origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Annos) returnType:kotlin.Array<.Anno> + correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Annos + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array<.Anno> declared in .Annos' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array<.Anno> visibility:private [final]' type=kotlin.Array<.Anno> origin=null + receiver: GET_VAR ': .Annos declared in .Annos.' type=.Annos origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS ANNOTATION_CLASS name:Strings modality:FINAL visibility:public superTypes:[kotlin.Annotation] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Strings + CONSTRUCTOR visibility:public <> (value:kotlin.Array) returnType:.Strings [primary] + VALUE_PARAMETER name:value index:0 type:kotlin.Array + PROPERTY name:value visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array visibility:private [final] + EXPRESSION_BODY + GET_VAR 'value: kotlin.Array declared in .Strings.' type=kotlin.Array origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Strings) returnType:kotlin.Array + correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Strings + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array declared in .Strings' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array visibility:private [final]' type=kotlin.Array origin=null + receiver: GET_VAR ': .Strings declared in .Strings.' type=.Strings origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS ANNOTATION_CLASS name:Ints modality:FINAL visibility:public superTypes:[kotlin.Annotation] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Ints + CONSTRUCTOR visibility:public <> (value:kotlin.IntArray) returnType:.Ints [primary] + VALUE_PARAMETER name:value index:0 type:kotlin.IntArray + PROPERTY name:value visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.IntArray visibility:private [final] + EXPRESSION_BODY + GET_VAR 'value: kotlin.IntArray declared in .Ints.' type=kotlin.IntArray origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Ints) returnType:kotlin.IntArray + correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Ints + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.IntArray declared in .Ints' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.IntArray visibility:private [final]' type=kotlin.IntArray origin=null + receiver: GET_VAR ': .Ints declared in .Ints.' type=.Ints origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS ANNOTATION_CLASS name:Enums modality:FINAL visibility:public superTypes:[kotlin.Annotation] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Enums + CONSTRUCTOR visibility:public <> (value:kotlin.Array<.E>) returnType:.Enums [primary] + VALUE_PARAMETER name:value index:0 type:kotlin.Array<.E> + PROPERTY name:value visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array<.E> visibility:private [final] + EXPRESSION_BODY + GET_VAR 'value: kotlin.Array<.E> declared in .Enums.' type=kotlin.Array<.E> origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Enums) returnType:kotlin.Array<.E> + correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Enums + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array<.E> declared in .Enums' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array<.E> visibility:private [final]' type=kotlin.Array<.E> origin=null + receiver: GET_VAR ': .Enums declared in .Enums.' type=.Enums origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS ANNOTATION_CLASS name:Classes modality:FINAL visibility:public superTypes:[kotlin.Annotation] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.Classes + CONSTRUCTOR visibility:public <> (value:kotlin.Array>) returnType:.Classes [primary] + VALUE_PARAMETER name:value index:0 type:kotlin.Array> + PROPERTY name:value visibility:public modality:FINAL [val] + FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array> visibility:private [final] + EXPRESSION_BODY + GET_VAR 'value: kotlin.Array> declared in .Classes.' type=kotlin.Array> origin=INITIALIZE_PROPERTY_FROM_PARAMETER + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Classes) returnType:kotlin.Array> + correspondingProperty: PROPERTY name:value visibility:public modality:FINAL [val] + $this: VALUE_PARAMETER name: type:.Classes + BLOCK_BODY + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array> declared in .Classes' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:value type:kotlin.Array> visibility:private [final]' type=kotlin.Array> origin=null + receiver: GET_VAR ': .Classes declared in .Classes.' type=.Classes origin=null + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in kotlin.Annotation + $this: VALUE_PARAMETER name: type:kotlin.Any + CLASS CLASS name:C modality:FINAL visibility:public superTypes:[.A] + $this: VALUE_PARAMETER INSTANCE_RECEIVER name: type:.C + CONSTRUCTOR visibility:public <> () returnType:.C [primary] + BLOCK_BODY + DELEGATING_CONSTRUCTOR_CALL 'public constructor () [primary] declared in .A' + INSTANCE_INITIALIZER_CALL classDescriptor='CLASS CLASS name:C modality:FINAL visibility:public superTypes:[.A]' + FUN FAKE_OVERRIDE name:test visibility:public modality:OPEN <> ($this:.A) returnType:kotlin.Unit [fake_override] + annotations: + Annos(value = ) + Strings(value = ) + Ints(value = ) + Enums(value = ) + Classes(value = ) + overridden: + public open fun test (): kotlin.Unit declared in .A + $this: VALUE_PARAMETER name: type:.A + FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] + overridden: + public open fun equals (other: kotlin.Any?): kotlin.Boolean [fake_override,operator] declared in .A + $this: VALUE_PARAMETER name: type:kotlin.Any + VALUE_PARAMETER name:other index:0 type:kotlin.Any? + FUN FAKE_OVERRIDE name:hashCode visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.Int [fake_override] + overridden: + public open fun hashCode (): kotlin.Int [fake_override] declared in .A + $this: VALUE_PARAMETER name: type:kotlin.Any + FUN FAKE_OVERRIDE name:toString visibility:public modality:OPEN <> ($this:kotlin.Any) returnType:kotlin.String [fake_override] + overridden: + public open fun toString (): kotlin.String [fake_override] declared in .A + $this: VALUE_PARAMETER name: type:kotlin.Any diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedConstructor.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedConstructor.fir.txt index c43fe57ab33..96f34926dca 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedConstructor.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedConstructor.fir.txt @@ -1,5 +1,5 @@ public open class AnnotatedConstructor : R|kotlin/Any| { - @R|test/AnnotatedConstructor.Anno|(String(constructor)) public constructor(): R|test/AnnotatedConstructor| + @R|test/AnnotatedConstructor.Anno|(value = String(constructor)) public constructor(): R|test/AnnotatedConstructor| public final annotation class Anno : R|kotlin/Annotation| { public constructor(value: R|kotlin/String|): R|test/AnnotatedConstructor.Anno| diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt index a634a0660cc..148e801c804 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedField.fir.txt @@ -1,7 +1,7 @@ public open class AnnotatedField : R|kotlin/Any| { - @R|test/AnnotatedField.Anno|(String(static)) public final static field x: R|kotlin/Int| = Int(0) + @R|test/AnnotatedField.Anno|(value = String(static)) public final static field x: R|kotlin/Int| = Int(0) - @R|test/AnnotatedField.Anno|(String(member)) public final field y: R|kotlin/Int| = Int(0) + @R|test/AnnotatedField.Anno|(value = String(member)) public final field y: R|kotlin/Int| = Int(0) public constructor(): R|test/AnnotatedField| diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.fir.txt index 8d39c605bcf..f5eb373372e 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedMethod.fir.txt @@ -1,5 +1,5 @@ public open class AnnotatedMethod : R|kotlin/Any| { - @R|test/AnnotatedMethod.Anno|(Int(42)) public open fun f(): R|kotlin/Unit| + @R|test/AnnotatedMethod.Anno|(value = Int(42)) public open fun f(): R|kotlin/Unit| public constructor(): R|test/AnnotatedMethod| diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.fir.txt index a04c979e726..c6156456ffe 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedParameterInInnerClassConstructor.fir.txt @@ -6,11 +6,11 @@ public/*package*/ open class AnnotatedParameterInInnerClassConstructor : R|kotli } public/*package*/ open inner class Inner : R|kotlin/Any| { - public/*package*/ constructor(@R|test/AnnotatedParameterInInnerClassConstructor.Anno|(String(a)) a: R|ft|, @R|test/AnnotatedParameterInInnerClassConstructor.Anno|(String(b)) b: R|ft|): R|test/AnnotatedParameterInInnerClassConstructor.Inner| + public/*package*/ constructor(@R|test/AnnotatedParameterInInnerClassConstructor.Anno|(value = String(a)) a: R|ft|, @R|test/AnnotatedParameterInInnerClassConstructor.Anno|(value = String(b)) b: R|ft|): R|test/AnnotatedParameterInInnerClassConstructor.Inner| } public/*package*/ open inner class InnerGeneric|> : R|kotlin/Any| { - public/*package*/ constructor|>(@R|test/AnnotatedParameterInInnerClassConstructor.Anno|(String(a)) a: R|ft|, @R|test/AnnotatedParameterInInnerClassConstructor.Anno|(String(b)) b: R|ft|): R|test/AnnotatedParameterInInnerClassConstructor.InnerGeneric| + public/*package*/ constructor|>(@R|test/AnnotatedParameterInInnerClassConstructor.Anno|(value = String(a)) a: R|ft|, @R|test/AnnotatedParameterInInnerClassConstructor.Anno|(value = String(b)) b: R|ft|): R|test/AnnotatedParameterInInnerClassConstructor.InnerGeneric| } } diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedTypeInFun.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedTypeInFun.fir.txt index 99c5a5cad38..8465c52ca1a 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedTypeInFun.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedTypeInFun.fir.txt @@ -1,9 +1,9 @@ public/*package*/ open class AnnotatedTypeInFun : R|kotlin/Any| { - public/*package*/ open fun foo(@R|test/AnnotatedTypeInFun.Anno|(String(a)) a: R|ft<@R|test/AnnotatedTypeInFun.Anno|(String(a)) kotlin/String, @R|test/AnnotatedTypeInFun.Anno|(String(a)) kotlin/String?>|, @R|test/AnnotatedTypeInFun.Anno|(String(b)) b: R|ft<@R|test/AnnotatedTypeInFun.Anno|(String(b)) kotlin/String, @R|test/AnnotatedTypeInFun.Anno|(String(b)) kotlin/String?>|): R|kotlin/Unit| + public/*package*/ open fun foo(@R|test/AnnotatedTypeInFun.Anno|(value = String(a)) a: R|ft<@R|test/AnnotatedTypeInFun.Anno|(value = String(a)) kotlin/String, @R|test/AnnotatedTypeInFun.Anno|(value = String(a)) kotlin/String?>|, @R|test/AnnotatedTypeInFun.Anno|(value = String(b)) b: R|ft<@R|test/AnnotatedTypeInFun.Anno|(value = String(b)) kotlin/String, @R|test/AnnotatedTypeInFun.Anno|(value = String(b)) kotlin/String?>|): R|kotlin/Unit| public/*package*/ constructor(): R|test/AnnotatedTypeInFun| - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.TYPE|())) public final annotation class Anno : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.TYPE|())) public final annotation class Anno : R|kotlin/Annotation| { public constructor(value: R|kotlin/String|): R|test/AnnotatedTypeInFun.Anno| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.fir.txt index d3481c353a6..b4f1cd32253 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotatedValueParameter.fir.txt @@ -1,5 +1,5 @@ public open class AnnotatedValueParameter : R|kotlin/Any| { - public open fun f(@R|test/AnnotatedValueParameter.Anno|(String(non-empty)) parameter: R|ft>, kotlin/collections/List>?>|): R|kotlin/Unit| + public open fun f(@R|test/AnnotatedValueParameter.Anno|(value = String(non-empty)) parameter: R|ft>, kotlin/collections/List>?>|): R|kotlin/Unit| public constructor(): R|test/AnnotatedValueParameter| diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotationInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotationInParam.fir.txt index 604a507f6f9..4f286c4cf30 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotationInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotationInParam.fir.txt @@ -1,13 +1,13 @@ public abstract interface AnnotationInParam : R|kotlin/Any| { - @R|test/AnnotationInParam.MyAnnotationWithParam|(@R|test/AnnotationInParam.MyAnnotation|(String(test)) ) public open class A : R|kotlin/Any| { + @R|test/AnnotationInParam.MyAnnotationWithParam|(value = @R|test/AnnotationInParam.MyAnnotation|(value = String(test)) ) public open class A : R|kotlin/Any| { public constructor(): R|test/AnnotationInParam.A| } - @R|test/AnnotationInParam.MyAnnotationWithParam2|(@R|test/AnnotationInParam.MyAnnotation2|((String(test), String(test2))) ) public open class B : R|kotlin/Any| { + @R|test/AnnotationInParam.MyAnnotationWithParam2|(value = @R|test/AnnotationInParam.MyAnnotation2|(value = (String(test), String(test2))) ) public open class B : R|kotlin/Any| { public constructor(): R|test/AnnotationInParam.B| } - @R|test/AnnotationInParam.MyAnnotationWithParam3|(@R|test/AnnotationInParam.MyAnnotation3|(String(f), String(s)) ) public open class C : R|kotlin/Any| { + @R|test/AnnotationInParam.MyAnnotationWithParam3|(value = @R|test/AnnotationInParam.MyAnnotation3|(first = String(f), second = String(s)) ) public open class C : R|kotlin/Any| { public constructor(): R|test/AnnotationInParam.C| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotationRetentions.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotationRetentions.fir.txt index fe3e5401cc3..0dfda9afa75 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotationRetentions.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotationRetentions.fir.txt @@ -9,7 +9,7 @@ public open class AnnotationRetentions : R|kotlin/Any| { public/*package*/ constructor(): R|test/AnnotationRetentions.BaseClass| } - @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.BINARY|()) public final annotation class BinaryAnnotation : R|kotlin/Annotation| { + @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.BINARY|()) public final annotation class BinaryAnnotation : R|kotlin/Annotation| { public constructor(): R|test/AnnotationRetentions.BinaryAnnotation| } @@ -17,7 +17,7 @@ public open class AnnotationRetentions : R|kotlin/Any| { public/*package*/ constructor(): R|test/AnnotationRetentions.BinaryClass| } - @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class RuntimeAnnotation : R|kotlin/Annotation| { + @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.RUNTIME|()) public final annotation class RuntimeAnnotation : R|kotlin/Annotation| { public constructor(): R|test/AnnotationRetentions.RuntimeAnnotation| } @@ -25,7 +25,7 @@ public open class AnnotationRetentions : R|kotlin/Any| { public/*package*/ constructor(): R|test/AnnotationRetentions.RuntimeClass| } - @R|kotlin/annotation/Retention|(R|kotlin/annotation/AnnotationRetention.SOURCE|()) public final annotation class SourceAnnotation : R|kotlin/Annotation| { + @R|kotlin/annotation/Retention|(value = R|kotlin/annotation/AnnotationRetention.SOURCE|()) public final annotation class SourceAnnotation : R|kotlin/Annotation| { public constructor(): R|test/AnnotationRetentions.SourceAnnotation| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.fir.txt index 597dc0d7cfd..a956663c7a8 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/AnnotationTargets.fir.txt @@ -1,7 +1,7 @@ public open class AnnotationTargets : R|kotlin/Any| { public constructor(): R|test/AnnotationTargets| - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.ANNOTATION_CLASS|())) public final annotation class annotation : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.ANNOTATION_CLASS|())) public final annotation class annotation : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.annotation| } @@ -9,35 +9,35 @@ public open class AnnotationTargets : R|kotlin/Any| { public constructor(): R|test/AnnotationTargets.base| } - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.CONSTRUCTOR|())) public final annotation class constructor : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.CONSTRUCTOR|())) public final annotation class constructor : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.constructor| } - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.FIELD|())) public final annotation class field : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.FIELD|())) public final annotation class field : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.field| } - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|())) public final annotation class local : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.LOCAL_VARIABLE|())) public final annotation class local : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.local| } - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) public final annotation class method : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) public final annotation class method : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.method| } - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.FIELD|(), R|kotlin/annotation/AnnotationTarget.CONSTRUCTOR|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) public final annotation class multiple : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.FIELD|(), R|kotlin/annotation/AnnotationTarget.CONSTRUCTOR|(), R|kotlin/annotation/AnnotationTarget.FUNCTION|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_GETTER|(), R|kotlin/annotation/AnnotationTarget.PROPERTY_SETTER|())) public final annotation class multiple : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.multiple| } - @R|kotlin/annotation/Target|(()) public final annotation class packag : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg()) public final annotation class packag : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.packag| } - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|())) public final annotation class parameter : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.VALUE_PARAMETER|())) public final annotation class parameter : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.parameter| } - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) public final annotation class type : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.CLASS|(), R|kotlin/annotation/AnnotationTarget.FILE|())) public final annotation class type : R|kotlin/Annotation| { public constructor(): R|test/AnnotationTargets.type| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/ArithmeticExpressionInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/ArithmeticExpressionInParam.fir.txt index 2f241bbdebc..78bbfdcb79c 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ArithmeticExpressionInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ArithmeticExpressionInParam.fir.txt @@ -5,7 +5,7 @@ public open class ArithmeticExpressionInParam : R|kotlin/Any| { public constructor(value: R|kotlin/Int|): R|test/ArithmeticExpressionInParam.Anno| } - @R|test/ArithmeticExpressionInParam.Anno|(Int(42)) public open class Class : R|kotlin/Any| { + @R|test/ArithmeticExpressionInParam.Anno|(value = Int(42)) public open class Class : R|kotlin/Any| { public constructor(): R|test/ArithmeticExpressionInParam.Class| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/ArrayOfEnumInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/ArrayOfEnumInParam.fir.txt index bbc0e9af37e..acc00c87efa 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ArrayOfEnumInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ArrayOfEnumInParam.fir.txt @@ -1,5 +1,5 @@ public abstract interface ArrayOfEnumInParam : R|kotlin/Any| { - @R|kotlin/annotation/Target|((R|kotlin/annotation/AnnotationTarget.FIELD|(), R|kotlin/annotation/AnnotationTarget.CONSTRUCTOR|())) public final annotation class targetAnnotation : R|kotlin/Annotation| { + @R|kotlin/annotation/Target|(allowedTargets = vararg(R|kotlin/annotation/AnnotationTarget.FIELD|(), R|kotlin/annotation/AnnotationTarget.CONSTRUCTOR|())) public final annotation class targetAnnotation : R|kotlin/Annotation| { public constructor(value: R|kotlin/String|): R|test/ArrayOfEnumInParam.targetAnnotation| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/ArrayOfStringInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/ArrayOfStringInParam.fir.txt index 10b7e36d993..4474504ff89 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ArrayOfStringInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ArrayOfStringInParam.fir.txt @@ -1,5 +1,5 @@ public abstract interface ArrayOfStringInParam : R|kotlin/Any| { - @R|test/ArrayOfStringInParam.MyAnnotation|((String(a), String(b), String(c))) public open class A : R|kotlin/Any| { + @R|test/ArrayOfStringInParam.MyAnnotation|(value = (String(a), String(b), String(c))) public open class A : R|kotlin/Any| { public constructor(): R|test/ArrayOfStringInParam.A| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.fir.txt index 5f30432753f..2327dfe7ec2 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectArrayInParam.fir.txt @@ -5,7 +5,7 @@ public open class ClassObjectArrayInParam : R|kotlin/Any| { public constructor(vararg value: R|kotlin/Array>|): R|test/ClassObjectArrayInParam.Anno| } - @R|test/ClassObjectArrayInParam.Anno|((((R|ft|)), ((R|ft|)), ((R|ft|)), ((R|ft, kotlin/collections/List<*>?>|)), ((R|ft>, kotlin/Array>?>>, kotlin/Array>, kotlin/Array>?>>?>|)), ((R|ft>, kotlin/Array>?>|)), ((R|kotlin/Unit|)))) public open class Nested : R|kotlin/Any| { + @R|test/ClassObjectArrayInParam.Anno|(value = (((R|ft|)), ((R|ft|)), ((R|ft|)), ((R|ft, kotlin/collections/List<*>?>|)), ((R|ft>, kotlin/Array>?>>, kotlin/Array>, kotlin/Array>?>>?>|)), ((R|ft>, kotlin/Array>?>|)), ((R|kotlin/Unit|)))) public open class Nested : R|kotlin/Any| { public constructor(): R|test/ClassObjectArrayInParam.Nested| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.fir.txt index 8fd1dcc0b17..8365f9cab8e 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParam.fir.txt @@ -5,7 +5,7 @@ public open class ClassObjectInParam : R|kotlin/Any| { public constructor(value: R|kotlin/reflect/KClass<*>|): R|test/ClassObjectInParam.Anno| } - @R|test/ClassObjectInParam.Anno|(((R|ft|))) public open class Nested : R|kotlin/Any| { + @R|test/ClassObjectInParam.Anno|(value = ((R|ft|))) public open class Nested : R|kotlin/Any| { public constructor(): R|test/ClassObjectInParam.Nested| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.fir.txt index a944300be3d..f5e756345e9 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/ClassObjectInParamRaw.fir.txt @@ -5,7 +5,7 @@ public open class ClassObjectInParamRaw : R|kotlin/Any| { public constructor(value: R|kotlin/reflect/KClass|, arg: R|kotlin/Array>|): R|test/ClassObjectInParamRaw.Anno| } - @R|test/ClassObjectInParamRaw.Anno|(((R|ft|)), ()) public open class Nested : R|kotlin/Any| { + @R|test/ClassObjectInParamRaw.Anno|(value = ((R|ft|)), arg = ()) public open class Nested : R|kotlin/Any| { public constructor(): R|test/ClassObjectInParamRaw.Nested| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.fir.txt index 886ea4d0dd4..9d1b11bf2be 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotation.fir.txt @@ -12,7 +12,7 @@ public abstract interface CustomAnnotation : R|kotlin/Any| { } } - @R|test/CustomAnnotation.MyAnnotation|(R|test/CustomAnnotation.MyEnum.ONE|()) public open class MyTest : R|kotlin/Any| { + @R|test/CustomAnnotation.MyAnnotation|(value = R|test/CustomAnnotation.MyEnum.ONE|()) public open class MyTest : R|kotlin/Any| { public constructor(): R|test/CustomAnnotation.MyTest| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotationWithDefaultParameter.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotationWithDefaultParameter.fir.txt index 992f6d633af..3127e33c3a7 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotationWithDefaultParameter.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/CustomAnnotationWithDefaultParameter.fir.txt @@ -3,7 +3,7 @@ public abstract interface CustomAnnotationWithDefaultParameter : R|kotlin/Any| { public constructor(first: R|kotlin/String|, second: R|kotlin/String| = String(s)): R|test/CustomAnnotationWithDefaultParameter.MyAnnotation| } - @R|test/CustomAnnotationWithDefaultParameter.MyAnnotation|(String(f), String(s)) public open class MyTest : R|kotlin/Any| { + @R|test/CustomAnnotationWithDefaultParameter.MyAnnotation|(first = String(f), second = String(s)) public open class MyTest : R|kotlin/Any| { public constructor(): R|test/CustomAnnotationWithDefaultParameter.MyTest| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/EmptyArrayInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/EmptyArrayInParam.fir.txt index 650ecca3909..a3969db3883 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/EmptyArrayInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/EmptyArrayInParam.fir.txt @@ -1,5 +1,5 @@ public abstract interface EmptyArrayInParam : R|kotlin/Any| { - @R|test/EmptyArrayInParam.MyAnnotation|(()) public open class A : R|kotlin/Any| { + @R|test/EmptyArrayInParam.MyAnnotation|(value = ()) public open class A : R|kotlin/Any| { public constructor(): R|test/EmptyArrayInParam.A| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/EnumArgumentWithCustomToString.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/EnumArgumentWithCustomToString.fir.txt index dfc22821a93..4c79dc99956 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/EnumArgumentWithCustomToString.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/EnumArgumentWithCustomToString.fir.txt @@ -1,5 +1,5 @@ public open class EnumArgumentWithCustomToString : R|kotlin/Any| { - @R|test/EnumArgumentWithCustomToString.EnumAnno|(R|test/EnumArgumentWithCustomToString.E.CAKE|()) @R|test/EnumArgumentWithCustomToString.EnumArrayAnno|((R|test/EnumArgumentWithCustomToString.E.CAKE|(), R|test/EnumArgumentWithCustomToString.E.CAKE|())) public/*package*/ open fun annotated(): R|kotlin/Unit| + @R|test/EnumArgumentWithCustomToString.EnumAnno|(value = R|test/EnumArgumentWithCustomToString.E.CAKE|()) @R|test/EnumArgumentWithCustomToString.EnumArrayAnno|(value = (R|test/EnumArgumentWithCustomToString.E.CAKE|(), R|test/EnumArgumentWithCustomToString.E.CAKE|())) public/*package*/ open fun annotated(): R|kotlin/Unit| public constructor(): R|test/EnumArgumentWithCustomToString| diff --git a/compiler/testData/loadJava/compiledJava/annotations/EnumConstructorParameter.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/EnumConstructorParameter.fir.txt index b4349c85469..7235fc325e5 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/EnumConstructorParameter.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/EnumConstructorParameter.fir.txt @@ -1,6 +1,6 @@ public final enum class EnumConstructorParameter : R|kotlin/Enum>| { public final static enum entry INSTANCE: R|@EnhancedNullability test/EnumConstructorParameter| - private constructor(@R|test/EnumConstructorParameter.Anno|(String(string)) s: R|ft|): R|test/EnumConstructorParameter| + private constructor(@R|test/EnumConstructorParameter.Anno|(value = String(string)) s: R|ft|): R|test/EnumConstructorParameter| private constructor(x: R|kotlin/Int|): R|test/EnumConstructorParameter| diff --git a/compiler/testData/loadJava/compiledJava/annotations/EnumInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/EnumInParam.fir.txt index d9eda19d467..67bd9615150 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/EnumInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/EnumInParam.fir.txt @@ -3,7 +3,7 @@ public abstract interface EnumInParam : R|kotlin/Any| { public constructor(value: R|java/lang/annotation/RetentionPolicy|): R|test/EnumInParam.MyRetention| } - @R|test/EnumInParam.MyRetention|(R|java/lang/annotation/RetentionPolicy.RUNTIME|()) public final annotation class RetentionAnnotation : R|kotlin/Annotation| { + @R|test/EnumInParam.MyRetention|(value = R|java/lang/annotation/RetentionPolicy.RUNTIME|()) public final annotation class RetentionAnnotation : R|kotlin/Annotation| { public constructor(value: R|kotlin/String|): R|test/EnumInParam.RetentionAnnotation| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/NestedEnumArgument.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/NestedEnumArgument.fir.txt index 8cd3c726cfc..633d83531de 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/NestedEnumArgument.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/NestedEnumArgument.fir.txt @@ -1,5 +1,5 @@ public open class NestedEnumArgument : R|kotlin/Any| { - @R|test/NestedEnumArgument.Anno|(R|test/NestedEnumArgument.E.FIRST|()) public/*package*/ open fun foo(): R|kotlin/Unit| + @R|test/NestedEnumArgument.Anno|(value = R|test/NestedEnumArgument.E.FIRST|()) public/*package*/ open fun foo(): R|kotlin/Unit| public constructor(): R|test/NestedEnumArgument| diff --git a/compiler/testData/loadJava/compiledJava/annotations/PrimitiveValueInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/PrimitiveValueInParam.fir.txt index 3495706f23d..1f9c5d7b70e 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/PrimitiveValueInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/PrimitiveValueInParam.fir.txt @@ -1,5 +1,5 @@ public abstract interface PrimitiveValueInParam : R|kotlin/Any| { - @R|test/PrimitiveValueInParam.Ann|(Int(1), Long(1), Double(1.0), Float(1.0), Boolean(true), String(str)) public open class A : R|kotlin/Any| { + @R|test/PrimitiveValueInParam.Ann|(i = Int(1), l = Long(1), d = Double(1.0), f = Float(1.0), bool = Boolean(true), str = String(str)) public open class A : R|kotlin/Any| { public constructor(): R|test/PrimitiveValueInParam.A| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation.fir.txt index 08e96ca20e4..d646215c9b3 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation.fir.txt @@ -1,9 +1,9 @@ public abstract interface RecursiveAnnotation : R|kotlin/Any| { - @R|test/RecursiveAnnotation.B|(@R|test/RecursiveAnnotation.A|(String(test)) ) public final annotation class A : R|kotlin/Annotation| { + @R|test/RecursiveAnnotation.B|(value = @R|test/RecursiveAnnotation.A|(value = String(test)) ) public final annotation class A : R|kotlin/Annotation| { public constructor(value: R|kotlin/String|): R|test/RecursiveAnnotation.A| } - @R|test/RecursiveAnnotation.B|(@R|test/RecursiveAnnotation.A|(String(test)) ) public final annotation class B : R|kotlin/Annotation| { + @R|test/RecursiveAnnotation.B|(value = @R|test/RecursiveAnnotation.A|(value = String(test)) ) public final annotation class B : R|kotlin/Annotation| { public constructor(value: R|test/RecursiveAnnotation.A|): R|test/RecursiveAnnotation.B| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation2.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation2.fir.txt index 0fc29d21bfa..a74561d39c6 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation2.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/RecursiveAnnotation2.fir.txt @@ -3,7 +3,7 @@ public abstract interface RecursiveAnnotation2 : R|kotlin/Any| { public constructor(value: R|test/RecursiveAnnotation2.B|): R|test/RecursiveAnnotation2.A| } - @R|test/RecursiveAnnotation2.A|(@R|test/RecursiveAnnotation2.B|(String(test)) ) public final annotation class B : R|kotlin/Annotation| { + @R|test/RecursiveAnnotation2.A|(value = @R|test/RecursiveAnnotation2.B|(value = String(test)) ) public final annotation class B : R|kotlin/Annotation| { public constructor(value: R|kotlin/String|): R|test/RecursiveAnnotation2.B| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/StringConcatenationInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/StringConcatenationInParam.fir.txt index ef9d865c2f9..6ea8219b51c 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/StringConcatenationInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/StringConcatenationInParam.fir.txt @@ -3,7 +3,7 @@ public abstract interface StringConcatenationInParam : R|kotlin/Any| { public constructor(value: R|kotlin/String|): R|test/StringConcatenationInParam.Anno| } - @R|test/StringConcatenationInParam.Anno|(String(hello)) public open class Class : R|kotlin/Any| { + @R|test/StringConcatenationInParam.Anno|(value = String(hello)) public open class Class : R|kotlin/Any| { public constructor(): R|test/StringConcatenationInParam.Class| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.fir.txt index 84d82fef9d8..8eff7782b23 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/StringConstantInParam.fir.txt @@ -5,7 +5,7 @@ public abstract interface StringConstantInParam : R|kotlin/Any| { public constructor(value: R|kotlin/String|): R|test/StringConstantInParam.Anno| } - @R|test/StringConstantInParam.Anno|(String(hello)) public open class Class : R|kotlin/Any| { + @R|test/StringConstantInParam.Anno|(value = String(hello)) public open class Class : R|kotlin/Any| { public constructor(): R|test/StringConstantInParam.Class| } diff --git a/compiler/testData/loadJava/compiledJava/annotations/StringInParam.fir.txt b/compiler/testData/loadJava/compiledJava/annotations/StringInParam.fir.txt index 4a5fc7adcbc..96cff73aa65 100644 --- a/compiler/testData/loadJava/compiledJava/annotations/StringInParam.fir.txt +++ b/compiler/testData/loadJava/compiledJava/annotations/StringInParam.fir.txt @@ -3,7 +3,7 @@ public abstract interface StringInParam : R|kotlin/Any| { public constructor(value: R|kotlin/String|): R|test/StringInParam.Anno| } - @R|test/StringInParam.Anno|(String(hello)) public open class Class : R|kotlin/Any| { + @R|test/StringInParam.Anno|(value = String(hello)) public open class Class : R|kotlin/Any| { public constructor(): R|test/StringInParam.Class| } diff --git a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt index 4887262f922..04fd490d1f8 100644 --- a/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt +++ b/compiler/visualizer/render-fir/src/org/jetbrains/kotlin/compiler/visualizer/FirVisualizer.kt @@ -706,10 +706,12 @@ class FirVisualizer(private val firFile: FirFile) : BaseRenderer() { } } - override fun visitAnnotation(annotation: FirAnnotation, data: StringBuilder) { - visitConstructor(annotation, data) + override fun visitAnnotationCall(annotationCall: FirAnnotationCall, data: StringBuilder) { + visitConstructor(annotationCall, data) } + override fun visitAnnotation(annotation: FirAnnotation, data: StringBuilder) {} + override fun visitDelegatedConstructorCall(delegatedConstructorCall: FirDelegatedConstructorCall, data: StringBuilder) { val coneClassType = delegatedConstructorCall.constructedTypeRef.coneTypeSafe() if (coneClassType != null) { diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt index 8b80e1fc3ef..adcc8739539 100644 --- a/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt @@ -10,6 +10,7 @@ object JvmNames { val JVM_NAME_SHORT: String = JVM_NAME.shortName().asString() val JVM_MULTIFILE_CLASS: FqName = FqName("kotlin.jvm.JvmMultifileClass") + val JVM_MULTIFILE_CLASS_ID: ClassId = ClassId(FqName("kotlin.jvm"), Name.identifier("JvmMultifileClass")) val JVM_MULTIFILE_CLASS_SHORT = JVM_MULTIFILE_CLASS.shortName().asString() val JVM_PACKAGE_NAME: FqName = FqName("kotlin.jvm.JvmPackageName") @@ -56,4 +57,4 @@ object JvmNames { val TRANSIENT_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.Transient") const val MULTIFILE_PART_NAME_DELIMITER = "__" -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt index 94f0e25e616..b47937283e1 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/lazy/resolve/FirLazyDeclarationResolver.kt @@ -10,7 +10,6 @@ import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirAnnotationResolveStatus import org.jetbrains.kotlin.fir.realPsi import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.firProvider @@ -44,7 +43,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui checkPCE: Boolean, collector: FirTowerDataContextCollector? = null, ) { - if (firFile.resolvePhase >= FirResolvePhase.IMPORTS && annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) return + if (firFile.resolvePhase >= FirResolvePhase.IMPORTS && annotations.all { it.resolved }) return moduleFileCache.firFileLockProvider.runCustomResolveUnderLock(firFile, checkPCE) { resolveFileAnnotationsWithoutLock( firFile = firFile, @@ -69,7 +68,7 @@ internal class FirLazyDeclarationResolver(private val firFileBuilder: FirFileBui resolveFileToImportsWithoutLock(firFile, false) } - if (!annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) { + if (!annotations.all { it.resolved }) { FirFileAnnotationsResolveTransformer( firFile = firFile, annotations = annotations, diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedAnnotationArgumentsResolveTransformerForIDE.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedAnnotationArgumentsResolveTransformerForIDE.kt index 9a855fc33d9..df88e62a9b9 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedAnnotationArgumentsResolveTransformerForIDE.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirDesignatedAnnotationArgumentsResolveTransformerForIDE.kt @@ -7,10 +7,10 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.transformers import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* -import org.jetbrains.kotlin.fir.expressions.FirAnnotationResolveStatus import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.plugin.FirAnnotationArgumentsResolveTransformer +import org.jetbrains.kotlin.fir.types.FirResolvedTypeRef import org.jetbrains.kotlin.idea.fir.low.level.api.FirPhaseRunner import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirDeclarationDesignationWithFile import org.jetbrains.kotlin.idea.fir.low.level.api.util.ensurePhase @@ -65,9 +65,9 @@ internal class FirDesignatedAnnotationArgumentsResolveTransformerForIDE( override fun ensureResolved(declaration: FirDeclaration) { if (declaration is FirAnnotatedDeclaration) { - val unresolvedAnnotation = declaration.annotations.firstOrNull { it.resolveStatus == FirAnnotationResolveStatus.Unresolved } + val unresolvedAnnotation = declaration.annotations.firstOrNull { it.annotationTypeRef !is FirResolvedTypeRef } check(unresolvedAnnotation == null) { - "Unexpected resolve status of annotation, expected Resolved but actual $unresolvedAnnotation" + "Unexpected annotationTypeRef annotation, expected resolvedType but actual ${unresolvedAnnotation?.annotationTypeRef}" } } when (declaration) { @@ -83,4 +83,4 @@ internal class FirDesignatedAnnotationArgumentsResolveTransformerForIDE( } } -} \ No newline at end of file +} diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt index fccae4b2f7d..7336ac2ac0a 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/src/org/jetbrains/kotlin/idea/fir/low/level/api/transformers/FirFileAnnotationsResolveTransformer.kt @@ -4,8 +4,8 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirFile import org.jetbrains.kotlin.fir.declarations.FirResolvePhase +import org.jetbrains.kotlin.fir.declarations.resolved import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirAnnotationResolveStatus import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirBodyResolveTransformer @@ -39,7 +39,7 @@ internal class FirFileAnnotationsResolveTransformer( override fun transformDeclarationContent(declaration: FirDeclaration, data: ResolutionMode): FirDeclaration { require(declaration is FirFile) { "Unexpected declaration ${declaration::class.simpleName}" } annotations.forEach { - if (it.resolveStatus != FirAnnotationResolveStatus.Resolved) { + if (!it.resolved) { it.visitNoTransform(this, data) } } @@ -47,11 +47,13 @@ internal class FirFileAnnotationsResolveTransformer( } override fun transformDeclaration(phaseRunner: FirPhaseRunner) { - if (annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) return + if (annotations.all { it.resolved }) return check(firFile.resolvePhase >= FirResolvePhase.IMPORTS) { "Invalid file resolve phase ${firFile.resolvePhase}" } firFile.accept(this, ResolutionMode.ContextDependent) - check(annotations.all { it.resolveStatus == FirAnnotationResolveStatus.Resolved }) { "Annotation was not resolved" } + check(annotations.all { it.resolved }) { + "Annotation was not resolved" + } } override fun ensureResolved(declaration: FirDeclaration) = error("Not implemented") diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationArgumentList.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationArgumentList.txt index f2b647db144..8def10eff23 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationArgumentList.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationArgumentList.txt @@ -1,5 +1,5 @@ KT element: KtValueArgumentList -FIR element: FirResolvedArgumentList +FIR element: FirResolvedArgumentListImpl FIR element rendered: -String(y) \ No newline at end of file +String(y) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationCallExpression.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationCallExpression.txt index e7fe74a878e..f067dd77600 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationCallExpression.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationCallExpression.txt @@ -2,4 +2,4 @@ KT element: KtConstructorCalleeExpression FIR element: FirAnnotationCallImpl FIR element rendered: -@R|kotlin/Suppress|(vararg(String())) \ No newline at end of file +@R|kotlin/Suppress|(names = vararg(String())) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationWithArguments.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationWithArguments.txt index 296eb338fdd..dde3644e1ab 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationWithArguments.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/annotationApplicationWithArguments.txt @@ -2,4 +2,4 @@ KT element: KtAnnotationEntry FIR element: FirAnnotationCallImpl FIR element rendered: -@R|kotlin/Suppress|(vararg(String())) \ No newline at end of file +@R|kotlin/Suppress|(names = vararg(String())) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/fileAnnotation.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/fileAnnotation.txt index 66a73d2ce00..e57966263ee 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/fileAnnotation.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/annotations/fileAnnotation.txt @@ -2,4 +2,4 @@ KT element: KtAnnotationEntry FIR element: FirAnnotationCallImpl FIR element rendered: -@FILE:R|kotlin/Suppress|(vararg(String())) \ No newline at end of file +@FILE:R|kotlin/Suppress|(names = vararg(String())) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/functionCallArgumentList.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/functionCallArgumentList.txt index 8a0138f06e9..f8d6159cdd3 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/functionCallArgumentList.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/functionCallArgumentList.txt @@ -1,5 +1,5 @@ KT element: KtValueArgumentList -FIR element: FirResolvedArgumentList +FIR element: FirResolvedArgumentListImpl FIR element rendered: -Int(1)String(2) \ No newline at end of file +Int(1)String(2) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/invokeCallArgumentList.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/invokeCallArgumentList.txt index 68822c831dd..f8d6159cdd3 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/invokeCallArgumentList.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/getOrBuildFir/calls/invokeCallArgumentList.txt @@ -1,5 +1,5 @@ KT element: KtValueArgumentList -FIR element: FirResolvedArgumentList +FIR element: FirResolvedArgumentListImpl FIR element rendered: Int(1)String(2) diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotationParameters.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotationParameters.txt index c2f499134df..2c8c64fc4ef 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotationParameters.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotationParameters.txt @@ -323,7 +323,7 @@ FILE: annotationParameters.kt super() } - @R|Anno|(Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @R|Anno|(args = Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } @R|Anno|(X#.A#) public final [STATUS] fun foo(): R|kotlin/Unit| { @@ -397,7 +397,7 @@ FILE: annotationParameters.kt super() } - @R|Anno|(Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @R|Anno|(args = Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } @R|Anno|(X#.A#) public final [STATUS] fun foo(): R|kotlin/Unit| { @@ -434,7 +434,7 @@ FILE: annotationParameters.kt super() } - @R|Anno|(Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @R|Anno|(args = Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } @R|Anno|(X#.A#) public final [STATUS] fun foo(): R|kotlin/Unit| { @@ -730,10 +730,10 @@ FILE: annotationParameters.kt super() } - @R|Anno|(Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @R|Anno|(args = Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } - @R|Anno|(Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun foo(): R|kotlin/Unit| { + @R|Anno|(args = Q|X|.R|/X.A|) public final [BODY_RESOLVE] fun foo(): R|kotlin/Unit| { } } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotations.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotations.txt index 9f3d5319716..af3c8e9e111 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotations.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/lazyResolve/annotations.txt @@ -49,7 +49,7 @@ FILE: annotations.kt BODY_RESOLVE: FILE: annotations.kt @FILE:Suppress(String(1)) - @R|kotlin/Suppress|(vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @R|kotlin/Suppress|(names = vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } NoResolve: @@ -61,13 +61,13 @@ FILE: annotations.kt BodyResolveWithChildren: FILE: annotations.kt @FILE:Suppress(String(1)) - @R|kotlin/Suppress|(vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @R|kotlin/Suppress|(names = vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } CallableBodyResolve: FILE: annotations.kt @FILE:Suppress(String(1)) - @R|kotlin/Suppress|(vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @R|kotlin/Suppress|(names = vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } CallableReturnType: @@ -114,6 +114,6 @@ FILE: annotations.kt FILE RAW TO BODY: FILE: annotations.kt - @FILE:R|kotlin/Suppress|(vararg(String(1))) - @R|kotlin/Suppress|(vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { + @FILE:R|kotlin/Suppress|(names = vararg(String(1))) + @R|kotlin/Suppress|(names = vararg(String(2))) public final [BODY_RESOLVE] fun resolveMe(): R|kotlin/Unit| { } diff --git a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/onAirResolve/fileAnnotation.txt b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/onAirResolve/fileAnnotation.txt index f72bb48ff74..561b0ba39c7 100644 --- a/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/onAirResolve/fileAnnotation.txt +++ b/idea/idea-frontend-fir/idea-fir-low-level-api/testdata/onAirResolve/fileAnnotation.txt @@ -1 +1 @@ -@FILE:R|kotlin/Deprecated|(String(hello)) +@FILE:R|kotlin/Deprecated|(message = String(hello)) diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt index 01414e74191..4a7042e0994 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/components/KtFirCallResolver.kt @@ -107,7 +107,7 @@ internal class KtFirCallResolver( override fun resolveCall(call: KtCallElement): KtCall? = withValidityAssertion { return when (val fir = call.getOrBuildFir(firResolveState)) { is FirFunctionCall -> resolveCall(fir) - is FirAnnotation -> fir.asAnnotationCall() + is FirAnnotationCall -> fir.asAnnotationCall() is FirDelegatedConstructorCall -> fir.asDelegatedConstructorCall() is FirConstructor -> fir.asDelegatedConstructorCall() is FirSafeCallExpression -> fir.regularQualifiedAccess.safeAs()?.let { resolveCall(it) } @@ -167,7 +167,7 @@ internal class KtFirCallResolver( return KtFunctionCall(createArgumentMapping(), target) } - private fun FirAnnotation.asAnnotationCall(): KtAnnotationCall? { + private fun FirAnnotationCall.asAnnotationCall(): KtAnnotationCall? { val target = calleeReference.createCallTarget() ?: return null return KtAnnotationCall(createArgumentMapping(), target) } diff --git a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt index 2bacfaea4a0..710bd5b3dc2 100644 --- a/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt +++ b/idea/idea-frontend-fir/src/org/jetbrains/kotlin/idea/frontend/api/fir/utils/firUtils.kt @@ -12,11 +12,9 @@ import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol import org.jetbrains.kotlin.fir.declarations.FirCallableDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin import org.jetbrains.kotlin.fir.declarations.FirRegularClass +import org.jetbrains.kotlin.fir.declarations.resolved import org.jetbrains.kotlin.fir.declarations.utils.primaryConstructor -import org.jetbrains.kotlin.fir.expressions.FirAnnotation -import org.jetbrains.kotlin.fir.expressions.FirConstExpression -import org.jetbrains.kotlin.fir.expressions.FirExpression -import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression +import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference @@ -25,10 +23,10 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.idea.fir.getCandidateSymbols import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState import org.jetbrains.kotlin.idea.fir.low.level.api.api.withFirDeclaration import org.jetbrains.kotlin.idea.fir.low.level.api.lazy.resolve.ResolveType -import org.jetbrains.kotlin.idea.fir.getCandidateSymbols import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtConstantValue import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtSimpleConstantValue import org.jetbrains.kotlin.idea.frontend.api.symbols.markers.KtUnsupportedConstantValue @@ -68,7 +66,8 @@ internal fun FirNamedReference.getReferencedElementType(resolveState: FirModuleR } internal fun mapAnnotationParameters(annotation: FirAnnotation, session: FirSession): Map { - + if (annotation.resolved) return annotation.argumentMapping.mapping.mapKeys { (name, _) -> name.identifier } + if (annotation !is FirAnnotationCall) return emptyMap() val annotationCone = annotation.annotationTypeRef.coneType as? ConeClassLikeType ?: return emptyMap() val annotationPrimaryCtor = (annotationCone.lookupTag.toSymbol(session)?.fir as? FirRegularClass)?.primaryConstructor diff --git a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt index b034ea958ee..70fa0fbd662 100644 --- a/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt +++ b/plugins/fir/fir-plugin-prototype/src/org/jetbrains/kotlin/fir/plugin/AllOpenVisibilityTransformer.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.FirAnnotatedDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclaration import org.jetbrains.kotlin.fir.declarations.FirDeclarationStatus import org.jetbrains.kotlin.fir.declarations.FirPluginKey +import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression import org.jetbrains.kotlin.fir.expressions.arguments import org.jetbrains.kotlin.fir.extensions.FirStatusTransformerExtension @@ -59,7 +60,7 @@ class AllOpenVisibilityTransformer(session: FirSession) : FirStatusTransformerEx private fun FirAnnotatedDeclaration.visibilityFromAnnotation(): Visibility? { val annotation = annotations.firstOrNull { it.annotationTypeRef.coneTypeSafe()?.lookupTag?.classId == AllPublicClassId - } ?: return null + } as? FirAnnotationCall ?: return null val argument = annotation.arguments.firstOrNull() as? FirQualifiedAccessExpression ?: return null val symbol = (argument.calleeReference as? FirResolvedNamedReference)?.resolvedSymbol as? FirVariableSymbol<*> ?: return null val name = symbol.takeIf { it.containingClass()?.classId == VisibilityClassId }?.callableId?.callableName ?: return null