From 8023d04c610420dd65a02cdb0f2287ea12288d95 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 3 Mar 2020 16:26:32 +0300 Subject: [PATCH] [FIR] Add separate local scope for init blocks --- .../body/resolve/FirDeclarationsResolveTransformer.kt | 1 + .../testData/diagnostics/tests/AnonymousInitializers.fir.kt | 2 +- .../assignmentInLocalsInConstructor.fir.kt | 4 ++-- .../diagnostics/tests/smartCasts/varInInitNoPrimary.fir.kt | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) 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 f214c641b73..2c7683a213e 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,6 +451,7 @@ class FirDeclarationsResolveTransformer(transformer: FirBodyResolveTransformer) return withLocalScopeCleanup { dataFlowAnalyzer.enterInitBlock(anonymousInitializer) addLocalScope(primaryConstructorParametersScope) + addLocalScope(FirLocalScope()) transformDeclaration(anonymousInitializer, ResolutionMode.ContextIndependent).also { dataFlowAnalyzer.exitInitBlock(it.single as FirAnonymousInitializer) } diff --git a/compiler/testData/diagnostics/tests/AnonymousInitializers.fir.kt b/compiler/testData/diagnostics/tests/AnonymousInitializers.fir.kt index f066a44ab9b..f4a9bcdd1c5 100644 --- a/compiler/testData/diagnostics/tests/AnonymousInitializers.fir.kt +++ b/compiler/testData/diagnostics/tests/AnonymousInitializers.fir.kt @@ -20,7 +20,7 @@ class WithC() { val a : Int get() = 1 init { - val z = b + val z = b val zz = x } } diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.fir.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.fir.kt index d59def7d63d..c2888dde4c0 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.fir.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/assignmentInLocalsInConstructor.fir.kt @@ -57,8 +57,8 @@ class Test5 { init { val x: String - x = "" - z = x + x = "" + z = x } constructor(y: Int) { diff --git a/compiler/testData/diagnostics/tests/smartCasts/varInInitNoPrimary.fir.kt b/compiler/testData/diagnostics/tests/smartCasts/varInInitNoPrimary.fir.kt index e5981c2c85b..3b0d1ea61cb 100644 --- a/compiler/testData/diagnostics/tests/smartCasts/varInInitNoPrimary.fir.kt +++ b/compiler/testData/diagnostics/tests/smartCasts/varInInitNoPrimary.fir.kt @@ -1,11 +1,11 @@ class Your { init { var y: String? = "xyz" - if (y != null) { + if (y != null) { // Bug that should be fixed // Problem: descriptorToDeclaration cannot get here init block by its descriptor // See PreliminaryDeclarationVisitor.getVisitorByVariable - y.hashCode() + y.hashCode() } }