From 6e1adf9b6fc94406c47c2d10e778f168d33b71cc Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 24 Dec 2018 20:29:28 +0300 Subject: [PATCH] New J2K: Add JvmOverloads annotation when merging methods --- j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt | 2 +- j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt | 2 ++ .../kotlin/j2k/conversions/ConstructorConversion.kt | 1 + .../kotlin/j2k/conversions/DefaultArgumentsConversion.kt | 9 +++++++-- .../InsertDefaultPrimaryConstructorConversion.kt | 1 + .../conversions/PrimaryConstructorDetectConversion.kt | 1 + j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt | 6 ++++-- 7 files changed, 17 insertions(+), 5 deletions(-) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt index b1652211485..f185daed4d3 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/ConversionsRunner.kt @@ -38,10 +38,10 @@ object ConversionsRunner { +EnumClassConversion() +ArrayInitializerConversion(context) +TryStatementConversion(context) + +DefaultArgumentsConversion(context) +ConstructorConversion(context) +ImplicitInitializerConversion(context) +ParameterModificationInMethodCallsConversion(context) - +DefaultArgumentsConversion(context) +PrintlnConversion(context) +BlockToRunConversion(context) +JetbrainsNullableAnnotationsConverter(context) diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt index eea976912cf..406d7bc2e86 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/NewCodeBuilder.kt @@ -703,6 +703,8 @@ class NewCodeBuilder { } override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) { + ktPrimaryConstructor.annotationList.accept(this) + printer.printWithNoIndent(" ") renderModifiersList(ktPrimaryConstructor) printer.printWithNoIndent(" constructor ") if (ktPrimaryConstructor.parameters.isNotEmpty()) { diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt index ead5b9a2ff7..e2ab575cc57 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/ConstructorConversion.kt @@ -23,6 +23,7 @@ class ConstructorConversion(private val context: ConversionContext) : RecursiveA element.parameters, element.block, delegationCall, + element.annotationList, element.extraModifiers, element.visibility, element.modality diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/DefaultArgumentsConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/DefaultArgumentsConversion.kt index 13cf3a094f0..8393b91705a 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/DefaultArgumentsConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/DefaultArgumentsConversion.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.j2k.conversions import org.jetbrains.kotlin.j2k.ConversionContext +import org.jetbrains.kotlin.j2k.jvmAnnotation import org.jetbrains.kotlin.j2k.tree.* import org.jetbrains.kotlin.j2k.tree.impl.JKFieldAccessExpressionImpl import org.jetbrains.kotlin.j2k.tree.impl.JKUniverseMethodSymbol @@ -35,7 +36,7 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur // TODO: Filter by annotations, visibility, modality, modifiers like synchronized - + if (calledMethod.visibility != method.visibility) continue@checkMethod for (i in method.parameters.indices) { val parameter = method.parameters[i] val targetParameter = calledMethod.parameters[i] @@ -67,7 +68,11 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur parameter.initializer = remapParameterSymbol(defaultValue) as JKExpression } - + if (calledMethod.visibility == Visibility.PUBLIC && + !calledMethod.annotationList.annotations.any { it.classSymbol.fqName == "kotlin.annotation.AnnotationTarget.JvmOverloads" } + ) { + calledMethod.annotationList.annotations += jvmAnnotation("JvmOverloads", context.symbolProvider) + } element.classBody.declarations -= method } diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt index 0b38f4a4c03..076abd4d393 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/InsertDefaultPrimaryConstructorConversion.kt @@ -20,6 +20,7 @@ class InsertDefaultPrimaryConstructorConversion(private val context: ConversionC JKNameIdentifierImpl(element.name.value), emptyList(), JKStubExpressionImpl(), + JKAnnotationListImpl(), emptyList(), Visibility.PUBLIC, Modality.FINAL diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt index 363780f8621..9a8f19e4d98 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/conversions/PrimaryConstructorDetectConversion.kt @@ -49,6 +49,7 @@ class PrimaryConstructorDetectConversion(private val context: ConversionContext) primaryConstructorCandidate.name, primaryConstructorCandidate.parameters, primaryConstructorCandidate.delegationCall, + primaryConstructorCandidate.annotationList, primaryConstructorCandidate.extraModifiers, primaryConstructorCandidate.visibility, primaryConstructorCandidate.modality diff --git a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt index 63628c63a59..4e68a9ceb10 100644 --- a/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt +++ b/j2k/newSrc/org/jetbrains/kotlin/j2k/tree/impl/k.kt @@ -167,6 +167,7 @@ class JKKtConstructorImpl( parameters: List, block: JKBlock, delegationCall: JKExpression, + annotationList: JKAnnotationList, override var extraModifiers: List, override var visibility: Visibility, override var modality: Modality @@ -178,7 +179,7 @@ class JKKtConstructorImpl( override var block: JKBlock by child(block) override var delegationCall: JKExpression by child(delegationCall) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) - override var annotationList: JKAnnotationList by child(JKAnnotationListImpl()) + override var annotationList: JKAnnotationList by child(annotationList) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtConstructor(this, data) } @@ -187,6 +188,7 @@ class JKKtPrimaryConstructorImpl( name: JKNameIdentifier, parameters: List, delegationCall: JKExpression, + annotationList: JKAnnotationList, override var extraModifiers: List, override var visibility: Visibility, override var modality: Modality @@ -198,7 +200,7 @@ class JKKtPrimaryConstructorImpl( override var block: JKBlock by child(JKBodyStub) override var delegationCall: JKExpression by child(delegationCall) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) - override var annotationList: JKAnnotationList by child(JKAnnotationListImpl()) + override var annotationList: JKAnnotationList by child(annotationList) override fun accept(visitor: JKVisitor, data: D): R = visitor.visitKtPrimaryConstructor(this, data) }