VfsUtil moves back to platform-api; VirtualFile dependencies on VfsUtil moved elsewhere

This commit is contained in:
Dmitry Jemerov
2011-08-19 20:48:31 +04:00
parent 72a7c46665
commit 532435decc
6 changed files with 38 additions and 36 deletions
@@ -179,7 +179,7 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica
*/
public void rename(Object requestor, @NotNull @NonNls String newName) throws IOException {
if (getName().equals(newName)) return;
if (!VfsUtil.isValidName(newName)) {
if (!isValidName(newName)) {
throw new IOException(VfsBundle.message("file.invalid.name.error", newName));
}
@@ -321,7 +321,7 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica
throw new IOException(VfsBundle.message("invalid.directory.create.files"));
}
if (!VfsUtil.isValidName(name)) {
if (!isValidName(name)) {
throw new IOException(VfsBundle.message("directory.invalid.name.error", name));
}
@@ -351,7 +351,7 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica
throw new IOException(VfsBundle.message("invalid.directory.create.files"));
}
if (!VfsUtil.isValidName(name)) {
if (!isValidName(name)) {
throw new IOException(VfsBundle.message("file.invalid.name.error", name));
}
@@ -391,7 +391,7 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica
throw new IOException(VfsBundle.message("file.move.error", newParent.getPresentableUrl()));
}
VfsUtil.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
public VirtualFile compute() throws IOException {
getFileSystem().moveFile(requestor, VirtualFile.this, newParent);
return VirtualFile.this;
@@ -408,7 +408,7 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica
throw new IOException(VfsBundle.message("file.copy.target.must.be.directory"));
}
return VfsUtil.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
return EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
public VirtualFile compute() throws IOException {
return getFileSystem().copyFile(requestor, VirtualFile.this, newParent, copyName);
}
@@ -628,4 +628,8 @@ public abstract class VirtualFile extends UserDataHolderBase implements Modifica
public boolean isInLocalFileSystem() {
return false;
}
public static boolean isValidName(@NotNull String name) {
return name.indexOf('\\') < 0 && name.indexOf('/') < 0;
}
}
@@ -18,6 +18,8 @@ package com.intellij.openapi.vfs.encoding;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.vfs.VirtualFile;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -88,4 +90,21 @@ public abstract class EncodingManager {
public abstract void removePropertyChangeListener(@NotNull PropertyChangeListener listener);
public abstract Charset getCachedCharsetFromContent(@NotNull Document document);
public static <E extends Throwable> VirtualFile doActionAndRestoreEncoding(@NotNull VirtualFile fileBefore, @NotNull ThrowableComputable<VirtualFile, E> action) throws E {
Charset charsetBefore = getInstance().getEncoding(fileBefore, true);
VirtualFile fileAfter = null;
try {
fileAfter = action.compute();
return fileAfter;
}
finally {
if (fileAfter != null) {
Charset actual = getInstance().getEncoding(fileAfter, true);
if (!Comparing.equal(actual, charsetBefore)) {
getInstance().setEncoding(fileAfter, charsetBefore);
}
}
}
}
}
@@ -23,8 +23,8 @@ import com.intellij.openapi.command.CommandProcessor;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.encoding.EncodingManager;
import com.intellij.openapi.wm.ToolWindowManager;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
@@ -254,7 +254,7 @@ public class CopyFilesOrDirectoriesHandler implements CopyHandlerDelegate {
if (newName == null) newName = directory.getName();
final PsiDirectory existing = targetDirectory.findSubdirectory(newName);
final PsiDirectory subdirectory = existing == null ? targetDirectory.createSubdirectory(newName) : existing;
VfsUtil.doActionAndRestoreEncoding(directory.getVirtualFile(), new ThrowableComputable<VirtualFile, IOException>() {
EncodingManager.doActionAndRestoreEncoding(directory.getVirtualFile(), new ThrowableComputable<VirtualFile, IOException>() {
public VirtualFile compute() {
return subdirectory.getVirtualFile();
}
@@ -19,10 +19,11 @@ import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.FileTypes;
import com.intellij.openapi.util.*;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.encoding.EncodingManager;
import com.intellij.util.ArrayUtil;
import com.intellij.util.Function;
import com.intellij.util.PathUtil;
@@ -595,10 +596,6 @@ public class VfsUtil {
return null;
}
public static boolean isValidName(@NotNull String name) {
return name.indexOf('\\') < 0 && name.indexOf('/') < 0;
}
public static String getUrlForLibraryRoot(@NotNull File libraryRoot) {
String path = FileUtil.toSystemIndependentName(libraryRoot.getAbsolutePath());
if (FileTypeManager.getInstance().getFileTypeByFileName(libraryRoot.getName()) == FileTypes.ARCHIVE) {
@@ -687,23 +684,6 @@ public class VfsUtil {
return file;
}
public static <E extends Throwable> VirtualFile doActionAndRestoreEncoding(@NotNull VirtualFile fileBefore, @NotNull ThrowableComputable<VirtualFile, E> action) throws E {
Charset charsetBefore = EncodingManager.getInstance().getEncoding(fileBefore, true);
VirtualFile fileAfter = null;
try {
fileAfter = action.compute();
return fileAfter;
}
finally {
if (fileAfter != null) {
Charset actual = EncodingManager.getInstance().getEncoding(fileAfter, true);
if (!Comparing.equal(actual, charsetBefore)) {
EncodingManager.getInstance().setEncoding(fileAfter, charsetBefore);
}
}
}
}
public static void processFileRecursivelyWithoutIgnored(@NotNull final VirtualFile root, @NotNull final Processor<VirtualFile> processor) {
final FileTypeManager ftm = FileTypeManager.getInstance();
processFilesRecursively(root, processor, new Convertor<VirtualFile, Boolean>() {
@@ -25,9 +25,9 @@ import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.VirtualFileWithId;
import com.intellij.openapi.vfs.encoding.EncodingManager;
import com.intellij.util.LocalTimeCounter;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -145,7 +145,7 @@ public abstract class NewVirtualFile extends VirtualFile implements VirtualFileW
throw new IOException("Destination already exists: " + newParent.getPath() + "/" + getName());
}
VfsUtil.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
public VirtualFile compute() throws IOException {
getFileSystem().moveFile(requestor, NewVirtualFile.this, newParent);
return NewVirtualFile.this;
@@ -22,7 +22,6 @@ import com.intellij.openapi.util.io.FileTooBigException;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VfsBundle;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.openapi.vfs.encoding.EncodingManager;
import com.intellij.openapi.vfs.newvfs.ManagingFS;
@@ -256,7 +255,7 @@ public abstract class VirtualFileSystemEntry extends NewVirtualFile {
public void rename(final Object requestor, @NotNull @NonNls final String newName) throws IOException {
if (getName().equals(newName)) return;
if (!VfsUtil.isValidName(newName)) {
if (!isValidName(newName)) {
throw new IOException(VfsBundle.message("file.invalid.name.error", newName));
}
@@ -298,7 +297,7 @@ public abstract class VirtualFileSystemEntry extends NewVirtualFile {
throw new IOException(VfsBundle.message("file.copy.target.must.be.directory"));
}
return VfsUtil.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
return EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
public VirtualFile compute() throws IOException {
return ourPersistence.copyFile(requestor, VirtualFileSystemEntry.this, newParent, copyName);
}
@@ -310,7 +309,7 @@ public abstract class VirtualFileSystemEntry extends NewVirtualFile {
throw new IOException(VfsBundle.message("file.move.error", newParent.getPresentableUrl()));
}
VfsUtil.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable<VirtualFile, IOException>() {
public VirtualFile compute() throws IOException {
ourPersistence.moveFile(requestor, VirtualFileSystemEntry.this, newParent);
return VirtualFileSystemEntry.this;