diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java index e68cf75775c..3f4fae66e6e 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/cfg/JetFlowInformationProvider.java @@ -248,19 +248,22 @@ public class JetFlowInformationProvider { if (!(element instanceof JetSimpleNameExpression)) return; boolean isInitialized = ctxt.exitInitState.isInitialized; - if (ctxt.variableDescriptor instanceof PropertyDescriptor) { - if (!trace.get(BindingContext.BACKING_FIELD_REQUIRED, (PropertyDescriptor) ctxt.variableDescriptor)) { + VariableDescriptor variableDescriptor = ctxt.variableDescriptor; + if (variableDescriptor instanceof PropertyDescriptor) { + if (!trace.get(BindingContext.BACKING_FIELD_REQUIRED, (PropertyDescriptor) variableDescriptor)) { isInitialized = true; } } - if (!isInitialized && !varWithUninitializedErrorGenerated.contains(ctxt.variableDescriptor)) { - varWithUninitializedErrorGenerated.add(ctxt.variableDescriptor); - if (ctxt.variableDescriptor instanceof ValueParameterDescriptor) { + if (!isInitialized && !varWithUninitializedErrorGenerated.contains(variableDescriptor)) { + if (!(variableDescriptor instanceof PropertyDescriptor)) { + varWithUninitializedErrorGenerated.add(variableDescriptor); + } + if (variableDescriptor instanceof ValueParameterDescriptor) { report(Errors.UNINITIALIZED_PARAMETER.on((JetSimpleNameExpression) element, - (ValueParameterDescriptor) ctxt.variableDescriptor), ctxt); + (ValueParameterDescriptor) variableDescriptor), ctxt); } else { - report(Errors.UNINITIALIZED_VARIABLE.on((JetSimpleNameExpression) element, ctxt.variableDescriptor), ctxt); + report(Errors.UNINITIALIZED_VARIABLE.on((JetSimpleNameExpression) element, variableDescriptor), ctxt); } } } diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/repeatUnitializedErrorOnlyForLocalVars.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/repeatUnitializedErrorOnlyForLocalVars.kt new file mode 100644 index 00000000000..974b04c2d6f --- /dev/null +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/repeatUnitializedErrorOnlyForLocalVars.kt @@ -0,0 +1,15 @@ +package aa + +val a : Int = b +val b : Int = a + b + +class C { + val a : Int = b + val b : Int = a + b +} + +fun foo() { + val a : Int + a + 1 + a + 1 +} diff --git a/compiler/testData/diagnostics/tests/regressions/Jet81.kt b/compiler/testData/diagnostics/tests/regressions/Jet81.kt index 6151bd7a1ec..9fbb58838c5 100644 --- a/compiler/testData/diagnostics/tests/regressions/Jet81.kt +++ b/compiler/testData/diagnostics/tests/regressions/Jet81.kt @@ -14,7 +14,7 @@ val a = object { { b + 1 } - val x = b + val x = b val y = 1 } diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 456263ed832..d04388ca45c 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -974,6 +974,11 @@ public class JetDiagnosticsTestGenerated extends AbstractDiagnosticsTestWithEage doTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/propertiesOrderInPackage.kt"); } + @TestMetadata("repeatUnitializedErrorOnlyForLocalVars.kt") + public void testRepeatUnitializedErrorOnlyForLocalVars() throws Exception { + doTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/repeatUnitializedErrorOnlyForLocalVars.kt"); + } + @TestMetadata("uninitializedInLocalDeclarations.kt") public void testUninitializedInLocalDeclarations() throws Exception { doTest("compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedInLocalDeclarations.kt");