Change CLI flags for controlling diagnostics for ABI of FIR and JVM IR
- Use a more generic `-Xallow-unstable-dependencies` instead of `-Xallow-jvm-ir-dependencies` - Change `-Xir-binary-with-stable-abi` to `-Xabi-stability=stable`, with an additional option to specify `unstable` after a subsequent commit where JVM IR becomes stable by default #KT-43592
This commit is contained in:
+9
-9
@@ -95,18 +95,18 @@ class K2JVMCompilerArguments : CommonCompilerArguments() {
|
|||||||
var irCheckLocalNames: Boolean by FreezableVar(false)
|
var irCheckLocalNames: Boolean by FreezableVar(false)
|
||||||
|
|
||||||
@Argument(
|
@Argument(
|
||||||
value = "-Xallow-jvm-ir-dependencies",
|
value = "-Xallow-unstable-dependencies",
|
||||||
description = "When not using the IR backend, do not report errors on those classes in dependencies, " +
|
description = "Do not report errors on classes in dependencies, which were compiled by an unstable version of the Kotlin compiler"
|
||||||
"which were compiled by the IR backend"
|
|
||||||
)
|
)
|
||||||
var allowJvmIrDependencies: Boolean by FreezableVar(false)
|
var allowUnstableDependencies: Boolean by FreezableVar(false)
|
||||||
|
|
||||||
@Argument(
|
@Argument(
|
||||||
value = "-Xir-binary-with-stable-abi",
|
value = "-Xabi-stability",
|
||||||
description = "When using the IR backend, produce binaries which can be read by non-IR backend.\n" +
|
valueDescription = "{stable|unstable}",
|
||||||
"The author is responsible for verifying that the resulting binaries do indeed have the correct ABI"
|
description = "When using unstable compiler features such as FIR or JVM IR, use 'stable' to mark generated class files as stable\n" +
|
||||||
|
"to prevent diagnostics from stable compilers at the call site.\n"
|
||||||
)
|
)
|
||||||
var isIrWithStableAbi: Boolean by FreezableVar(false)
|
var abiStability: String? by FreezableVar(null)
|
||||||
|
|
||||||
@Argument(
|
@Argument(
|
||||||
value = "-Xir-do-not-clear-binding-context",
|
value = "-Xir-do-not-clear-binding-context",
|
||||||
@@ -446,7 +446,7 @@ class K2JVMCompilerArguments : CommonCompilerArguments() {
|
|||||||
result[JvmAnalysisFlags.suppressMissingBuiltinsError] = suppressMissingBuiltinsError
|
result[JvmAnalysisFlags.suppressMissingBuiltinsError] = suppressMissingBuiltinsError
|
||||||
result[JvmAnalysisFlags.irCheckLocalNames] = irCheckLocalNames
|
result[JvmAnalysisFlags.irCheckLocalNames] = irCheckLocalNames
|
||||||
result[JvmAnalysisFlags.enableJvmPreview] = enableJvmPreview
|
result[JvmAnalysisFlags.enableJvmPreview] = enableJvmPreview
|
||||||
result[AnalysisFlags.allowUnstableDependencies] = allowJvmIrDependencies || useIR || useFir
|
result[AnalysisFlags.allowUnstableDependencies] = allowUnstableDependencies || useIR || useFir
|
||||||
result[JvmAnalysisFlags.disableUltraLightClasses] = disableUltraLightClasses
|
result[JvmAnalysisFlags.disableUltraLightClasses] = disableUltraLightClasses
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -186,7 +186,7 @@ class AnalyzerWithCompilerReport(
|
|||||||
messageCollector.report(
|
messageCollector.report(
|
||||||
ERROR,
|
ERROR,
|
||||||
"Classes compiled by a new Kotlin compiler backend were found in dependencies. " +
|
"Classes compiled by a new Kotlin compiler backend were found in dependencies. " +
|
||||||
"Remove them from the classpath or use '-Xallow-jvm-ir-dependencies' to suppress errors"
|
"Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -194,7 +194,7 @@ class AnalyzerWithCompilerReport(
|
|||||||
messageCollector.report(
|
messageCollector.report(
|
||||||
ERROR,
|
ERROR,
|
||||||
"Classes compiled by the new Kotlin compiler frontend were found in dependencies. " +
|
"Classes compiled by the new Kotlin compiler frontend were found in dependencies. " +
|
||||||
"Remove them from the classpath or use '-Xallow-jvm-ir-dependencies' to suppress errors"
|
"Remove them from the classpath or use '-Xallow-unstable-dependencies' to suppress errors"
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -173,7 +173,17 @@ fun CompilerConfiguration.configureAdvancedJvmOptions(arguments: K2JVMCompilerAr
|
|||||||
|
|
||||||
put(JVMConfigurationKeys.IR, arguments.useIR && !arguments.noUseIR)
|
put(JVMConfigurationKeys.IR, arguments.useIR && !arguments.noUseIR)
|
||||||
|
|
||||||
put(JVMConfigurationKeys.ABI_STABILITY, if (arguments.isIrWithStableAbi) JvmAbiStability.STABLE else JvmAbiStability.UNSTABLE)
|
val abiStability = JvmAbiStability.fromStringOrNull(arguments.abiStability)
|
||||||
|
if (arguments.abiStability != null) {
|
||||||
|
if (abiStability == null) {
|
||||||
|
getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report(
|
||||||
|
ERROR,
|
||||||
|
"Unknown ABI stability mode: ${arguments.abiStability}, supported modes: ${JvmAbiStability.values().map { it.description }}"
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
put(JVMConfigurationKeys.ABI_STABILITY, abiStability)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
put(JVMConfigurationKeys.DO_NOT_CLEAR_BINDING_CONTEXT, arguments.doNotClearBindingContext)
|
put(JVMConfigurationKeys.DO_NOT_CLEAR_BINDING_CONTEXT, arguments.doNotClearBindingContext)
|
||||||
put(JVMConfigurationKeys.DISABLE_CALL_ASSERTIONS, arguments.noCallAssertions)
|
put(JVMConfigurationKeys.DISABLE_CALL_ASSERTIONS, arguments.noCallAssertions)
|
||||||
|
|||||||
@@ -9,4 +9,9 @@ enum class JvmAbiStability(val description: String) {
|
|||||||
STABLE("stable"),
|
STABLE("stable"),
|
||||||
UNSTABLE("unstable"),
|
UNSTABLE("unstable"),
|
||||||
;
|
;
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun fromStringOrNull(string: String?): JvmAbiStability? =
|
||||||
|
values().find { it.description == string }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-3
@@ -1,9 +1,13 @@
|
|||||||
Usage: kotlinc-jvm <options> <source files>
|
Usage: kotlinc-jvm <options> <source files>
|
||||||
where advanced options include:
|
where advanced options include:
|
||||||
|
-Xabi-stability={stable|unstable}
|
||||||
|
When using unstable compiler features such as FIR or JVM IR, use 'stable' to mark generated class files as stable
|
||||||
|
to prevent diagnostics from stable compilers at the call site.
|
||||||
|
|
||||||
-Xadd-modules=<module[,]> Root modules to resolve in addition to the initial modules,
|
-Xadd-modules=<module[,]> Root modules to resolve in addition to the initial modules,
|
||||||
or all modules on the module path if <module> is ALL-MODULE-PATH
|
or all modules on the module path if <module> is ALL-MODULE-PATH
|
||||||
-Xallow-jvm-ir-dependencies When not using the IR backend, do not report errors on those classes in dependencies, which were compiled by the IR backend
|
|
||||||
-Xallow-no-source-files Allow no source files
|
-Xallow-no-source-files Allow no source files
|
||||||
|
-Xallow-unstable-dependencies Do not report errors on classes in dependencies, which were compiled by an unstable version of the Kotlin compiler
|
||||||
-Xassertions={always-enable|always-disable|jvm|legacy}
|
-Xassertions={always-enable|always-disable|jvm|legacy}
|
||||||
Assert calls behaviour
|
Assert calls behaviour
|
||||||
-Xassertions=always-enable: enable, ignore jvm assertion settings;
|
-Xassertions=always-enable: enable, ignore jvm assertion settings;
|
||||||
@@ -27,8 +31,6 @@ where advanced options include:
|
|||||||
-Xfriend-paths=<path> Paths to output directories for friend modules (whose internals should be visible)
|
-Xfriend-paths=<path> Paths to output directories for friend modules (whose internals should be visible)
|
||||||
-Xmultifile-parts-inherit Compile multifile classes as a hierarchy of parts and facade
|
-Xmultifile-parts-inherit Compile multifile classes as a hierarchy of parts and facade
|
||||||
-Xir-check-local-names Check that names of local classes and anonymous objects are the same in the IR backend as in the old backend
|
-Xir-check-local-names Check that names of local classes and anonymous objects are the same in the IR backend as in the old backend
|
||||||
-Xir-binary-with-stable-abi When using the IR backend, produce binaries which can be read by non-IR backend.
|
|
||||||
The author is responsible for verifying that the resulting binaries do indeed have the correct ABI
|
|
||||||
-Xmodule-path=<path> Paths where to find Java 9+ modules
|
-Xmodule-path=<path> Paths where to find Java 9+ modules
|
||||||
-Xjava-package-prefix Package prefix for Java files
|
-Xjava-package-prefix Package prefix for Java files
|
||||||
-Xjava-source-roots=<path> Paths to directories with Java source files
|
-Xjava-source-roots=<path> Paths to directories with Java source files
|
||||||
|
|||||||
+2
-2
@@ -685,13 +685,13 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun testOldAgainstJvmIrWithStableAbi() {
|
fun testOldAgainstJvmIrWithStableAbi() {
|
||||||
val library = compileLibrary("library", additionalOptions = listOf("-Xuse-ir", "-Xir-binary-with-stable-abi"))
|
val library = compileLibrary("library", additionalOptions = listOf("-Xuse-ir", "-Xabi-stability=stable"))
|
||||||
compileKotlin("source.kt", tmpdir, listOf(library))
|
compileKotlin("source.kt", tmpdir, listOf(library))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testOldAgainstJvmIrWithAllowIrDependencies() {
|
fun testOldAgainstJvmIrWithAllowIrDependencies() {
|
||||||
val library = compileLibrary("library", additionalOptions = listOf("-Xuse-ir"))
|
val library = compileLibrary("library", additionalOptions = listOf("-Xuse-ir"))
|
||||||
compileKotlin("source.kt", tmpdir, listOf(library), additionalOptions = listOf("-Xallow-jvm-ir-dependencies"))
|
compileKotlin("source.kt", tmpdir, listOf(library), additionalOptions = listOf("-Xallow-unstable-dependencies"))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun testSealedClassesAndInterfaces() {
|
fun testSealedClassesAndInterfaces() {
|
||||||
|
|||||||
Reference in New Issue
Block a user