Update synthetic parameter processing logic according to ASM 7 changes
#KT-27774 Fixed
This commit is contained in:
+4
-3
@@ -382,7 +382,7 @@ class ClassFileToSourceStubConverter(
|
||||
if (it.name == "valueOf" && it.desc == "(Ljava/lang/String;)L${clazz.name};") return@mapJList null
|
||||
}
|
||||
|
||||
convertMethod(it, clazz, lineMappings, packageFqName)
|
||||
convertMethod(it, clazz, lineMappings, packageFqName, isInner)
|
||||
}
|
||||
|
||||
val nestedClasses = mapJList<InnerClassNode, JCTree>(clazz.innerClasses) { innerClass ->
|
||||
@@ -626,7 +626,8 @@ class ClassFileToSourceStubConverter(
|
||||
method: MethodNode,
|
||||
containingClass: ClassNode,
|
||||
lineMappings: KaptLineMappingCollector,
|
||||
packageFqName: String
|
||||
packageFqName: String,
|
||||
isInner: Boolean
|
||||
): JCMethodDecl? {
|
||||
if (isIgnored(method.invisibleAnnotations)) return null
|
||||
val descriptor = kaptContext.origins[method]?.descriptor as? CallableDescriptor ?: return null
|
||||
@@ -659,7 +660,7 @@ class ClassFileToSourceStubConverter(
|
||||
val asmReturnType = Type.getReturnType(method.desc)
|
||||
val jcReturnType = if (isConstructor) null else treeMaker.Type(asmReturnType)
|
||||
|
||||
val parametersInfo = method.getParametersInfo(containingClass)
|
||||
val parametersInfo = method.getParametersInfo(containingClass, isInner)
|
||||
|
||||
if (!checkIfValidTypeName(containingClass, asmReturnType)
|
||||
|| parametersInfo.any { !checkIfValidTypeName(containingClass, it.type) }
|
||||
|
||||
+8
-4
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.kapt3.stubs
|
||||
|
||||
import org.jetbrains.kotlin.codegen.AsmUtil
|
||||
import org.jetbrains.kotlin.kapt3.util.isAbstract
|
||||
import org.jetbrains.kotlin.kapt3.util.isEnum
|
||||
import org.jetbrains.kotlin.kapt3.util.isJvmOverloadsGenerated
|
||||
@@ -34,7 +35,7 @@ internal class ParameterInfo(
|
||||
val invisibleAnnotations: List<AnnotationNode>?
|
||||
)
|
||||
|
||||
internal fun MethodNode.getParametersInfo(containingClass: ClassNode): List<ParameterInfo> {
|
||||
internal fun MethodNode.getParametersInfo(containingClass: ClassNode, isInnerClassMember: Boolean): List<ParameterInfo> {
|
||||
val localVariables = this.localVariables ?: emptyList()
|
||||
val parameters = this.parameters ?: emptyList()
|
||||
val isStatic = isStatic(access)
|
||||
@@ -42,7 +43,9 @@ internal fun MethodNode.getParametersInfo(containingClass: ClassNode): List<Para
|
||||
|
||||
// First and second parameters in enum constructors are synthetic, we should ignore them
|
||||
val isEnumConstructor = (name == "<init>") && containingClass.isEnum()
|
||||
val startParameterIndex = if (isEnumConstructor) 2 else 0
|
||||
val startParameterIndex =
|
||||
if (isEnumConstructor) 2 else
|
||||
if (isInnerClassMember && name == "<init>") 1 else 0
|
||||
|
||||
val parameterTypes = Type.getArgumentTypes(desc)
|
||||
|
||||
@@ -71,8 +74,9 @@ internal fun MethodNode.getParametersInfo(containingClass: ClassNode): List<Para
|
||||
name = "p${index - startParameterIndex}"
|
||||
}
|
||||
|
||||
val visibleAnnotations = visibleParameterAnnotations?.get(index)
|
||||
val invisibleAnnotations = invisibleParameterAnnotations?.get(index)
|
||||
val indexForAnnotation = if (AsmUtil.IS_BUILT_WITH_ASM6) index else index - startParameterIndex
|
||||
val visibleAnnotations = visibleParameterAnnotations?.get(indexForAnnotation)
|
||||
val invisibleAnnotations = invisibleParameterAnnotations?.get(indexForAnnotation)
|
||||
parameterInfos += ParameterInfo(0, name, type, visibleAnnotations, invisibleAnnotations)
|
||||
}
|
||||
return parameterInfos
|
||||
|
||||
Reference in New Issue
Block a user