Disable New Inference in JS backend

See #KT-37163 for details
This commit is contained in:
Mikhail Zarechenskiy
2020-03-02 15:23:17 +03:00
parent e6885323da
commit d1a8f57740
18 changed files with 153 additions and 43 deletions
@@ -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 <T> getFlag(flag: AnalysisFlag<T>): T = delegate.getFlag(flag)
override val apiVersion: ApiVersion
get() = delegate.apiVersion
override val languageVersion: LanguageVersion
get() = delegate.languageVersion
}
@@ -246,6 +246,13 @@ public class K2JSCompiler extends CLICompiler<K2JSCompilerArguments> {
configuration.put(CommonConfigurationKeys.MODULE_NAME, FileUtil.getNameWithoutExtension(outputFile)); 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 config = new JsConfig(project, configuration);
JsConfig.Reporter reporter = new JsConfig.Reporter() { JsConfig.Reporter reporter = new JsConfig.Reporter() {
@Override @Override
@@ -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.EnvironmentConfigFiles
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser import org.jetbrains.kotlin.cli.jvm.plugins.PluginCliParser
import org.jetbrains.kotlin.config.CommonConfigurationKeys import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.IncrementalCompilation
import org.jetbrains.kotlin.config.Services
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
import org.jetbrains.kotlin.incremental.components.LookupTracker import org.jetbrains.kotlin.incremental.components.LookupTracker
import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider import org.jetbrains.kotlin.incremental.js.IncrementalDataProvider
+3
View File
@@ -0,0 +1,3 @@
$TESTDATA_DIR$/reifiedIntersectionType.kt
-output
$TEMP_DIR$/out.js
+16
View File
@@ -0,0 +1,16 @@
fun test1() {
val flow = combine(
flowOf("1"),
flowOf(2)
) { arr -> arr.joinToString() }
}
fun <T> Array<out T>.joinToString(): String = ""
public inline fun <reified T, R> combine(
vararg flows: Flow<T>,
crossinline transform: suspend (Array<T>) -> R
): Flow<R> = TODO()
fun <T> flowOf(value: T): Flow<T> = TODO()
interface Flow<out T>
+13
View File
@@ -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<T>,
^
compiler/testData/cli/js/reifiedIntersectionType.kt:12:17: warning: parameter 'transform' is never used
crossinline transform: suspend (Array<T>) -> R
^
compiler/testData/cli/js/reifiedIntersectionType.kt:15:16: warning: parameter 'value' is never used
fun <T> flowOf(value: T): Flow<T> = TODO()
^
OK
@@ -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 <T> Array<out T>.joinToString(): String = ""
public inline fun <reified T, R> combine(
vararg flows: Flow<T>,
crossinline transform: suspend (Array<T>) -> R
): Flow<R> = TODO()
fun <T> flowOf(value: T): Flow<T> = TODO()
interface Flow<out T>
// Simplified case
class In<in T>
inline fun <reified K> select(x: K, y: K): K = x
interface A
interface B
fun test2(a: In<A>, b: In<B>) {
select(a, b)
}
fun box(): String {
return "OK"
}
+1 -3
View File
@@ -1,6 +1,4 @@
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+NewInference // ADDITIONAL_COMPILER_ARGUMENTS: -Xnew-inference
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionForKotlinFunctions
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionPerArgument
package common package common
+1 -3
View File
@@ -1,6 +1,4 @@
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+NewInference // ADDITIONAL_COMPILER_ARGUMENTS: -Xnew-inference
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionForKotlinFunctions
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionPerArgument
package js package js
+1 -3
View File
@@ -1,6 +1,4 @@
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+NewInference // ADDITIONAL_COMPILER_ARGUMENTS: -Xnew-inference
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionForKotlinFunctions
// ADDITIONAL_COMPILER_ARGUMENTS: -XXLanguage:+SamConversionPerArgument
package jvm package jvm
@@ -1,41 +1,11 @@
-- Common -- -- Common --
Exit code: OK Exit code: OK
Output: 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 -- -- JVM --
Exit code: OK Exit code: OK
Output: 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 -- -- JS --
Exit code: OK Exit code: OK
Output: 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!
@@ -888,6 +888,11 @@ public class CliTestGenerated extends AbstractCliTest {
runTest("compiler/testData/cli/js/outputPrefixFileNotFound.args"); 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") @TestMetadata("simple2js.args")
public void testSimple2js() throws Exception { public void testSimple2js() throws Exception {
runTest("compiler/testData/cli/js/simple2js.args"); runTest("compiler/testData/cli/js/simple2js.args");
@@ -26549,6 +26549,11 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); 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") @TestMetadata("safecast.kt")
public void testSafecast() throws Exception { public void testSafecast() throws Exception {
runTest("compiler/testData/codegen/box/reified/safecast.kt"); runTest("compiler/testData/codegen/box/reified/safecast.kt");
@@ -25366,6 +25366,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); 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") @TestMetadata("safecast.kt")
public void testSafecast() throws Exception { public void testSafecast() throws Exception {
runTest("compiler/testData/codegen/box/reified/safecast.kt"); runTest("compiler/testData/codegen/box/reified/safecast.kt");
@@ -25048,6 +25048,11 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT
runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); 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") @TestMetadata("safecast.kt")
public void testSafecast() throws Exception { public void testSafecast() throws Exception {
runTest("compiler/testData/codegen/box/reified/safecast.kt"); runTest("compiler/testData/codegen/box/reified/safecast.kt");
@@ -25048,6 +25048,11 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
runTest("compiler/testData/codegen/box/reified/reifiedInlineIntoNonInlineableLambda.kt"); 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") @TestMetadata("safecast.kt")
public void testSafecast() throws Exception { public void testSafecast() throws Exception {
runTest("compiler/testData/codegen/box/reified/safecast.kt"); runTest("compiler/testData/codegen/box/reified/safecast.kt");
@@ -20484,6 +20484,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/reified/reifiedChain.kt"); 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") @TestMetadata("safecast.kt")
public void testSafecast() throws Exception { public void testSafecast() throws Exception {
runTest("compiler/testData/codegen/box/reified/safecast.kt"); runTest("compiler/testData/codegen/box/reified/safecast.kt");
@@ -20544,6 +20544,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest {
runTest("compiler/testData/codegen/box/reified/reifiedChain.kt"); 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") @TestMetadata("safecast.kt")
public void testSafecast() throws Exception { public void testSafecast() throws Exception {
runTest("compiler/testData/codegen/box/reified/safecast.kt"); runTest("compiler/testData/codegen/box/reified/safecast.kt");