diff --git a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixMultiFileTestGenerated.java b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixMultiFileTestGenerated.java index 63be81f75f07..0ce51221e684 100644 --- a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixMultiFileTestGenerated.java +++ b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixMultiFileTestGenerated.java @@ -980,6 +980,11 @@ public abstract class HighLevelQuickFixMultiFileTestGenerated extends AbstractHi KotlinTestUtils.runTest(this::doTestWithExtraFile, this, testDataFilePath); } + @TestMetadata("extendsFromJava.before.Main.java") + public void testExtendsFromJava() throws Exception { + runTest("../../../idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Main.java"); + } + @TestMetadata("finalJavaSupertype.before.Main.kt") public void testFinalJavaSupertype() throws Exception { runTest("../../../idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaSupertype.before.Main.kt"); 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 114bc0c3bb45..c9be3bc65284 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 @@ -4,18 +4,35 @@ package org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.impl.BaseIntentionAction import com.intellij.lang.jvm.JvmClass +import com.intellij.lang.jvm.JvmModifier +import com.intellij.lang.jvm.JvmModifiersOwner +import com.intellij.lang.jvm.actions.ChangeModifierRequest import com.intellij.lang.jvm.actions.CreateMethodRequest import com.intellij.lang.jvm.actions.JvmElementActionsFactory import com.intellij.psi.PsiElement import com.intellij.psi.createSmartPointer +import org.jetbrains.kotlin.asJava.unwrapped import org.jetbrains.kotlin.idea.base.resources.KotlinBundle import org.jetbrains.kotlin.idea.k2.codeinsight.quickFixes.createFromUsage.K2CreateFromUsageUtil.toKtClassOrFile +import org.jetbrains.kotlin.idea.quickfix.AddModifierFix import org.jetbrains.kotlin.idea.refactoring.isAbstract import org.jetbrains.kotlin.idea.refactoring.isInterfaceClass +import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.KtClassOrObject import org.jetbrains.kotlin.psi.KtElement +import org.jetbrains.kotlin.psi.KtModifierListOwner 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()) return emptyList() + + return listOf( + AddModifierFix(kModifierOwner, KtTokens.OPEN_KEYWORD) + ) + } + override fun createAddMethodActions(targetClass: JvmClass, request: CreateMethodRequest): List { if (targetClass is PsiElement && !BaseIntentionAction.canModify(targetClass)) return emptyList() var container = targetClass.toKtClassOrFile() ?: return emptyList() diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java index f0374e3c814c..c5d67591c7c8 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiFileTestGenerated.java @@ -2156,6 +2156,11 @@ public abstract class QuickFixMultiFileTestGenerated extends AbstractQuickFixMul KotlinTestUtils.runTest(this::doTestWithExtraFile, this, testDataFilePath); } + @TestMetadata("extendsFromJava.before.Main.java") + public void testExtendsFromJava() throws Exception { + runTest("testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Main.java"); + } + @TestMetadata("finalJavaSupertype.before.Main.kt") public void testFinalJavaSupertype() throws Exception { runTest("testData/quickfix/modifiers/addOpenToClassDeclaration/finalJavaSupertype.before.Main.kt"); diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.after.Dependency.kt b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.after.Dependency.kt new file mode 100644 index 000000000000..3ffa2adbf309 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.after.Dependency.kt @@ -0,0 +1 @@ +open class BaseClass \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.after.java b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.after.java new file mode 100644 index 000000000000..903d4b93c7fa --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.after.java @@ -0,0 +1,2 @@ +// "Make 'BaseClass' 'open'" "true" +class ChildClass extends BaseClass {} \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Dependency.kt b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Dependency.kt new file mode 100644 index 000000000000..93c9d4757907 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Dependency.kt @@ -0,0 +1 @@ +class BaseClass \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Main.java b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Main.java new file mode 100644 index 000000000000..3a5c575ac500 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/modifiers/addOpenToClassDeclaration/extendsFromJava.before.Main.java @@ -0,0 +1,2 @@ +// "Make 'BaseClass' 'open'" "true" +class ChildClass extends BaseClass {} \ No newline at end of file