[kotlin] Add quickfix for VOLATILE_ON_VALUE to change property to 'var'

^KTIJ-29263 Fixed

closes https://github.com/JetBrains/intellij-community/pull/2732

GitOrigin-RevId: 256660744ba207d04cbbf2ab769a7e8697184450
This commit is contained in:
Toshiaki Kameyama
2024-04-01 11:01:11 +00:00
committed by intellij-monorepo-bot
parent 9414c123b8
commit 231999e1da
8 changed files with 58 additions and 0 deletions
@@ -168,6 +168,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() {
KtFirDiagnostic.MustBeInitializedOrFinalOrAbstractWarning::class,
ChangeVariableMutabilityFix.MUST_BE_INITIALIZED_FACTORY
)
registerPsiQuickFixes(KtFirDiagnostic.VolatileOnValue::class, ChangeVariableMutabilityFix.VOLATILE_ON_VALUE_FACTORY)
}
private val expressions = KtQuickFixesListBuilder.registerPsiQuickFix {
@@ -2908,6 +2908,16 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu
public void testVarAnnotationParameter() throws Exception {
runTest("../../../idea/tests/testData/quickfix/variables/changeMutability/varAnnotationParameter.kt");
}
@TestMetadata("volatileOnValue.kt")
public void testVolatileOnValue() throws Exception {
runTest("../../../idea/tests/testData/quickfix/variables/changeMutability/volatileOnValue.kt");
}
@TestMetadata("volatileOnValueLocal.kt")
public void testVolatileOnValueLocal() throws Exception {
runTest("../../../idea/tests/testData/quickfix/variables/changeMutability/volatileOnValueLocal.kt");
}
}
@RunWith(JUnit3RunnerWithInners.class)
@@ -109,5 +109,13 @@ class ChangeVariableMutabilityFix(
if (getter.hasBlockBody() && property.typeReference == null) return@quickFixesPsiBasedFactory emptyList()
listOf(ChangeVariableMutabilityFix(property, makeVar = false))
}
val VOLATILE_ON_VALUE_FACTORY: QuickFixesPsiBasedFactory<KtAnnotationEntry> =
quickFixesPsiBasedFactory { annotationEntry: KtAnnotationEntry ->
val modifierList = annotationEntry.parent as? KtDeclarationModifierList ?: return@quickFixesPsiBasedFactory emptyList()
val property = modifierList.parent as? KtProperty ?: return@quickFixesPsiBasedFactory emptyList()
if (!property.isWritable || property.isLocal) return@quickFixesPsiBasedFactory emptyList()
listOf(ChangeVariableMutabilityFix(property, makeVar = true))
}
}
}
@@ -799,5 +799,7 @@ class QuickFixRegistrar : QuickFixContributor {
NON_DATA_CLASS_JVM_RECORD.registerFactory(AddModifierFixFE10.createFactory(DATA_KEYWORD))
RETURN_IN_FUNCTION_WITH_EXPRESSION_BODY.registerFactory(ConvertToBlockBodyFixFactory)
VOLATILE_ON_VALUE.registerFactory(ChangeVariableMutabilityFix.VOLATILE_ON_VALUE_FACTORY)
}
}
@@ -17640,6 +17640,16 @@ public abstract class K1QuickFixTestGenerated extends AbstractK1QuickFixTest {
public void testVarAnnotationParameter() throws Exception {
runTest("testData/quickfix/variables/changeMutability/varAnnotationParameter.kt");
}
@TestMetadata("volatileOnValue.kt")
public void testVolatileOnValue() throws Exception {
runTest("testData/quickfix/variables/changeMutability/volatileOnValue.kt");
}
@TestMetadata("volatileOnValueLocal.kt")
public void testVolatileOnValueLocal() throws Exception {
runTest("testData/quickfix/variables/changeMutability/volatileOnValueLocal.kt");
}
}
}
@@ -0,0 +1,9 @@
// "Change to 'var'" "true"
// WITH_STDLIB
class Foo {
<caret>@Volatile
val bar: String = ""
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix
@@ -0,0 +1,9 @@
// "Change to 'var'" "true"
// WITH_STDLIB
class Foo {
@Volatile
var bar: String = ""
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.codeinsights.impl.base.quickFix.ChangeVariableMutabilityFix
@@ -0,0 +1,9 @@
// "Change to 'var'" "false"
// ERROR: This annotation is not applicable to target 'local variable'
// WITH_STDLIB
class Foo {
fun foo() {
<caret>@Volatile
val bar: String = ""
}
}