Kapt3: Fix parameter names in JvmOverloads-generated methods (KT-15024)

This commit is contained in:
Yan Zhulanow
2016-11-29 22:04:53 +03:00
committed by Yan Zhulanow
parent 77153f0926
commit 3c77242da2
13 changed files with 217 additions and 3 deletions
@@ -29,6 +29,7 @@ import org.jetbrains.kotlin.resolve.jvm.annotations.findJvmOverloadsAnnotation
import org.jetbrains.kotlin.resolve.jvm.diagnostics.OtherOrigin
import org.jetbrains.org.objectweb.asm.Label
import org.jetbrains.org.objectweb.asm.Opcodes
import org.jetbrains.org.objectweb.asm.Type
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
/**
@@ -36,6 +37,12 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
* parameter values substituted.
*/
class DefaultParameterValueSubstitutor(val state: GenerationState) {
private companion object {
// rename -> JvmOverloads
private val ANNOTATION_TYPE_DESCRIPTOR_FOR_JVMOVERLOADS_GENERATED_METHODS: String =
Type.getObjectType("synthetic/kotlin/jvm/GeneratedByJvmOverloads").descriptor
}
/**
* If all of the parameters of the specified constructor declare default values,
* generates a no-argument constructor that passes default values for all arguments.
@@ -135,6 +142,10 @@ class DefaultParameterValueSubstitutor(val state: GenerationState) {
AnnotationCodegen.forMethod(mv, memberCodegen, typeMapper).genAnnotations(functionDescriptor, signature.returnType)
if (state.classBuilderMode == ClassBuilderMode.KAPT3) {
mv.visitAnnotation(ANNOTATION_TYPE_DESCRIPTOR_FOR_JVMOVERLOADS_GENERATED_METHODS, /* visible = */ false)
}
remainingParameters.withIndex().forEach {
val annotationCodegen = AnnotationCodegen.forParameter(it.index, mv, memberCodegen, typeMapper)
annotationCodegen.genAnnotations(it.value, signature.valueParameters[it.index].asmType)