@@ -33,14 +33,28 @@ import com.demonwav.mcdev.platform.mixin.util.mixinTargets
3333import com.demonwav.mcdev.util.findAnnotation
3434import com.demonwav.mcdev.util.findContainingClass
3535import com.demonwav.mcdev.util.findModule
36+ import com.intellij.codeInsight.intention.LowPriorityAction
37+ import com.intellij.codeInspection.LocalQuickFix
38+ import com.intellij.codeInspection.ProblemDescriptor
3639import com.intellij.codeInspection.ProblemsHolder
40+ import com.intellij.codeInspection.options.OptPane
41+ import com.intellij.modcommand.ModCommand
42+ import com.intellij.modcommand.ModCommandQuickFix
43+ import com.intellij.openapi.project.Project
3744import com.intellij.psi.JavaElementVisitor
3845import com.intellij.psi.PsiAnnotation
3946import com.intellij.psi.PsiMethod
4047
4148class ModifyVariableMayUseNameInspection : MixinInspection () {
49+ @JvmField
50+ var ignoreForImplicitLocals = false
51+
4252 override fun getStaticDescription () = " Reports @ModifyVariable injectors relying on index or ordinal that may use a name instead"
4353
54+ override fun getOptionsPane () = OptPane .pane(
55+ OptPane .checkbox(" ignoreForImplicitLocals" , " Ignore for implicit locals" )
56+ )
57+
4458 override fun buildVisitor (holder : ProblemsHolder ) = object : JavaElementVisitor () {
4559 override fun visitMethod (method : PsiMethod ) {
4660 val modifyVariable = method.findAnnotation(MODIFY_VARIABLE ) ? : return
@@ -51,11 +65,22 @@ class ModifyVariableMayUseNameInspection : MixinInspection() {
5165 MixinAnnotationHandler .forMixinAnnotation(MODIFY_VARIABLE ) as ? InjectorAnnotationHandler ? : return
5266 val localInfo = LocalInfo .fromAnnotation(localType, modifyVariable)
5367
68+ if (ignoreForImplicitLocals && localInfo.isImplicit) {
69+ return
70+ }
71+
5472 val variableName = getVariableNameToIntroduce(localInfo, injector, modifyVariable) ? : return
73+
74+ val fixes = mutableListOf<LocalQuickFix >(ReplaceWithNameFix (modifyVariable, variableName))
75+
76+ if (localInfo.isImplicit) {
77+ fixes + = IgnoreForImplicitLocalsFix ()
78+ }
79+
5580 holder.registerProblem(
5681 problemElement,
5782 " @ModifyVariable can use variable name" ,
58- ReplaceWithNameFix (modifyVariable, variableName ),
83+ * fixes.toTypedArray( ),
5984 )
6085 }
6186 }
@@ -68,6 +93,16 @@ class ModifyVariableMayUseNameInspection : MixinInspection() {
6893 override fun getFamilyName () = " Use variable name '$variableName '"
6994 }
7095
96+ private inner class IgnoreForImplicitLocalsFix : ModCommandQuickFix (), LowPriorityAction {
97+ override fun getFamilyName () = " Ignore for implicit locals"
98+
99+ override fun perform (project : Project , descriptor : ProblemDescriptor ): ModCommand {
100+ return ModCommand .updateInspectionOption(descriptor.psiElement, this @ModifyVariableMayUseNameInspection) {
101+ it.ignoreForImplicitLocals = true
102+ }
103+ }
104+ }
105+
71106 companion object {
72107 fun getVariableNameToIntroduce (
73108 localInfo : LocalInfo ,
0 commit comments