Как создать файл из события действия для плагина IntelliJ? - PullRequest
0 голосов
/ 30 декабря 2018

Я создаю плагин PhpStorm с IntelliJ IDEA Community Edition, и я хотел бы знать, как создать файл на диске из PSIFile или VirtualFile.

Вот мой код: (Thecontext - это действие от NewGroup)

Я пытался использовать метод PsiDirectory.copyFileFrom для создания файла, но у меня есть исключение com.intellij.util.IncorrectOperationException: Cannot copy non-physical file: PHP file

package fr.florent.idea.zendgenerator.action.NewGroup;

import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.fileEditor.impl.LoadTextUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiFileFactory;
import com.intellij.util.ResourceUtil;
import com.jetbrains.php.lang.PhpFileType;
import fr.florent.idea.zendgenerator.action.AbstractDumbAwareAction;
import icons.PhpIcons;
import org.jetbrains.annotations.NotNull;

import java.net.URL;

public class CreateQueryAction extends AbstractDumbAwareAction {

    public CreateQueryAction() {
        super("Query", "Create query", PhpIcons.Php_icon);
    }

    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
        URL url = ResourceUtil.getResource(getClass(), "templates", "query.php"); // it contains an empty PHP class
        VirtualFile virtualFile = VfsUtil.findFileByURL(url);

        PsiFile file = PsiFileFactory.getInstance(e.getProject()).createFileFromText(
                virtualFile.getPath(),
                PhpFileType.INSTANCE,
                LoadTextUtil.loadText(virtualFile)
        );

        PsiDirectory directory = LangDataKeys.IDE_VIEW.getData(e.getDataContext()).getOrChooseDirectory();

        directory.copyFileFrom("query.php", file);

        System.out.println("Create query");
    }
}

Я хотел бы иметьфайл, созданный в папке проекта из контекста моего действия.

Было бы здорово, если бы кто-то смог объяснить процесс создания файла в плагине IntelliJ.Я думаю, что документы действительно легкие.

В моем случае я хотел бы иметь процесс редактирования файла query.php, переименования класса, добавления метода, свойств, блока документов и сохранения его на диск.но я не понимаю элемент PSI.

1 Ответ

0 голосов
/ 01 января 2019

Вы можете задать этот вопрос также на форуме JB , есть похожий вопрос: https://intellij -support.jetbrains.com / hc / en-us / community / posts / 360001787320-Create-VirtualFile-or-PsiFile-from-content

Ответ:

final PsiFileFactory factory = PsiFileFactory.getInstance(project);

final PsiFile file = factory.createFileFromText(language, text);
...