@@ -2,49 +2,44 @@ package com.github.xepozz.php_dump.actions
22
33import com.github.xepozz.php_dump.toolWindow.tabs.CompositeWindowTabsState
44import com.intellij.icons.AllIcons
5- import com.intellij.ide.scratch.ScratchFileActions
6- import com.intellij.ide.scratch.ScratchFileCreationHelper
7- import com.intellij.ide.scratch.ScratchFileService
85import com.intellij.lang.Language
96import com.intellij.openapi.actionSystem.AnAction
107import com.intellij.openapi.actionSystem.AnActionEvent
8+ import com.intellij.openapi.editor.event.DocumentEvent
9+ import com.intellij.openapi.editor.event.DocumentListener
10+ import com.intellij.openapi.fileEditor.FileEditorManager
1111import com.intellij.openapi.project.Project
12- import com.intellij.openapi.util.IntellijInternalApi
13- import com.intellij.openapi.vfs.AsyncFileListener
14- import com.intellij.openapi.vfs.VirtualFileManager
15- import com.intellij.openapi.vfs.newvfs.events.VFileEvent
16- import com.intellij.openapi.vfs.readText
12+ import com.intellij.psi.PsiDocumentManager
13+ import com.intellij.psi.PsiManager
14+ import com.intellij.testFramework.LightVirtualFile
1715
1816class EditPhpSnippetAction (
1917 val project : Project ,
2018 val tabConfig : CompositeWindowTabsState .TabConfig ,
2119 val onUpdate : (String ) -> Unit ,
2220) :
2321 AnAction (" Edit PHP Snippet" , " Open PHP snippet in a temporary file" , AllIcons .General .ExternalTools ) {
24- @OptIn(IntellijInternalApi ::class )
25- override fun actionPerformed (e : AnActionEvent ) {
26- val context = ScratchFileCreationHelper .Context ()
27- context.text = tabConfig.snippet
28- context.language = Language .findLanguageByID(" InjectablePHP" )
29- context.createOption = ScratchFileService .Option .create_if_missing
3022
31- val psiFile = ScratchFileActions .doCreateNewScratch(project, context) ? : return
32- val virtualFile = psiFile.virtualFile
23+ val documentManager = PsiDocumentManager .getInstance(project)
3324
34- val virtualFileManager = VirtualFileManager .getInstance()
25+ override fun actionPerformed (e : AnActionEvent ) {
26+ val language = Language .findLanguageByID(" InjectablePHP" ) ? : return
3527
36- virtualFileManager.addAsyncFileListener(object : AsyncFileListener {
37- override fun prepareChange (events : List <VFileEvent >): AsyncFileListener .ChangeApplier ? {
38- events.find { it.file == virtualFile } ? : return null
28+ val virtualFile = LightVirtualFile (
29+ tabConfig.name,
30+ language,
31+ tabConfig.snippet,
32+ )
33+ val psiFile = PsiManager .getInstance(project).findFile(virtualFile)!!
3934
40- return object : AsyncFileListener .ChangeApplier {
41- override fun afterVfsChange () {
42- val newText= virtualFile.readText()
43- println (" newText: $newText " )
44- onUpdate(newText)
45- }
46- }
35+ val document = documentManager.getDocument(psiFile)!!
36+ document.addDocumentListener(object : DocumentListener {
37+ override fun documentChanged (event : DocumentEvent ) {
38+ val newText = event.document.text
39+ onUpdate(newText)
4740 }
48- }) {}
41+ })
42+
43+ FileEditorManager .getInstance(project).openFile(virtualFile, true )
4944 }
5045}
0 commit comments