New J2K: Do not merge function definitions whet it is not possible
This commit is contained in:
committed by
Ilya Kirillov
parent
46c7cd4b40
commit
f603932284
@@ -5,14 +5,25 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.j2k.conversions
|
package org.jetbrains.kotlin.j2k.conversions
|
||||||
|
|
||||||
|
import com.intellij.psi.PsiClass
|
||||||
import org.jetbrains.kotlin.j2k.ConversionContext
|
import org.jetbrains.kotlin.j2k.ConversionContext
|
||||||
import org.jetbrains.kotlin.j2k.jvmAnnotation
|
import org.jetbrains.kotlin.j2k.jvmAnnotation
|
||||||
import org.jetbrains.kotlin.j2k.tree.*
|
import org.jetbrains.kotlin.j2k.tree.*
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKFieldAccessExpressionImpl
|
import org.jetbrains.kotlin.j2k.tree.impl.JKFieldAccessExpressionImpl
|
||||||
import org.jetbrains.kotlin.j2k.tree.impl.JKUniverseMethodSymbol
|
import org.jetbrains.kotlin.j2k.tree.impl.JKUniverseMethodSymbol
|
||||||
|
import org.jetbrains.kotlin.j2k.tree.impl.psi
|
||||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||||
|
|
||||||
class DefaultArgumentsConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
class DefaultArgumentsConversion(private val context: ConversionContext) : RecursiveApplicableConversionBase() {
|
||||||
|
|
||||||
|
|
||||||
|
private fun JKMethod.canNotBeMerged(): Boolean =
|
||||||
|
modality == Modality.ABSTRACT ||
|
||||||
|
modality == Modality.OVERRIDE ||
|
||||||
|
context.converter.converterServices.oldServices.referenceSearcher.hasOverrides(psi()!!) ||
|
||||||
|
annotationList.annotations.isNotEmpty()
|
||||||
|
|
||||||
|
|
||||||
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
override fun applyToElement(element: JKTreeElement): JKTreeElement {
|
||||||
// TODO: Declaration list owner
|
// TODO: Declaration list owner
|
||||||
if (element !is JKClass) return recurse(element)
|
if (element !is JKClass) return recurse(element)
|
||||||
@@ -22,6 +33,7 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur
|
|||||||
checkMethod@ for (method in methods) {
|
checkMethod@ for (method in methods) {
|
||||||
val block = method.block as? JKBlock ?: continue
|
val block = method.block as? JKBlock ?: continue
|
||||||
val singleStatement = block.statements.singleOrNull() ?: continue
|
val singleStatement = block.statements.singleOrNull() ?: continue
|
||||||
|
if (method.canNotBeMerged()) continue
|
||||||
|
|
||||||
val call = lookupCall(singleStatement) ?: continue
|
val call = lookupCall(singleStatement) ?: continue
|
||||||
val callee = call.identifier as? JKUniverseMethodSymbol ?: continue
|
val callee = call.identifier as? JKUniverseMethodSymbol ?: continue
|
||||||
@@ -37,6 +49,8 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur
|
|||||||
|
|
||||||
// TODO: Filter by annotations, visibility, modality, modifiers like synchronized
|
// TODO: Filter by annotations, visibility, modality, modifiers like synchronized
|
||||||
if (calledMethod.visibility != method.visibility) continue@checkMethod
|
if (calledMethod.visibility != method.visibility) continue@checkMethod
|
||||||
|
if (calledMethod.canNotBeMerged()) continue
|
||||||
|
|
||||||
for (i in method.parameters.indices) {
|
for (i in method.parameters.indices) {
|
||||||
val parameter = method.parameters[i]
|
val parameter = method.parameters[i]
|
||||||
val targetParameter = calledMethod.parameters[i]
|
val targetParameter = calledMethod.parameters[i]
|
||||||
|
|||||||
Reference in New Issue
Block a user