diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompilerEncodingConfiguration.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompilerEncodingConfiguration.java index 62bedef2151b..8a10c1a2f14e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompilerEncodingConfiguration.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompilerEncodingConfiguration.java @@ -87,9 +87,11 @@ public class CompilerEncodingConfiguration { for (Module module : moduleChunk.getModules()) { final Set encodings = getModuleCharsetMap().get(module.getName()); final String encoding = ContainerUtil.getFirstItem(encodings, null); - if (encoding != null) return encoding; + if (encoding != null) { + return encoding; + } } - return null; + return moduleChunk.getProject().getProjectCharset(); } @NotNull diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index d7a5483a6608..6f1f2f4c4652 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -38,7 +38,8 @@ import org.jetbrains.jps.incremental.storage.BuildDataManager; import org.jetbrains.jps.incremental.storage.SourceToFormMapping; import org.jetbrains.jps.javac.*; -import javax.tools.*; +import javax.tools.Diagnostic; +import javax.tools.JavaFileObject; import java.io.*; import java.net.MalformedURLException; import java.net.ServerSocket; @@ -584,7 +585,7 @@ public class JavaBuilder extends ModuleLevelBuilder { private static List getCompilationVMOptions(CompileContext context) { List cached = JAVAC_VM_OPTIONS.get(context); if (cached == null) { - loadJavacOptions(context); + loadCommonJavacOptions(context); cached = JAVAC_VM_OPTIONS.get(context); } return cached; @@ -593,10 +594,28 @@ public class JavaBuilder extends ModuleLevelBuilder { private static List getCompilationOptions(CompileContext context, ModuleChunk chunk) { List cached = JAVAC_OPTIONS.get(context); if (cached == null) { - loadJavacOptions(context); + loadCommonJavacOptions(context); cached = JAVAC_OPTIONS.get(context); } + final List options = new ArrayList(cached); + if (!isEncodingSet(options)) { + final CompilerEncodingConfiguration config = context.getProjectDescriptor().getEncodingConfiguration(); + final String encoding = config.getPreferredModuleChunkEncoding(chunk); + if (config.getAllModuleChunkEncodings(chunk).size() > 1) { + final StringBuilder msgBuilder = new StringBuilder(); + msgBuilder.append("Multiple encodings set for module chunk ").append(getChunkPresentableName(chunk)); + if (encoding != null) { + msgBuilder.append("\n\"").append(encoding).append("\" will be used by compiler"); + } + context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.INFO, msgBuilder.toString())); + } + if (encoding != null) { + options.add("-encoding"); + options.add(encoding); + } + } + final String langlevel = chunk.getModules().iterator().next().getLanguageLevel(); if (!StringUtil.isEmpty(langlevel)) { options.add("-source"); @@ -644,6 +663,16 @@ public class JavaBuilder extends ModuleLevelBuilder { return options; } + private static boolean isEncodingSet(List options) { + for (String option : options) { + if ("-encoding".equals(option)) { + return true; + } + } + return false; + } + + private static int getCompilerSdkVersion(CompileContext context) { final Integer cached = JAVA_COMPILER_VERSION_KEY.get(context); if (cached != null) { @@ -673,7 +702,7 @@ public class JavaBuilder extends ModuleLevelBuilder { return config.getProjectBytecodeTarget(); } - private static void loadJavacOptions(CompileContext context) { + private static void loadCommonJavacOptions(CompileContext context) { final List options = new ArrayList(); final List vmOptions = new ArrayList(); @@ -694,7 +723,6 @@ public class JavaBuilder extends ModuleLevelBuilder { } final String customArgs = javacOpts.get("ADDITIONAL_OPTIONS_STRING"); - boolean isEncodingSet = false; if (customArgs != null) { final StringTokenizer tokenizer = new StringTokenizer(customArgs, " \t\r\n"); while (tokenizer.hasMoreTokens()) { @@ -708,17 +736,9 @@ public class JavaBuilder extends ModuleLevelBuilder { else { options.add(token); } - if ("-encoding".equals(token)) { - isEncodingSet = true; - } } } - if (!isEncodingSet && !StringUtil.isEmpty(project.getProjectCharset())) { - options.add("-encoding"); - options.add(project.getProjectCharset()); - } - JAVAC_OPTIONS.set(context, options); JAVAC_VM_OPTIONS.set(context, vmOptions); } diff --git a/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java b/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java index f23b54077dd6..1cb782365946 100644 --- a/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java +++ b/plugins/groovy/rt/src/org/jetbrains/jps/incremental/groovy/GroovyBuilder.java @@ -1,7 +1,6 @@ package org.jetbrains.jps.incremental.groovy; -import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.ArrayUtil; @@ -63,8 +62,7 @@ public class GroovyBuilder extends ModuleLevelBuilder { Map class2Src = buildClassToSourceMap(chunk, context, toCompilePaths, moduleOutput); - String ideCharset = chunk.getProject().getProjectCharset(); - String encoding = !Comparing.equal(CharsetToolkit.getDefaultSystemCharset().name(), ideCharset) ? ideCharset : null; + final String encoding = context.getProjectDescriptor().getEncodingConfiguration().getPreferredModuleChunkEncoding(chunk); List patchers = Collections.emptyList(); //todo patchers final File tempFile = GroovycOSProcessHandler.fillFileWithGroovycParameters( compilerOutput, toCompilePaths, FileUtil.toSystemDependentName(moduleOutput), class2Src, encoding, patchers