Skip to content

Commit 8360b83

Browse files
committed
Always discourage shifting in injectors that can't inject anywhere (such as Redirect)
1 parent c554289 commit 8360b83

File tree

4 files changed

+20
-1
lines changed

4 files changed

+20
-1
lines changed

src/main/kotlin/platform/mixin/handlers/InjectAnnotationHandler.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,5 +138,7 @@ class InjectAnnotationHandler : InjectorAnnotationHandler() {
138138

139139
override val allowCoerce = true
140140

141+
override val isShiftAlwaysDiscouraged = false
142+
141143
override val mixinExtrasExpressionContextType = ExpressionContext.Type.INJECT
142144
}

src/main/kotlin/platform/mixin/handlers/InjectorAnnotationHandler.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ abstract class InjectorAnnotationHandler : MixinAnnotationHandler {
178178

179179
open val allowCoerce = false
180180

181+
open val isShiftAlwaysDiscouraged = true
182+
181183
override val isEntryPoint = true
182184

183185
override val icon = MixinAssets.MIXIN_INJECTOR_ICON

src/main/kotlin/platform/mixin/handlers/ModifyVariableHandler.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,5 +89,7 @@ class ModifyVariableHandler : InjectorAnnotationHandler() {
8989
return result
9090
}
9191

92+
override val isShiftAlwaysDiscouraged = false
93+
9294
override val mixinExtrasExpressionContextType = ExpressionContext.Type.MODIFY_VARIABLE
9395
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020

2121
package com.demonwav.mcdev.platform.mixin.inspection.injector
2222

23+
import com.demonwav.mcdev.platform.mixin.handlers.InjectorAnnotationHandler
24+
import com.demonwav.mcdev.platform.mixin.handlers.MixinAnnotationHandler
2325
import com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.AtResolver
2426
import com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.InjectionPoint
2527
import com.demonwav.mcdev.platform.mixin.inspection.MixinInspection
@@ -38,13 +40,24 @@ class DiscouragedShiftInspection : MixinInspection() {
3840
if (!annotation.hasQualifiedName(MixinConstants.Annotations.AT)) {
3941
return
4042
}
43+
val injectorAnnotation = AtResolver.findInjectorAnnotation(annotation) ?: return
44+
val injector = MixinAnnotationHandler.forMixinAnnotation(injectorAnnotation, holder.project) as? InjectorAnnotationHandler
45+
?: return
4146
val atValue = annotation.findDeclaredAttributeValue("value") ?: return
4247
val atCode = atValue.constantStringValue ?: return
4348
val shift = AtResolver.getShift(annotation)
44-
if (InjectionPoint.byAtCode(atCode)?.isShiftDiscouraged(shift) == true) {
49+
if (isShiftDiscouraged(shift, injector, atCode)) {
4550
val shiftElement = annotation.findDeclaredAttributeValue("shift") ?: return
4651
holder.registerProblem(shiftElement, "Shifting like this is discouraged because it's brittle")
4752
}
4853
}
4954
}
55+
56+
private fun isShiftDiscouraged(shift: Int, injector: InjectorAnnotationHandler, atCode: String): Boolean {
57+
if (injector.isShiftAlwaysDiscouraged) {
58+
return shift != 0
59+
}
60+
61+
return InjectionPoint.byAtCode(atCode)?.isShiftDiscouraged(shift) == true
62+
}
5063
}

0 commit comments

Comments
 (0)