User: joe
Date: 21 Jul 24 16:40
Revision: faef71f90ea7e46e0f0f483b0ce7ae834ca5059d
Summary:
Discourage usage of JUMP
TeamCity URL: http://ci.mcdev.io:80/viewModification.html?tab=vcsModificationFiles&modId=9494&personal=false
Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/InjectionPoint.kt
===================================================================
--- src/main/kotlin/platform/mixin/handlers/injectionPoint/InjectionPoint.kt (revision 3f2c1217554a95475dca6c60060f0dbfa6506d7a)
+++ src/main/kotlin/platform/mixin/handlers/injectionPoint/InjectionPoint.kt (revision faef71f90ea7e46e0f0f483b0ce7ae834ca5059d)
@@ -108,6 +108,8 @@
open fun isArgValueList(at: PsiAnnotation, key: String) = false
+ open val isDiscouraged: Boolean = false
+
abstract fun createNavigationVisitor(
at: PsiAnnotation,
target: MixinSelector?,
Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/JumpInjectionPoint.kt
===================================================================
--- src/main/kotlin/platform/mixin/handlers/injectionPoint/JumpInjectionPoint.kt (revision 3f2c1217554a95475dca6c60060f0dbfa6506d7a)
+++ src/main/kotlin/platform/mixin/handlers/injectionPoint/JumpInjectionPoint.kt (revision faef71f90ea7e46e0f0f483b0ce7ae834ca5059d)
@@ -57,6 +57,8 @@
)
}
+ override val isDiscouraged = true
+
override fun createNavigationVisitor(
at: PsiAnnotation,
target: MixinSelector?,
Index: src/main/kotlin/platform/mixin/inspection/injector/DiscouragedInjectionPointInspection.kt
===================================================================
--- src/main/kotlin/platform/mixin/inspection/injector/DiscouragedInjectionPointInspection.kt (revision faef71f90ea7e46e0f0f483b0ce7ae834ca5059d)
+++ src/main/kotlin/platform/mixin/inspection/injector/DiscouragedInjectionPointInspection.kt (revision faef71f90ea7e46e0f0f483b0ce7ae834ca5059d)
@@ -0,0 +1,47 @@
+/*
+ * Minecraft Development for IntelliJ
+ *
+ * https://mcdev.io/
+ *
+ * Copyright (C) 2024 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.inspection.injector
+
+import com.demonwav.mcdev.platform.mixin.handlers.injectionPoint.InjectionPoint
+import com.demonwav.mcdev.platform.mixin.inspection.MixinInspection
+import com.demonwav.mcdev.platform.mixin.util.MixinConstants
+import com.demonwav.mcdev.util.constantStringValue
+import com.intellij.codeInspection.ProblemsHolder
+import com.intellij.psi.JavaElementVisitor
+import com.intellij.psi.PsiAnnotation
+import com.intellij.psi.PsiElementVisitor
+
+class DiscouragedInjectionPointInspection : MixinInspection() {
+ override fun getStaticDescription() = "Reports when a discouraged injection point is used"
+
+ override fun buildVisitor(holder: ProblemsHolder): PsiElementVisitor = object : JavaElementVisitor() {
+ override fun visitAnnotation(annotation: PsiAnnotation) {
+ if (!annotation.hasQualifiedName(MixinConstants.Annotations.AT)) {
+ return
+ }
+ val atValue = annotation.findDeclaredAttributeValue("value") ?: return
+ val atCode = atValue.constantStringValue ?: return
+ if (InjectionPoint.byAtCode(atCode)?.isDiscouraged == true) {
+ holder.registerProblem(atValue, "Usage of $atCode is discouraged")
+ }
+ }
+ }
+}
Index: src/main/kotlin/platform/mixin/reference/InjectionPointReference.kt
===================================================================
--- src/main/kotlin/platform/mixin/reference/InjectionPointReference.kt (revision 3f2c1217554a95475dca6c60060f0dbfa6506d7a)
+++ src/main/kotlin/platform/mixin/reference/InjectionPointReference.kt (revision faef71f90ea7e46e0f0f483b0ce7ae834ca5059d)
@@ -87,6 +87,9 @@
override fun collectVariants(context: PsiElement): Array {
return (
getAllAtCodes(context.project).keys.asSequence()
+ .filter {
+ InjectionPoint.byAtCode(it)?.isDiscouraged != true
+ }
.map {
PrioritizedLookupElement.withPriority(
LookupElementBuilder.create(it).completeInjectionPoint(context),
Index: src/main/resources/META-INF/plugin.xml
===================================================================
--- src/main/resources/META-INF/plugin.xml (revision 3f2c1217554a95475dca6c60060f0dbfa6506d7a)
+++ src/main/resources/META-INF/plugin.xml (revision faef71f90ea7e46e0f0f483b0ce7ae834ca5059d)
@@ -1018,6 +1018,14 @@
level="WARNING"
hasStaticDescription="true"
implementationClass="com.demonwav.mcdev.platform.mixin.inspection.injector.CtorHeadPostInitInspection"/>
+