diff --git a/plugins/junit/kotlin-tests-k2/test/com/intellij/execution/junit/kotlin/codeInspection/K2JUnitMalformedDeclarationInspectionTest.kt b/plugins/junit/kotlin-tests-k2/test/com/intellij/execution/junit/kotlin/codeInspection/K2JUnitMalformedDeclarationInspectionTest.kt index a9442d730598..9b16c266d7a3 100644 --- a/plugins/junit/kotlin-tests-k2/test/com/intellij/execution/junit/kotlin/codeInspection/K2JUnitMalformedDeclarationInspectionTest.kt +++ b/plugins/junit/kotlin-tests-k2/test/com/intellij/execution/junit/kotlin/codeInspection/K2JUnitMalformedDeclarationInspectionTest.kt @@ -5,8 +5,6 @@ import com.intellij.idea.IgnoreJUnit3 import org.jetbrains.kotlin.idea.base.plugin.KotlinPluginMode import org.junit.Ignore -@IgnoreJUnit3 -@Ignore class K2JUnitMalformedDeclarationInspectionTestV57 : KotlinJUnitMalformedDeclarationInspectionTestV57() { override val pluginMode: KotlinPluginMode = KotlinPluginMode.K2 } diff --git a/plugins/kotlin/base/resources/resources-en/messages/KotlinBundle.properties b/plugins/kotlin/base/resources/resources-en/messages/KotlinBundle.properties index 614eb41fe117..6e713814aebf 100644 --- a/plugins/kotlin/base/resources/resources-en/messages/KotlinBundle.properties +++ b/plugins/kotlin/base/resources/resources-en/messages/KotlinBundle.properties @@ -165,7 +165,8 @@ fix.add.modifier.text=Make {0} ''{1}'' fix.add.modifier.text.generic=Add ''{0}'' modifier fix.potentially.broken.inheritance.message=This Change Could Potentially Break the Inheritors -fix.make.field.public=Make field ''{0}'' public +fix.make.field.public.text=Make field ''{0}'' public +fix.make.field.public.family=Make field public fix.add.argument.name.family=Add name to argument fix.add.argument.name.text.generic=Add name to argument\u2026 diff --git a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickFixes/createFromUsage/K2ElementActionsFactory.kt b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickFixes/createFromUsage/K2ElementActionsFactory.kt index 4fe198181893..d92b4f9f7deb 100644 --- a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickFixes/createFromUsage/K2ElementActionsFactory.kt +++ b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickFixes/createFromUsage/K2ElementActionsFactory.kt @@ -194,7 +194,16 @@ class K2ElementActionsFactory : JvmElementActionsFactory() { override fun createChangeModifierActions(target: JvmModifiersOwner, request: ChangeModifierRequest): List { val kModifierOwner = target.sourceElement?.unwrapped as? KtModifierListOwner ?: return emptyList() - if (request.modifier == JvmModifier.FINAL && !request.shouldBePresent()) { + val modifier = request.modifier + val shouldPresent = request.shouldBePresent() + + if (modifier == JvmModifier.PUBLIC && shouldPresent && kModifierOwner is KtProperty) { + return listOf( + MakeFieldPublicFix(kModifierOwner).asIntention() + ) + } + + if (modifier == JvmModifier.FINAL && !shouldPresent) { return listOf( AddModifierFix(kModifierOwner, KtTokens.OPEN_KEYWORD).asIntention() ) diff --git a/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickFixes/createFromUsage/MakeFieldPublicFix.kt b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickFixes/createFromUsage/MakeFieldPublicFix.kt new file mode 100644 index 000000000000..42ab5a8bd9d8 --- /dev/null +++ b/plugins/kotlin/code-insight/kotlin.code-insight.k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/quickFixes/createFromUsage/MakeFieldPublicFix.kt @@ -0,0 +1,46 @@ +// Copyright 2000-2025 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage + +import com.intellij.modcommand.ActionContext +import com.intellij.modcommand.ModPsiUpdater +import com.intellij.modcommand.Presentation +import com.intellij.modcommand.PsiUpdateModCommandAction +import com.intellij.psi.util.elementType +import org.jetbrains.kotlin.idea.base.analysis.api.utils.shortenReferences +import org.jetbrains.kotlin.idea.base.psi.KotlinPsiHeuristics +import org.jetbrains.kotlin.idea.base.resources.KotlinBundle +import org.jetbrains.kotlin.lexer.KtModifierKeywordToken +import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.load.java.JvmAbi +import org.jetbrains.kotlin.psi.KtProperty +import org.jetbrains.kotlin.psi.KtPsiFactory +import org.jetbrains.kotlin.psi.psiUtil.visibilityModifier + +internal class MakeFieldPublicFix( + element: KtProperty, +) : PsiUpdateModCommandAction(element) { + + override fun getFamilyName(): String = + KotlinBundle.message("fix.make.field.public.family") + + override fun getPresentation(context: ActionContext, element: KtProperty): Presentation? { + val name = element.name ?: return null + return Presentation.of(KotlinBundle.message("fix.make.field.public.text", name)) + } + + override fun invoke( + context: ActionContext, + element: KtProperty, + updater: ModPsiUpdater, + ) { + val currentVisibilityModifier = element.visibilityModifier() + if (currentVisibilityModifier != null && currentVisibilityModifier.elementType != KtTokens.PUBLIC_KEYWORD) { + element.removeModifier(currentVisibilityModifier.elementType as KtModifierKeywordToken) + } + if (!KotlinPsiHeuristics.hasAnnotation(element, JvmAbi.JVM_FIELD_ANNOTATION_FQ_NAME.shortName())) { + shortenReferences( + element.addAnnotationEntry(KtPsiFactory(context.project).createAnnotationEntry("@kotlin.jvm.JvmField")) + ) + } + } +} diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeFieldPublicFix.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeFieldPublicFix.kt index 416ae67e618d..4ec492fe8cee 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeFieldPublicFix.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/quickfix/MakeFieldPublicFix.kt @@ -33,5 +33,5 @@ class MakeFieldPublicFix(property: KtProperty) : KotlinQuickFixAction