mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-61472 (rev by Roman)
This commit is contained in:
@@ -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) {
|
||||
|
||||
+2
-2
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user