JVM: allow -jvm-target 1.8 with -Xjdk-release=1.6
#KT-59098
This commit is contained in:
committed by
Space Team
parent
1bc08fc5b8
commit
12f393791b
@@ -41,7 +41,7 @@ fun CompilerConfiguration.setupJvmSpecificArguments(arguments: K2JVMCompilerArgu
|
|||||||
if (value != getJavaVersion() || arguments.jdkHome != null) {
|
if (value != getJavaVersion() || arguments.jdkHome != null) {
|
||||||
put(JVMConfigurationKeys.JDK_RELEASE, value)
|
put(JVMConfigurationKeys.JDK_RELEASE, value)
|
||||||
}
|
}
|
||||||
if (jvmTargetArg != null && jvmTargetArg != releaseTargetArg) {
|
if (jvmTargetArg != null && !isCompatibleJvmTargetAndRelease(jvmTargetArg, releaseTargetArg)) {
|
||||||
messageCollector.report(
|
messageCollector.report(
|
||||||
ERROR,
|
ERROR,
|
||||||
"'-Xjdk-release=$releaseTargetArg' option conflicts with '-jvm-target $jvmTargetArg'. " +
|
"'-Xjdk-release=$releaseTargetArg' option conflicts with '-jvm-target $jvmTargetArg'. " +
|
||||||
@@ -110,6 +110,15 @@ fun CompilerConfiguration.setupJvmSpecificArguments(arguments: K2JVMCompilerArgu
|
|||||||
addAll(JVMConfigurationKeys.ADDITIONAL_JAVA_MODULES, arguments.additionalJavaModules?.asList())
|
addAll(JVMConfigurationKeys.ADDITIONAL_JAVA_MODULES, arguments.additionalJavaModules?.asList())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun isCompatibleJvmTargetAndRelease(jvmTarget: String, release: String): Boolean {
|
||||||
|
if (jvmTarget == "1.8") {
|
||||||
|
// This is needed to be able to compile stdlib with -jvm-target 1.8 and -Xjdk-release=1.6/1.7.
|
||||||
|
return release in listOf("6", "1.6", "8", "1.8")
|
||||||
|
}
|
||||||
|
|
||||||
|
return jvmTarget == release
|
||||||
|
}
|
||||||
|
|
||||||
private fun CompilerConfiguration.handleClosureGenerationSchemeArgument(
|
private fun CompilerConfiguration.handleClosureGenerationSchemeArgument(
|
||||||
flag: String,
|
flag: String,
|
||||||
value: String?,
|
value: String?,
|
||||||
|
|||||||
+5
-1
@@ -1 +1,5 @@
|
|||||||
fun clear(byteByffer: java.nio.ByteBuffer) = byteByffer.clear()
|
fun clear(byteByffer: java.nio.ByteBuffer) = byteByffer.clear()
|
||||||
|
|
||||||
|
fun path(): java.nio.file.Path? = null
|
||||||
|
|
||||||
|
fun stream() = java.util.stream.Stream.of(42)
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-Xjdk-release=1.6
|
||||||
|
-jvm-target
|
||||||
|
1.8
|
||||||
|
-jdk-home
|
||||||
|
$JDK_11_0
|
||||||
|
$TESTDATA_DIR$/jdkRelease.kt
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
compiler/testData/cli/jvm/jdkRelease.kt:3:22: error: unresolved reference 'file'.
|
||||||
|
fun path(): java.nio.file.Path? = null
|
||||||
|
^^^^
|
||||||
|
compiler/testData/cli/jvm/jdkRelease.kt:5:26: error: unresolved reference 'stream'.
|
||||||
|
fun stream() = java.util.stream.Stream.of(42)
|
||||||
|
^^^^^^
|
||||||
|
COMPILATION_ERROR
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
-Xjdk-release=1.6
|
||||||
|
-jvm-target
|
||||||
|
1.8
|
||||||
|
-jdk-home
|
||||||
|
$JDK_1_8
|
||||||
|
$TESTDATA_DIR$/jdkRelease.kt
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
error: '-Xjdk-release=6' option is not supported by used JDK: $JDK_1_8
|
||||||
|
COMPILATION_ERROR
|
||||||
@@ -251,6 +251,9 @@ public abstract class AbstractCliTest extends TestCaseWithTmpdir {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (arg.equals("$JDK_1_8")) return KtTestUtil.getJdk8Home().getAbsolutePath();
|
||||||
|
if (arg.equals("$JDK_11_0")) return KtTestUtil.getJdk11Home().getAbsolutePath();
|
||||||
|
|
||||||
String argWithColonsReplaced = arg
|
String argWithColonsReplaced = arg
|
||||||
.replace("\\:", "$COLON$")
|
.replace("\\:", "$COLON$")
|
||||||
.replace(":", File.pathSeparator)
|
.replace(":", File.pathSeparator)
|
||||||
|
|||||||
@@ -755,6 +755,16 @@ public class CliTestGenerated extends AbstractCliTest {
|
|||||||
runTest("compiler/testData/cli/jvm/jdkRelease.args");
|
runTest("compiler/testData/cli/jvm/jdkRelease.args");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jdkRelease6WithJvmTarget8Jdk11.args")
|
||||||
|
public void testJdkRelease6WithJvmTarget8Jdk11() {
|
||||||
|
runTest("compiler/testData/cli/jvm/jdkRelease6WithJvmTarget8Jdk11.args");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jdkRelease6WithJvmTarget8Jdk8.args")
|
||||||
|
public void testJdkRelease6WithJvmTarget8Jdk8() {
|
||||||
|
runTest("compiler/testData/cli/jvm/jdkRelease6WithJvmTarget8Jdk8.args");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("jdkRelease6WithoutExplicitJvmTarget.args")
|
@TestMetadata("jdkRelease6WithoutExplicitJvmTarget.args")
|
||||||
public void testJdkRelease6WithoutExplicitJvmTarget() {
|
public void testJdkRelease6WithoutExplicitJvmTarget() {
|
||||||
runTest("compiler/testData/cli/jvm/jdkRelease6WithoutExplicitJvmTarget.args");
|
runTest("compiler/testData/cli/jvm/jdkRelease6WithoutExplicitJvmTarget.args");
|
||||||
|
|||||||
Reference in New Issue
Block a user