KT-510 this. allows initialization without backing field
This commit is contained in:
@@ -285,11 +285,19 @@ public class JetFlowInformationProvider {
|
|||||||
varWithValReassignErrorGenerated.add(variableDescriptor);
|
varWithValReassignErrorGenerated.add(variableDescriptor);
|
||||||
trace.report(Errors.VAL_REASSIGNMENT.on(expression, variableDescriptor, property == null ? new JetProperty[0] : new JetProperty[] { property }));
|
trace.report(Errors.VAL_REASSIGNMENT.on(expression, variableDescriptor, property == null ? new JetProperty[0] : new JetProperty[] { property }));
|
||||||
}
|
}
|
||||||
if (expression instanceof JetSimpleNameExpression && inAnonymousInitializers &&
|
if (inAnonymousInitializers && variableDescriptor instanceof PropertyDescriptor && !enterInitializationPoints.isInitialized() &&
|
||||||
variableDescriptor instanceof PropertyDescriptor && !enterInitializationPoints.isInitialized() && exitInitializationPoints.isInitialized()) {
|
exitInitializationPoints.isInitialized()) {
|
||||||
JetSimpleNameExpression simpleNameExpression = (JetSimpleNameExpression) expression;
|
JetExpression variable = expression;
|
||||||
if (simpleNameExpression.getReferencedNameElementType() != JetTokens.FIELD_IDENTIFIER) {
|
if (expression instanceof JetDotQualifiedExpression) {
|
||||||
trace.report(Errors.INITIALIZATION_USING_BACKING_FIELD.on(simpleNameExpression, variableDescriptor));
|
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 com.intellij.util.IncorrectOperationException;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.diagnostics.DiagnosticWithPsiElement;
|
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.JetPsiFactory;
|
||||||
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
|
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.JetBundle;
|
||||||
|
import org.jetbrains.jet.plugin.references.JetThisReference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author svtk
|
* @author svtk
|
||||||
@@ -33,7 +36,12 @@ public class ChangeToBackingFieldFix extends JetIntentionAction<JetSimpleNameExp
|
|||||||
@Override
|
@Override
|
||||||
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
|
||||||
JetSimpleNameExpression backingField = (JetSimpleNameExpression) JetPsiFactory.createExpression(project, "$" + element.getText());
|
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() {
|
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