User: joe Date: 07 May 25 17:26 Revision: 63e48f813ba5c00a05dd04eb73b6cb93ee3645d4 Summary: Fix FieldAssignmentDesugarer not setting the original element to an original element TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9979&personal=false Index: src/main/kotlin/platform/mixin/handlers/desugar/DesugarUtil.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/desugar/DesugarUtil.kt (revision a4fbe479305ed1d6e532fc32eee87b1e6529a872) +++ src/main/kotlin/platform/mixin/handlers/desugar/DesugarUtil.kt (revision 63e48f813ba5c00a05dd04eb73b6cb93ee3645d4) @@ -28,6 +28,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.util.PsiTreeUtil +import com.intellij.psi.util.parents object DesugarUtil { private val ORIGINAL_ELEMENT_KEY = Key.create("mcdev.desugar.originalElement") @@ -37,10 +38,10 @@ ) fun getOriginalElement(desugared: PsiElement): PsiElement? { - return desugared.getCopyableUserData(ORIGINAL_ELEMENT_KEY) + return desugared.parents(true).firstNotNullOfOrNull { it.getCopyableUserData(ORIGINAL_ELEMENT_KEY) } } - fun setOriginalElement(desugared: PsiElement, original: PsiElement) { + fun setOriginalElement(desugared: PsiElement, original: PsiElement?) { desugared.putCopyableUserData(ORIGINAL_ELEMENT_KEY, original) } Index: src/main/kotlin/platform/mixin/handlers/desugar/FieldAssignmentDesugarer.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/desugar/FieldAssignmentDesugarer.kt (revision a4fbe479305ed1d6e532fc32eee87b1e6529a872) +++ src/main/kotlin/platform/mixin/handlers/desugar/FieldAssignmentDesugarer.kt (revision 63e48f813ba5c00a05dd04eb73b6cb93ee3645d4) @@ -56,7 +56,7 @@ val fieldInitializer = JavaPsiFacade.getElementFactory(project) .createStatementFromText("${child.name} = null;", child) as PsiExpressionStatement (fieldInitializer.expression as PsiAssignmentExpression).rExpression!!.replace(initializer) - DesugarUtil.setOriginalElement(fieldInitializer, child) + DesugarUtil.setOriginalElement(fieldInitializer, DesugarUtil.getOriginalElement(child)) if (seenStaticInitializer) { staticStatementsToInsertPost += fieldInitializer @@ -67,7 +67,7 @@ val fieldInitializer = JavaPsiFacade.getElementFactory(project) .createStatementFromText("this.${child.name} = null;", child) as PsiExpressionStatement (fieldInitializer.expression as PsiAssignmentExpression).rExpression!!.replace(initializer) - DesugarUtil.setOriginalElement(fieldInitializer, child) + DesugarUtil.setOriginalElement(fieldInitializer, DesugarUtil.getOriginalElement(child)) nonStaticStatementsToInsert += fieldInitializer } @@ -117,7 +117,7 @@ .createClass("class _Dummy_ { static {} }") .initializers .first() - DesugarUtil.setOriginalElement(initializer, clazz) + DesugarUtil.setOriginalElement(initializer, DesugarUtil.getOriginalElement(clazz)) return clazz.add(initializer) as PsiClassInitializer } @@ -135,7 +135,7 @@ } val constructor = JavaPsiFacade.getElementFactory(project).createConstructor(className) - DesugarUtil.setOriginalElement(constructor, clazz) + DesugarUtil.setOriginalElement(constructor, DesugarUtil.getOriginalElement(clazz)) return listOf(clazz.add(constructor) as PsiMethod) } } Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt (revision a4fbe479305ed1d6e532fc32eee87b1e6529a872) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt (revision 63e48f813ba5c00a05dd04eb73b6cb93ee3645d4) @@ -269,9 +269,7 @@ navigationVisitor.visitEnd(desugaredTargetElement) // Map the desugared results back into the original source class - val sourceResults = navigationVisitor.result.mapNotNull { desugaredResult -> - desugaredResult.parents(true).firstNotNullOfOrNull(DesugarUtil::getOriginalElement) - } + val sourceResults = navigationVisitor.result.mapNotNull(DesugarUtil::getOriginalElement) // Match the bytecode results to the source results return bytecodeResults.mapNotNull { bytecodeResult ->