"field" reassignment: fix and test
This commit is contained in:
@@ -47,6 +47,7 @@ import org.jetbrains.kotlin.cfg.pseudocodeTraverser.Edges;
|
|||||||
import org.jetbrains.kotlin.cfg.pseudocodeTraverser.PseudocodeTraverserPackage;
|
import org.jetbrains.kotlin.cfg.pseudocodeTraverser.PseudocodeTraverserPackage;
|
||||||
import org.jetbrains.kotlin.cfg.pseudocodeTraverser.TraversalOrder;
|
import org.jetbrains.kotlin.cfg.pseudocodeTraverser.TraversalOrder;
|
||||||
import org.jetbrains.kotlin.descriptors.*;
|
import org.jetbrains.kotlin.descriptors.*;
|
||||||
|
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
|
||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic;
|
import org.jetbrains.kotlin.diagnostics.Diagnostic;
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory;
|
import org.jetbrains.kotlin.diagnostics.DiagnosticFactory;
|
||||||
import org.jetbrains.kotlin.diagnostics.Errors;
|
import org.jetbrains.kotlin.diagnostics.Errors;
|
||||||
@@ -400,8 +401,11 @@ public class JetFlowInformationProvider {
|
|||||||
@NotNull Collection<VariableDescriptor> varWithValReassignErrorGenerated
|
@NotNull Collection<VariableDescriptor> varWithValReassignErrorGenerated
|
||||||
) {
|
) {
|
||||||
VariableDescriptor variableDescriptor = ctxt.variableDescriptor;
|
VariableDescriptor variableDescriptor = ctxt.variableDescriptor;
|
||||||
if (JetPsiUtil.isBackingFieldReference(expression) && variableDescriptor instanceof PropertyDescriptor) {
|
if (variableDescriptor instanceof SyntheticFieldDescriptor
|
||||||
PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variableDescriptor;
|
|| (JetPsiUtil.isBackingFieldReference(expression) && variableDescriptor instanceof PropertyDescriptor)) {
|
||||||
|
PropertyDescriptor propertyDescriptor = variableDescriptor instanceof SyntheticFieldDescriptor
|
||||||
|
? ((SyntheticFieldDescriptor) variableDescriptor).getPropertyDescriptor()
|
||||||
|
: (PropertyDescriptor) variableDescriptor;
|
||||||
JetPropertyAccessor accessor = PsiTreeUtil.getParentOfType(expression, JetPropertyAccessor.class);
|
JetPropertyAccessor accessor = PsiTreeUtil.getParentOfType(expression, JetPropertyAccessor.class);
|
||||||
if (accessor != null) {
|
if (accessor != null) {
|
||||||
DeclarationDescriptor accessorDescriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, accessor);
|
DeclarationDescriptor accessorDescriptor = trace.get(BindingContext.DECLARATION_TO_DESCRIPTOR, accessor);
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
val my: Int = 1
|
||||||
|
get() {
|
||||||
|
field++
|
||||||
|
return field
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
package
|
||||||
|
|
||||||
|
public val my: kotlin.Int = 1
|
||||||
@@ -1362,6 +1362,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("FieldReassignment.kt")
|
||||||
|
public void testFieldReassignment() throws Exception {
|
||||||
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/backingField/FieldReassignment.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("FieldShadow.kt")
|
@TestMetadata("FieldShadow.kt")
|
||||||
public void testFieldShadow() throws Exception {
|
public void testFieldShadow() throws Exception {
|
||||||
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/backingField/FieldShadow.kt");
|
String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/backingField/FieldShadow.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user