From d1a8f57740808a6cb6a553349168b756986718de Mon Sep 17 00:00:00 2001 From: Mikhail Zarechenskiy Date: Mon, 2 Mar 2020 15:23:17 +0300 Subject: [PATCH] Disable New Inference in JS backend See #KT-37163 for details --- .../cli/js/JSLanguageVersionSettings.kt | 38 +++++++++++++++++++ .../jetbrains/kotlin/cli/js/K2JSCompiler.java | 7 ++++ .../jetbrains/kotlin/cli/js/K2JsIrCompiler.kt | 5 +-- .../cli/js/reifiedIntersectionType.args | 3 ++ .../cli/js/reifiedIntersectionType.kt | 16 ++++++++ .../cli/js/reifiedIntersectionType.out | 13 +++++++ .../box/reified/reifiedIntersectionType.kt | 37 ++++++++++++++++++ .../multiplatform/funInterfaces/common.kt | 4 +- .../multiplatform/funInterfaces/js.kt | 4 +- .../multiplatform/funInterfaces/jvm.kt | 4 +- .../multiplatform/funInterfaces/output.txt | 30 --------------- .../kotlin/cli/CliTestGenerated.java | 5 +++ .../codegen/BlackBoxCodegenTestGenerated.java | 5 +++ .../LightAnalysisModeTestGenerated.java | 5 +++ .../ir/FirBlackBoxCodegenTestGenerated.java | 5 +++ .../ir/IrBlackBoxCodegenTestGenerated.java | 5 +++ .../IrJsCodegenBoxTestGenerated.java | 5 +++ .../semantics/JsCodegenBoxTestGenerated.java | 5 +++ 18 files changed, 153 insertions(+), 43 deletions(-) create mode 100644 compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/JSLanguageVersionSettings.kt create mode 100644 compiler/testData/cli/js/reifiedIntersectionType.args create mode 100644 compiler/testData/cli/js/reifiedIntersectionType.kt create mode 100644 compiler/testData/cli/js/reifiedIntersectionType.out create mode 100644 compiler/testData/codegen/box/reified/reifiedIntersectionType.kt diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/JSLanguageVersionSettings.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/JSLanguageVersionSettings.kt new file mode 100644 index 00000000000..9086976b04b --- /dev/null +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/JSLanguageVersionSettings.kt @@ -0,0 +1,38 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.cli.js + +import org.jetbrains.kotlin.config.* + +class JSLanguageVersionSettings(private val delegate: LanguageVersionSettings) : LanguageVersionSettings { + companion object { + private val disabledFeatures = setOf( + LanguageFeature.NewInference, + LanguageFeature.FunctionalInterfaceConversion, + LanguageFeature.SamConversionForKotlinFunctions, + LanguageFeature.SamConversionPerArgument, + LanguageFeature.FunctionReferenceWithDefaultValueAsOtherType, + LanguageFeature.NonStrictOnlyInputTypesChecks + ) + } + + override fun getFeatureSupport(feature: LanguageFeature): LanguageFeature.State { + return if (feature in disabledFeatures) + LanguageFeature.State.DISABLED + else + delegate.getFeatureSupport(feature) + } + + override fun isPreRelease(): Boolean = delegate.isPreRelease() + + override fun getFlag(flag: AnalysisFlag): T = delegate.getFlag(flag) + + override val apiVersion: ApiVersion + get() = delegate.apiVersion + + override val languageVersion: LanguageVersion + get() = delegate.languageVersion +} \ No newline at end of file diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java index fbbb40284e5..15f1d7e0264 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JSCompiler.java @@ -246,6 +246,13 @@ public class K2JSCompiler extends CLICompiler { configuration.put(CommonConfigurationKeys.MODULE_NAME, FileUtil.getNameWithoutExtension(outputFile)); + if (!arguments.getNewInference()) { + CommonConfigurationKeysKt.setLanguageVersionSettings( + configuration, + new JSLanguageVersionSettings(CommonConfigurationKeysKt.getLanguageVersionSettings(configuration)) + ); + } + JsConfig config = new JsConfig(project, configuration); JsConfig.Reporter reporter = new JsConfig.Reporter() { @Override diff --git a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt index 05f5e9a7c7b..dbb4b744285 100644 --- a/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt +++ b/compiler/cli/cli-js/src/org/jetbrains/kotlin/cli/js/K2JsIrCompiler.kt @@ -24,10 +24,7 @@ import org.jetbrains.kotlin.cli.common.messages.MessageUtil import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser -import org.jetbrains.kotlin.config.CommonConfigurationKeys -import org.jetbrains.kotlin.config.CompilerConfiguration -import org.jetbrains.kotlin.config.IncrementalCompilation -import org.jetbrains.kotlin.config.Services +import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider diff --git a/compiler/testData/cli/js/reifiedIntersectionType.args b/compiler/testData/cli/js/reifiedIntersectionType.args new file mode 100644 index 00000000000..c55d5071068 --- /dev/null +++ b/compiler/testData/cli/js/reifiedIntersectionType.args @@ -0,0 +1,3 @@ +$TESTDATA_DIR$/reifiedIntersectionType.kt +-output +$TEMP_DIR$/out.js diff --git a/compiler/testData/cli/js/reifiedIntersectionType.kt b/compiler/testData/cli/js/reifiedIntersectionType.kt new file mode 100644 index 00000000000..e8a7ac357b1 --- /dev/null +++ b/compiler/testData/cli/js/reifiedIntersectionType.kt @@ -0,0 +1,16 @@ +fun test1() { + val flow = combine( + flowOf("1"), + flowOf(2) + ) { arr -> arr.joinToString() } +} + +fun Array.joinToString(): String = "" + +public inline fun combine( + vararg flows: Flow, + crossinline transform: suspend (Array) -> R +): Flow = TODO() + +fun flowOf(value: T): Flow = TODO() +interface Flow \ No newline at end of file diff --git a/compiler/testData/cli/js/reifiedIntersectionType.out b/compiler/testData/cli/js/reifiedIntersectionType.out new file mode 100644 index 00000000000..4a6e77c28a4 --- /dev/null +++ b/compiler/testData/cli/js/reifiedIntersectionType.out @@ -0,0 +1,13 @@ +compiler/testData/cli/js/reifiedIntersectionType.kt:2:9: warning: variable 'flow' is never used + val flow = combine( + ^ +compiler/testData/cli/js/reifiedIntersectionType.kt:11:12: warning: parameter 'flows' is never used + vararg flows: Flow, + ^ +compiler/testData/cli/js/reifiedIntersectionType.kt:12:17: warning: parameter 'transform' is never used + crossinline transform: suspend (Array) -> R + ^ +compiler/testData/cli/js/reifiedIntersectionType.kt:15:16: warning: parameter 'value' is never used +fun flowOf(value: T): Flow = TODO() + ^ +OK diff --git a/compiler/testData/codegen/box/reified/reifiedIntersectionType.kt b/compiler/testData/codegen/box/reified/reifiedIntersectionType.kt new file mode 100644 index 00000000000..27d273cb612 --- /dev/null +++ b/compiler/testData/codegen/box/reified/reifiedIntersectionType.kt @@ -0,0 +1,37 @@ +// IGNORE_BACKEND: JS +// KJS_WITH_FULL_RUNTIME + +// Case that was found in kotlinx.coroutines + +fun test1() { + val flow = combine( + flowOf("1"), + flowOf(2) + ) { arr -> arr.joinToString() } +} + +fun Array.joinToString(): String = "" + +public inline fun combine( + vararg flows: Flow, + crossinline transform: suspend (Array) -> R +): Flow = TODO() + +fun flowOf(value: T): Flow = TODO() +interface Flow + +// Simplified case + +class In + +inline fun select(x: K, y: K): K = x +interface A +interface B + +fun test2(a: In, b: In) { + select(a, b) +} + +fun box(): String { + return "OK" +} diff --git a/compiler/testData/multiplatform/funInterfaces/common.kt b/compiler/testData/multiplatform/funInterfaces/common.kt index b3468ffd418..c3c5999df7d 100644 --- a/compiler/testData/multiplatform/funInterfaces/common.kt +++ b/compiler/testData/multiplatform/funInterfaces/common.kt @@ -1,6 +1,4 @@ -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+NewInference -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionForKotlinFunctions -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionPerArgument +// ADDITIONAL_COMPILER_ARGUMENTS: -Xnew-inference package common diff --git a/compiler/testData/multiplatform/funInterfaces/js.kt b/compiler/testData/multiplatform/funInterfaces/js.kt index e4a2a18ddfa..68963025a89 100644 --- a/compiler/testData/multiplatform/funInterfaces/js.kt +++ b/compiler/testData/multiplatform/funInterfaces/js.kt @@ -1,6 +1,4 @@ -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+NewInference -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionForKotlinFunctions -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionPerArgument +// ADDITIONAL_COMPILER_ARGUMENTS: -Xnew-inference package js diff --git a/compiler/testData/multiplatform/funInterfaces/jvm.kt b/compiler/testData/multiplatform/funInterfaces/jvm.kt index 3191f7aa74a..773e3b7724e 100644 --- a/compiler/testData/multiplatform/funInterfaces/jvm.kt +++ b/compiler/testData/multiplatform/funInterfaces/jvm.kt @@ -1,6 +1,4 @@ -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+NewInference -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionForKotlinFunctions -// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionPerArgument +// ADDITIONAL_COMPILER_ARGUMENTS: -Xnew-inference package jvm diff --git a/compiler/testData/multiplatform/funInterfaces/output.txt b/compiler/testData/multiplatform/funInterfaces/output.txt index 2d4637008a9..ac1ad3921a5 100644 --- a/compiler/testData/multiplatform/funInterfaces/output.txt +++ b/compiler/testData/multiplatform/funInterfaces/output.txt @@ -1,41 +1,11 @@ -- Common -- Exit code: OK Output: -warning: ATTENTION! -This build uses unsafe internal compiler arguments: - --XXLanguage:+NewInference --XXLanguage:+SamConversionForKotlinFunctions --XXLanguage:+SamConversionPerArgument - -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! -- JVM -- Exit code: OK Output: -warning: ATTENTION! -This build uses unsafe internal compiler arguments: - --XXLanguage:+NewInference --XXLanguage:+SamConversionForKotlinFunctions --XXLanguage:+SamConversionPerArgument - -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! -- JS -- Exit code: OK Output: -warning: ATTENTION! -This build uses unsafe internal compiler arguments: - --XXLanguage:+NewInference --XXLanguage:+SamConversionForKotlinFunctions --XXLanguage:+SamConversionPerArgument - -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! diff --git a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java index 22083d228d8..6c6ffec0b31 100644 --- a/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/cli/CliTestGenerated.java @@ -888,6 +888,11 @@ public class CliTestGenerated extends AbstractCliTest { runTest("compiler/testData/cli/js/outputPrefixFileNotFound.args"); } + @TestMetadata("reifiedIntersectionType.args") + public void testReifiedIntersectionType() throws Exception { + runTest("compiler/testData/cli/js/reifiedIntersectionType.args"); + } + @TestMetadata("simple2js.args") public void testSimple2js() throws Exception { runTest("compiler/testData/cli/js/simple2js.args"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java index 8c20e8e2916..2040059bc59 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxCodegenTestGenerated.java @@ -26549,6 +26549,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); } + @TestMetadata("reifiedIntersectionType.kt") + public void testReifiedIntersectionType() throws Exception { + runTest("compiler/testData/codegen/box/reified/reifiedIntersectionType.kt"); + } + @TestMetadata("safecast.kt") public void testSafecast() throws Exception { runTest("compiler/testData/codegen/box/reified/safecast.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index 5835c3e82ff..a01ed915ce1 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -25366,6 +25366,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); } + @TestMetadata("reifiedIntersectionType.kt") + public void testReifiedIntersectionType() throws Exception { + runTest("compiler/testData/codegen/box/reified/reifiedIntersectionType.kt"); + } + @TestMetadata("safecast.kt") public void testSafecast() throws Exception { runTest("compiler/testData/codegen/box/reified/safecast.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java index 7aeeaff7e41..6417ae6effd 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/FirBlackBoxCodegenTestGenerated.java @@ -25048,6 +25048,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); } + @TestMetadata("reifiedIntersectionType.kt") + public void testReifiedIntersectionType() throws Exception { + runTest("compiler/testData/codegen/box/reified/reifiedIntersectionType.kt"); + } + @TestMetadata("safecast.kt") public void testSafecast() throws Exception { runTest("compiler/testData/codegen/box/reified/safecast.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java index 12c88141820..108076a2400 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBlackBoxCodegenTestGenerated.java @@ -25048,6 +25048,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); } + @TestMetadata("reifiedIntersectionType.kt") + public void testReifiedIntersectionType() throws Exception { + runTest("compiler/testData/codegen/box/reified/reifiedIntersectionType.kt"); + } + @TestMetadata("safecast.kt") public void testSafecast() throws Exception { runTest("compiler/testData/codegen/box/reified/safecast.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index c7cdb8db0da..cf6e44d97d0 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -20484,6 +20484,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/reified/reifiedChain.kt"); } + @TestMetadata("reifiedIntersectionType.kt") + public void testReifiedIntersectionType() throws Exception { + runTest("compiler/testData/codegen/box/reified/reifiedIntersectionType.kt"); + } + @TestMetadata("safecast.kt") public void testSafecast() throws Exception { runTest("compiler/testData/codegen/box/reified/safecast.kt"); diff --git a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 7fe2cecd323..280ba69bc8a 100644 --- a/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/test/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -20544,6 +20544,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/reified/reifiedChain.kt"); } + @TestMetadata("reifiedIntersectionType.kt") + public void testReifiedIntersectionType() throws Exception { + runTest("compiler/testData/codegen/box/reified/reifiedIntersectionType.kt"); + } + @TestMetadata("safecast.kt") public void testSafecast() throws Exception { runTest("compiler/testData/codegen/box/reified/safecast.kt");