From 532435deccd739fbe48d115d934b72d9f58e1f7e Mon Sep 17 00:00:00 2001 From: Dmitry Jemerov Date: Fri, 19 Aug 2011 15:25:02 +0400 Subject: [PATCH] VfsUtil moves back to platform-api; VirtualFile dependencies on VfsUtil moved elsewhere --- .../com/intellij/openapi/vfs/VirtualFile.java | 14 ++++++---- .../openapi/vfs/encoding/EncodingManager.java | 19 ++++++++++++++ .../copy/CopyFilesOrDirectoriesHandler.java | 4 +-- .../src/com/intellij/openapi/vfs/VfsUtil.java | 26 +++---------------- .../openapi/vfs/newvfs/NewVirtualFile.java | 4 +-- .../newvfs/impl/VirtualFileSystemEntry.java | 7 +++-- 6 files changed, 38 insertions(+), 36 deletions(-) rename platform/{core-api => platform-api}/src/com/intellij/openapi/vfs/VfsUtil.java (96%) diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java index 3c9cfa19a11f..e8869e898dad 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java +++ b/platform/core-api/src/com/intellij/openapi/vfs/VirtualFile.java @@ -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() { + EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable() { 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() { + return EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable() { 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; + } } diff --git a/platform/core-api/src/com/intellij/openapi/vfs/encoding/EncodingManager.java b/platform/core-api/src/com/intellij/openapi/vfs/encoding/EncodingManager.java index 7fdade2e7c40..d9a6372faa33 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/encoding/EncodingManager.java +++ b/platform/core-api/src/com/intellij/openapi/vfs/encoding/EncodingManager.java @@ -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 VirtualFile doActionAndRestoreEncoding(@NotNull VirtualFile fileBefore, @NotNull ThrowableComputable 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); + } + } + } + } } diff --git a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java index 7e7e7768fde5..2eea7d045ee5 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/copy/CopyFilesOrDirectoriesHandler.java @@ -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() { + EncodingManager.doActionAndRestoreEncoding(directory.getVirtualFile(), new ThrowableComputable() { public VirtualFile compute() { return subdirectory.getVirtualFile(); } diff --git a/platform/core-api/src/com/intellij/openapi/vfs/VfsUtil.java b/platform/platform-api/src/com/intellij/openapi/vfs/VfsUtil.java similarity index 96% rename from platform/core-api/src/com/intellij/openapi/vfs/VfsUtil.java rename to platform/platform-api/src/com/intellij/openapi/vfs/VfsUtil.java index b538fd5992ec..e612fe0a7d06 100644 --- a/platform/core-api/src/com/intellij/openapi/vfs/VfsUtil.java +++ b/platform/platform-api/src/com/intellij/openapi/vfs/VfsUtil.java @@ -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 VirtualFile doActionAndRestoreEncoding(@NotNull VirtualFile fileBefore, @NotNull ThrowableComputable 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 processor) { final FileTypeManager ftm = FileTypeManager.getInstance(); processFilesRecursively(root, processor, new Convertor() { diff --git a/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFile.java b/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFile.java index 7917550d3db9..c372fa34c9a4 100644 --- a/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFile.java +++ b/platform/platform-api/src/com/intellij/openapi/vfs/newvfs/NewVirtualFile.java @@ -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() { + EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable() { public VirtualFile compute() throws IOException { getFileSystem().moveFile(requestor, NewVirtualFile.this, newParent); return NewVirtualFile.this; diff --git a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java index 9ec8ad120f4e..f728f6f344da 100644 --- a/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java +++ b/platform/platform-impl/src/com/intellij/openapi/vfs/newvfs/impl/VirtualFileSystemEntry.java @@ -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() { + return EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable() { 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() { + EncodingManager.doActionAndRestoreEncoding(this, new ThrowableComputable() { public VirtualFile compute() throws IOException { ourPersistence.moveFile(requestor, VirtualFileSystemEntry.this, newParent); return VirtualFileSystemEntry.this;