IDEA-61472 (rev by Roman)

This commit is contained in:
Alexey Kudravtsev
2010-12-06 20:02:28 +03:00
parent 27f3eba507
commit 8fea3611c8
4 changed files with 14 additions and 7 deletions
@@ -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;
@@ -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) {
@@ -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<CharSequence, String> result = convertBytes(bytes, charset, offset);
if (rememberDetectedSeparators) {
@@ -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;
}