Generalize parameter index calculation in ASM 7 support
Second part for d2a205c72d commit
#KT-27774 Fixed
This commit is contained in:
+17
-2
@@ -29,10 +29,14 @@ internal class AnnotationsAndParameterCollectorMethodVisitor(
|
||||
private val member: BinaryJavaMethodBase,
|
||||
private val context: ClassifierResolutionContext,
|
||||
private val signatureParser: BinaryClassSignatureParser,
|
||||
private val parametersToSkipNumber: Int
|
||||
private val parametersToSkipNumber: Int,
|
||||
private val parametersCountInMethodDesc: Int
|
||||
) : MethodVisitor(ASM_API_VERSION_FOR_CLASS_READING) {
|
||||
private var parameterIndex = 0
|
||||
|
||||
private var visibleAnnotableParameterCount = parametersCountInMethodDesc
|
||||
private var invisibleAnnotableParameterCount = parametersCountInMethodDesc
|
||||
|
||||
override fun visitAnnotationDefault(): AnnotationVisitor? {
|
||||
member.safeAs<BinaryJavaMethod>()?.hasAnnotationParameterDefaultValue = true
|
||||
// We don't store default value in Java model
|
||||
@@ -59,8 +63,19 @@ internal class AnnotationsAndParameterCollectorMethodVisitor(
|
||||
desc, context, signatureParser
|
||||
)
|
||||
|
||||
@Suppress("NOTHING_TO_OVERRIDE")
|
||||
override fun visitAnnotableParameterCount(parameterCount: Int, visible: Boolean) {
|
||||
if (visible) {
|
||||
visibleAnnotableParameterCount = parameterCount
|
||||
} else {
|
||||
invisibleAnnotableParameterCount = parameterCount
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitParameterAnnotation(parameter: Int, desc: String, visible: Boolean): AnnotationVisitor? {
|
||||
val index = if (Opcodes.API_VERSION <= Opcodes.ASM6) parameter - parametersToSkipNumber else parameter
|
||||
val absoluteParameterIndex =
|
||||
parameter + parametersCountInMethodDesc - if (visible) visibleAnnotableParameterCount else invisibleAnnotableParameterCount
|
||||
val index = absoluteParameterIndex - parametersToSkipNumber
|
||||
if (index < 0) return null
|
||||
|
||||
val annotations =
|
||||
|
||||
+8
-1
@@ -106,7 +106,14 @@ abstract class BinaryJavaMethodBase(
|
||||
else -> 0
|
||||
}
|
||||
|
||||
return member to AnnotationsAndParameterCollectorMethodVisitor(member, parentContext, signatureParser, paramIgnoreCount)
|
||||
return member to
|
||||
AnnotationsAndParameterCollectorMethodVisitor(
|
||||
member,
|
||||
parentContext,
|
||||
signatureParser,
|
||||
paramIgnoreCount,
|
||||
Type.getArgumentTypes(desc).size
|
||||
)
|
||||
}
|
||||
|
||||
private fun parseMethodDescription(
|
||||
|
||||
Reference in New Issue
Block a user