User: joe Date: 14 Nov 25 12:20 Revision: 1fcc2d6cbecbe6cc39cbc90c768b167f62a3493c Summary: Don't skip through `@Slice` to check for disallowed target insns. Closes #2541 TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10282&personal=false Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt (revision d1a84a9f193a97ba43ef100ff0ccce9dd4ff9e08) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/AtResolver.kt (revision 1fcc2d6cbecbe6cc39cbc90c768b167f62a3493c) @@ -29,6 +29,8 @@ import com.demonwav.mcdev.platform.mixin.reference.parseMixinSelector import com.demonwav.mcdev.platform.mixin.reference.target.TargetReference import com.demonwav.mcdev.platform.mixin.util.InjectionPointSpecifier +import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.AT +import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.SLICE import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Classes.SHIFT import com.demonwav.mcdev.platform.mixin.util.findSourceClass import com.demonwav.mcdev.platform.mixin.util.findSourceElement @@ -152,12 +154,14 @@ } } - fun findInjectorAnnotation(at: PsiAnnotation): PsiAnnotation? { + fun findInjectorAnnotation(at: PsiAnnotation, skipThroughSlice: Boolean = true): PsiAnnotation? { return at.parents(false) .takeWhile { it !is PsiClass } .filterIsInstance() - .firstOrNull { it.parent is PsiModifierList } + .firstOrNull { + !skipThroughSlice || (!it.hasQualifiedName(SLICE) && !it.hasQualifiedName(AT)) - } + } + } fun getShift(at: PsiAnnotation): Int { val shiftAttr = at.findDeclaredAttributeValue("shift") as? PsiExpression ?: return 0 @@ -281,7 +285,7 @@ val injectionPoint = getInjectionPoint(at) ?: return emptyList() val targetAttr = at.findAttributeValue("target") val target = targetAttr?.let { parseMixinSelector(it) } - val injector = findInjectorAnnotation(at)?.let(MixinAnnotationHandler::forMixinAnnotation) + val injector = findInjectorAnnotation(at, skipThroughSlice = false)?.let(MixinAnnotationHandler::forMixinAnnotation) as? InjectorAnnotationHandler // Collect all possible targets Index: src/main/kotlin/platform/mixin/inspection/injector/DisallowedTargetInsnInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/injector/DisallowedTargetInsnInspection.kt (revision d1a84a9f193a97ba43ef100ff0ccce9dd4ff9e08) +++ src/main/kotlin/platform/mixin/inspection/injector/DisallowedTargetInsnInspection.kt (revision 1fcc2d6cbecbe6cc39cbc90c768b167f62a3493c) @@ -41,7 +41,7 @@ return } - val injectorAnnotation = AtResolver.findInjectorAnnotation(annotation) ?: return + val injectorAnnotation = AtResolver.findInjectorAnnotation(annotation, skipThroughSlice = false) ?: return val injector = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation, annotation.project) as? InjectorAnnotationHandler ?: return val containingClass = injectorAnnotation.findContainingClass() ?: return