@@ -84,6 +84,8 @@ import com.intellij.codeInsight.template.TemplateBuilderImpl
8484import com.intellij.codeInsight.template.TemplateEditingAdapter
8585import com.intellij.codeInsight.template.TemplateManager
8686import com.intellij.codeInsight.template.TextResult
87+ import com.intellij.injected.editor.VirtualFileWindow
88+ import com.intellij.lang.injection.InjectedLanguageManager
8789import com.intellij.openapi.application.runWriteAction
8890import com.intellij.openapi.command.CommandProcessor
8991import com.intellij.openapi.command.WriteCommandAction
@@ -103,6 +105,7 @@ import com.intellij.psi.PsiModifierList
103105import com.intellij.psi.codeStyle.CodeStyleManager
104106import com.intellij.psi.codeStyle.JavaCodeStyleManager
105107import com.intellij.psi.createSmartPointer
108+ import com.intellij.psi.impl.source.resolve.FileContextUtil
106109import com.intellij.psi.impl.source.tree.injected.InjectedLanguageEditorUtil
107110import com.intellij.psi.tree.TokenSet
108111import com.intellij.psi.util.PsiTreeUtil
@@ -1176,19 +1179,12 @@ object MEExpressionCompletionUtil {
11761179 definitionValue : String ,
11771180 crossinline andThen : (InsertionContext , PsiAnnotation ) -> Unit
11781181 ) = withInsertHandler { context, _ ->
1179- if (debugCompletionUnitTest) System .err.println (" Here 1" )
11801182 context.laterRunnable = Runnable {
1181- if (debugCompletionUnitTest) System .err.println (" Here 2" )
11821183 context.commitDocument()
1183- if (debugCompletionUnitTest) System .err.println (" Here 3" )
11841184 CommandProcessor .getInstance().runUndoTransparentAction {
1185- if (debugCompletionUnitTest) System .err.println (" Here 4" )
11861185 runWriteAction {
1187- if (debugCompletionUnitTest) System .err.println (" Here 5" )
11881186 val annotation = addDefinition(context, id, definitionValue)
1189- if (debugCompletionUnitTest) System .err.println (" Here 6" )
11901187 if (annotation != null ) {
1191- if (debugCompletionUnitTest) System .err.println (" Here 7" )
11921188 andThen(context, annotation)
11931189 }
11941190 }
@@ -1197,7 +1193,6 @@ object MEExpressionCompletionUtil {
11971193 }
11981194
11991195 private fun addDefinition (context : InsertionContext , id : String , definitionValue : String ): PsiAnnotation ? {
1200- if (debugCompletionUnitTest) System .err.println (" Here 8, ${context.startOffset} , ${context.file.text} " )
12011196 val contextElement = context.file.findElementAt(context.startOffset) ? : return null
12021197 return addDefinition(context.project, contextElement, id, definitionValue)
12031198 }
@@ -1208,18 +1203,39 @@ object MEExpressionCompletionUtil {
12081203 id : String ,
12091204 definitionValue : String
12101205 ): PsiAnnotation ? {
1211- if (debugCompletionUnitTest) System .err.println (" Here 9, $id " )
1206+ if (debugCompletionUnitTest) {
1207+ val injectedLanguageManager = InjectedLanguageManager .getInstance(project)
1208+ System .err.println (" Here 1" )
1209+ val injectionHostElement = injectedLanguageManager.getInjectionHost(contextElement) ? : run {
1210+ val injectedFile = contextElement.containingFile ? : return null
1211+ System .err.println (" Here 6, ${injectedFile.text} " )
1212+ val virtualFile = injectedFile.virtualFile ? : return null
1213+ System .err.println (" Here 7, ${virtualFile.javaClass.name} " )
1214+ if (virtualFile is VirtualFileWindow ) {
1215+ val hostPtr = injectedFile.getUserData(FileContextUtil .INJECTED_IN_ELEMENT ) ? : return null
1216+ System .err.println (" Here 8, $hostPtr " )
1217+ val hostElement = hostPtr.element ? : return null
1218+ System .err.println (" Here 9, ${hostElement.text} " )
1219+ }
1220+ return null
1221+ }
1222+ System .err.println (" Here 2, ${injectionHostElement.text} " )
1223+ val injectionHostFile = injectionHostElement.containingFile ? : return null
1224+ System .err.println (" Here 3, ${injectionHostFile.text} " )
1225+ val hostOffset =
1226+ injectedLanguageManager.injectedToHost(contextElement, contextElement.textRange.startOffset)
1227+ System .err.println (" Here 4, ${contextElement.textRange.startOffset} , $hostOffset " )
1228+ val hostElement = injectionHostFile.findElementAt(hostOffset) ? : return null
1229+ System .err.println (" Here 5, ${hostElement.text} " )
1230+ }
1231+
12121232 val injectionHost = contextElement.findMultiInjectionHost() ? : return null
1213- if (debugCompletionUnitTest) System .err.println (" Here 10" )
12141233 val expressionAnnotation = injectionHost.parentOfType<PsiAnnotation >() ? : return null
1215- if (debugCompletionUnitTest) System .err.println (" Here 11" )
12161234 if (! expressionAnnotation.hasQualifiedName(MixinConstants .MixinExtras .EXPRESSION )) {
12171235 return null
12181236 }
1219- if (debugCompletionUnitTest) System .err.println (" Here 12" )
12201237 val modifierList = expressionAnnotation.findContainingModifierList() ? : return null
12211238
1222- if (debugCompletionUnitTest) System .err.println (" Here 13" )
12231239 // look for an existing definition with this id, skip if it exists
12241240 for (annotation in modifierList.annotations) {
12251241 if (annotation.hasQualifiedName(MixinConstants .MixinExtras .DEFINITION ) &&
@@ -1228,7 +1244,6 @@ object MEExpressionCompletionUtil {
12281244 return null
12291245 }
12301246 }
1231- if (debugCompletionUnitTest) System .err.println (" Here 14" )
12321247
12331248 // create and add the new @Definition annotation
12341249 var newAnnotation = JavaPsiFacade .getElementFactory(project).createAnnotationFromText(
@@ -1243,19 +1258,15 @@ object MEExpressionCompletionUtil {
12431258 anchor = expressionAnnotation
12441259 }
12451260 }
1246- if (debugCompletionUnitTest) System .err.println (" Here 15, ${newAnnotation.text} , ${anchor?.text} " )
12471261 newAnnotation = modifierList.addAfter(newAnnotation, anchor) as PsiAnnotation
12481262
12491263 // add imports and reformat
1250- if (debugCompletionUnitTest) System .err.println (" Here 16" )
12511264 newAnnotation =
12521265 JavaCodeStyleManager .getInstance(project).shortenClassReferences(newAnnotation) as PsiAnnotation
12531266 JavaCodeStyleManager .getInstance(project).optimizeImports(modifierList.containingFile)
1254- if (debugCompletionUnitTest) System .err.println (" Here 17" )
12551267 val annotationIndex = modifierList.annotations.indexOf(newAnnotation)
12561268 val formattedModifierList =
12571269 CodeStyleManager .getInstance(project).reformat(modifierList) as PsiModifierList
1258- if (debugCompletionUnitTest) System .err.println (" Here 18" )
12591270 return formattedModifierList.annotations.getOrNull(annotationIndex)
12601271 }
12611272
0 commit comments