From 14731527ed6be09bb52b9811ec65db1bbd270f07 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 8 Apr 2020 17:26:29 +0300 Subject: [PATCH] [FIR] Don't store class functions in local scope --- .../resolve/expresssions/privateVisibility.txt | 4 ++-- .../testData/resolve/objectInnerClass.kt | 2 +- .../testData/resolve/objectInnerClass.txt | 10 +++++----- .../body/resolve/FirDeclarationsResolveTransformer.kt | 2 +- .../box/closures/captureOuterProperty/inFunction.kt | 1 - .../captureOuterProperty/inPropertyDeepObjectChain.kt | 1 - 6 files changed, 9 insertions(+), 11 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.txt b/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.txt index 9b671587a56..02fbc39596a 100644 --- a/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.txt +++ b/compiler/fir/analysis-tests/testData/resolve/expresssions/privateVisibility.txt @@ -71,7 +71,7 @@ FILE: first.kt private final fun bar(): R|kotlin/Unit| public[local] final fun baz(): R|kotlin/Unit| { - R|/Local.bar|() + this@R|/Local|.R|/Local.bar|() this@R|/Local|.R|/Local.Inner.Inner|() } @@ -81,7 +81,7 @@ FILE: first.kt } public[local] final fun foo(): R|kotlin/Unit| { - R|/Local.bar|() + this@R|/Local|.R|/Local.bar|() } } diff --git a/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.kt b/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.kt index 197f0bc559d..473fbc09289 100644 --- a/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.kt +++ b/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.kt @@ -106,7 +106,7 @@ class Case3() { fun foo() { baseFun() //UNRESOLVED_REFERENCE val x = property //UNRESOLVED_REFERENCE - zoo() + zoo() hoo() } } diff --git a/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.txt b/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.txt index 337c0a71bd3..1b26e3bd6db 100644 --- a/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.txt +++ b/compiler/fir/analysis-tests/testData/resolve/objectInnerClass.txt @@ -79,7 +79,7 @@ FILE: objectInnerClass.kt public final fun foo(): R|kotlin/Unit| { this@R|/anonymous|.R|/Case2.Base.baseFun|() lval x: R|B| = this@R|/anonymous|.R|/Case2.Base.property| - this@R|/anonymous|.R|/anonymous.zoo|() + (this@R|/anonymous|, this@R|/anonymous|).R|/anonymous.zoo|() (this@R|/Case2|, this@R|/anonymous|).R|/Case2.hoo|() } @@ -141,7 +141,7 @@ FILE: objectInnerClass.kt public[local] final fun foo(): R|kotlin/Unit| { #() lval x: = # - this@R|/Case3..Child|.R|/Case3..Child.zoo|() + #() (this@R|/anonymous|, this@R|/Case3..Child|).R|/anonymous.hoo|() } @@ -172,7 +172,7 @@ FILE: objectInnerClass.kt lval base: R|Case3..Base| = R|/Case3..Base.Base|(R|/B.B|()) R|/base|.#() R|/base|.# - R|/base|.R|/anonymous.hoo|() + (this@R|/anonymous|, R|/base|).R|/anonymous.hoo|() } public final fun caseForChild(): R|kotlin/Unit| { @@ -180,8 +180,8 @@ FILE: objectInnerClass.kt R|/child|.#() R|/child|.# R|/child|.#() - R|/child|.R|/anonymous.hoo|() - R|/child|.R|/anonymous.voo|() + (this@R|/anonymous|, R|/child|).R|/anonymous.hoo|() + (this@R|/anonymous|, R|/child|).R|/anonymous.voo|() } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt index 61cbca3d49a..109aabe6ca8 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirDeclarationsResolveTransformer.kt @@ -451,7 +451,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) function: F, resolutionMode: ResolutionMode, ): CompositeTransformResult { - if (function is FirSimpleFunction) { + if (function is FirSimpleFunction && context.containerIfAny !is FirClass<*>) { context.storeFunction(function) } diff --git a/compiler/testData/codegen/box/closures/captureOuterProperty/inFunction.kt b/compiler/testData/codegen/box/closures/captureOuterProperty/inFunction.kt index fde85893699..7b4828fa7b5 100644 --- a/compiler/testData/codegen/box/closures/captureOuterProperty/inFunction.kt +++ b/compiler/testData/codegen/box/closures/captureOuterProperty/inFunction.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface T { fun result(): String } diff --git a/compiler/testData/codegen/box/closures/captureOuterProperty/inPropertyDeepObjectChain.kt b/compiler/testData/codegen/box/closures/captureOuterProperty/inPropertyDeepObjectChain.kt index e07f3cb7cac..0bb07f581b9 100644 --- a/compiler/testData/codegen/box/closures/captureOuterProperty/inPropertyDeepObjectChain.kt +++ b/compiler/testData/codegen/box/closures/captureOuterProperty/inPropertyDeepObjectChain.kt @@ -1,4 +1,3 @@ -// IGNORE_BACKEND_FIR: JVM_IR interface T { fun result(): String }