New J2K: Do not convert class to object in ClassToObjectPromotionConversion when it has inheritors
This commit is contained in:
committed by
Ilya Kirillov
parent
70def791c0
commit
55c304827a
@@ -48,7 +48,7 @@ object ConversionsRunner {
|
|||||||
+InnerClassConversion()
|
+InnerClassConversion()
|
||||||
+ModifiersConversion(context)
|
+ModifiersConversion(context)
|
||||||
+StaticsToCompanionExtractConversion()
|
+StaticsToCompanionExtractConversion()
|
||||||
+ClassToObjectPromotionConversion()
|
+ClassToObjectPromotionConversion(context)
|
||||||
+PolyadicExpressionConversion()
|
+PolyadicExpressionConversion()
|
||||||
+SwitchStatementConversion(context)
|
+SwitchStatementConversion(context)
|
||||||
+InstanceOfConversion()
|
+InstanceOfConversion()
|
||||||
|
|||||||
@@ -5,13 +5,15 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.conversions
|
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.JKClass
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKKtPrimaryConstructor
|
import org.jetbrains.kotlin.j2k.tree.JKKtPrimaryConstructor
|
||||||
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
import org.jetbrains.kotlin.j2k.tree.JKTreeElement
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl
|
import org.jetbrains.kotlin.j2k.tree.impl.JKClassImpl
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.psi
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||||
|
|
||||||
class ClassToObjectPromotionConversion : RecursiveApplicableConversionBase() {
|
class ClassToObjectPromotionConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
if (element is JKClass && element.classKind == JKClass.ClassKind.CLASS) {
|
if (element is JKClass && element.classKind == JKClass.ClassKind.CLASS) {
|
||||||
val companion =
|
val companion =
|
||||||
@@ -27,7 +29,7 @@ class ClassToObjectPromotionConversion : RecursiveApplicableConversionBase() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (allDeclarationsMatches) {
|
if (allDeclarationsMatches && !element.hasInheritors()) {
|
||||||
companion.invalidate()
|
companion.invalidate()
|
||||||
element.invalidate()
|
element.invalidate()
|
||||||
return recurse(
|
return recurse(
|
||||||
@@ -46,4 +48,7 @@ class ClassToObjectPromotionConversion : RecursiveApplicableConversionBase() {
|
|||||||
|
|
||||||
return recurse(element)
|
return recurse(element)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun JKClass.hasInheritors() =
|
||||||
|
context.converter.converterServices.oldServices.referenceSearcher.hasInheritors(psi()!!)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user