From a3ef9f9b505fb42d91ebdfb0d5902fa300aed57f Mon Sep 17 00:00:00 2001 From: svtk Date: Tue, 1 Nov 2011 19:00:57 +0400 Subject: [PATCH] Added 'change to backing field' fix --- .../org/jetbrains/jet/JetTestCaseBuilder.java | 5 +- .../jetbrains/jet/plugin/JetBundle.properties | 3 +- .../quickfix/ChangeToBackingFieldFix.java | 48 +++++++++++++++++++ .../jet/plugin/quickfix/QuickFixes.java | 2 + .../changeMutability}/afterValWithSetter.kt | 0 .../changeMutability}/beforeValWithSetter.kt | 0 .../changeToBackingField/afterBFRequired.kt | 7 +++ .../changeToBackingField/beforeBFRequired.kt | 7 +++ .../jet/plugin/quickfix/JetQuickFixTest.java | 2 +- 9 files changed, 69 insertions(+), 5 deletions(-) create mode 100644 idea/src/org/jetbrains/jet/plugin/quickfix/ChangeToBackingFieldFix.java rename idea/testData/quickfix/{changeVariableMutability => variables/changeMutability}/afterValWithSetter.kt (100%) rename idea/testData/quickfix/{changeVariableMutability => variables/changeMutability}/beforeValWithSetter.kt (100%) create mode 100644 idea/testData/quickfix/variables/changeToBackingField/afterBFRequired.kt create mode 100644 idea/testData/quickfix/variables/changeToBackingField/beforeBFRequired.kt diff --git a/compiler/tests/org/jetbrains/jet/JetTestCaseBuilder.java b/compiler/tests/org/jetbrains/jet/JetTestCaseBuilder.java index 05e88fb44e6..0698cdbac4b 100644 --- a/compiler/tests/org/jetbrains/jet/JetTestCaseBuilder.java +++ b/compiler/tests/org/jetbrains/jet/JetTestCaseBuilder.java @@ -56,8 +56,7 @@ public abstract class JetTestCaseBuilder { resultFilter = new FilenameFilter() { @Override public boolean accept(File file, String s) { - if (extensionFilter.accept(file, s) && filter.accept(file, s)) return true; - return false; + return extensionFilter.accept(file, s) && filter.accept(file, s); } }; } @@ -77,7 +76,7 @@ public abstract class JetTestCaseBuilder { List subdirs = Arrays.asList(files); Collections.sort(subdirs); for (File subdir : subdirs) { - suite.addTest(suiteForDirectory(baseDataDir, dataPath + "/" + subdir.getName(), recursive, factory)); + suite.addTest(suiteForDirectory(baseDataDir, dataPath + "/" + subdir.getName(), recursive, filter, factory)); } } List files = Arrays.asList(dir.listFiles(resultFilter)); diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index 7e6753c0757..ef9ad9587b6 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -23,4 +23,5 @@ remove.cast=Remove cast remove.elvis.operator=Remove elvis operator replace.operation.in.binary.expression=Replace operation in a binary expression replace.cast.with.static.assert=Replace a cast with a static assert -replace.with.dot.call=Replace with dot call \ No newline at end of file +replace.with.dot.call=Replace with dot call +change.to.backing.field=Change reference to backing field \ No newline at end of file diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeToBackingFieldFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeToBackingFieldFix.java new file mode 100644 index 00000000000..576661df8e1 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeToBackingFieldFix.java @@ -0,0 +1,48 @@ +package org.jetbrains.jet.plugin.quickfix; + +import com.intellij.openapi.editor.Editor; +import com.intellij.openapi.project.Project; +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.JetPsiFactory; +import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; +import org.jetbrains.jet.plugin.JetBundle; + +/** + * @author svtk + */ +public class ChangeToBackingFieldFix extends JetIntentionAction { + public ChangeToBackingFieldFix(@NotNull JetSimpleNameExpression element) { + super(element); + } + + @NotNull + @Override + public String getText() { + return JetBundle.message("change.to.backing.field"); + } + + @NotNull + @Override + public String getFamilyName() { + return JetBundle.message("change.to.backing.field"); + } + + @Override + public void invoke(@NotNull Project project, Editor editor, PsiFile file) throws IncorrectOperationException { + JetSimpleNameExpression backingField = (JetSimpleNameExpression) JetPsiFactory.createExpression(project, "$" + element.getText()); + element.replace(backingField); + } + + public static JetIntentionActionFactory createFactory() { + return new JetIntentionActionFactory() { + @Override + public JetIntentionAction createAction(DiagnosticWithPsiElement diagnostic) { + assert diagnostic.getPsiElement() instanceof JetSimpleNameExpression; + return new ChangeToBackingFieldFix((JetSimpleNameExpression) diagnostic.getPsiElement()); + } + }; + } +} diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java index 5c1e2c4a34f..b082ee4d1ae 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/QuickFixes.java @@ -105,5 +105,7 @@ 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()); } } \ No newline at end of file diff --git a/idea/testData/quickfix/changeVariableMutability/afterValWithSetter.kt b/idea/testData/quickfix/variables/changeMutability/afterValWithSetter.kt similarity index 100% rename from idea/testData/quickfix/changeVariableMutability/afterValWithSetter.kt rename to idea/testData/quickfix/variables/changeMutability/afterValWithSetter.kt diff --git a/idea/testData/quickfix/changeVariableMutability/beforeValWithSetter.kt b/idea/testData/quickfix/variables/changeMutability/beforeValWithSetter.kt similarity index 100% rename from idea/testData/quickfix/changeVariableMutability/beforeValWithSetter.kt rename to idea/testData/quickfix/variables/changeMutability/beforeValWithSetter.kt diff --git a/idea/testData/quickfix/variables/changeToBackingField/afterBFRequired.kt b/idea/testData/quickfix/variables/changeToBackingField/afterBFRequired.kt new file mode 100644 index 00000000000..b136e4ab85d --- /dev/null +++ b/idea/testData/quickfix/variables/changeToBackingField/afterBFRequired.kt @@ -0,0 +1,7 @@ +// "Change reference to backing field" "true" +class A() { + val a : Int + { + $a = 1 + } +} \ No newline at end of file diff --git a/idea/testData/quickfix/variables/changeToBackingField/beforeBFRequired.kt b/idea/testData/quickfix/variables/changeToBackingField/beforeBFRequired.kt new file mode 100644 index 00000000000..3c9b678fe9b --- /dev/null +++ b/idea/testData/quickfix/variables/changeToBackingField/beforeBFRequired.kt @@ -0,0 +1,7 @@ +// "Change reference to backing field" "true" +class A() { + val a : Int + { + a = 1 + } +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java index fcf4fc91077..2e0da1ea44c 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/JetQuickFixTest.java @@ -60,7 +60,7 @@ public class JetQuickFixTest extends LightQuickFixTestCase { List subDirs = Arrays.asList(quickFixTestsFilter != null ? dir.list(quickFixTestsFilter) : dir.list()); Collections.sort(subDirs); for (String subDirName : subDirs) { - suite.addTest(JetTestCaseBuilder.suiteForDirectory(getTestDataPathBase(), subDirName, false, fileNameFilter, namedTestFactory)); + suite.addTest(JetTestCaseBuilder.suiteForDirectory(getTestDataPathBase(), subDirName, true, fileNameFilter, namedTestFactory)); } return suite;