backing fields resolve changed

KT-462 Consider allowing initializing properties via property names when it is safe
KT-598 Allow to use backing fields after this expression
This commit is contained in:
svtk
2011-12-06 22:41:19 +04:00
parent 6f314c09b0
commit ec55dddfcd
36 changed files with 422 additions and 215 deletions
@@ -31,7 +31,7 @@ public class AddModifierFix extends JetIntentionAction<JetModifierListOwner> {
}
@NotNull
/*package*/ static String getElementName(JetModifierListOwner modifierListOwner) {
/*package*/ static String getElementName(@NotNull JetModifierListOwner modifierListOwner) {
String name = null;
if (modifierListOwner instanceof PsiNameIdentifierOwner) {
PsiElement nameIdentifier = ((PsiNameIdentifierOwner) modifierListOwner).getNameIdentifier();
@@ -36,12 +36,7 @@ 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());
if (element.getParent() instanceof JetDotQualifiedExpression && ((JetDotQualifiedExpression) element.getParent()).getReceiverExpression() instanceof JetThisExpression) {
element.getParent().replace(backingField);
}
else {
element.replace(backingField);
}
element.replace(backingField);
}
public static JetIntentionActionFactory<JetSimpleNameExpression> createFactory() {
@@ -78,8 +78,9 @@ public class ChangeVariableMutabilityFix implements IntentionAction {
@Override
public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException {
JetProperty element = getCorrespondingProperty(editor, (JetFile)file);
JetProperty newElement = (JetProperty) element.copy();
JetProperty property = getCorrespondingProperty(editor, (JetFile)file);
assert property != null && !property.isVar();
JetProperty newElement = (JetProperty) property.copy();
if (newElement.isVar()) {
PsiElement varElement = newElement.getNode().findChildByType(JetTokens.VAR_KEYWORD).getPsi();
@@ -94,7 +95,7 @@ public class ChangeVariableMutabilityFix implements IntentionAction {
PsiElement varElement = varProperty.getNode().findChildByType(JetTokens.VAR_KEYWORD).getPsi();
CodeEditUtil.replaceChild(newElement.getNode(), valElement.getNode(), varElement.getNode());
}
element.replace(newElement);
property.replace(newElement);
}
@Override
@@ -111,8 +111,10 @@ public class QuickFixes {
add(Errors.ILLEGAL_MODIFIER, removeModifierFactory);
add(Errors.PUBLIC_MEMBER_SHOULD_SPECIFY_TYPE, AddReturnTypeFix.createFactory());
add(Errors.INITIALIZATION_USING_BACKING_FIELD, ChangeToBackingFieldFix.createFactory());
JetIntentionActionFactory<JetSimpleNameExpression> changeToBackingFieldFactory = ChangeToBackingFieldFix.createFactory();
add(Errors.INITIALIZATION_USING_BACKING_FIELD_CUSTOM_SETTER, changeToBackingFieldFactory);
add(Errors.INITIALIZATION_USING_BACKING_FIELD_OPEN_SETTER, changeToBackingFieldFactory);
ImplementMethodsHandler implementMethodsHandler = new ImplementMethodsHandler();
actionMap.put(Errors.ABSTRACT_MEMBER_NOT_IMPLEMENTED, implementMethodsHandler);
@@ -35,7 +35,7 @@ public class RemoveModifierFix {
if (isRedundant) {
return JetBundle.message("remove.redundant.modifier", modifier.getValue());
}
if (element != null && modifier == JetTokens.ABSTRACT_KEYWORD || modifier == JetTokens.OPEN_KEYWORD) {
if (element != null && (modifier == JetTokens.ABSTRACT_KEYWORD || modifier == JetTokens.OPEN_KEYWORD)) {
return JetBundle.message("make.element.not.modifier", AddModifierFix.getElementName(element), modifier.getValue());
}
return JetBundle.message("remove.modifier", modifier.getValue());
+2 -2
View File
@@ -14,7 +14,7 @@
class Test() {
var a : Int = 111
var b : Int get() = <error>$a</error>; set(x) {a = x; <error>$a</error> = x}
var b : Int get() = $a; set(x) {a = x; $a = x}
this(i : Int) : this() {
<error>$b</error> = $a
@@ -22,7 +22,7 @@ class Test() {
a = <error>$b</error>
}
fun f() {
<error>$b</error> = <error>$a</error>
<error>$b</error> = $a
a = <error>$b</error>
}
}
@@ -1,6 +1,7 @@
// "Change reference to backing field" "true"
class A() {
val a : Int
var a : Int
set(v) {}
{
<caret>$a = 1
}
@@ -1,7 +1,8 @@
// "Change reference to backing field" "true"
public open class Identifier() {
var field : Boolean
set(v) {}
{
<caret>$field = false;
<caret>this.$field = false;
}
}
@@ -1,6 +1,7 @@
// "Change reference to backing field" "true"
class A() {
val a : Int
var a : Int
set(v) {}
{
<caret>a = 1
}
@@ -1,6 +1,7 @@
// "Change reference to backing field" "true"
public open class Identifier() {
var field : Boolean
set(v) {}
{
<caret>this.field = false;
}