save file content before rename; avoid NPE (IDEADEV-28707)
[fedora-idea.git] / lang-impl / src / com / intellij / psi / impl / file / PsiFileImplUtil.java
blob59790b31b21729c00a64867a7bedac718229b87f
1 package com.intellij.psi.impl.file;
3 import com.intellij.openapi.diagnostic.Logger;
4 import com.intellij.openapi.editor.Document;
5 import com.intellij.openapi.fileEditor.FileDocumentManager;
6 import com.intellij.openapi.vfs.VirtualFile;
7 import com.intellij.psi.PsiFile;
8 import com.intellij.psi.PsiManager;
9 import com.intellij.psi.impl.PsiManagerImpl;
10 import com.intellij.util.IncorrectOperationException;
12 import java.io.IOException;
13 import java.util.ArrayList;
14 import java.util.List;
16 public class PsiFileImplUtil {
17 private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.file.PsiFileImplUtil");
19 public static PsiFile setName(final PsiFile file, String newName) throws IncorrectOperationException {
20 VirtualFile vFile = file.getViewProvider().getVirtualFile();
21 PsiManagerImpl manager = (PsiManagerImpl)file.getManager();
23 try{
24 final FileDocumentManager fdm = FileDocumentManager.getInstance();
25 final Document doc = fdm.getCachedDocument(vFile);
26 if (doc != null) {
27 fdm.saveDocument(doc);
30 vFile.rename(manager, newName);
32 catch(IOException e){
33 throw new IncorrectOperationException(e.toString(),e);
36 return file.getViewProvider().isPhysical() ? manager.findFile(vFile) : file;
39 public static void checkSetName(PsiFile file, String name) throws IncorrectOperationException {
40 VirtualFile vFile = file.getVirtualFile();
41 VirtualFile parentFile = vFile.getParent();
42 if (parentFile == null) return;
43 VirtualFile child = parentFile.findChild(name);
44 if (child != null && !child.equals(vFile)){
45 throw new IncorrectOperationException("File " + child.getPresentableUrl() + " already exists.");
49 public static void doDelete(final PsiFile file) throws IncorrectOperationException {
50 final PsiManagerImpl manager = (PsiManagerImpl)file.getManager();
52 final VirtualFile vFile = file.getVirtualFile();
53 try{
54 vFile.delete(manager);
56 catch(IOException e){
57 throw new IncorrectOperationException(e.toString(),e);
61 public static PsiFile[] getPsiFilesByVirtualFiles(VirtualFile[] files, PsiManager manager) {
62 List<PsiFile> psiFiles = new ArrayList<PsiFile>();
63 for (VirtualFile file : files) {
64 PsiFile psiFile = manager.findFile(file);
65 if (psiFile != null) {
66 psiFiles.add(psiFile);
69 return psiFiles.toArray(new PsiFile[psiFiles.size()]);
72 public static PsiFile[] getPsiFilesByVirtualFiles(List<VirtualFile> files, PsiManager manager) {
73 List<PsiFile> psiFiles = new ArrayList<PsiFile>();
75 for (VirtualFile file : files) {
76 PsiFile psiFile = manager.findFile(file);
77 if (psiFile != null) {
78 psiFiles.add(psiFile);
81 return psiFiles.toArray(new PsiFile[psiFiles.size()]);