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() { + } + } + """, + ) + } +}