From 8eb36947ca8b5563f2ecbe2e541b095c6133cd66 Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 22 Sep 2017 15:26:14 +0300 Subject: [PATCH] Minor. Invert and extract condition for checkAssignmentBeforeDeclaration --- .../cfg/ControlFlowInformationProvider.kt | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt index 01a51c363b0..1677ba47563 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/cfg/ControlFlowInformationProvider.kt @@ -486,18 +486,23 @@ class ControlFlowInformationProvider private constructor( } private fun checkAssignmentBeforeDeclaration(ctxt: VariableInitContext, expression: KtExpression) = - if (ctxt.enterInitState?.isDeclared == true - || ctxt.exitInitState?.isDeclared == true - || ctxt.enterInitState?.mayBeInitialized() == true - || ctxt.exitInitState?.mayBeInitialized() != true) { - false - } - else { + if (ctxt.isInitializationBeforeDeclaration()) { if (ctxt.variableDescriptor != null) { report(Errors.INITIALIZATION_BEFORE_DECLARATION.on(expression, ctxt.variableDescriptor), ctxt) } true } + else { + false + } + + private fun VariableInitContext.isInitializationBeforeDeclaration(): Boolean = + // is not declared + enterInitState?.isDeclared != true && exitInitState?.isDeclared != true && + // wasn't initialized before current instruction + enterInitState?.mayBeInitialized() != true && + // became initialized after current instruction + exitInitState?.mayBeInitialized() == true private fun checkInitializationForCustomSetter(ctxt: VariableInitContext, expression: KtExpression): Boolean { val variableDescriptor = ctxt.variableDescriptor