User: joe Date: 23 Jan 24 15:01 Revision: 6fd621022cbd97d54c8519fa7ad81c4f7aab6da0 Summary: Complete INVOKE, INVOKE_ASSIGN, FIELD to target = "", and CONSTANT to args = "" TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=9041&personal=false Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantInjectionPoint.kt (revision 7b7c035363d8bc6b816dceab027510bb1a997f93) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/ConstantInjectionPoint.kt (revision 6fd621022cbd97d54c8519fa7ad81c4f7aab6da0) @@ -26,6 +26,7 @@ import com.demonwav.mcdev.util.descriptor import com.demonwav.mcdev.util.ifNotBlank import com.intellij.codeInsight.lookup.LookupElementBuilder +import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.CommonClassNames import com.intellij.psi.JavaPsiFacade @@ -38,6 +39,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.PsiExpression import com.intellij.psi.PsiForeachStatement +import com.intellij.psi.PsiLiteral import com.intellij.psi.PsiLiteralExpression import com.intellij.psi.PsiSwitchLabelStatementBase import com.intellij.psi.util.PsiUtil @@ -55,6 +57,10 @@ import org.objectweb.asm.tree.TypeInsnNode class ConstantInjectionPoint : InjectionPoint() { + override fun onCompleted(editor: Editor, reference: PsiLiteral) { + completeExtraStringAtAttribute(editor, reference, "args") + } + fun getConstantInfo(at: PsiAnnotation): ConstantInfo? { val args = AtResolver.getArgs(at) val nullValue = args["nullValue"]?.let(java.lang.Boolean::parseBoolean) ?: false Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/FieldInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/FieldInjectionPoint.kt (revision 7b7c035363d8bc6b816dceab027510bb1a997f93) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/FieldInjectionPoint.kt (revision 6fd621022cbd97d54c8519fa7ad81c4f7aab6da0) @@ -29,11 +29,13 @@ import com.demonwav.mcdev.util.getQualifiedMemberReference import com.intellij.codeInsight.completion.JavaLookupElementBuilder import com.intellij.codeInsight.lookup.LookupElementBuilder +import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.PsiAnnotation import com.intellij.psi.PsiArrayAccessExpression import com.intellij.psi.PsiClass import com.intellij.psi.PsiField +import com.intellij.psi.PsiLiteral import com.intellij.psi.PsiMethodReferenceExpression import com.intellij.psi.PsiModifier import com.intellij.psi.PsiReferenceExpression @@ -50,6 +52,10 @@ private val VALID_OPCODES = setOf(Opcodes.GETFIELD, Opcodes.GETSTATIC, Opcodes.PUTFIELD, Opcodes.PUTSTATIC) } + override fun onCompleted(editor: Editor, reference: PsiLiteral) { + completeExtraStringAtAttribute(editor, reference, "target") + } + private fun getArrayAccessType(args: Map): ArrayAccessType? { return when (args["array"]) { "length" -> ArrayAccessType.LENGTH Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/InjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/InjectionPoint.kt (revision 7b7c035363d8bc6b816dceab027510bb1a997f93) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/InjectionPoint.kt (revision 6fd621022cbd97d54c8519fa7ad81c4f7aab6da0) @@ -27,6 +27,7 @@ import com.demonwav.mcdev.platform.mixin.util.findOrConstructSourceMethod import com.demonwav.mcdev.util.constantStringValue import com.demonwav.mcdev.util.constantValue +import com.demonwav.mcdev.util.createLiteralExpression import com.demonwav.mcdev.util.equivalentTo import com.demonwav.mcdev.util.findAnnotations import com.demonwav.mcdev.util.fullQualifiedName @@ -55,6 +56,7 @@ import com.intellij.psi.PsiMethodReferenceExpression import com.intellij.psi.PsiReferenceExpression import com.intellij.psi.PsiSubstitutor +import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.util.PsiUtil import com.intellij.psi.util.parentOfType import com.intellij.serviceContainer.BaseKeyedLazyInstance @@ -81,6 +83,20 @@ open fun onCompleted(editor: Editor, reference: PsiLiteral) { } + protected fun completeExtraStringAtAttribute(editor: Editor, reference: PsiLiteral, attributeName: String) { + val at = reference.parentOfType() ?: return + if (at.findDeclaredAttributeValue(attributeName) != null) { + return + } + at.setDeclaredAttributeValue( + attributeName, + JavaPsiFacade.getElementFactory(reference.project).createLiteralExpression("") + ) + val formattedAt = CodeStyleManager.getInstance(reference.project).reformat(at) as PsiAnnotation + val targetElement = formattedAt.findDeclaredAttributeValue(attributeName) ?: return + editor.caretModel.moveToOffset(targetElement.textRange.startOffset + 1) + } + abstract fun createNavigationVisitor( at: PsiAnnotation, target: MixinSelector?, Index: src/main/kotlin/platform/mixin/handlers/injectionPoint/InvokeInjectionPoint.kt =================================================================== --- src/main/kotlin/platform/mixin/handlers/injectionPoint/InvokeInjectionPoint.kt (revision 7b7c035363d8bc6b816dceab027510bb1a997f93) +++ src/main/kotlin/platform/mixin/handlers/injectionPoint/InvokeInjectionPoint.kt (revision 6fd621022cbd97d54c8519fa7ad81c4f7aab6da0) @@ -22,6 +22,7 @@ import com.demonwav.mcdev.platform.mixin.reference.MixinSelector import com.demonwav.mcdev.util.MemberReference +import com.intellij.openapi.editor.Editor import com.intellij.openapi.project.Project import com.intellij.psi.CommonClassNames import com.intellij.psi.JavaPsiFacade @@ -30,6 +31,7 @@ import com.intellij.psi.PsiClassType import com.intellij.psi.PsiElement import com.intellij.psi.PsiForeachStatement +import com.intellij.psi.PsiLiteral import com.intellij.psi.PsiMethod import com.intellij.psi.PsiMethodCallExpression import com.intellij.psi.PsiNewExpression @@ -38,6 +40,10 @@ import org.objectweb.asm.tree.MethodNode abstract class AbstractInvokeInjectionPoint(private val assign: Boolean) : AbstractMethodInjectionPoint() { + override fun onCompleted(editor: Editor, reference: PsiLiteral) { + completeExtraStringAtAttribute(editor, reference, "target") + } + override fun createNavigationVisitor( at: PsiAnnotation, target: MixinSelector?,