diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ConvertClassToKClassFixFactories.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ConvertClassToKClassFixFactories.kt index 7f3d564a6e30..60fc160fb493 100644 --- a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ConvertClassToKClassFixFactories.kt +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ConvertClassToKClassFixFactories.kt @@ -33,10 +33,10 @@ internal object ConvertClassToKClassFixFactories { private fun KaSession.createFixIfAvailable(element: PsiElement?, expectedType: KaType): ConvertClassToKClassFix? { val dotQualifiedExpression = element as? KtDotQualifiedExpression ?: return null - if (!expectedType.isKClass()) return null + if (!isKClass(expectedType)) return null val expressionType = dotQualifiedExpression.expressionType ?: return null - if (!expressionType.isJavaClass()) return null + if (!isJavaClass(expressionType)) return null val children = dotQualifiedExpression.children if (children.size != 2) return null @@ -48,10 +48,7 @@ internal object ConvertClassToKClassFixFactories { return ConvertClassToKClassFix(dotQualifiedExpression) } - - context(KaSession) - private fun KaType.isKClass(): Boolean = isClassType(StandardClassIds.KClass) - - context(KaSession) - private fun KaType.isJavaClass(): Boolean = isClassType(ClassId.fromString("java/lang/Class")) } + +internal fun KaSession.isKClass(type: KaType): Boolean = type.isClassType(StandardClassIds.KClass) +internal fun KaSession.isJavaClass(type: KaType): Boolean = type.isClassType(ClassId.fromString("java/lang/Class")) \ No newline at end of file diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ConvertKClassToClassFixFactories.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ConvertKClassToClassFixFactories.kt new file mode 100644 index 000000000000..3dd932675ca6 --- /dev/null +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/ConvertKClassToClassFixFactories.kt @@ -0,0 +1,53 @@ +// 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 com.intellij.psi.PsiElement +import org.jetbrains.kotlin.analysis.api.KaSession +import org.jetbrains.kotlin.analysis.api.fir.diagnostics.KaFirDiagnostic +import org.jetbrains.kotlin.analysis.api.types.KaType +import org.jetbrains.kotlin.idea.codeinsight.api.applicators.fixes.KotlinQuickFixFactory +import org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +import org.jetbrains.kotlin.psi.KtExpression +import org.jetbrains.kotlin.psi.KtProperty +import org.jetbrains.kotlin.psi.KtPsiFactory + +internal object ConvertKClassToClassFixFactories { + + val argumentTypeMismatchFixFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.ArgumentTypeMismatch -> + listOfNotNull( + createFixIfAvailable(diagnostic.psi, diagnostic.expectedType, diagnostic.actualType) + ) + } + + val returnTypeMismatchFixFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.ReturnTypeMismatch -> + listOfNotNull( + createFixIfAvailable(diagnostic.psi, diagnostic.expectedType, diagnostic.actualType) + ) + } + + val initializerTypeMismatchFixFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.InitializerTypeMismatch -> + listOfNotNull( + createFixIfAvailable((diagnostic.psi as? KtProperty)?.initializer, diagnostic.expectedType, diagnostic.actualType) + ) + } + + val assignmentTypeMismatchFixFactory = KotlinQuickFixFactory.ModCommandBased { diagnostic: KaFirDiagnostic.AssignmentTypeMismatch -> + listOfNotNull( + createFixIfAvailable(diagnostic.psi, diagnostic.expectedType, diagnostic.actualType) + ) + } + + private fun KaSession.createFixIfAvailable( + element: PsiElement?, + expectedType: KaType, + actualType: KaType, + ): ConvertKClassToClassFix? { + if (element !is KtExpression) return null + if (!isKClass(actualType) || !isJavaClass(expectedType)) return null + val codeFragment = KtPsiFactory(element.project).createExpressionCodeFragment(element.text + ".java", element) + val contentElement = codeFragment.getContentElement() ?: return null + val javaLangClassType = contentElement.expressionType ?: return null + if (!javaLangClassType.isSubtypeOf(expectedType)) return null + return ConvertKClassToClassFix(element) + } +} diff --git a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt index b96887d9cbae..d09a3508fe14 100644 --- a/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt +++ b/plugins/kotlin/code-insight/fixes-k2/src/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/KotlinK2QuickFixRegistrar.kt @@ -175,6 +175,10 @@ class KotlinK2QuickFixRegistrar : KotlinQuickFixRegistrar() { registerFactory(DeclarationCantBeInlinedFixFactories.removeOpenModifierFixFactory) registerFactory(WrongAnnotationTargetFixFactories.addAnnotationUseSiteTargetFixFactory) registerFactory(FinalUpperBoundFixFactories.inlineTypeParameterFixFactory) + registerFactory(ConvertKClassToClassFixFactories.argumentTypeMismatchFixFactory) + registerFactory(ConvertKClassToClassFixFactories.assignmentTypeMismatchFixFactory) + registerFactory(ConvertKClassToClassFixFactories.initializerTypeMismatchFixFactory) + registerFactory(ConvertKClassToClassFixFactories.returnTypeMismatchFixFactory) } private val addAbstract = KtQuickFixesListBuilder.registerPsiQuickFix { diff --git a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java index b0867eb85ffb..fda92ce842d5 100644 --- a/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java +++ b/plugins/kotlin/code-insight/fixes-k2/tests/test/org/jetbrains/kotlin/idea/k2/codeinsight/fixes/HighLevelQuickFixTestGenerated.java @@ -4159,6 +4159,55 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu } } + @RunWith(JUnit3RunnerWithInners.class) + @TestMetadata("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass") + public static class ConvertKClassToJavaClass 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("argument.kt") + public void testArgument() throws Exception { + runTest("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt"); + } + + @TestMetadata("argumentVariable.kt") + public void testArgumentVariable() throws Exception { + runTest("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt"); + } + + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt"); + } + + @TestMetadata("initializer.kt") + public void testInitializer() throws Exception { + runTest("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt"); + } + + @TestMetadata("return.kt") + public void testReturn() throws Exception { + runTest("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt"); + } + + @TestMetadata("subtype.kt") + public void testSubtype() throws Exception { + runTest("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/subtype.kt"); + } + + @TestMetadata("typeMismatch.kt") + public void testTypeMismatch() throws Exception { + runTest("../../../idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/typeMismatch.kt"); + } + } + @RunWith(JUnit3RunnerWithInners.class) @TestMetadata("../../../idea/tests/testData/quickfix/typeMismatch/incompatibleTypes") public static class IncompatibleTypes extends AbstractHighLevelQuickFixTest { @@ -4495,26 +4544,6 @@ public abstract class HighLevelQuickFixTestGenerated extends AbstractHighLevelQu runTest("../../../idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/char.kt"); } - @TestMetadata("convertKClassToJavaClass.kt") - public void testConvertKClassToJavaClass() throws Exception { - runTest("../../../idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt"); - } - - @TestMetadata("convertKClassToJavaClassSubtype.kt") - public void testConvertKClassToJavaClassSubtype() throws Exception { - runTest("../../../idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassSubtype.kt"); - } - - @TestMetadata("convertKClassToJavaClassTypeMismatch.kt") - public void testConvertKClassToJavaClassTypeMismatch() throws Exception { - runTest("../../../idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassTypeMismatch.kt"); - } - - @TestMetadata("convertKClassToJavaClassVariable.kt") - public void testConvertKClassToJavaClassVariable() throws Exception { - runTest("../../../idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt"); - } - @TestMetadata("genericType.kt") public void testGenericType() throws Exception { runTest("../../../idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/genericType.kt"); diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java index 0c9b19a76598..76d6e99217d3 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/K1QuickFixTestGenerated.java @@ -17887,6 +17887,55 @@ public abstract class K1QuickFixTestGenerated extends AbstractK1QuickFixTest { } } + @RunWith(JUnit3RunnerWithInners.class) + @TestMetadata("testData/quickfix/typeMismatch/convertKClassToJavaClass") + public static class ConvertKClassToJavaClass extends AbstractK1QuickFixTest { + @java.lang.Override + @org.jetbrains.annotations.NotNull + public final KotlinPluginMode getPluginMode() { + return KotlinPluginMode.K1; + } + + private void runTest(String testDataFilePath) throws Exception { + KotlinTestUtils.runTest(this::doTest, this, testDataFilePath); + } + + @TestMetadata("argument.kt") + public void testArgument() throws Exception { + runTest("testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt"); + } + + @TestMetadata("argumentVariable.kt") + public void testArgumentVariable() throws Exception { + runTest("testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt"); + } + + @TestMetadata("assignment.kt") + public void testAssignment() throws Exception { + runTest("testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt"); + } + + @TestMetadata("initializer.kt") + public void testInitializer() throws Exception { + runTest("testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt"); + } + + @TestMetadata("return.kt") + public void testReturn() throws Exception { + runTest("testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt"); + } + + @TestMetadata("subtype.kt") + public void testSubtype() throws Exception { + runTest("testData/quickfix/typeMismatch/convertKClassToJavaClass/subtype.kt"); + } + + @TestMetadata("typeMismatch.kt") + public void testTypeMismatch() throws Exception { + runTest("testData/quickfix/typeMismatch/convertKClassToJavaClass/typeMismatch.kt"); + } + } + @RunWith(JUnit3RunnerWithInners.class) @TestMetadata("testData/quickfix/typeMismatch/definitelyNonNullableTypes") public static class DefinitelyNonNullableTypes extends AbstractK1QuickFixTest { @@ -18301,26 +18350,6 @@ public abstract class K1QuickFixTestGenerated extends AbstractK1QuickFixTest { runTest("testData/quickfix/typeMismatch/parameterTypeMismatch/char.kt"); } - @TestMetadata("convertKClassToJavaClass.kt") - public void testConvertKClassToJavaClass() throws Exception { - runTest("testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt"); - } - - @TestMetadata("convertKClassToJavaClassSubtype.kt") - public void testConvertKClassToJavaClassSubtype() throws Exception { - runTest("testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassSubtype.kt"); - } - - @TestMetadata("convertKClassToJavaClassTypeMismatch.kt") - public void testConvertKClassToJavaClassTypeMismatch() throws Exception { - runTest("testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassTypeMismatch.kt"); - } - - @TestMetadata("convertKClassToJavaClassVariable.kt") - public void testConvertKClassToJavaClassVariable() throws Exception { - runTest("testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt"); - } - @TestMetadata("genericType.kt") public void testGenericType() throws Exception { runTest("testData/quickfix/typeMismatch/parameterTypeMismatch/genericType.kt"); diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt similarity index 67% rename from plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt rename to plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt index c698ff707268..795cecde8120 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt @@ -6,5 +6,5 @@ fun main() { } fun acceptClass(cls: Class<*>) = Unit -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt.after similarity index 67% rename from plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt.after rename to plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt.after index 7b0eb78aaaef..f883250bb2b1 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClass.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argument.kt.after @@ -6,5 +6,5 @@ fun main() { } fun acceptClass(cls: Class<*>) = Unit -/* IGNORE_K2 */ -// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt similarity index 75% rename from plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt rename to plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt index 8852139528a2..e2c13a6a966b 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt @@ -9,4 +9,4 @@ fun main() { fun acceptClass(cls: Class<*>) = Unit // FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix -/* IGNORE_K2 */ \ No newline at end of file +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt.after similarity index 75% rename from plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt.after rename to plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt.after index 8e88ecc2797d..dccc41564858 100644 --- a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassVariable.kt.after +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/argumentVariable.kt.after @@ -9,4 +9,4 @@ fun main() { fun acceptClass(cls: Class<*>) = Unit // FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix -/* IGNORE_K2 */ \ No newline at end of file +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt new file mode 100644 index 000000000000..85ce56cdd91f --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt @@ -0,0 +1,11 @@ +// "Convert 'KClass' to 'Class'" "true" +// WITH_STDLIB + +fun foo() { + val clazz = String::class + val cls: Class<*> + cls = clazz +} + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt.after new file mode 100644 index 000000000000..a96f2fdcf97c --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/assignment.kt.after @@ -0,0 +1,11 @@ +// "Convert 'KClass' to 'Class'" "true" +// WITH_STDLIB + +fun foo() { + val clazz = String::class + val cls: Class<*> + cls = clazz.java +} + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt new file mode 100644 index 000000000000..9056ee589706 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt @@ -0,0 +1,9 @@ +// "Convert 'KClass' to 'Class'" "true" +// WITH_STDLIB + +fun foo() { + val cls: Class<*> = String::class +} + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt.after new file mode 100644 index 000000000000..91061f1e6d77 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/initializer.kt.after @@ -0,0 +1,9 @@ +// "Convert 'KClass' to 'Class'" "true" +// WITH_STDLIB + +fun foo() { + val cls: Class<*> = String::class.java +} + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt new file mode 100644 index 000000000000..d75199019d00 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt @@ -0,0 +1,11 @@ +// "Convert 'KClass' to 'Class'" "true" +// WITH_STDLIB + +fun foo(): Class<*> { + return Foo::class +} + +class Foo + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt.after b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt.after new file mode 100644 index 000000000000..587a411d7372 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/return.kt.after @@ -0,0 +1,11 @@ +// "Convert 'KClass' to 'Class'" "true" +// WITH_STDLIB + +fun foo(): Class<*> { + return Foo::class.java +} + +class Foo + +// FUS_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix +// FUS_K2_QUICKFIX_NAME: org.jetbrains.kotlin.idea.quickfix.ConvertKClassToClassFix \ No newline at end of file diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassSubtype.kt b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/subtype.kt similarity index 100% rename from plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassSubtype.kt rename to plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/subtype.kt diff --git a/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassTypeMismatch.kt b/plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/typeMismatch.kt similarity index 100% rename from plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/parameterTypeMismatch/convertKClassToJavaClassTypeMismatch.kt rename to plugins/kotlin/idea/tests/testData/quickfix/typeMismatch/convertKClassToJavaClass/typeMismatch.kt diff --git a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt index 7c7c4168ab1e..cb8d8f8105d2 100644 --- a/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt +++ b/plugins/kotlin/util/test-generator-fir/test/org/jetbrains/kotlin/fir/testGenerator/codeinsight/GenerateK2QuickFixTests.kt @@ -49,6 +49,7 @@ internal fun MutableTWorkspace.generateK2FixTests() { model("$idea/quickfix/typeAddition", pattern = pattern) model("$idea/quickfix/typeMismatch/casts", pattern = pattern) model("$idea/quickfix/typeMismatch/componentFunctionReturnTypeMismatch", pattern = pattern) + model("$idea/quickfix/typeMismatch/convertKClassToJavaClass", pattern = pattern) model("$idea/quickfix/typeMismatch/incompatibleTypes", pattern = pattern) model("$idea/quickfix/typeMismatch/numberConversion", pattern = pattern) model("$idea/quickfix/typeMismatch/parameterTypeMismatch", pattern = pattern)