Change Variable Mutability Quick-Fix: Forbid on non-primary-constructor parameters
#KT-10601 Fixed
This commit is contained in:
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.diagnostics.Diagnostic
|
|||||||
import org.jetbrains.kotlin.diagnostics.Errors
|
import org.jetbrains.kotlin.diagnostics.Errors
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
import org.jetbrains.kotlin.lexer.KtTokens
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
|
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
|
|
||||||
class ChangeVariableMutabilityFix(element: KtNamedDeclaration, private val makeVar: Boolean) : KotlinQuickFixAction<KtNamedDeclaration>(element) {
|
class ChangeVariableMutabilityFix(element: KtNamedDeclaration, private val makeVar: Boolean) : KotlinQuickFixAction<KtNamedDeclaration>(element) {
|
||||||
@@ -35,7 +36,9 @@ class ChangeVariableMutabilityFix(element: KtNamedDeclaration, private val makeV
|
|||||||
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
|
override fun isAvailable(project: Project, editor: Editor?, file: PsiFile): Boolean {
|
||||||
return when (element) {
|
return when (element) {
|
||||||
is KtProperty -> element.isVar != makeVar
|
is KtProperty -> element.isVar != makeVar
|
||||||
is KtParameter -> (element.valOrVarKeyword == KtTokens.VAR_KEYWORD) != makeVar
|
is KtParameter ->
|
||||||
|
element.getStrictParentOfType<KtPrimaryConstructor>()?.valueParameterList == element.parent
|
||||||
|
&& (element.valOrVarKeyword == KtTokens.VAR_KEYWORD) != makeVar
|
||||||
else -> false
|
else -> false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
// "Make variable mutable" "false"
|
||||||
|
// ERROR: Val cannot be reassigned
|
||||||
|
fun fun1(i: Int) {
|
||||||
|
<caret>i = 2
|
||||||
|
}
|
||||||
@@ -7460,6 +7460,12 @@ public class QuickFixTestGenerated extends AbstractQuickFixTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/variables/changeMutability"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/quickfix/variables/changeMutability"), Pattern.compile("^([\\w\\-_]+)\\.kt$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("funParameter.kt")
|
||||||
|
public void testFunParameter() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/variables/changeMutability/funParameter.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("localInGetter.kt")
|
@TestMetadata("localInGetter.kt")
|
||||||
public void testLocalInGetter() throws Exception {
|
public void testLocalInGetter() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/variables/changeMutability/localInGetter.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/quickfix/variables/changeMutability/localInGetter.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user