[kotlin] mpp: do not suggest "generate equals & hashCode() by identity" for non-jvm platform

^KTIJ-12351 Fixed

GitOrigin-RevId: 55bb1d90845344020c8a96bca735b5eaf700e06b
This commit is contained in:
Dmitry Gridin
2021-11-29 05:05:32 +00:00
committed by intellij-monorepo-bot
parent eaa5126132
commit 0636ca2f11
3 changed files with 24 additions and 2 deletions
@@ -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,
)
}
@@ -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/");
@@ -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
cla<caret>ss Child : Parent()