[FIR] Add separate local scope for init blocks

This commit is contained in:
Dmitriy Novozhilov
2020-03-03 16:26:32 +03:00
parent 50742a4686
commit 8023d04c61
4 changed files with 6 additions and 5 deletions
@@ -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)
}
@@ -20,7 +20,7 @@ class WithC() {
val a : Int get() = 1
init {
val z = b
val z = <!UNRESOLVED_REFERENCE!>b<!>
val zz = x
}
}
@@ -57,8 +57,8 @@ class Test5 {
init {
val x: String
<!UNRESOLVED_REFERENCE!>x<!> = ""
z = <!UNRESOLVED_REFERENCE!>x<!>
x = ""
z = x
}
constructor(y: Int) {
@@ -1,11 +1,11 @@
class Your {
init {
var y: String? = "xyz"
if (<!UNRESOLVED_REFERENCE!>y<!> != null) {
if (y != null) {
// Bug that should be fixed
// Problem: descriptorToDeclaration cannot get here init block by its descriptor
// See PreliminaryDeclarationVisitor.getVisitorByVariable
<!UNRESOLVED_REFERENCE!>y<!>.<!UNRESOLVED_REFERENCE!>hashCode<!>()
y.hashCode()
}
}