KT-510 this. allows initialization without backing field
This commit is contained in:
@@ -285,11 +285,19 @@ public class JetFlowInformationProvider {
|
||||
varWithValReassignErrorGenerated.add(variableDescriptor);
|
||||
trace.report(Errors.VAL_REASSIGNMENT.on(expression, variableDescriptor, property == null ? new JetProperty[0] : new JetProperty[] { property }));
|
||||
}
|
||||
if (expression instanceof JetSimpleNameExpression && inAnonymousInitializers &&
|
||||
variableDescriptor instanceof PropertyDescriptor && !enterInitializationPoints.isInitialized() && exitInitializationPoints.isInitialized()) {
|
||||
JetSimpleNameExpression simpleNameExpression = (JetSimpleNameExpression) expression;
|
||||
if (simpleNameExpression.getReferencedNameElementType() != JetTokens.FIELD_IDENTIFIER) {
|
||||
trace.report(Errors.INITIALIZATION_USING_BACKING_FIELD.on(simpleNameExpression, variableDescriptor));
|
||||
if (inAnonymousInitializers && variableDescriptor instanceof PropertyDescriptor && !enterInitializationPoints.isInitialized() &&
|
||||
exitInitializationPoints.isInitialized()) {
|
||||
JetExpression variable = expression;
|
||||
if (expression instanceof JetDotQualifiedExpression) {
|
||||
if (((JetDotQualifiedExpression) expression).getReceiverExpression() instanceof JetThisExpression) {
|
||||
variable = ((JetDotQualifiedExpression) expression).getSelectorExpression();
|
||||
}
|
||||
}
|
||||
if (variable instanceof JetSimpleNameExpression) {
|
||||
JetSimpleNameExpression simpleNameExpression = (JetSimpleNameExpression) variable;
|
||||
if (simpleNameExpression.getReferencedNameElementType() != JetTokens.FIELD_IDENTIFIER) {
|
||||
trace.report(Errors.INITIALIZATION_USING_BACKING_FIELD.on(simpleNameExpression, expression, variableDescriptor));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
//KT-510 `this.` allows initialization without backing field
|
||||
|
||||
namespace kt510
|
||||
|
||||
public open class Identifier1() {
|
||||
var field : Boolean
|
||||
{
|
||||
<!INITIALIZATION_USING_BACKING_FIELD!>field<!> = false; // error
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public open class Identifier2() {
|
||||
var field : Boolean
|
||||
{
|
||||
<!INITIALIZATION_USING_BACKING_FIELD!>this.field<!> = false;
|
||||
}
|
||||
}
|
||||
@@ -6,9 +6,12 @@ import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithPsiElement;
|
||||
import org.jetbrains.jet.lang.psi.JetDotQualifiedExpression;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiFactory;
|
||||
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
|
||||
import org.jetbrains.jet.lang.psi.JetThisExpression;
|
||||
import org.jetbrains.jet.plugin.JetBundle;
|
||||
import org.jetbrains.jet.plugin.references.JetThisReference;
|
||||
|
||||
/**
|
||||
* @author svtk
|
||||
@@ -33,7 +36,12 @@ public class ChangeToBackingFieldFix extends JetIntentionAction<JetSimpleNameExp
|
||||
@Override
|
||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||
JetSimpleNameExpression backingField = (JetSimpleNameExpression) JetPsiFactory.createExpression(project, "$" + element.getText());
|
||||
element.replace(backingField);
|
||||
if (element.getParent() instanceof JetDotQualifiedExpression && ((JetDotQualifiedExpression) element.getParent()).getReceiverExpression() instanceof JetThisExpression) {
|
||||
element.getParent().replace(backingField);
|
||||
}
|
||||
else {
|
||||
element.replace(backingField);
|
||||
}
|
||||
}
|
||||
|
||||
public static JetIntentionActionFactory<JetSimpleNameExpression> createFactory() {
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Change reference to backing field" "true"
|
||||
public open class Identifier() {
|
||||
var field : Boolean
|
||||
{
|
||||
<caret>$field = false;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
// "Change reference to backing field" "true"
|
||||
public open class Identifier() {
|
||||
var field : Boolean
|
||||
{
|
||||
<caret>this.field = false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user