New J2K: Do not convert class to object in ClassToObjectPromotionConversion when it has inheritors

This commit is contained in:
Ilya Kirillov
2018-11-08 16:49:57 +03:00
committed by Ilya Kirillov
parent 70def791c0
commit 55c304827a
2 changed files with 8 additions and 3 deletions
@@ -48,7 +48,7 @@ object ConversionsRunner {
+InnerClassConversion()
+ModifiersConversion(context)
+StaticsToCompanionExtractConversion()
+ClassToObjectPromotionConversion()
+ClassToObjectPromotionConversion(context)
+PolyadicExpressionConversion()
+SwitchStatementConversion(context)
+InstanceOfConversion()
@@ -5,13 +5,15 @@
package org.jetbrains.kotlin.j2k.conversions
import org.jetbrains.kotlin.j2k.ConversionContext
import org.jetbrains.kotlin.j2k.tree.JKClass
import org.jetbrains.kotlin.j2k.tree.JKKtPrimaryConstructor
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl
import org.jetbrains.kotlin.j2k.tree.impl.psi
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
class ClassToObjectPromotionConversion : RecursiveApplicableConversionBase() {
class ClassToObjectPromotionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
override fun applyToElement(element: JKTreeElement): JKTreeElement {
if (element is JKClass && element.classKind == JKClass.ClassKind.CLASS) {
val companion =
@@ -27,7 +29,7 @@ class ClassToObjectPromotionConversion : RecursiveApplicableConversionBase() {
}
}
if (allDeclarationsMatches) {
if (allDeclarationsMatches && !element.hasInheritors()) {
companion.invalidate()
element.invalidate()
return recurse(
@@ -46,4 +48,7 @@ class ClassToObjectPromotionConversion : RecursiveApplicableConversionBase() {
return recurse(element)
}
private fun JKClass.hasInheritors() =
context.converter.converterServices.oldServices.referenceSearcher.hasInheritors(psi()!!)
}