User: joe Date: 02 Jan 26 19:50 Revision: 66aab4fc0307588f5728ee53da44e1d5565e077d Summary: Don't assume the order of the LVT TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10379&personal=false Index: src/main/kotlin/platform/mixin/handlers/RedirectInjectorHandler.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/RedirectInjectorHandler.kt (revision 0f73c12e30c804a7b1f97b645aab77bd7f18e8c1) +++ src/main/kotlin/platform/mixin/handlers/RedirectInjectorHandler.kt (revision 66aab4fc0307588f5728ee53da44e1d5565e077d) @@ -248,19 +248,20 @@ parameters += Parameter("instance", Type.getObjectType(firstMatch.owner).toPsiType(elementFactory)) } + val sortedLocals = sourceClassAndMethod?.method?.localVariables?.sortedBy { it.index } if (signature != null) { signature.second .asSequence() .withIndex() .mapTo(parameters) { (index, type) -> val i = if (firstMatch.opcode == Opcodes.INVOKESTATIC) index else index + 1 - val name = sourceClassAndMethod.method.localVariables?.getOrNull(i)?.name?.toJavaIdentifier() + val name = sortedLocals?.getOrNull(i)?.name?.toJavaIdentifier() sanitizedParameter(type, name, name != null) } } else { Type.getArgumentTypes(firstMatch.desc).withIndex().mapTo(parameters) { (index, type) -> val i = if (firstMatch.opcode == Opcodes.INVOKESTATIC) index else index + 1 - val name = sourceClassAndMethod?.method?.localVariables?.getOrNull(i)?.name?.toJavaIdentifier() + val name = sortedLocals?.getOrNull(i)?.name?.toJavaIdentifier() sanitizedParameter(type.toPsiType(elementFactory), name, name != null) } } Index: src/main/kotlin/platform/mixin/handlers/mixinextras/MixinExtrasInjectorAnnotationHandler.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/mixinextras/MixinExtrasInjectorAnnotationHandler.kt (revision 0f73c12e30c804a7b1f97b645aab77bd7f18e8c1) +++ src/main/kotlin/platform/mixin/handlers/mixinextras/MixinExtrasInjectorAnnotationHandler.kt (revision 66aab4fc0307588f5728ee53da44e1d5565e077d) @@ -315,16 +315,17 @@ sourceClassAndMethod.clazz, annotation.project, ) + val sortedLocals = sourceClassAndMethod?.method?.localVariables?.sortedBy { it.index } if (genericParams != null) { genericParams.withIndex().mapTo(parameters) { (index, type) -> val i = if (insn.opcode == Opcodes.INVOKESTATIC) index else index + 1 - val name = sourceClassAndMethod.method.localVariables?.getOrNull(i)?.name?.toJavaIdentifier() + val name = sortedLocals?.getOrNull(i)?.name?.toJavaIdentifier() sanitizedParameter(type, name, name != null) } } else { Type.getArgumentTypes(insn.desc).withIndex().mapTo(parameters) { (index, type) -> val i = if (insn.opcode == Opcodes.INVOKESTATIC) index else index + 1 - val name = sourceClassAndMethod?.method?.localVariables?.getOrNull(i)?.name?.toJavaIdentifier() + val name = sortedLocals?.getOrNull(i)?.name?.toJavaIdentifier() sanitizedParameter(type.toPsiType(elementFactory), name, name != null) } } Index: src/main/kotlin/platform/mixin/inspection/shadow/ShadowParameterNameInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/shadow/ShadowParameterNameInspection.kt (revision 0f73c12e30c804a7b1f97b645aab77bd7f18e8c1) +++ src/main/kotlin/platform/mixin/inspection/shadow/ShadowParameterNameInspection.kt (revision 66aab4fc0307588f5728ee53da44e1d5565e077d) @@ -49,7 +49,7 @@ return } val thisLocals = if (target.classAndMethod.method.hasAccess(Opcodes.ACC_STATIC)) 0 else 1 - val targetLocals = target.classAndMethod.method.localVariables?.drop(thisLocals) ?: return + val targetLocals = target.classAndMethod.method.localVariables?.drop(thisLocals)?.sortedBy { it.index } ?: return val method = annotation.parent?.parent as? PsiMethod ?: return for ((param, targetLocal) in method.parameterList.parameters.zip(targetLocals)) { Index: src/main/kotlin/platform/mixin/util/LocalInfo.kt =================================================================== --- src/main/kotlin/platform/mixin/util/LocalInfo.kt (revision 0f73c12e30c804a7b1f97b645aab77bd7f18e8c1) +++ src/main/kotlin/platform/mixin/util/LocalInfo.kt (revision 66aab4fc0307588f5728ee53da44e1d5565e077d) @@ -61,7 +61,7 @@ } for (argType in Type.getArgumentTypes(methodNode.desc)) { val hasNamedArguments = module.fabricMixinCompatibility?.let { it >= 17000 } == true - val localName = methodNode.localVariables?.getOrNull(index)?.name + val localName = methodNode.localVariables?.find { it.index == index }?.name val name = if (localName != null && hasNamedArguments) { localName } else { Index: src/main/kotlin/platform/mixin/util/LocalVariables.kt =================================================================== --- src/main/kotlin/platform/mixin/util/LocalVariables.kt (revision 0f73c12e30c804a7b1f97b645aab77bd7f18e8c1) +++ src/main/kotlin/platform/mixin/util/LocalVariables.kt (revision 66aab4fc0307588f5728ee53da44e1d5565e077d) @@ -451,7 +451,7 @@ // Initialise method arguments for ((index, argType) in Type.getArgumentTypes(method.desc).withIndex()) { - val localName = method.localVariables?.getOrNull(index + staticOffset)?.name + val localName = method.localVariables?.find { it.index == index + staticOffset }?.name val name = if (localName == null || !settings.namedParameters) { "arg$index" } else {