[kotlin] Port AddJvmStaticAnnotationFix to K2

^KTIJ-29549

GitOrigin-RevId: 0348c83d1586fc3287ba61b37d6addbca8f7bbbb
This commit is contained in:
Andrey Cherkasov
2024-07-30 10:52:16 +00:00
committed by intellij-monorepo-bot
parent b06ae5833a
commit 1264247d84
10 changed files with 66 additions and 15 deletions
@@ -138,6 +138,7 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() {
registerFactory(MisplacedTypeParameterConstraintsFixFactory.moveConstraintToWhereClause)
registerFactory(AbstractFunctionWithBodyFixFactory.removeFunctionBody)
registerFactory(SenselessNullInWhenFixFactory.removeCondition)
registerFactory(SubclassCantCallCompanionProtectedNonStaticFixFactory.addJvmStaticAnnotation)
}
private val addAbstract = KtQuickFixesListBuilder.registerPsiQuickFix {
@@ -0,0 +1,18 @@
// Copyright 2000-2024 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.fixes
import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic
import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory
import org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
internal object SubclassCantCallCompanionProtectedNonStaticFixFactory {
val addJvmStaticAnnotation = KotlinQuickFixFactory.IntentionBased { diagnostic: KaFirDiagnostic.SubclassCantCallCompanionProtectedNonStatic ->
val nameReference = diagnostic.psi as? KtNameReferenceExpression ?: return@IntentionBased emptyList()
listOfNotNull(
AddJvmStaticAnnotationFix.createIfApplicable(nameReference)
)
}
}
@@ -6112,7 +6112,29 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu
}
}
@RunWith(JUnit3RunnerWithInners.class)
@TestMetadata("../../../idea/tests/testData/quickfix/addJvmStaticAnnotation")
public static class AddJvmStaticAnnotation extends AbstractHighLevelQuickFixTest {
@java.lang.Override
@org.jetbrains.annotations.NotNull
public final KotlinPluginMode getPluginMode() {
return KotlinPluginMode.K2;
}
private void runTest(String testDataFilePath) throws Exception {
KotlinTestUtils.runTest(this::doTest, this, testDataFilePath);
}
@TestMetadata("function.kt")
public void testFunction() throws Exception {
runTest("../../../idea/tests/testData/quickfix/addJvmStaticAnnotation/function.kt");
}
@TestMetadata("property.kt")
public void testProperty() throws Exception {
runTest("../../../idea/tests/testData/quickfix/addJvmStaticAnnotation/property.kt");
}
}
@@ -1,9 +1,13 @@
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
package org.jetbrains.kotlin.idea.quickfix
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtProperty
class AddJvmStaticAnnotationFix(declaration: KtCallableDeclaration) : AddAnnotationFix(
declaration,
@@ -11,4 +15,15 @@ class AddJvmStaticAnnotationFix(declaration: KtCallableDeclaration) : AddAnnotat
Kind.Declaration(declaration.nameAsSafeName.asString())
) {
override fun getFamilyName(): String = text
companion object {
fun createIfApplicable(element: KtNameReferenceExpression): AddJvmStaticAnnotationFix? {
val resolved = element.mainReference.resolve() ?: return null
return if (resolved is KtProperty || resolved is KtNamedFunction) {
AddJvmStaticAnnotationFix(resolved as KtCallableDeclaration)
} else {
null
}
}
}
}
@@ -3,20 +3,11 @@ package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.psi.KtCallableDeclaration
import org.jetbrains.kotlin.psi.KtNameReferenceExpression
import org.jetbrains.kotlin.psi.KtNamedFunction
import org.jetbrains.kotlin.psi.KtProperty
internal object AddJvmStaticAnnotationFixFactory : KotlinSingleIntentionActionFactory() {
override fun createAction(diagnostic: Diagnostic): IntentionAction? {
val nameReference = diagnostic.psiElement as? KtNameReferenceExpression ?: return null
val resolved = nameReference.mainReference.resolve() ?: return null
return if (resolved is KtProperty || resolved is KtNamedFunction) {
AddJvmStaticAnnotationFix(resolved as KtCallableDeclaration)
} else {
null
}
return AddJvmStaticAnnotationFix.createIfApplicable(nameReference)
}
}
@@ -12,4 +12,5 @@ class B : A() {
}
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
@@ -13,4 +13,5 @@ class B : A() {
}
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
@@ -12,4 +12,5 @@ class B : A() {
}
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
@@ -13,4 +13,5 @@ class B : A() {
}
}
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.AddJvmStaticAnnotationFix
@@ -76,7 +76,7 @@ internal fun MutableTWorkspace.generateK2FixTests() {
model("$idea/quickfix/addInlineToReifiedFunctionFix", pattern = pattern)
model("$idea/quickfix/addIsToWhenCondition", pattern = pattern)
model("$idea/quickfix/addJvmInline", pattern = pattern)
model("$idea/quickfix/addJvmStaticAnnotation", pattern = pattern, isIgnored = true)
model("$idea/quickfix/addJvmStaticAnnotation", pattern = pattern)
model("$idea/quickfix/addNewLineAfterAnnotations", pattern = pattern, isIgnored = true)
model("$idea/quickfix/addNoinline", pattern = pattern)
model("$idea/quickfix/addReifiedToTypeParameterOfFunctionFix", pattern = pattern)