diff --git a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/CanSealedSubClassBeObjectInspection.kt b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/CanSealedSubClassBeObjectInspection.kt index 0cb7efeeeb89..d625fbe5608b 100644 --- a/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/CanSealedSubClassBeObjectInspection.kt +++ b/plugins/kotlin/idea/src/org/jetbrains/kotlin/idea/inspections/CanSealedSubClassBeObjectInspection.kt @@ -8,11 +8,14 @@ import com.intellij.psi.PsiElementVisitor import org.jetbrains.kotlin.idea.KotlinBundle import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.core.getModalityFromDescriptor +import org.jetbrains.kotlin.idea.project.platform import org.jetbrains.kotlin.idea.quickfix.sealedSubClassToObject.ConvertSealedSubClassToObjectFix import org.jetbrains.kotlin.idea.quickfix.sealedSubClassToObject.GenerateIdentityEqualsFix import org.jetbrains.kotlin.idea.refactoring.isAbstract import org.jetbrains.kotlin.idea.references.mainReference +import org.jetbrains.kotlin.idea.util.module import org.jetbrains.kotlin.lexer.KtTokens +import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny @@ -23,12 +26,17 @@ class CanSealedSubClassBeObjectInspection : AbstractKotlinInspection() { fun reportPossibleObject(klass: KtClass) { val keyword = klass.getClassOrInterfaceKeyword() ?: return + val fixes = if (klass.module?.platform?.isJvm() == true) { + arrayOf(ConvertSealedSubClassToObjectFix(), GenerateIdentityEqualsFix()) + } else { + arrayOf(ConvertSealedSubClassToObjectFix()) + } + holder.registerProblem( keyword, KotlinBundle.message("sealed.sub.class.has.no.state.and.no.overridden.equals"), ProblemHighlightType.GENERIC_ERROR_OR_WARNING, - ConvertSealedSubClassToObjectFix(), - GenerateIdentityEqualsFix() + *fixes, ) } diff --git a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java index dbdc2225b668..082faf8e32dd 100644 --- a/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java +++ b/plugins/kotlin/idea/tests/test/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTestGenerated.java @@ -1031,6 +1031,11 @@ public abstract class QuickFixMultiModuleTestGenerated extends AbstractQuickFixM runTest("testData/multiModuleQuickFix/other/functionTypeReceiverToParameterByImpl/"); } + @TestMetadata("generateEqualsAndHashCodeForSealedInCommon") + public void testGenerateEqualsAndHashCodeForSealedInCommon() throws Exception { + runTest("testData/multiModuleQuickFix/other/generateEqualsAndHashCodeForSealedInCommon/"); + } + @TestMetadata("generateEqualsInExpect") public void testGenerateEqualsInExpect() throws Exception { runTest("testData/multiModuleQuickFix/other/generateEqualsInExpect/"); diff --git a/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/generateEqualsAndHashCodeForSealedInCommon/common/common.kt b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/generateEqualsAndHashCodeForSealedInCommon/common/common.kt new file mode 100644 index 000000000000..9fed8360d707 --- /dev/null +++ b/plugins/kotlin/idea/tests/testData/multiModuleQuickFix/other/generateEqualsAndHashCodeForSealedInCommon/common/common.kt @@ -0,0 +1,9 @@ +// "Generate equals & hashCode by identity" "false" +// TOOL: org.jetbrains.kotlin.idea.inspections.CanSealedSubClassBeObjectInspection +// ACTION: Convert sealed sub-class to object +// ACTION: Create test +// ACTION: Make internal +// ACTION: Make private + +sealed class Parent +class Child : Parent() \ No newline at end of file