Add check for bytecode target when @JvmRecord is used
^KT-43677 In Progress
This commit is contained in:
@@ -67,9 +67,21 @@ fun CompilerConfiguration.setupJvmSpecificArguments(arguments: K2JVMCompilerArgu
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (languageVersionSettings.supportsFeature(LanguageFeature.JvmRecordSupport) && !jvmTarget.isRecordsAllowed()) {
|
||||||
|
messageCollector.report(
|
||||||
|
ERROR,
|
||||||
|
"-XXLanguage:+${LanguageFeature.JvmRecordSupport} feature is only supported with JVM target ${JvmTarget.JVM_15_PREVIEW.description} or later"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
addAll(JVMConfigurationKeys.ADDITIONAL_JAVA_MODULES, arguments.additionalJavaModules?.asList())
|
addAll(JVMConfigurationKeys.ADDITIONAL_JAVA_MODULES, arguments.additionalJavaModules?.asList())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun JvmTarget.isRecordsAllowed(): Boolean {
|
||||||
|
if (majorVersion < JvmTarget.JVM_15_PREVIEW.majorVersion) return false
|
||||||
|
return isPreview || majorVersion > JvmTarget.JVM_15_PREVIEW.majorVersion
|
||||||
|
}
|
||||||
|
|
||||||
fun CompilerConfiguration.configureJdkHome(arguments: K2JVMCompilerArguments): Boolean {
|
fun CompilerConfiguration.configureJdkHome(arguments: K2JVMCompilerArguments): Boolean {
|
||||||
|
|
||||||
val messageCollector = getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
val messageCollector = getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY)
|
||||||
|
|||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
$TESTDATA_DIR$/jvmRecordWrongTarget.kt
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
|
-jdk-home
|
||||||
|
$JDK_15$
|
||||||
|
-XXLanguage:+JvmRecordSupport
|
||||||
|
-jvm-target
|
||||||
|
15_PREVIEW
|
||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
@JvmRecord
|
||||||
|
data class MyRec(val name: String)
|
||||||
+10
@@ -0,0 +1,10 @@
|
|||||||
|
warning: ATTENTION!
|
||||||
|
This build uses unsafe internal compiler arguments:
|
||||||
|
|
||||||
|
-XXLanguage:+JvmRecordSupport
|
||||||
|
|
||||||
|
This mode is not recommended for production use,
|
||||||
|
as no stability/compatibility guarantees are given on
|
||||||
|
compiler or generated code. Use it at your own risk!
|
||||||
|
|
||||||
|
OK
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
$TESTDATA_DIR$/jvmRecordWrongTarget.kt
|
||||||
|
-d
|
||||||
|
$TEMP_DIR$
|
||||||
|
-cp
|
||||||
|
$JDK_15$
|
||||||
|
-XXLanguage:+JvmRecordSupport
|
||||||
|
-jvm-target
|
||||||
|
9
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
@JvmRecord
|
||||||
|
data class MyRec(val name: String)
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
warning: ATTENTION!
|
||||||
|
This build uses unsafe internal compiler arguments:
|
||||||
|
|
||||||
|
-XXLanguage:+JvmRecordSupport
|
||||||
|
|
||||||
|
This mode is not recommended for production use,
|
||||||
|
as no stability/compatibility guarantees are given on
|
||||||
|
compiler or generated code. Use it at your own risk!
|
||||||
|
|
||||||
|
error: -XXLanguage:+JvmRecordSupport feature is only supported with JVM target 15_PREVIEW or later
|
||||||
|
COMPILATION_ERROR
|
||||||
+1
-1
@@ -1,3 +1,3 @@
|
|||||||
error: unknown JVM target version: 1.5
|
error: unknown JVM target version: 1.5
|
||||||
Supported versions: 1.6, 1.8, 9, 10, 11, 12, 13, 14, 15
|
Supported versions: 1.6, 1.8, 9, 10, 11, 12, 13, 14, 15, 15_PREVIEW
|
||||||
COMPILATION_ERROR
|
COMPILATION_ERROR
|
||||||
|
|||||||
@@ -261,6 +261,9 @@ public abstract class AbstractCliTest extends TestCaseWithTmpdir {
|
|||||||
.replace(
|
.replace(
|
||||||
"$FOREIGN_ANNOTATIONS_DIR$",
|
"$FOREIGN_ANNOTATIONS_DIR$",
|
||||||
new File(AbstractForeignAnnotationsTestKt.getFOREIGN_ANNOTATIONS_SOURCES_PATH()).getPath()
|
new File(AbstractForeignAnnotationsTestKt.getFOREIGN_ANNOTATIONS_SOURCES_PATH()).getPath()
|
||||||
|
).replace(
|
||||||
|
"$JDK_15$",
|
||||||
|
KotlinTestUtils.getJdk15Home().getPath()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -530,6 +530,16 @@ public class CliTestGenerated extends AbstractCliTest {
|
|||||||
runTest("compiler/testData/cli/jvm/jvmDefaultAll.args");
|
runTest("compiler/testData/cli/jvm/jvmDefaultAll.args");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jvmRecordOk.args")
|
||||||
|
public void testJvmRecordOk() throws Exception {
|
||||||
|
runTest("compiler/testData/cli/jvm/jvmRecordOk.args");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("jvmRecordWrongTarget.args")
|
||||||
|
public void testJvmRecordWrongTarget() throws Exception {
|
||||||
|
runTest("compiler/testData/cli/jvm/jvmRecordWrongTarget.args");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("kotlinHomeWithoutStdlib.args")
|
@TestMetadata("kotlinHomeWithoutStdlib.args")
|
||||||
public void testKotlinHomeWithoutStdlib() throws Exception {
|
public void testKotlinHomeWithoutStdlib() throws Exception {
|
||||||
runTest("compiler/testData/cli/jvm/kotlinHomeWithoutStdlib.args");
|
runTest("compiler/testData/cli/jvm/kotlinHomeWithoutStdlib.args");
|
||||||
|
|||||||
Reference in New Issue
Block a user