From 8d5cbeeab0fd7f673df6baf982c00e67675ae0a5 Mon Sep 17 00:00:00 2001 From: Yan Zhulanow Date: Tue, 29 Sep 2015 20:21:44 +0300 Subject: [PATCH] Fix "not initialized" on lateinit property (KT-9369) --- .../jetbrains/kotlin/cfg/JetFlowInformationProvider.java | 3 ++- compiler/testData/diagnostics/tests/LateInit.kt | 8 ++++++++ compiler/testData/diagnostics/tests/LateInit.txt | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java index 0a2c3b9eb37..6888097a201 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/JetFlowInformationProvider.java @@ -376,7 +376,8 @@ public class JetFlowInformationProvider { boolean isDefinitelyInitialized = ctxt.exitInitState.definitelyInitialized(); VariableDescriptor variableDescriptor = ctxt.variableDescriptor; if (variableDescriptor instanceof PropertyDescriptor) { - if (!trace.get(BindingContext.BACKING_FIELD_REQUIRED, (PropertyDescriptor) variableDescriptor)) { + PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variableDescriptor; + if (propertyDescriptor.isLateInit() || !trace.get(BindingContext.BACKING_FIELD_REQUIRED, propertyDescriptor)) { isDefinitelyInitialized = true; } } diff --git a/compiler/testData/diagnostics/tests/LateInit.kt b/compiler/testData/diagnostics/tests/LateInit.kt index cda6ec9a34b..0dfec9029dc 100644 --- a/compiler/testData/diagnostics/tests/LateInit.kt +++ b/compiler/testData/diagnostics/tests/LateInit.kt @@ -54,4 +54,12 @@ public abstract class AbstractClass { public class AbstractClassImpl : AbstractClass() { override lateinit var str: String +} + +public class B { + lateinit var a: String + + init { + a.length() + } } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/LateInit.txt b/compiler/testData/diagnostics/tests/LateInit.txt index 82114de69c6..b4d00b2f3f8 100644 --- a/compiler/testData/diagnostics/tests/LateInit.txt +++ b/compiler/testData/diagnostics/tests/LateInit.txt @@ -45,6 +45,14 @@ public final class AbstractClassImpl : AbstractClass { public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } +public final class B { + public constructor B() + public final lateinit var a: kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + public final class CustomDelegate { public constructor CustomDelegate() public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean