【发布时间】:2018-12-30 20:12:31
【问题描述】:
我正在使用 IntelliJ IDEA 社区版创建一个 PhpStorm 插件,我想知道如何从 PSIFile 或 VirtualFile 在磁盘上创建文件。
这是我的代码:(上下文是来自 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 文件、重命名类名、添加方法、属性、doc 块并将其保存到磁盘的过程,但我不了解 PSI 元素。
【问题讨论】:
标签: java intellij-idea intellij-plugin