From 2962482d75ff5a6c5ab520dd4c8d54de09a4be56 Mon Sep 17 00:00:00 2001 From: Dmitrii Gridin Date: Wed, 20 Sep 2023 14:03:36 +0200 Subject: [PATCH] [LL FIR] LLFirContractsLazyResolver: avoid transformation for delegated properties Delegated properties can't have any contracts. This change also should improve memory consumption because we will less frequently calculate bodies. ^KT-55750 --- .../transformers/LLFirContractsLazyResolver.kt | 7 ++++++- ...ationsOnPropertyDelegate.out_of_src_roots.txt | 5 +---- ...ilerRequiredAnnotationsOnPropertyDelegate.txt | 5 +---- ...quiredAnnotationsOnPropertyDelegateScript.txt | 6 ++---- .../testData/lazyResolve/delegates.txt | 4 ++-- .../testData/lazyResolve/delegatesScript.txt | 5 +++-- .../testData/lazyResolve/lazyProperty.txt | 15 +++------------ .../testData/lazyResolve/lazyPropertyScript.txt | 16 ++++------------ .../properties/getterWithDelegation.txt | 6 +++--- .../properties/getterWithDelegationScript.txt | 7 ++++--- 10 files changed, 29 insertions(+), 47 deletions(-) diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt index b00b7bdbb98..04d2f656a5b 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/transformers/LLFirContractsLazyResolver.kt @@ -63,7 +63,12 @@ private class LLFirContractsTargetResolver( } is FirConstructor -> resolve(target, ContractStateKeepers.CONSTRUCTOR) - is FirProperty -> resolve(target, ContractStateKeepers.PROPERTY) + is FirProperty -> { + // Property with delegate can't have any contracts + if (target.delegate == null) { + resolve(target, ContractStateKeepers.PROPERTY) + } + } is FirRegularClass, is FirTypeAlias, is FirVariable, diff --git a/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.out_of_src_roots.txt b/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.out_of_src_roots.txt index 6b602c84e3c..7b579ca0935 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.out_of_src_roots.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.out_of_src_roots.txt @@ -153,10 +153,7 @@ FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationsOnPropertyDelegate.kt public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String } - field:@PROPERTY_DELEGATE_FIELD:R|kotlin/Deprecated|[Types](String(delegate)) @PROPERTY_DELEGATE_FIELD:R|Anno|[Types](String(delegate)) public final [ResolvedTo(CONTRACTS)] val memberProperty: by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - String(42) - } - ) + field:@PROPERTY_DELEGATE_FIELD:R|kotlin/Deprecated|[Types](String(delegate)) @PROPERTY_DELEGATE_FIELD:R|Anno|[Types](String(delegate)) public final [ResolvedTo(CONTRACTS)] val memberProperty: by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] get(): { ^ D|/memberProperty|.getValue#(Null(null), ::R|/memberProperty|) } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.txt b/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.txt index f79cf4e455a..1ec1e68f848 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegate.txt @@ -153,10 +153,7 @@ FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationsOnPropertyDelegate.kt public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Anno] get(): String } - field:@PROPERTY_DELEGATE_FIELD:R|kotlin/Deprecated|[Types](String(delegate)) @PROPERTY_DELEGATE_FIELD:R|Anno|[Types](String(delegate)) public final [ResolvedTo(CONTRACTS)] val memberProperty: by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - String(42) - } - ) + field:@PROPERTY_DELEGATE_FIELD:R|kotlin/Deprecated|[Types](String(delegate)) @PROPERTY_DELEGATE_FIELD:R|Anno|[Types](String(delegate)) public final [ResolvedTo(CONTRACTS)] val memberProperty: by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] get(): { ^ D|/memberProperty|.getValue#(Null(null), ::R|/memberProperty|) } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegateScript.txt b/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegateScript.txt index 7833fe02d90..ba082c57ee2 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegateScript.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/compilerRequiredAnnotationsOnPropertyDelegateScript.txt @@ -212,10 +212,7 @@ FILE: [ResolvedTo(IMPORTS)] compilerRequiredAnnotationsOnPropertyDelegateScript. } - field:@PROPERTY_DELEGATE_FIELD:R|kotlin/Deprecated|[Types](String(delegate)) @PROPERTY_DELEGATE_FIELD:R|Anno|[Types](String(delegate)) public final [ResolvedTo(CONTRACTS)] val memberProperty: by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - String(42) - } - ) + field:@PROPERTY_DELEGATE_FIELD:R|kotlin/Deprecated|[Types](String(delegate)) @PROPERTY_DELEGATE_FIELD:R|Anno|[Types](String(delegate)) public final [ResolvedTo(CONTRACTS)] val memberProperty: by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] get(): { ^ D|/memberProperty|.getValue#(Null(null), ::R|/memberProperty|) } @@ -319,3 +316,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] compilerRequiredAnnotationsOnPropertyDelegateSc public [ResolvedTo(BODY_RESOLVE)] get(): R|kotlin/String| { ^ D|/memberProperty|.R|kotlin/getValue|(Null(null), ::R|/memberProperty|) } + diff --git a/analysis/low-level-api-fir/testData/lazyResolve/delegates.txt b/analysis/low-level-api-fir/testData/lazyResolve/delegates.txt index 3389aa935c0..a3e3de0bf1d 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/delegates.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/delegates.txt @@ -386,7 +386,7 @@ FILE: [ResolvedTo(IMPORTS)] delegates.kt } public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/properties/ReadWriteProperty| - public final [ResolvedTo(CONTRACTS)] val valueWithExplicitType: R|kotlin/Int|by delegate# + public final [ResolvedTo(CONTRACTS)] val valueWithExplicitType: R|kotlin/Int|by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] get(): R|kotlin/Int| { ^ D|/valueWithExplicitType|.getValue#(Null(null), ::R|/valueWithExplicitType|) } @@ -394,7 +394,7 @@ FILE: [ResolvedTo(IMPORTS)] delegates.kt public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| { ^ D|/valueWithImplicitType|.R|SubstitutionOverride|(Null(null), ::R|/valueWithImplicitType|) } - public final [ResolvedTo(CONTRACTS)] var variableWithExplicitType: R|kotlin/Int|by delegate# + public final [ResolvedTo(CONTRACTS)] var variableWithExplicitType: R|kotlin/Int|by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] get(): R|kotlin/Int| { ^ D|/variableWithExplicitType|.getValue#(Null(null), ::R|/variableWithExplicitType|) } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/delegatesScript.txt b/analysis/low-level-api-fir/testData/lazyResolve/delegatesScript.txt index db93561920f..02d4a049750 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/delegatesScript.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/delegatesScript.txt @@ -525,7 +525,7 @@ FILE: [ResolvedTo(IMPORTS)] delegatesScript.kts public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/properties/ReadWriteProperty| - public final [ResolvedTo(CONTRACTS)] val valueWithExplicitType: R|kotlin/Int|by delegate# + public final [ResolvedTo(CONTRACTS)] val valueWithExplicitType: R|kotlin/Int|by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] get(): R|kotlin/Int| { ^ D|/valueWithExplicitType|.getValue#(Null(null), ::R|/valueWithExplicitType|) } @@ -535,7 +535,7 @@ FILE: [ResolvedTo(IMPORTS)] delegatesScript.kts ^ D|/valueWithImplicitType|.R|SubstitutionOverride|(Null(null), ::R|/valueWithImplicitType|) } - public final [ResolvedTo(CONTRACTS)] var variableWithExplicitType: R|kotlin/Int|by delegate# + public final [ResolvedTo(CONTRACTS)] var variableWithExplicitType: R|kotlin/Int|by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] get(): R|kotlin/Int| { ^ D|/variableWithExplicitType|.getValue#(Null(null), ::R|/variableWithExplicitType|) } @@ -609,3 +609,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] delegatesScript.kts public [ResolvedTo(BODY_RESOLVE)] set([ResolvedTo(BODY_RESOLVE)] : R|kotlin/Int|): R|kotlin/Unit| { ^ D|/variableWithImplicitType|.R|SubstitutionOverride|(Null(null), ::R|/variableWithImplicitType|, R|/variableWithImplicitType|) } + diff --git a/analysis/low-level-api-fir/testData/lazyResolve/lazyProperty.txt b/analysis/low-level-api-fir/testData/lazyResolve/lazyProperty.txt index cf4019f3206..85302d3e2e9 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/lazyProperty.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/lazyProperty.txt @@ -271,10 +271,7 @@ FILE: [ResolvedTo(IMPORTS)] lazyProperty.kt LAZY_super } - public final [ResolvedTo(CONTRACTS)] val resolveMe: R|kotlin/String|by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - materialize#() - } - ) + public final [ResolvedTo(CONTRACTS)] val resolveMe: R|kotlin/String|by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] [ContainingClassKey=Test] get(): R|kotlin/String| { ^ this@R|/Test|.D|/Test.resolveMe|.getValue#(this@R|/Test|, ::R|/Test.resolveMe|) } @@ -302,10 +299,7 @@ FILE: [ResolvedTo(IMPORTS)] lazyProperty.kt LAZY_super } - public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val resolveMe: R|kotlin/String|by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - materialize#() - } - ) + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val resolveMe: R|kotlin/String|by LAZY_EXPRESSION public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ContainingClassKey=Test] get(): R|kotlin/String| { ^ this@R|/Test|.D|/Test.resolveMe|.getValue#(this@R|/Test|, ::R|/Test.resolveMe|) } @@ -333,10 +327,7 @@ FILE: [ResolvedTo(IMPORTS)] lazyProperty.kt LAZY_super } - public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val resolveMe: R|kotlin/String|by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - materialize#() - } - ) + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val resolveMe: R|kotlin/String|by LAZY_EXPRESSION public [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [ContainingClassKey=Test] get(): R|kotlin/String| { ^ this@R|/Test|.D|/Test.resolveMe|.getValue#(this@R|/Test|, ::R|/Test.resolveMe|) } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/lazyPropertyScript.txt b/analysis/low-level-api-fir/testData/lazyResolve/lazyPropertyScript.txt index 4fad595f12d..bb18bb32512 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/lazyPropertyScript.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/lazyPropertyScript.txt @@ -360,10 +360,7 @@ FILE: [ResolvedTo(IMPORTS)] lazyPropertyScript.kts LAZY_super } - public final [ResolvedTo(CONTRACTS)] val resolveMe: R|kotlin/String|by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - materialize#() - } - ) + public final [ResolvedTo(CONTRACTS)] val resolveMe: R|kotlin/String|by LAZY_EXPRESSION public [ResolvedTo(CONTRACTS)] [ContainingClassKey=Test] get(): R|kotlin/String| { ^ this@R|/Test|.D|/Test.resolveMe|.getValue#(this@R|/Test|, ::R|/Test.resolveMe|) } @@ -400,10 +397,7 @@ FILE: [ResolvedTo(IMPORTS)] lazyPropertyScript.kts LAZY_super } - public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val resolveMe: R|kotlin/String|by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - materialize#() - } - ) + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val resolveMe: R|kotlin/String|by LAZY_EXPRESSION public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] [ContainingClassKey=Test] get(): R|kotlin/String| { ^ this@R|/Test|.D|/Test.resolveMe|.getValue#(this@R|/Test|, ::R|/Test.resolveMe|) } @@ -440,10 +434,7 @@ FILE: [ResolvedTo(IMPORTS)] lazyPropertyScript.kts LAZY_super } - public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val resolveMe: R|kotlin/String|by lazy#( = [ResolvedTo(RAW_FIR)] lazy@fun .(): { - materialize#() - } - ) + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val resolveMe: R|kotlin/String|by LAZY_EXPRESSION public [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] [ContainingClassKey=Test] get(): R|kotlin/String| { ^ this@R|/Test|.D|/Test.resolveMe|.getValue#(this@R|/Test|, ::R|/Test.resolveMe|) } @@ -541,3 +532,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] lazyPropertyScript.kts } } + diff --git a/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegation.txt b/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegation.txt index 2dfb12d78ec..485b8ff943f 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegation.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegation.txt @@ -135,7 +135,7 @@ FILE: [ResolvedTo(IMPORTS)] getterWithDelegation.kt CONTRACTS: FILE: [ResolvedTo(IMPORTS)] getterWithDelegation.kt - public final [ResolvedTo(CONTRACTS)] val one: R|kotlin/Int|by Prp#() + public final [ResolvedTo(CONTRACTS)] val one: R|kotlin/Int|by LAZY_EXPRESSION @R|kotlin/Deprecated|[Types](String(reason)) public [ResolvedTo(CONTRACTS)] get(): R|kotlin/Int| { ^ D|/one|.getValue#(Null(null), ::R|/one|) } @@ -150,7 +150,7 @@ FILE: [ResolvedTo(IMPORTS)] getterWithDelegation.kt IMPLICIT_TYPES_BODY_RESOLVE: FILE: [ResolvedTo(IMPORTS)] getterWithDelegation.kt - public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val one: R|kotlin/Int|by Prp#() + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val one: R|kotlin/Int|by LAZY_EXPRESSION @R|kotlin/Deprecated|[Types](String(reason)) public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| { ^ D|/one|.getValue#(Null(null), ::R|/one|) } @@ -165,7 +165,7 @@ FILE: [ResolvedTo(IMPORTS)] getterWithDelegation.kt ANNOTATIONS_ARGUMENTS_MAPPING: FILE: [ResolvedTo(IMPORTS)] getterWithDelegation.kt - public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val one: R|kotlin/Int|by Prp#() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val one: R|kotlin/Int|by LAZY_EXPRESSION @R|kotlin/Deprecated|[Types](message = String(reason)) public [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] get(): R|kotlin/Int| { ^ D|/one|.getValue#(Null(null), ::R|/one|) } diff --git a/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegationScript.txt b/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegationScript.txt index a916fee294f..d9f4a023420 100644 --- a/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegationScript.txt +++ b/analysis/low-level-api-fir/testData/lazyResolve/properties/getterWithDelegationScript.txt @@ -193,7 +193,7 @@ FILE: [ResolvedTo(IMPORTS)] getterWithDelegationScript.kts SCRIPT: [ResolvedTo(TYPES)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - public final [ResolvedTo(CONTRACTS)] val one: R|kotlin/Int|by Prp#() + public final [ResolvedTo(CONTRACTS)] val one: R|kotlin/Int|by LAZY_EXPRESSION @R|kotlin/Deprecated|[Types](String(reason)) public [ResolvedTo(CONTRACTS)] get(): R|kotlin/Int| { ^ D|/one|.getValue#(Null(null), ::R|/one|) } @@ -214,7 +214,7 @@ FILE: [ResolvedTo(IMPORTS)] getterWithDelegationScript.kts SCRIPT: [ResolvedTo(TYPES)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val one: R|kotlin/Int|by Prp#() + public final [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] val one: R|kotlin/Int|by LAZY_EXPRESSION @R|kotlin/Deprecated|[Types](String(reason)) public [ResolvedTo(IMPLICIT_TYPES_BODY_RESOLVE)] get(): R|kotlin/Int| { ^ D|/one|.getValue#(Null(null), ::R|/one|) } @@ -235,7 +235,7 @@ FILE: [ResolvedTo(IMPORTS)] getterWithDelegationScript.kts SCRIPT: [ResolvedTo(TYPES)] [ResolvedTo(RAW_FIR)] lval args: R|kotlin/Array| - public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val one: R|kotlin/Int|by Prp#() + public final [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] val one: R|kotlin/Int|by LAZY_EXPRESSION @R|kotlin/Deprecated|[Types](message = String(reason)) public [ResolvedTo(ANNOTATIONS_ARGUMENTS_MAPPING)] get(): R|kotlin/Int| { ^ D|/one|.getValue#(Null(null), ::R|/one|) } @@ -294,3 +294,4 @@ FILE: [ResolvedTo(BODY_RESOLVE)] getterWithDelegationScript.kts } } +