diff --git a/java/java-tests/testSrc/com/intellij/openapi/vfs/changes/PsiChangeTrackerTest.java b/java/java-tests/testSrc/com/intellij/openapi/vfs/changes/PsiChangeTrackerTest.java index cc7cfce098de..67ebd8da3e2f 100644 --- a/java/java-tests/testSrc/com/intellij/openapi/vfs/changes/PsiChangeTrackerTest.java +++ b/java/java-tests/testSrc/com/intellij/openapi/vfs/changes/PsiChangeTrackerTest.java @@ -28,7 +28,7 @@ public class PsiChangeTrackerTest extends IdeaTestCase { final VirtualFile testRoot = getTestRoot(); final VirtualFile child = testRoot.findChild("PsiChangesTest.java"); assert child != null : "Can't find PsiChangesTest.java"; - final PsiFile original = this.getPsiManager().findFile(child); + final PsiFile original = getPsiManager().findFile(child); assert original != null : "Can't create PsiFile from VirtualFile " + child.getName(); myOriginalFile = original; diff --git a/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java b/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java index 545d79dc89c2..55908f4429a0 100644 --- a/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java +++ b/platform/lang-impl/src/com/intellij/util/indexing/FileContent.java @@ -96,7 +96,7 @@ public final class FileContent extends UserDataHolderBase { public FileContent(@NotNull final VirtualFile file, @NotNull final byte[] content) { this(file); myContent = content; - myCharset = LoadTextUtil.detectCharset(file, content); + myCharset = LoadTextUtil.detectCharsetAndSetBOM(file, content); } public FileContent(@NotNull final VirtualFile file) { diff --git a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/LoadTextUtil.java b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/LoadTextUtil.java index 800d857bd1f0..a0fa01191c61 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/LoadTextUtil.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileEditor/impl/LoadTextUtil.java @@ -94,7 +94,7 @@ public final class LoadTextUtil { return Pair.create(result, detectedLineSeparator); } - public static Charset detectCharset(final VirtualFile virtualFile, final byte[] content) { + private static Charset detectCharset(final VirtualFile virtualFile, final byte[] content) { Charset charset = dodetectCharset(virtualFile, content); charset = charset == null ? EncodingManager.getInstance().getDefaultCharset() : charset; if (virtualFile.getFileType() == StdFileTypes.PROPERTIES && EncodingManager.getInstance().isNative2AsciiForPropertiesFiles(virtualFile)) { @@ -104,6 +104,12 @@ public final class LoadTextUtil { return charset; } + public static Charset detectCharsetAndSetBOM(final VirtualFile virtualFile, final byte[] content) { + Charset charset = detectCharset(virtualFile, content); + detectAndSetBOM(virtualFile, content); + return charset; + } + private static Charset dodetectCharset(final VirtualFile virtualFile, final byte[] content) { EncodingManager settings = EncodingManager.getInstance(); boolean shouldGuess = settings != null && settings.isUseUTFGuessing(virtualFile); @@ -133,7 +139,8 @@ public final class LoadTextUtil { return CharsetToolkit.forName(charsetName); } - private static int skipBOM(final VirtualFile virtualFile, byte[] content) { + // returns offset of the BOM end + private static int detectAndSetBOM(final VirtualFile virtualFile, byte[] content) { final byte[] bom = getBOM(content, Patches.SUN_BUG_ID_4508058 ? virtualFile.getCharset() : null); if (bom.length != 0) { virtualFile.setBOM(bom); @@ -268,7 +275,7 @@ public final class LoadTextUtil { @NotNull public static CharSequence getTextByBinaryPresentation(@NotNull byte[] bytes, @NotNull VirtualFile virtualFile, final boolean rememberDetectedSeparators) { final Charset charset = detectCharset(virtualFile, bytes); - final int offset = skipBOM(virtualFile, bytes); + final int offset = detectAndSetBOM(virtualFile, bytes); final Pair result = convertBytes(bytes, charset, offset); if (rememberDetectedSeparators) { 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 b920db656fc2..ffe0ed3b534b 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 @@ -271,6 +271,7 @@ public abstract class VirtualFileSystemEntry extends NewVirtualFile { if (isDirectory()) { Charset configured = EncodingManager.getInstance().getEncoding(this, true); charset = configured == null ? Charset.defaultCharset() : configured; + setCharset(charset); } else { try { @@ -282,7 +283,7 @@ public abstract class VirtualFileSystemEntry extends NewVirtualFile { // file has already been deleted from disk return super.getCharset(); } - charset = LoadTextUtil.detectCharset(this, content); + charset = LoadTextUtil.detectCharsetAndSetBOM(this, content); } catch (FileTooBigException e) { return super.getCharset(); @@ -291,7 +292,6 @@ public abstract class VirtualFileSystemEntry extends NewVirtualFile { throw new RuntimeException(e); } } - setCharset(charset); } return charset; }