diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt index cecc0ea5e92..0dc897fd46f 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirAnnotationArgumentsLazyResolver.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.file.builder.LLFirLockPro import org.jetbrains.kotlin.analysis.low.level.api.fir.lazy.resolve.FirLazyBodiesCalculator import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkAnnotationArgumentsMappingIsResolved +import org.jetbrains.kotlin.analysis.low.level.api.fir.util.forEachDependentDeclaration import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.* @@ -94,7 +95,16 @@ private class LLFirAnnotationArgumentsTargetResolver( } } - target is FirScript -> target.transformAnnotations(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) + target is FirScript -> { + target.transformAnnotations(transformer.declarationsTransformer, ResolutionMode.ContextIndependent) + transformer.declarationsTransformer.withScript(target) { + target.forEachDependentDeclaration { + it.transformSingle(transformer, ResolutionMode.ContextIndependent) + } + + target + } + } target.isRegularDeclarationWithAnnotation -> target.transformSingle(transformer, ResolutionMode.ContextIndependent) target is FirCodeFragment || target is FirFile -> {} else -> throwUnexpectedFirElementError(target) diff --git a/analysis/low-level-api-fir/testData/lazyResolve/properties/resultWithPropagatedType.txt b/analysis/low-level-api-fir/testData/lazyResolve/properties/resultWithPropagatedType.txt index a92895425bd..25c4359d53f 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/properties/resultWithPropagatedType.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/properties/resultWithPropagatedType.txt @@ -256,25 +256,25 @@ FILE: [ResolvedTo(IMPORTS)] resultWithPropagatedType.kts SCRIPT: [ResolvedTo(ANNOTATION_ARGUMENTS)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - @R|kotlin/annotation/Target|[CompilerRequiredAnnotations](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] annotation class Anno : R|kotlin/Annotation| { - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=foo/Anno.position] position: String): R|foo/Anno| { + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=foo/Anno.position] position: R|kotlin/String|): R|foo/Anno| { LAZY_super } - public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val position: String = R|/position| - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String + public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val position: R|kotlin/String| = R|/position| + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String| } - public? final? const [ResolvedTo(RAW_FIR)] val constant: = LAZY_EXPRESSION - public? [ResolvedTo(RAW_FIR)] get(): + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val constant: R|kotlin/Int| = Int(0) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| - public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| { ^explicitType IntegerLiteral(0) } - public final [ResolvedTo(ANNOTATION_ARGUMENTS)] val $$result: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| = R|foo/explicitType|() - public [ResolvedTo(ANNOTATION_ARGUMENTS)] get(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| + public final [ResolvedTo(ANNOTATION_ARGUMENTS)] val $$result: R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| = R|foo/explicitType|() + public [ResolvedTo(ANNOTATION_ARGUMENTS)] get(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| BODY_RESOLVE: @@ -283,25 +283,25 @@ FILE: [ResolvedTo(IMPORTS)] resultWithPropagatedType.kts SCRIPT: [ResolvedTo(BODY_RESOLVE)] [ResolvedTo(BODY_RESOLVE)] lval args: R|kotlin/Array| - @R|kotlin/annotation/Target|[CompilerRequiredAnnotations](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] annotation class Anno : R|kotlin/Annotation| { - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=foo/Anno.position] position: String): R|foo/Anno| { + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=foo/Anno.position] position: R|kotlin/String|): R|foo/Anno| { LAZY_super } - public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val position: String = R|/position| - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String + public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val position: R|kotlin/String| = R|/position| + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String| } - public? final? const [ResolvedTo(RAW_FIR)] val constant: = LAZY_EXPRESSION - public? [ResolvedTo(RAW_FIR)] get(): + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val constant: R|kotlin/Int| = Int(0) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| - public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| { ^explicitType IntegerLiteral(0) } - public final [ResolvedTo(BODY_RESOLVE)] val $$result: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| = R|foo/explicitType|() - public [ResolvedTo(BODY_RESOLVE)] get(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| + public final [ResolvedTo(BODY_RESOLVE)] val $$result: R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| = R|foo/explicitType|() + public [ResolvedTo(BODY_RESOLVE)] get(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| FILE RAW TO BODY: @@ -329,3 +329,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] resultWithPropagatedType.kts public final [ResolvedTo(BODY_RESOLVE)] val $$result: R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| = R|foo/explicitType|() public [ResolvedTo(BODY_RESOLVE)] get(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| + diff --git a/analysis/low-level-api-fir/testData/lazyResolve/properties/scriptWithResultWithPropagatedType.txt b/analysis/low-level-api-fir/testData/lazyResolve/properties/scriptWithResultWithPropagatedType.txt index 119ad3b50c6..abb0dfd7fde 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/properties/scriptWithResultWithPropagatedType.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/properties/scriptWithResultWithPropagatedType.txt @@ -256,25 +256,25 @@ FILE: [ResolvedTo(IMPORTS)] scriptWithResultWithPropagatedType.kts SCRIPT: [ResolvedTo(ANNOTATION_ARGUMENTS)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - @R|kotlin/annotation/Target|[CompilerRequiredAnnotations](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] annotation class Anno : R|kotlin/Annotation| { - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=foo/Anno.position] position: String): R|foo/Anno| { + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=foo/Anno.position] position: R|kotlin/String|): R|foo/Anno| { LAZY_super } - public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val position: String = R|/position| - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String + public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val position: R|kotlin/String| = R|/position| + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String| } - public? final? const [ResolvedTo(RAW_FIR)] val constant: = LAZY_EXPRESSION - public? [ResolvedTo(RAW_FIR)] get(): + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val constant: R|kotlin/Int| = Int(0) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| - public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| { ^explicitType IntegerLiteral(0) } - public final [ResolvedTo(ANNOTATION_ARGUMENTS)] val $$result: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| = R|foo/explicitType|() - public [ResolvedTo(ANNOTATION_ARGUMENTS)] get(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| + public final [ResolvedTo(ANNOTATION_ARGUMENTS)] val $$result: R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| = R|foo/explicitType|() + public [ResolvedTo(ANNOTATION_ARGUMENTS)] get(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| BODY_RESOLVE: @@ -283,25 +283,25 @@ FILE: [ResolvedTo(IMPORTS)] scriptWithResultWithPropagatedType.kts SCRIPT: [ResolvedTo(BODY_RESOLVE)] [ResolvedTo(BODY_RESOLVE)] lval args: R|kotlin/Array| - @R|kotlin/annotation/Target|[CompilerRequiredAnnotations](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public? final? [ResolvedTo(COMPILER_REQUIRED_ANNOTATIONS)] annotation class Anno : R|kotlin/Annotation| { - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] constructor([ResolvedTo(RAW_FIR)] [CorrespondingProperty=foo/Anno.position] position: String): R|foo/Anno| { + @R|kotlin/annotation/Target|[Types](Q|kotlin/annotation/AnnotationTarget|.R|kotlin/annotation/AnnotationTarget.TYPE|) public final [ResolvedTo(STATUS)] annotation class Anno : R|kotlin/Annotation| { + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] constructor([ResolvedTo(STATUS)] [CorrespondingProperty=foo/Anno.position] position: R|kotlin/String|): R|foo/Anno| { LAZY_super } - public? final? [ResolvedTo(RAW_FIR)] [IsFromPrimaryConstructor=true] val position: String = R|/position| - public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String + public final [ResolvedTo(STATUS)] [IsFromPrimaryConstructor=true] val position: R|kotlin/String| = R|/position| + public [ResolvedTo(STATUS)] [ContainingClassKey=Anno] get(): R|kotlin/String| } - public? final? const [ResolvedTo(RAW_FIR)] val constant: = LAZY_EXPRESSION - public? [ResolvedTo(RAW_FIR)] get(): + public final const [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val constant: R|kotlin/Int| = Int(0) + public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| - public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| { + public final [ResolvedTo(CONTRACTS)] fun explicitType(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| { ^explicitType IntegerLiteral(0) } - public final [ResolvedTo(BODY_RESOLVE)] val $$result: R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| = R|foo/explicitType|() - public [ResolvedTo(BODY_RESOLVE)] get(): R|@R|foo/Anno|((String(return type: ), constant#)) kotlin/collections/List<@R|foo/Anno|((String(nested return type: ), constant#)) kotlin/collections/Collection<@R|foo/Anno|((String(nested nested return type: ), constant#)) kotlin/String>>| + public final [ResolvedTo(BODY_RESOLVE)] val $$result: R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| = R|foo/explicitType|() + public [ResolvedTo(BODY_RESOLVE)] get(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| FILE RAW TO BODY: @@ -329,3 +329,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] scriptWithResultWithPropagatedType.kts public final [ResolvedTo(BODY_RESOLVE)] val $$result: R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| = R|foo/explicitType|() public [ResolvedTo(BODY_RESOLVE)] get(): R|@R|foo/Anno|(position = (String(return type: ), R|foo/constant|)) kotlin/collections/List<@R|foo/Anno|(position = (String(nested return type: ), R|foo/constant|)) kotlin/collections/Collection<@R|foo/Anno|(position = (String(nested nested return type: ), R|foo/constant|)) kotlin/String>>| +