User: joe
Date: 11 Nov 26 20:32
Revision: 6d15ccda2caf27aa9c928f91cfb66aae1d5fa4e4
Summary:
Fix #2659
TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10716&personal=false
Index: src/main/kotlin/platform/mixin/inspection/reference/UnqualifiedMemberReferenceInspection.kt
===================================================================
--- src/main/kotlin/platform/mixin/inspection/reference/UnqualifiedMemberReferenceInspection.kt (revision 195928ff6823f8661d4dbfd014b197e99c7a7eff)
+++ src/main/kotlin/platform/mixin/inspection/reference/UnqualifiedMemberReferenceInspection.kt (revision 6d15ccda2caf27aa9c928f91cfb66aae1d5fa4e4)
@@ -23,6 +23,7 @@
import com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.AtResolver
import com.demonwav.mcdev.platform.mixin.inspection.MixinAnnotationAttributeInspection
import com.demonwav.mcdev.platform.mixin.reference.parseMixinSelector
+import com.demonwav.mcdev.platform.mixin.util.MemberInfo
import com.demonwav.mcdev.platform.mixin.util.MixinConstants.Annotations.AT
import com.intellij.codeInspection.ProblemsHolder
import com.intellij.psi.PsiAnnotation
@@ -44,7 +45,8 @@
// TODO: Quick fix
- val selector = parseMixinSelector(value) ?: return
+ // Only plain member references need to be qualified, other selectors (e.g. regex) have their own rules
+ val selector = parseMixinSelector(value) as? MemberInfo ?: return
if (!selector.qualified) {
holder.registerProblem(value, "Unqualified member reference in @At target")
return
Index: src/test/kotlin/platform/mixin/UnqualifiedMemberReferenceInspectionTest.kt
===================================================================
--- src/test/kotlin/platform/mixin/UnqualifiedMemberReferenceInspectionTest.kt (revision 6d15ccda2caf27aa9c928f91cfb66aae1d5fa4e4)
+++ src/test/kotlin/platform/mixin/UnqualifiedMemberReferenceInspectionTest.kt (revision 6d15ccda2caf27aa9c928f91cfb66aae1d5fa4e4)
@@ -0,0 +1,90 @@
+/*
+ * Minecraft Development for IntelliJ
+ *
+ * https://mcdev.io/
+ *
+ * Copyright (C) 2025 minecraft-dev
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published
+ * by the Free Software Foundation, version 3.0 only.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ */
+
+package com.demonwav.mcdev.platform.mixin
+
+import com.demonwav.mcdev.framework.EdtInterceptor
+import com.demonwav.mcdev.platform.mixin.inspection.reference.UnqualifiedMemberReferenceInspection
+import org.intellij.lang.annotations.Language
+import org.junit.jupiter.api.DisplayName
+import org.junit.jupiter.api.Test
+import org.junit.jupiter.api.extension.ExtendWith
+
+@ExtendWith(EdtInterceptor::class)
+@DisplayName("Unqualified Member Reference Inspection Tests")
+class UnqualifiedMemberReferenceInspectionTest : BaseMixinTest() {
+
+ private fun doTest(@Language("JAVA") code: String) {
+ buildProject {
+ dir("test") {
+ java("UnqualifiedMemberReferenceMixin.java", code)
+ }
+ }
+
+ fixture.enableInspections(UnqualifiedMemberReferenceInspection::class)
+ fixture.checkHighlighting(false, false, false)
+ }
+
+ @Test
+ @DisplayName("Unqualified Member Reference")
+ fun unqualifiedMemberReference() {
+ doTest(
+ """
+ package test;
+
+ import com.demonwav.mcdev.mixintestdata.unnecessaryQualifiedMemberReference.MixedIn;
+ import org.spongepowered.asm.mixin.Mixin;
+ import org.spongepowered.asm.mixin.injection.At;
+ import org.spongepowered.asm.mixin.injection.Inject;
+
+ @Mixin(MixedIn.class)
+ class UnqualifiedMemberReferenceMixin {
+
+ @Inject(method = "method", at = @At(value = "INVOKE", target = "otherMethod"))
+ public void onMethod() {
+ }
+ }
+ """,
+ )
+ }
+
+ @Test
+ @DisplayName("Regex Selector")
+ fun regexSelector() {
+ doTest(
+ """
+ package test;
+
+ import com.demonwav.mcdev.mixintestdata.unnecessaryQualifiedMemberReference.MixedIn;
+ import org.spongepowered.asm.mixin.Mixin;
+ import org.spongepowered.asm.mixin.injection.At;
+ import org.spongepowered.asm.mixin.injection.Inject;
+
+ @Mixin(MixedIn.class)
+ class UnqualifiedMemberReferenceMixin {
+
+ @Inject(method = "method", at = @At(value = "INVOKE", target = "/other(Method|Thing)/"))
+ public void onMethod() {
+ }
+ }
+ """,
+ )
+ }
+}