do not miss repeated 'uninitialized' error for properties
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package aa
|
||||
|
||||
val a : Int = <!UNINITIALIZED_VARIABLE!>b<!>
|
||||
val b : Int = a + <!UNINITIALIZED_VARIABLE!>b<!>
|
||||
|
||||
class C {
|
||||
val a : Int = <!UNINITIALIZED_VARIABLE!>b<!>
|
||||
val b : Int = a + <!UNINITIALIZED_VARIABLE!>b<!>
|
||||
}
|
||||
|
||||
fun foo() {
|
||||
val a : Int
|
||||
<!UNINITIALIZED_VARIABLE!>a<!> + 1
|
||||
a + 1
|
||||
}
|
||||
@@ -14,7 +14,7 @@ val a = object {
|
||||
{
|
||||
<!UNINITIALIZED_VARIABLE, DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!> <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>+<!> 1
|
||||
}
|
||||
val x = <!DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!>
|
||||
val x = <!UNINITIALIZED_VARIABLE, DEBUG_INFO_ELEMENT_WITH_ERROR_TYPE!>b<!>
|
||||
val y = 1
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user