From 8d996fa4c79942d0582137fc8edf1a11d775cb0b Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 20 Dec 2013 13:14:42 +0100 Subject: [PATCH] IDEA-118552 Generated ANT scripts do not honour cross-compile settings --- .../com/intellij/compiler/ant/ChunkBuild.java | 8 +++- .../compiler/CompilerEncodingService.java | 0 .../intellij/compiler/ant/ModuleChunk.java | 43 +++++++++++++++++++ 3 files changed, 50 insertions(+), 1 deletion(-) rename java/compiler/{impl => openapi}/src/com/intellij/compiler/CompilerEncodingService.java (100%) diff --git a/java/compiler/impl/src/com/intellij/compiler/ant/ChunkBuild.java b/java/compiler/impl/src/com/intellij/compiler/ant/ChunkBuild.java index cd20b1c83e62..4ac5fe462571 100644 --- a/java/compiler/impl/src/com/intellij/compiler/ant/ChunkBuild.java +++ b/java/compiler/impl/src/com/intellij/compiler/ant/ChunkBuild.java @@ -46,7 +46,13 @@ public class ChunkBuild extends CompositeGenerator{ } } - add(new Property(BuildProperties.getModuleChunkCompilerArgsProperty(chunk.getName()), BuildProperties.propertyRef(BuildProperties.PROPERTY_COMPILER_ADDITIONAL_ARGS)), 1); + final StringBuilder compileArgs = new StringBuilder(); + compileArgs.append(chunk.getChunkSpecificCompileOptions()); + if (compileArgs.length() > 0) { + compileArgs.append(" "); + } + compileArgs.append(BuildProperties.propertyRef(BuildProperties.PROPERTY_COMPILER_ADDITIONAL_ARGS)); + add(new Property(BuildProperties.getModuleChunkCompilerArgsProperty(chunk.getName()), compileArgs.toString()), 1); final String outputPathUrl = chunk.getOutputDirUrl(); String location = outputPathUrl != null? diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerEncodingService.java b/java/compiler/openapi/src/com/intellij/compiler/CompilerEncodingService.java similarity index 100% rename from java/compiler/impl/src/com/intellij/compiler/CompilerEncodingService.java rename to java/compiler/openapi/src/com/intellij/compiler/CompilerEncodingService.java diff --git a/java/compiler/openapi/src/com/intellij/compiler/ant/ModuleChunk.java b/java/compiler/openapi/src/com/intellij/compiler/ant/ModuleChunk.java index 0665dd27dd04..c26b83038b03 100644 --- a/java/compiler/openapi/src/com/intellij/compiler/ant/ModuleChunk.java +++ b/java/compiler/openapi/src/com/intellij/compiler/ant/ModuleChunk.java @@ -15,14 +15,21 @@ */ package com.intellij.compiler.ant; +import com.intellij.compiler.CompilerConfiguration; +import com.intellij.compiler.CompilerEncodingService; +import com.intellij.openapi.module.EffectiveLanguageLevelUtil; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.CompilerModuleExtension; import com.intellij.openapi.roots.ModuleRootManager; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.pom.java.LanguageLevel; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.io.File; +import java.nio.charset.Charset; import java.util.Arrays; import java.util.Comparator; @@ -123,6 +130,18 @@ public class ModuleChunk { return myMainModule.getProject(); } + public String getChunkSpecificCompileOptions() { + final StringBuilder options = new StringBuilder(); + final Charset encoding = CompilerEncodingService.getInstance(getProject()).getPreferredModuleEncoding(myMainModule); + if (encoding != null) { + appendOption(options, "-encoding", encoding.name()); + } + appendOption(options, "-source", getLanguageLevelOption(EffectiveLanguageLevelUtil.getEffectiveLanguageLevel(myMainModule))); + appendOption(options, "-target", CompilerConfiguration.getInstance(getProject()).getBytecodeTargetLevel(myMainModule)); + return options.toString(); + } + + public boolean contains(final Module module) { for (Module chunkModule : myModules) { if (chunkModule.equals(module)) { @@ -131,4 +150,28 @@ public class ModuleChunk { } return false; } + + private static void appendOption(StringBuilder options, @NotNull final String name, @Nullable String value) { + if (!StringUtil.isEmpty(value)) { + if (options.length() > 0) { + options.append(" "); + } + options.append(name).append(" ").append(value); + } + } + + private static String getLanguageLevelOption(LanguageLevel level) { + if (level != null) { + switch (level) { + case JDK_1_3: return "1.3"; + case JDK_1_4: return "1.4"; + case JDK_1_5: return "1.5"; + case JDK_1_6: return "1.6"; + case JDK_1_7: return "1.7"; + case JDK_1_8: return "8"; + } + } + return null; + } + }