[kotlin] k2: Make "Make open" quick fix work from Java code

^KTIJ-26318

GitOrigin-RevId: 25d67416b5ab5560080a9496cae9589b07c1b6dd
This commit is contained in:
Andrey Cherkasov
2024-05-15 11:46:02 +00:00
committed by intellij-monorepo-bot
parent 3755acff68
commit 34a29f53df
7 changed files with 33 additions and 0 deletions
@@ -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");
@@ -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<IntentionAction> {
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<IntentionAction> {
if (targetClass is PsiElement && !BaseIntentionAction.canModify(targetClass)) return emptyList()
var container = targetClass.toKtClassOrFile() ?: return emptyList()
@@ -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");
@@ -0,0 +1,2 @@
// "Make 'BaseClass' 'open'" "true"
class ChildClass extends BaseClass<selection><caret></selection> {}
@@ -0,0 +1,2 @@
// "Make 'BaseClass' 'open'" "true"
class ChildClass extends BaseClass<caret> {}