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"/> +