User: joe Date: 06 Dec 25 15:30 Revision: 84af97366c71b8e61aeefbf190755b9abdca212a Summary: Use new Minecraft versioning scheme to recognize unobfuscated Minecraft TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=10337&personal=false Index: src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt =================================================================== --- src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -992,7 +992,7 @@ val locals = localsHere.filter { it.index == index } val elementFactory = JavaPsiFacade.getElementFactory(project) - val hasNamedLocalVariables = mixinClass.findModule()?.hasNamedLocalVariables(targetClass.name.replace('/', '.')) != false + val hasNamedLocalVariables = mixinClass.hasNamedLocalVariables(targetClass.name.replace('/', '.')) return locals.map { localVariable -> val localPsiType = if (localVariable.signature != null) { Index: src/main/kotlin/platform/mixin/inspection/injector/ModifyVariableMayUseNameInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/injector/ModifyVariableMayUseNameInspection.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/main/kotlin/platform/mixin/inspection/injector/ModifyVariableMayUseNameInspection.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -119,7 +119,7 @@ var variableName: String? = null for (targetClass in mixinTargets) { - if (!module.hasNamedLocalVariables(targetClass.name.replace('/', '.'))) { + if (!injectorAnnotation.hasNamedLocalVariables(targetClass.name.replace('/', '.'))) { return null } Index: src/main/kotlin/platform/mixin/inspection/mixinextras/InjectLocalCaptureReplaceWithLocalInspection.kt =================================================================== --- src/main/kotlin/platform/mixin/inspection/mixinextras/InjectLocalCaptureReplaceWithLocalInspection.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/main/kotlin/platform/mixin/inspection/mixinextras/InjectLocalCaptureReplaceWithLocalInspection.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -119,7 +119,7 @@ val hasNamedLocalVariables = MixinAnnotationHandler.resolveTarget(annotation).all { it is MethodTargetMember && - annotation.findModule()?.hasNamedLocalVariables(it.classAndMethod.clazz.name.replace('/', '.')) != false + annotation.hasNamedLocalVariables(it.classAndMethod.clazz.name.replace('/', '.')) } // based on the resolved local variables, figure out what @Local specifiers to use Index: src/main/kotlin/platform/mixin/util/MinecraftMissingLVTChecker.kt =================================================================== --- src/main/kotlin/platform/mixin/util/MinecraftMissingLVTChecker.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/main/kotlin/platform/mixin/util/MinecraftMissingLVTChecker.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -20,16 +20,20 @@ package com.demonwav.mcdev.platform.mixin.util -import com.intellij.openapi.module.Module +import com.demonwav.mcdev.util.MinecraftVersions +import com.demonwav.mcdev.util.mcVersion import com.intellij.openapi.util.registry.Registry +import com.intellij.psi.PsiElement class MinecraftMissingLVTChecker : MissingLVTChecker { - override fun hasMissingLVT(module: Module, className: String): Boolean { - return if (className.startsWith("net.minecraft.") || className.startsWith("com.mojang.blaze3d.")) { - // TODO: we'll be able to handle this better when we know which Minecraft version will be unobfuscated - !Registry.`is`("mcdev.unobfuscated.minecraft") - } else { - false + override fun hasMissingLVT(context: PsiElement, className: String): Boolean { + return when { + Registry.`is`("mcdev.unobfuscated.minecraft") -> false + !className.startsWith("net.minecraft.") && !className.startsWith("com.mojang.blaze3d.") -> false + else -> { + val mcVersion = context.mcVersion + mcVersion != null && mcVersion <= MinecraftVersions.MC25_4 - } - } -} + } + } + } +} Index: src/main/kotlin/platform/mixin/util/MissingLVTChecker.kt =================================================================== --- src/main/kotlin/platform/mixin/util/MissingLVTChecker.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/main/kotlin/platform/mixin/util/MissingLVTChecker.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -21,12 +21,12 @@ package com.demonwav.mcdev.platform.mixin.util import com.intellij.openapi.extensions.ExtensionPointName -import com.intellij.openapi.module.Module +import com.intellij.psi.PsiElement interface MissingLVTChecker { companion object { val EP_NAME = ExtensionPointName.create("com.demonwav.minecraft-dev.missingLVTChecker") } - fun hasMissingLVT(module: Module, className: String): Boolean + fun hasMissingLVT(context: PsiElement, className: String): Boolean } Index: src/main/kotlin/platform/mixin/util/Mixin.kt =================================================================== --- src/main/kotlin/platform/mixin/util/Mixin.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/main/kotlin/platform/mixin/util/Mixin.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -300,7 +300,7 @@ return SemanticVersion.tryParse(version) } -fun Module.hasNamedLocalVariables(className: String): Boolean { +fun PsiElement.hasNamedLocalVariables(className: String): Boolean { for (checker in MissingLVTChecker.EP_NAME.extensionList) { if (checker.hasMissingLVT(this, className)) { return false Index: src/main/kotlin/util/MinecraftVersions.kt =================================================================== --- src/main/kotlin/util/MinecraftVersions.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/main/kotlin/util/MinecraftVersions.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -46,6 +46,7 @@ val MC1_20_6 = SemanticVersion.release(1, 20, 6) val MC1_21 = SemanticVersion.release(1, 21) val MC1_21_1 = SemanticVersion.release(1, 21, 1) + val MC25_4 = SemanticVersion.release(25, 4) // placeholder till we know what the last 2025 winter drop version is fun requiredJavaVersion(minecraftVersion: SemanticVersion) = when { minecraftVersion <= MC1_16_5 -> JavaSdkVersion.JDK_1_8 Index: src/test/kotlin/platform/mixin/expression/MEExpressionCompletionTest.kt =================================================================== --- src/test/kotlin/platform/mixin/expression/MEExpressionCompletionTest.kt (revision 5cc5385853cd47917fbe51556821da9471b8aaa0) +++ src/test/kotlin/platform/mixin/expression/MEExpressionCompletionTest.kt (revision 84af97366c71b8e61aeefbf190755b9abdca212a) @@ -27,8 +27,8 @@ import com.demonwav.mcdev.util.BeforeOrAfter import com.demonwav.mcdev.util.invokeDeclaredMethod import com.intellij.codeInsight.lookup.Lookup -import com.intellij.openapi.module.Module import com.intellij.openapi.util.text.StringUtil +import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.testFramework.ExtensionTestUtil import com.intellij.testFramework.fixtures.impl.CodeInsightTestFixtureImpl @@ -806,6 +806,6 @@ } private object AlwaysMissingLVTChecker : MissingLVTChecker { - override fun hasMissingLVT(module: Module, className: String) = true + override fun hasMissingLVT(context: PsiElement, className: String) = true } }