From ac5411c32e53951054c783c92590a93f961e96bc Mon Sep 17 00:00:00 2001 From: Dmitry Petrov Date: Thu, 16 Apr 2020 17:04:47 +0300 Subject: [PATCH] Command-line option disabling KotlinNothingValueException generation --- .../src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java | 2 +- .../org/jetbrains/kotlin/codegen/state/GenerationState.kt | 3 +++ .../kotlin/cli/common/arguments/K2JVMCompilerArguments.kt | 6 ++++++ .../cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt | 1 + .../org/jetbrains/kotlin/config/JVMConfigurationKeys.java | 3 +++ compiler/testData/cli/jvm/extraHelp.out | 2 ++ 6 files changed, 16 insertions(+), 1 deletion(-) diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java index ae2b06043f7..b909969bac0 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/ExpressionCodegen.java @@ -2646,7 +2646,7 @@ public class ExpressionCodegen extends KtVisitor impleme KotlinType returnType = resolvedCall.getResultingDescriptor().getReturnType(); if (returnType != null && KotlinBuiltIns.isNothing(returnType)) { - if (state.getLanguageVersionSettings().getApiVersion().compareTo(ApiVersion.KOTLIN_1_4) >= 0) { + if (state.getUseKotlinNothingValueException()) { v.anew(Type.getObjectType("kotlin/KotlinNothingValueException")); v.dup(); v.invokespecial("kotlin/KotlinNothingValueException", "", "()V", false); diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index dd5a4ce80a3..e13118c2e24 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -219,6 +219,9 @@ class GenerationState private constructor( val generateOptimizedCallableReferenceSuperClasses = languageVersionSettings.apiVersion >= ApiVersion.KOTLIN_1_4 && !configuration.getBoolean(JVMConfigurationKeys.NO_OPTIMIZED_CALLABLE_REFERENCES) + val useKotlinNothingValueException = + languageVersionSettings.apiVersion >= ApiVersion.KOTLIN_1_4 && + !configuration.getBoolean(JVMConfigurationKeys.NO_KOTLIN_NOTHING_VALUE_EXCEPTION) val samWrapperClasses: SamWrapperClasses = SamWrapperClasses(this) val globalInlineContext: GlobalInlineContext = GlobalInlineContext(diagnostics) val mappingsClassesForWhenByEnum: MappingsClassesForWhenByEnum = MappingsClassesForWhenByEnum(this) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt index 2117046a1bc..9512b5cf642 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt @@ -347,6 +347,12 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { ) var noOptimizedCallableReferences: Boolean by FreezableVar(false) + @Argument( + value = "-Xno-kotlin-nothing-value-exception", + description = "Do not use KotlinNothingValueException available since 1.4" + ) + var noKotlinNothingValueException: Boolean by FreezableVar(false) + override fun configureAnalysisFlags(collector: MessageCollector): MutableMap, Any> { val result = super.configureAnalysisFlags(collector) result[JvmAnalysisFlags.strictMetadataVersionSemantics] = strictMetadataVersionSemantics diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt index 3e1105bcc55..b155d99aff0 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/jvmArguments.kt @@ -154,6 +154,7 @@ fun CompilerConfiguration.configureAdvancedJvmOptions(arguments: K2JVMCompilerAr put(JVMConfigurationKeys.DISABLE_OPTIMIZATION, arguments.noOptimize) put(JVMConfigurationKeys.EMIT_JVM_TYPE_ANNOTATIONS, arguments.emitJvmTypeAnnotations) put(JVMConfigurationKeys.NO_OPTIMIZED_CALLABLE_REFERENCES, arguments.noOptimizedCallableReferences) + put(JVMConfigurationKeys.NO_KOTLIN_NOTHING_VALUE_EXCEPTION, arguments.noKotlinNothingValueException) if (!JVMConstructorCallNormalizationMode.isSupportedValue(arguments.constructorCallNormalizationMode)) { getNotNull(CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY).report( diff --git a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java index 28a3a108b44..9777a62fdb6 100644 --- a/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java +++ b/compiler/config.jvm/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java @@ -119,4 +119,7 @@ public class JVMConfigurationKeys { public static final CompilerConfigurationKey NO_OPTIMIZED_CALLABLE_REFERENCES = CompilerConfigurationKey.create("Do not use optimized callable reference superclasses available from 1.4"); + + public static final CompilerConfigurationKey NO_KOTLIN_NOTHING_VALUE_EXCEPTION = + CompilerConfigurationKey.create("Do not use KotlinNothingValueException available since 1.4"); } diff --git a/compiler/testData/cli/jvm/extraHelp.out b/compiler/testData/cli/jvm/extraHelp.out index 8e26b51c0cc..18a5e2171b5 100644 --- a/compiler/testData/cli/jvm/extraHelp.out +++ b/compiler/testData/cli/jvm/extraHelp.out @@ -67,6 +67,8 @@ where advanced options include: -Xno-call-assertions Don't generate not-null assertions for arguments of platform types -Xno-exception-on-explicit-equals-for-boxed-null Do not throw NPE on explicit 'equals' call for null receiver of platform boxed primitive type + -Xno-kotlin-nothing-value-exception + Do not use KotlinNothingValueException available since 1.4 -Xno-optimize Disable optimizations -Xno-optimized-callable-references Do not use optimized callable reference superclasses available from 1.4