User: joe Date: 22 Apr 25 15:52 Revision: 3cdb8d8a91bbfb5becd1fe398503bc90bb3e8584 Summary: Allow handler methods to be static even when not required, except for @Inject on stock mixin TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9953&personal=false Index: src/main/kotlin/platform/mixin/handlers/InjectAnnotationHandler.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/InjectAnnotationHandler.kt (revision 6cdba448eda1fbdae3e63ef483800edb2a3a507f) +++ src/main/kotlin/platform/mixin/handlers/InjectAnnotationHandler.kt (revision 3cdb8d8a91bbfb5becd1fe398503bc90bb3e8584) @@ -27,6 +27,7 @@ import com.demonwav.mcdev.platform.mixin.util.callbackInfoType import com.demonwav.mcdev.platform.mixin.util.getGenericReturnType import com.demonwav.mcdev.platform.mixin.util.hasAccess +import com.demonwav.mcdev.platform.mixin.util.isFabricMixin import com.demonwav.mcdev.platform.mixin.util.toPsiType import com.demonwav.mcdev.util.Parameter import com.demonwav.mcdev.util.findModule @@ -131,6 +132,10 @@ return listOf(MethodSignature(result, PsiTypes.voidType())) } + override fun canAlwaysBeStatic(method: PsiMethod): Boolean { + return method.isFabricMixin + } + override val allowCoerce = true override val mixinExtrasExpressionContextType = ExpressionContext.Type.INJECT Index: src/main/kotlin/platform/mixin/handlers/InjectorAnnotationHandler.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/InjectorAnnotationHandler.kt (revision 6cdba448eda1fbdae3e63ef483800edb2a3a507f) +++ src/main/kotlin/platform/mixin/handlers/InjectorAnnotationHandler.kt (revision 3cdb8d8a91bbfb5becd1fe398503bc90bb3e8584) @@ -45,6 +45,7 @@ import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiElement import com.intellij.psi.PsiEllipsisType +import com.intellij.psi.PsiMethod import com.intellij.psi.PsiType import com.intellij.psi.util.PsiModificationTracker import com.llamalad7.mixinextras.expression.impl.point.ExpressionContext @@ -171,6 +172,10 @@ return "Cannot resolve any target instructions in target class" } + open fun canAlwaysBeStatic(method: PsiMethod): Boolean { + return true + } + open val allowCoerce = false override val isEntryPoint = true Index: src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt (revision 6cdba448eda1fbdae3e63ef483800edb2a3a507f) +++ src/main/kotlin/platform/mixin/inspection/injector/InvalidInjectorMethodSignatureInspection.kt (revision 3cdb8d8a91bbfb5becd1fe398503bc90bb3e8584) @@ -133,19 +133,21 @@ ), ) } else if (!shouldBeStatic && modifiers.hasModifierProperty(PsiModifier.STATIC)) { + if (!handler.canAlwaysBeStatic(method)) { - reportedStatic = true - holder.registerProblem( - modifiers.findKeyword(PsiModifier.STATIC) ?: identifier, - "Method must not be static", - QuickFixFactory.getInstance().createModifierListFix( - modifiers, - PsiModifier.STATIC, - false, - false, - ), - ) - } - } + reportedStatic = true + holder.registerProblem( + modifiers.findKeyword(PsiModifier.STATIC) ?: identifier, + "Method must not be static", + QuickFixFactory.getInstance().createModifierListFix( + modifiers, + PsiModifier.STATIC, + false, + false, + ), + ) + } + } + } if (!reportedSignature) { // Check method parameters