mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
[kotlin] K2ElementActionsFactory: provide MakeFieldPublicFix in createChangeModifierActions
Unmute `K2JUnitMalformedDeclarationInspectionTestV57`. #KTIJ-32558 #KTIJ-30442 GitOrigin-RevId: 8dae92e575b033f2cd219e136d3180d2a3b7fd6d
This commit is contained in:
committed by
intellij-monorepo-bot
parent
46ff7ba496
commit
317e2b9aac
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -194,7 +194,16 @@ class K2ElementActionsFactory : JvmElementActionsFactory() {
|
||||
override fun createChangeModifierActions(target: JvmModifiersOwner, request: ChangeModifierRequest): List<IntentionAction> {
|
||||
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()
|
||||
)
|
||||
|
||||
@@ -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<KtProperty>(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"))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -33,5 +33,5 @@ class MakeFieldPublicFix(property: KtProperty) : KotlinQuickFixAction<KtProperty
|
||||
|
||||
override fun getText(): String = familyName
|
||||
|
||||
override fun getFamilyName(): String = element?.name?.let { KotlinBundle.message("fix.make.field.public", it) } ?: ""
|
||||
override fun getFamilyName(): String = element?.name?.let { KotlinBundle.message("fix.make.field.public.text", it) } ?: ""
|
||||
}
|
||||
Reference in New Issue
Block a user