New J2K: Add JvmOverloads annotation when merging methods

This commit is contained in:
Ilya Kirillov
2018-12-24 20:29:28 +03:00
committed by Ilya Kirillov
parent e232d70b52
commit 6e1adf9b6f
7 changed files with 17 additions and 5 deletions
@@ -38,10 +38,10 @@ object ConversionsRunner {
+EnumClassConversion() +EnumClassConversion()
+ArrayInitializerConversion(context) +ArrayInitializerConversion(context)
+TryStatementConversion(context) +TryStatementConversion(context)
+DefaultArgumentsConversion(context)
+ConstructorConversion(context) +ConstructorConversion(context)
+ImplicitInitializerConversion(context) +ImplicitInitializerConversion(context)
+ParameterModificationInMethodCallsConversion(context) +ParameterModificationInMethodCallsConversion(context)
+DefaultArgumentsConversion(context)
+PrintlnConversion(context) +PrintlnConversion(context)
+BlockToRunConversion(context) +BlockToRunConversion(context)
+JetbrainsNullableAnnotationsConverter(context) +JetbrainsNullableAnnotationsConverter(context)
@@ -703,6 +703,8 @@ class NewCodeBuilder {
} }
override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) { override fun visitKtPrimaryConstructor(ktPrimaryConstructor: JKKtPrimaryConstructor) {
ktPrimaryConstructor.annotationList.accept(this)
printer.printWithNoIndent(" ")
renderModifiersList(ktPrimaryConstructor) renderModifiersList(ktPrimaryConstructor)
printer.printWithNoIndent(" constructor ") printer.printWithNoIndent(" constructor ")
if (ktPrimaryConstructor.parameters.isNotEmpty()) { if (ktPrimaryConstructor.parameters.isNotEmpty()) {
@@ -23,6 +23,7 @@ class ConstructorConversion(private val context: ConversionContext) : RecursiveA
element.parameters, element.parameters,
element.block, element.block,
delegationCall, delegationCall,
element.annotationList,
element.extraModifiers, element.extraModifiers,
element.visibility, element.visibility,
element.modality element.modality
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.j2k.conversions package org.jetbrains.kotlin.j2k.conversions
import org.jetbrains.kotlin.j2k.ConversionContext import org.jetbrains.kotlin.j2k.ConversionContext
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
@@ -35,7 +36,7 @@ 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
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]
@@ -67,7 +68,11 @@ class DefaultArgumentsConversion(private val context: ConversionContext) : Recur
parameter.initializer = remapParameterSymbol(defaultValue) as JKExpression 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 element.classBody.declarations -= method
} }
@@ -20,6 +20,7 @@ class InsertDefaultPrimaryConstructorConversion(private val context: ConversionC
JKNameIdentifierImpl(element.name.value), JKNameIdentifierImpl(element.name.value),
emptyList(), emptyList(),
JKStubExpressionImpl(), JKStubExpressionImpl(),
JKAnnotationListImpl(),
emptyList(), emptyList(),
Visibility.PUBLIC, Visibility.PUBLIC,
Modality.FINAL Modality.FINAL
@@ -49,6 +49,7 @@ class PrimaryConstructorDetectConversion(private val context: ConversionContext)
primaryConstructorCandidate.name, primaryConstructorCandidate.name,
primaryConstructorCandidate.parameters, primaryConstructorCandidate.parameters,
primaryConstructorCandidate.delegationCall, primaryConstructorCandidate.delegationCall,
primaryConstructorCandidate.annotationList,
primaryConstructorCandidate.extraModifiers, primaryConstructorCandidate.extraModifiers,
primaryConstructorCandidate.visibility, primaryConstructorCandidate.visibility,
primaryConstructorCandidate.modality primaryConstructorCandidate.modality
@@ -167,6 +167,7 @@ class JKKtConstructorImpl(
parameters: List<JKParameter>, parameters: List<JKParameter>,
block: JKBlock, block: JKBlock,
delegationCall: JKExpression, delegationCall: JKExpression,
annotationList: JKAnnotationList,
override var extraModifiers: List<ExtraModifier>, override var extraModifiers: List<ExtraModifier>,
override var visibility: Visibility, override var visibility: Visibility,
override var modality: Modality override var modality: Modality
@@ -178,7 +179,7 @@ class JKKtConstructorImpl(
override var block: JKBlock by child(block) override var block: JKBlock by child(block)
override var delegationCall: JKExpression by child(delegationCall) override var delegationCall: JKExpression by child(delegationCall)
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
override var annotationList: JKAnnotationList by child(JKAnnotationListImpl()) override var annotationList: JKAnnotationList by child(annotationList)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtConstructor(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtConstructor(this, data)
} }
@@ -187,6 +188,7 @@ class JKKtPrimaryConstructorImpl(
name: JKNameIdentifier, name: JKNameIdentifier,
parameters: List<JKParameter>, parameters: List<JKParameter>,
delegationCall: JKExpression, delegationCall: JKExpression,
annotationList: JKAnnotationList,
override var extraModifiers: List<ExtraModifier>, override var extraModifiers: List<ExtraModifier>,
override var visibility: Visibility, override var visibility: Visibility,
override var modality: Modality override var modality: Modality
@@ -198,7 +200,7 @@ class JKKtPrimaryConstructorImpl(
override var block: JKBlock by child(JKBodyStub) override var block: JKBlock by child(JKBodyStub)
override var delegationCall: JKExpression by child(delegationCall) override var delegationCall: JKExpression by child(delegationCall)
override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl()) override var typeParameterList: JKTypeParameterList by child(JKTypeParameterListImpl())
override var annotationList: JKAnnotationList by child(JKAnnotationListImpl()) override var annotationList: JKAnnotationList by child(annotationList)
override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtPrimaryConstructor(this, data) override fun <R, D> accept(visitor: JKVisitor<R, D>, data: D): R = visitor.visitKtPrimaryConstructor(this, data)
} }