Skip to content

Commit ffb6d9e

Browse files
committed
mixin: Add special case for slices in TargetReference. Fixes #269
1 parent 3f85af4 commit ffb6d9e

File tree

2 files changed

+10
-1
lines changed

2 files changed

+10
-1
lines changed

src/main/kotlin/com/demonwav/mcdev/platform/mixin/reference/target/TargetReference.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ package com.demonwav.mcdev.platform.mixin.reference.target
1313
import com.demonwav.mcdev.platform.mixin.reference.MethodReference
1414
import com.demonwav.mcdev.platform.mixin.reference.MixinReference
1515
import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.AT
16+
import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.SLICE
1617
import com.demonwav.mcdev.platform.mixin.util.MixinMemberReference
1718
import com.demonwav.mcdev.platform.mixin.util.findSource
1819
import com.demonwav.mcdev.util.annotationFromArrayValue
@@ -74,7 +75,14 @@ object TargetReference : PolyReferenceResolver(), MixinReference {
7475

7576
private fun getTargetMethod(at: PsiAnnotation): PsiMethod? {
7677
// TODO: Right now this will only work for Mixins with a single target class
77-
val methodValue = at.annotationFromArrayValue?.findDeclaredAttributeValue("method") ?: return null
78+
val parentAnnotation = at.annotationFromArrayValue ?: return null
79+
val injectorAnnotation = if (parentAnnotation.qualifiedName == SLICE) {
80+
parentAnnotation.annotationFromValue ?: return null
81+
} else {
82+
parentAnnotation
83+
}
84+
85+
val methodValue = injectorAnnotation.findDeclaredAttributeValue("method") ?: return null
7886
return MethodReference.resolveIfUnique(methodValue)?.findSource()
7987
}
8088

src/main/kotlin/com/demonwav/mcdev/platform/mixin/util/MixinConstants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ object MixinConstants {
4040
const val MUTABLE = "org.spongepowered.asm.mixin.Mutable"
4141
const val OVERWRITE = "org.spongepowered.asm.mixin.Overwrite"
4242
const val SHADOW = "org.spongepowered.asm.mixin.Shadow"
43+
const val SLICE = "org.spongepowered.asm.mixin.injection.Slice"
4344
const val SOFT_OVERRIDE = "org.spongepowered.asm.mixin.SoftOverride"
4445
const val UNIQUE = "org.spongepowered.asm.mixin.Unique"
4546
const val INJECT = "org.spongepowered.asm.mixin.injection.Inject"

0 commit comments

Comments
 (0)