diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt index e448d4edd41..290eb8bb05c 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt @@ -48,7 +48,7 @@ object ConversionsRunner { +InnerClassConversion() +ModifiersConversion(context) +StaticsToCompanionExtractConversion() - +ClassToObjectPromotionConversion() + +ClassToObjectPromotionConversion(context) +PolyadicExpressionConversion() +SwitchStatementConversion(context) +InstanceOfConversion() diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt index 6192dda44e7..74ee866b295 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ClassToObjectPromotionConversion.kt @@ -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()!!) } \ No newline at end of file