diff --git a/java/compiler/tests/com/intellij/compiler/CompilerEncodingServiceTest.java b/java/compiler/tests/com/intellij/compiler/CompilerEncodingServiceTest.java index 2951c3229cbb..faef430982c6 100644 --- a/java/compiler/tests/com/intellij/compiler/CompilerEncodingServiceTest.java +++ b/java/compiler/tests/com/intellij/compiler/CompilerEncodingServiceTest.java @@ -2,6 +2,7 @@ package com.intellij.compiler; import com.intellij.openapi.application.WriteAction; +import com.intellij.openapi.fileEditor.impl.LoadTextUtil; import com.intellij.openapi.util.Ref; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.registry.RegistryValue; @@ -87,6 +88,21 @@ public class CompilerEncodingServiceTest extends JavaPsiTestCase { assertEquals(StandardCharsets.ISO_8859_1, file.getCharset()); } + public void testBigPropertiesAutoEncoding() throws IOException { + final VirtualFile file = createFile("test.properties"); + + WriteAction.run(() -> { + @SuppressWarnings("NonAsciiCharacters") + byte[] bytes = "verifyEmail.tooltip=初回ログイン後またはアドレスの変更が送信された後に、ユーザーに自分の電子メールアドレスを確認するように要求します。\n" + .repeat(64).getBytes(StandardCharsets.UTF_8); + file.setBinaryContent(bytes); + }); + + LoadTextUtil.loadText(file, 1024); + assertEquals(StandardCharsets.UTF_8, file.getCharset()); + + } + public void testPropertiesEncodingFeatureFlagTest() { RegistryValue registryValue = Registry.get("properties.file.encoding.legacy.support"); diff --git a/platform/core-api/src/com/intellij/openapi/fileTypes/CharsetUtil.java b/platform/core-api/src/com/intellij/openapi/fileTypes/CharsetUtil.java index 1d756593ce63..cd179691cb48 100644 --- a/platform/core-api/src/com/intellij/openapi/fileTypes/CharsetUtil.java +++ b/platform/core-api/src/com/intellij/openapi/fileTypes/CharsetUtil.java @@ -125,12 +125,7 @@ public final class CharsetUtil { .onUnmappableCharacter(CodingErrorAction.REPORT) .onMalformedInput(CodingErrorAction.REPORT); - CoderResult result = decoder.decode(byteBuffer, decodedBuffer, true); - if (result.isError()) { - return TextRange.from(byteBuffer.position(), result.length()); - } - - result = decoder.flush(decodedBuffer); + CoderResult result = decoder.decode(byteBuffer, decodedBuffer, false); if (result.isError()) { return TextRange.from(byteBuffer.position(), result.length()); }