User: joe Date: 20 May 25 14:45 Revision: 94886bc3be3973c8724c3cff507b1c492ea9a1c5 Summary: Add some different debugging TeamCity URL: https://ci.mcdev.io/viewModification.html?tab=vcsModificationFiles&modId=10021&personal=false Index: src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt =================================================================== --- src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision 134768c6e806993fec9640857868e85eea26a9f5) +++ src/main/kotlin/platform/mixin/expression/MEExpressionCompletionUtil.kt (revision 94886bc3be3973c8724c3cff507b1c492ea9a1c5) @@ -84,6 +84,8 @@ import com.intellij.codeInsight.template.TemplateEditingAdapter import com.intellij.codeInsight.template.TemplateManager import com.intellij.codeInsight.template.TextResult +import com.intellij.injected.editor.VirtualFileWindow +import com.intellij.lang.injection.InjectedLanguageManager import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.command.CommandProcessor import com.intellij.openapi.command.WriteCommandAction @@ -103,6 +105,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager import com.intellij.psi.codeStyle.JavaCodeStyleManager import com.intellij.psi.createSmartPointer +import com.intellij.psi.impl.source.resolve.FileContextUtil import com.intellij.psi.impl.source.tree.injected.InjectedLanguageEditorUtil import com.intellij.psi.tree.TokenSet import com.intellij.psi.util.PsiTreeUtil @@ -1176,19 +1179,12 @@ definitionValue: String, crossinline andThen: (InsertionContext, PsiAnnotation) -> Unit ) = withInsertHandler { context, _ -> - if (debugCompletionUnitTest) System.err.println("Here 1") context.laterRunnable = Runnable { - if (debugCompletionUnitTest) System.err.println("Here 2") context.commitDocument() - if (debugCompletionUnitTest) System.err.println("Here 3") CommandProcessor.getInstance().runUndoTransparentAction { - if (debugCompletionUnitTest) System.err.println("Here 4") runWriteAction { - if (debugCompletionUnitTest) System.err.println("Here 5") val annotation = addDefinition(context, id, definitionValue) - if (debugCompletionUnitTest) System.err.println("Here 6") if (annotation != null) { - if (debugCompletionUnitTest) System.err.println("Here 7") andThen(context, annotation) } } @@ -1197,7 +1193,6 @@ } private fun addDefinition(context: InsertionContext, id: String, definitionValue: String): PsiAnnotation? { - if (debugCompletionUnitTest) System.err.println("Here 8, ${context.startOffset}, ${context.file.text}") val contextElement = context.file.findElementAt(context.startOffset) ?: return null return addDefinition(context.project, contextElement, id, definitionValue) } @@ -1208,18 +1203,39 @@ id: String, definitionValue: String ): PsiAnnotation? { - if (debugCompletionUnitTest) System.err.println("Here 9, $id") + if (debugCompletionUnitTest) { + val injectedLanguageManager = InjectedLanguageManager.getInstance(project) + System.err.println("Here 1") + val injectionHostElement = injectedLanguageManager.getInjectionHost(contextElement) ?: run { + val injectedFile = contextElement.containingFile ?: return null + System.err.println("Here 6, ${injectedFile.text}") + val virtualFile = injectedFile.virtualFile ?: return null + System.err.println("Here 7, ${virtualFile.javaClass.name}") + if (virtualFile is VirtualFileWindow) { + val hostPtr = injectedFile.getUserData(FileContextUtil.INJECTED_IN_ELEMENT) ?: return null + System.err.println("Here 8, $hostPtr") + val hostElement = hostPtr.element ?: return null + System.err.println("Here 9, ${hostElement.text}") + } + return null + } + System.err.println("Here 2, ${injectionHostElement.text}") + val injectionHostFile = injectionHostElement.containingFile ?: return null + System.err.println("Here 3, ${injectionHostFile.text}") + val hostOffset = + injectedLanguageManager.injectedToHost(contextElement, contextElement.textRange.startOffset) + System.err.println("Here 4, ${contextElement.textRange.startOffset}, $hostOffset") + val hostElement = injectionHostFile.findElementAt(hostOffset) ?: return null + System.err.println("Here 5, ${hostElement.text}") + } + val injectionHost = contextElement.findMultiInjectionHost() ?: return null - if (debugCompletionUnitTest) System.err.println("Here 10") val expressionAnnotation = injectionHost.parentOfType() ?: return null - if (debugCompletionUnitTest) System.err.println("Here 11") if (!expressionAnnotation.hasQualifiedName(MixinConstants.MixinExtras.EXPRESSION)) { return null } - if (debugCompletionUnitTest) System.err.println("Here 12") val modifierList = expressionAnnotation.findContainingModifierList() ?: return null - if (debugCompletionUnitTest) System.err.println("Here 13") // look for an existing definition with this id, skip if it exists for (annotation in modifierList.annotations) { if (annotation.hasQualifiedName(MixinConstants.MixinExtras.DEFINITION) && @@ -1228,7 +1244,6 @@ return null } } - if (debugCompletionUnitTest) System.err.println("Here 14") // create and add the new @Definition annotation var newAnnotation = JavaPsiFacade.getElementFactory(project).createAnnotationFromText( @@ -1243,19 +1258,15 @@ anchor = expressionAnnotation } } - if (debugCompletionUnitTest) System.err.println("Here 15, ${newAnnotation.text}, ${anchor?.text}") newAnnotation = modifierList.addAfter(newAnnotation, anchor) as PsiAnnotation // add imports and reformat - if (debugCompletionUnitTest) System.err.println("Here 16") newAnnotation = JavaCodeStyleManager.getInstance(project).shortenClassReferences(newAnnotation) as PsiAnnotation JavaCodeStyleManager.getInstance(project).optimizeImports(modifierList.containingFile) - if (debugCompletionUnitTest) System.err.println("Here 17") val annotationIndex = modifierList.annotations.indexOf(newAnnotation) val formattedModifierList = CodeStyleManager.getInstance(project).reformat(modifierList) as PsiModifierList - if (debugCompletionUnitTest) System.err.println("Here 18") return formattedModifierList.annotations.getOrNull(annotationIndex) }