From 6f6c5e1b077be6bde553b70bfaf0a215839161f0 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 17 May 2013 17:54:14 +0400 Subject: [PATCH] IDEA-107418 IDEA / external make can set "-target" greater then version of the JDK specified for module --- .../jps/incremental/java/JavaBuilder.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) 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 1879ef92e62b..7f32f11b732e 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 @@ -588,13 +588,28 @@ public class JavaBuilder extends ModuleLevelBuilder { // check if user explicitly defined bytecode target in additional compiler options bytecodeTarget = USER_DEFINED_BYTECODE_TARGET.get(context); } + + final int compilerSdkVersion = getCompilerSdkVersion(context); if (bytecodeTarget != null) { options.add("-target"); + if (chunkSdkVersion > 0 && compilerSdkVersion > chunkSdkVersion) { + // if compiler is newer than module JDK + final int userSpecifiedTargetVersion = convertToNumber(bytecodeTarget); + if (userSpecifiedTargetVersion > 0 && userSpecifiedTargetVersion <= compilerSdkVersion) { + // if user-specified bytecode version can be determined and is supported by compiler + if (userSpecifiedTargetVersion > chunkSdkVersion) { + // and user-specified bytecode target level is higher than the highest one supported by the target JDK, + // force compiler to use highest-available bytecode target version that is supported by the chunk JDK. + bytecodeTarget = "1." + chunkSdkVersion; + } + } + // otherwise let compiler display compilation error about incorrectly set bytecode target version + } options.add(bytecodeTarget); } else { - if (chunkSdkVersion > 0 && getCompilerSdkVersion(context) > chunkSdkVersion) { + if (chunkSdkVersion > 0 && compilerSdkVersion > chunkSdkVersion) { // force lower bytecode target level to match the version of sdk assigned to this chunk options.add("-target"); options.add("1." + chunkSdkVersion);