Separate JVM target option from javac's --enable-preview analogue

This commit is contained in:
Denis.Zharkov
2020-12-04 19:04:14 +03:00
parent 3abd8b1ab2
commit 46c3979acd
18 changed files with 73 additions and 39 deletions
@@ -25,9 +25,16 @@ abstract class AbstractBlackBoxAgainstJavaCodegenTest : AbstractBlackBoxCodegenT
override fun doMultiFileTest(wholeFile: File, files: List<TestFile>) {
javaClassesOutputDirectory = writeJavaFiles(files)!!.let { directory ->
val jvmTargets = files.mapNotNullTo(mutableSetOf()) { it.directives["JVM_TARGET"]?.let((JvmTarget)::fromString) }
val enablePreview = files.any { it.directives.contains("ENABLE_JVM_PREVIEW") }
check(jvmTargets.size <= 1) { "Having different JVM_TARGETs for different files is not supported in this test." }
CodegenTestUtil.compileJava(
CodegenTestUtil.findJavaSourcesInDirectory(directory), emptyList(), extractJavacOptions(files, jvmTargets.firstOrNull())
CodegenTestUtil.findJavaSourcesInDirectory(directory),
emptyList(),
extractJavacOptions(
files,
jvmTargets.firstOrNull(),
enablePreview,
),
)
}
@@ -529,7 +529,11 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
updateJavaClasspath(javaClasspath);
javaClassesOutputDirectory = getJavaClassesOutputDirectory();
List<String> javacOptions = extractJavacOptions(files, configuration.get(JVMConfigurationKeys.JVM_TARGET));
List<String> javacOptions = extractJavacOptions(
files,
configuration.get(JVMConfigurationKeys.JVM_TARGET),
configuration.getBoolean(JVMConfigurationKeys.ENABLE_JVM_PREVIEW)
);
List<String> finalJavacOptions = prepareJavacOptions(javaClasspath, javacOptions, javaClassesOutputDirectory);
try {
@@ -551,15 +555,19 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
protected void updateJavaClasspath(@NotNull List<String> javaClasspath) {}
@NotNull
protected static List<String> extractJavacOptions(@NotNull List<TestFile> files, @Nullable JvmTarget kotlinTarget) {
protected static List<String> extractJavacOptions(
@NotNull List<TestFile> files,
@Nullable JvmTarget kotlinTarget,
boolean isJvmPreviewEnabled
) {
List<String> javacOptions = new ArrayList<>(0);
for (TestFile file : files) {
javacOptions.addAll(InTextDirectivesUtils.findListWithPrefixes(file.content, "// JAVAC_OPTIONS:"));
}
if (kotlinTarget != null && kotlinTarget.isPreview()) {
if (kotlinTarget != null && isJvmPreviewEnabled) {
javacOptions.add("--release");
javacOptions.add(kotlinTarget.getDescriptionForJavacArgument());
javacOptions.add(kotlinTarget.getDescription());
javacOptions.add("--enable-preview");
return javacOptions;
}
@@ -582,7 +590,7 @@ public abstract class CodegenTestCase extends KotlinBaseTest<KotlinBaseTest.Test
if (JAVA_COMPILATION_TARGET != null && !javacOptions.contains("-target"))
return JAVA_COMPILATION_TARGET;
if (kotlinTarget != null && kotlinTarget.compareTo(JvmTarget.JVM_1_6) > 0)
return kotlinTarget.getDescriptionForJavacArgument();
return kotlinTarget.getDescription();
if (IS_SOURCE_6_STILL_SUPPORTED)
return "1.6";
return null;
@@ -227,6 +227,11 @@ abstract class KotlinBaseTest<F : KotlinBaseTest.TestFile> : KtUsefulTestCase()
?: error("Unknown target: $targetString")
configuration.put(JVMConfigurationKeys.JVM_TARGET, jvmTarget)
}
if (directives.contains("ENABLE_JVM_PREVIEW")) {
configuration.put(JVMConfigurationKeys.ENABLE_JVM_PREVIEW, true)
}
val version = directives["LANGUAGE_VERSION"]
if (version != null) {
throw AssertionError(