From ffc61a92961def0402e69492faee9d66b4bbb242 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Tue, 5 May 2020 13:35:46 +0300 Subject: [PATCH] Do not use random encoding while compiling scratch files from external process, use the project-supplied one for that to fix IDEA-200826 IDEA Scratch File (java) seems cannot handle Chinese code GitOrigin-RevId: 7a77208c3d7777eb57a75f6392db8271d26223c5 --- .../scratch/JavaScratchCompilationSupport.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchCompilationSupport.java b/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchCompilationSupport.java index 87a3cbdebfae..a4323459c04c 100644 --- a/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchCompilationSupport.java +++ b/java/execution/impl/src/com/intellij/execution/scratch/JavaScratchCompilationSupport.java @@ -29,6 +29,7 @@ import org.jetbrains.jps.model.java.JpsJavaSdkType; import java.io.File; import java.io.IOException; +import java.nio.charset.Charset; import java.util.*; /** @@ -88,6 +89,10 @@ final class JavaScratchCompilationSupport implements CompileTask { try { final File scratchFile = new File(VirtualFileManager.extractPath(scratchUrl)); File srcFile = scratchFile; + + VirtualFile vFile = ReadAction.compute(() -> VirtualFileManager.getInstance().findFileByUrl(scratchUrl)); + Charset charset = ReadAction.compute(() -> vFile == null ? null : vFile.getCharset()); + if (!StringUtil.endsWith(srcFile.getName(), ".java")) { final File srcDir = getScratchTempDirectory(project); @@ -97,7 +102,6 @@ final class JavaScratchCompilationSupport implements CompileTask { FileUtil.delete(srcDir); // perform cleanup final String srcFileName = ReadAction.compute(() -> { - final VirtualFile vFile = VirtualFileManager.getInstance().findFileByUrl(scratchUrl); if (vFile != null) { final PsiFile psiFile = PsiManager.getInstance(project).findFile(vFile); if (psiFile instanceof PsiJavaFile) { @@ -160,7 +164,10 @@ final class JavaScratchCompilationSupport implements CompileTask { } } options.add("-proc:none"); // disable annotation processing - + if (charset != null) { + options.add("-encoding"); + options.add(charset.name()); + } final Collection result = CompilerManager.getInstance(project).compileJavaCode( options, platformCp, cp, Collections.emptyList(), Collections.emptyList(), Collections.emptyList(), files, outputDir );