Skip to content

Commit 1fcc2d6

Browse files
committed
Don't skip through @Slice to check for disallowed target insns. Closes #2541
1 parent d1a84a9 commit 1fcc2d6

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import com.demonwav.mcdev.platform.mixin.reference.isMiscDynamicSelector
2929
import com.demonwav.mcdev.platform.mixin.reference.parseMixinSelector
3030
import com.demonwav.mcdev.platform.mixin.reference.target.TargetReference
3131
import com.demonwav.mcdev.platform.mixin.util.InjectionPointSpecifier
32+
import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.AT
33+
import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.SLICE
3234
import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Classes.SHIFT
3335
import com.demonwav.mcdev.platform.mixin.util.findSourceClass
3436
import com.demonwav.mcdev.platform.mixin.util.findSourceElement
@@ -152,11 +154,13 @@ class AtResolver(
152154
}
153155
}
154156

155-
fun findInjectorAnnotation(at: PsiAnnotation): PsiAnnotation? {
157+
fun findInjectorAnnotation(at: PsiAnnotation, skipThroughSlice: Boolean = true): PsiAnnotation? {
156158
return at.parents(false)
157159
.takeWhile { it !is PsiClass }
158160
.filterIsInstance<PsiAnnotation>()
159-
.firstOrNull { it.parent is PsiModifierList }
161+
.firstOrNull {
162+
!skipThroughSlice || (!it.hasQualifiedName(SLICE) && !it.hasQualifiedName(AT))
163+
}
160164
}
161165

162166
fun getShift(at: PsiAnnotation): Int {
@@ -281,7 +285,7 @@ class AtResolver(
281285
val injectionPoint = getInjectionPoint(at) ?: return emptyList()
282286
val targetAttr = at.findAttributeValue("target")
283287
val target = targetAttr?.let { parseMixinSelector(it) }
284-
val injector = findInjectorAnnotation(at)?.let(MixinAnnotationHandler::forMixinAnnotation)
288+
val injector = findInjectorAnnotation(at, skipThroughSlice = false)?.let(MixinAnnotationHandler::forMixinAnnotation)
285289
as? InjectorAnnotationHandler
286290

287291
// Collect all possible targets

src/main/kotlin/platform/mixin/inspection/injector/DisallowedTargetInsnInspection.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class DisallowedTargetInsnInspection : MixinInspection() {
4141
return
4242
}
4343

44-
val injectorAnnotation = AtResolver.findInjectorAnnotation(annotation) ?: return
44+
val injectorAnnotation = AtResolver.findInjectorAnnotation(annotation, skipThroughSlice = false) ?: return
4545
val injector = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation, annotation.project)
4646
as? InjectorAnnotationHandler ?: return
4747
val containingClass = injectorAnnotation.findContainingClass() ?: return

0 commit comments

Comments
 (0)