From af94bcebeac2b1641d2dfd6448beeb7f7930edca Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Tue, 29 Dec 2020 13:47:21 +0300 Subject: [PATCH] [IDE] Propagate KotlinFacetSettings version and completely drop isReleaseCoroutines flag Also this commit removes number of tests related to support experimental coroutines --- .../kotlin/build/BuildMetaInfoTest.kt | 10 +---- .../multiplatform/compilerArguments/common.kt | 9 ---- .../compilerArguments/output.txt | 4 -- ...MultiPlatformIntegrationTestGenerated.java | 5 --- .../CompileKotlinAgainstCustomBinariesTest.kt | 37 ----------------- .../caches/resolve/IdeaResolverForProject.kt | 1 - .../caches/resolve/KotlinCacheServiceImpl.kt | 28 +++---------- .../caches/resolve/ProjectResolutionFacade.kt | 1 - .../GradleUpdateConfigurationQuickFixTest.kt | 6 --- .../kotlin/config/KotlinFacetSettings.kt | 2 +- .../kotlin/config/facetSerialization.kt | 10 ++++- .../MavenUpdateConfigurationQuickFixTest.kt | 5 --- .../jvmProjectWithV4FacetConfig/module.iml | 26 ++++++++++++ .../projectFile.ipr | 41 +++++++++++++++++++ .../jvmProjectWithV4FacetConfig/src/foo.kt | 0 .../module.iml | 3 +- .../module.iml | 3 +- .../module.iml | 3 +- .../module.iml | 3 +- .../libNew/libN.kt | 4 -- .../libOld/libO.kt | 4 -- .../moduleNew/main.kt | 18 -------- .../moduleOld/main.kt | 17 -------- .../resolve/MultiModuleHighlightingTest.kt | 37 ----------------- .../ConfigureKotlinInTempDirTest.kt | 2 +- .../configuration/ConfigureKotlinTest.java | 14 +++++++ 26 files changed, 104 insertions(+), 189 deletions(-) delete mode 100644 compiler/testData/multiplatform/compilerArguments/common.kt delete mode 100644 compiler/testData/multiplatform/compilerArguments/output.txt create mode 100644 idea/testData/configuration/jvmProjectWithV4FacetConfig/module.iml create mode 100644 idea/testData/configuration/jvmProjectWithV4FacetConfig/projectFile.ipr create mode 100644 idea/testData/configuration/jvmProjectWithV4FacetConfig/src/foo.kt delete mode 100644 idea/testData/multiModuleHighlighting/coroutineMixedReleaseStatus/libNew/libN.kt delete mode 100644 idea/testData/multiModuleHighlighting/coroutineMixedReleaseStatus/libOld/libO.kt delete mode 100644 idea/testData/multiModuleHighlighting/coroutineMixedReleaseStatus/moduleNew/main.kt delete mode 100644 idea/testData/multiModuleHighlighting/coroutineMixedReleaseStatus/moduleOld/main.kt diff --git a/build-common/test/org/jetbrains/kotlin/build/BuildMetaInfoTest.kt b/build-common/test/org/jetbrains/kotlin/build/BuildMetaInfoTest.kt index 17cc4f04ba9..cc7e504553b 100644 --- a/build-common/test/org/jetbrains/kotlin/build/BuildMetaInfoTest.kt +++ b/build-common/test/org/jetbrains/kotlin/build/BuildMetaInfoTest.kt @@ -17,7 +17,6 @@ package org.jetbrains.kotlin.build import junit.framework.TestCase -import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments import org.junit.Assert.assertNotEquals import org.junit.Test @@ -34,10 +33,7 @@ class BuildMetaInfoTest : TestCase() { "bytecodeVersionMinor", "bytecodeVersionPatch", "compilerBuildVersion", - "coroutinesEnable", - "coroutinesError", "coroutinesVersion", - "coroutinesWarn", "isEAP", "languageVersionString", "metadataVersionMajor", @@ -71,14 +67,12 @@ class BuildMetaInfoTest : TestCase() { @Test fun testJvmEquals() { val args1 = K2JVMCompilerArguments() - args1.coroutinesState = CommonCompilerArguments.ENABLE val info1 = JvmBuildMetaInfo.create(args1) val args2 = K2JVMCompilerArguments() - args2.coroutinesState = CommonCompilerArguments.WARN val info2 = JvmBuildMetaInfo.create(args2) - assertNotEquals(info1, info2) - assertEquals(info1, info2.copy(coroutinesEnable = true, coroutinesWarn = false)) + assertEquals(info1, info2) + assertEquals(info1, info2.copy()) } } diff --git a/compiler/testData/multiplatform/compilerArguments/common.kt b/compiler/testData/multiplatform/compilerArguments/common.kt deleted file mode 100644 index b6cc8d59849..00000000000 --- a/compiler/testData/multiplatform/compilerArguments/common.kt +++ /dev/null @@ -1,9 +0,0 @@ -// ADDITIONAL_COMPILER_ARGUMENTS: -Xcoroutines=enable - -fun f(g: suspend () -> Unit): Any = g - -suspend fun h() = f { } - -expect suspend fun k() - -expect fun l(g: suspend () -> Unit): Any diff --git a/compiler/testData/multiplatform/compilerArguments/output.txt b/compiler/testData/multiplatform/compilerArguments/output.txt deleted file mode 100644 index 48ea2319fee..00000000000 --- a/compiler/testData/multiplatform/compilerArguments/output.txt +++ /dev/null @@ -1,4 +0,0 @@ --- Common -- -Exit code: OK -Output: -warning: -Xcoroutines has no effect: coroutines are enabled anyway in 1.3 and beyond diff --git a/compiler/tests-gen/org/jetbrains/kotlin/multiplatform/MultiPlatformIntegrationTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/multiplatform/MultiPlatformIntegrationTestGenerated.java index 1c8ddc02ed2..be904fbe7a3 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/multiplatform/MultiPlatformIntegrationTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/multiplatform/MultiPlatformIntegrationTestGenerated.java @@ -34,11 +34,6 @@ public class MultiPlatformIntegrationTestGenerated extends AbstractMultiPlatform runTest("compiler/testData/multiplatform/compatibleProperties/"); } - @TestMetadata("compilerArguments") - public void testCompilerArguments() throws Exception { - runTest("compiler/testData/multiplatform/compilerArguments/"); - } - @TestMetadata("contracts") public void testContracts() throws Exception { runTest("compiler/testData/multiplatform/contracts/"); diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt index d49f6840d2f..da81812e3d5 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/CompileKotlinAgainstCustomBinariesTest.kt @@ -526,43 +526,6 @@ class CompileKotlinAgainstCustomBinariesTest : AbstractKotlinCompilerIntegration ) } - fun testObsoleteInlineSuspend() { - val version = intArrayOf(1, 0, 1) // legacy coroutines metadata - val options = listOf("-language-version", "1.2", "-Xcoroutines=enable") - val library = transformJar( - compileLibrary( - "library", - additionalOptions = options, - extraClassPath = listOf(ForTestCompileRuntime.coroutinesCompatForTests()), - checkKotlinOutput = { actual -> - KotlinTestUtils.assertEqualsToFile(File(testDataDirectory, "library.output.txt"), actual) - } - ), - { _, bytes -> - val (resultBytes, removedCounter) = stripSuspensionMarksToImitateLegacyCompiler( - WrongBytecodeVersionTest.transformMetadataInClassFile(bytes) { name, _ -> - if (name == JvmAnnotationNames.BYTECODE_VERSION_FIELD_NAME) version else null - }) - // we expect 4 instructions to be removed in this test library - assertEquals(4, removedCounter) - resultBytes - }) - compileKotlin( - "source.kt", tmpdir, listOf(library, ForTestCompileRuntime.coroutinesCompatForTests()), K2JVMCompiler(), - additionalOptions = options - ) - val classLoader = URLClassLoader( - arrayOf(library.toURI().toURL(), tmpdir.toURI().toURL(), ForTestCompileRuntime.coroutinesCompatForTests().toURI().toURL()), - ForTestCompileRuntime.runtimeJarClassLoader() - ) - @Suppress("UNCHECKED_CAST") - val result = classLoader - .loadClass("SourceKt") - .getDeclaredMethod("run") - .invoke(null) as Array - assertEquals(result[0], result[1]) - } - fun testInlineFunctionsWithMatchingJvmSignatures() { val library = compileLibrary( "library", diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt index efc49edb9ec..62b83cabb50 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/IdeaResolverForProject.kt @@ -43,7 +43,6 @@ class IdeaResolverForProject( private val syntheticFilesByModule: Map>, delegateResolver: ResolverForProject, fallbackModificationTracker: ModificationTracker? = null, - private val isReleaseCoroutines: Boolean? = null, // TODO(dsavvinov): this is needed only for non-composite analysis, extract separate resolver implementation instead private val constantSdkDependencyIfAny: SdkInfo? = null ) : AbstractResolverForProject( diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt index e278758636e..8f32bfb3d6a 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/KotlinCacheServiceImpl.kt @@ -80,20 +80,16 @@ internal val LOG = Logger.getInstance(KotlinCacheService::class.java) * This mode is currently enabled only for HMPP projects */ sealed class PlatformAnalysisSettings { - // Effectively unused as a property. Needed only to distinguish different modes when being put in a map - abstract val isReleaseCoroutines: Boolean - companion object { fun create( project: Project, platform: TargetPlatform, sdk: Sdk?, - isAdditionalBuiltInFeaturesSupported: Boolean, - isReleaseCoroutines: Boolean + isAdditionalBuiltInFeaturesSupported: Boolean ) = if (project.useCompositeAnalysis) - CompositeAnalysisSettings(isReleaseCoroutines) + CompositeAnalysisSettings else - PlatformAnalysisSettingsImpl(platform, sdk, isAdditionalBuiltInFeaturesSupported, isReleaseCoroutines) + PlatformAnalysisSettingsImpl(platform, sdk, isAdditionalBuiltInFeaturesSupported) } } @@ -101,11 +97,9 @@ data class PlatformAnalysisSettingsImpl( val platform: TargetPlatform, val sdk: Sdk?, val isAdditionalBuiltInFeaturesSupported: Boolean, - override val isReleaseCoroutines: Boolean ) : PlatformAnalysisSettings() -data class CompositeAnalysisSettings(override val isReleaseCoroutines: Boolean) : PlatformAnalysisSettings() { -} +object CompositeAnalysisSettings : PlatformAnalysisSettings() class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { override fun getResolutionFacade(elements: List): ResolutionFacade { @@ -149,10 +143,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { ): ProjectResolutionFacade { val sdk = dependenciesModuleInfo.sdk val platform = JvmPlatforms.defaultJvmPlatform // TODO: Js scripts? - val settings = PlatformAnalysisSettings.create( - project, platform, sdk, true, - LanguageFeature.ReleaseCoroutines.defaultState == LanguageFeature.State.ENABLED - ) + val settings = PlatformAnalysisSettings.create(project, platform, sdk, true) val dependenciesForScriptDependencies = listOf( LibraryModificationTracker.getInstance(project), @@ -227,16 +218,9 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { private fun IdeaModuleInfo.platformSettings(targetPlatform: TargetPlatform) = PlatformAnalysisSettings.create( this@KotlinCacheServiceImpl.project, targetPlatform, sdk, - supportsAdditionalBuiltInsMembers(this@KotlinCacheServiceImpl.project), - isReleaseCoroutines() + supportsAdditionalBuiltInsMembers(this@KotlinCacheServiceImpl.project) ) - private fun IdeaModuleInfo.isReleaseCoroutines(): Boolean { - return IDELanguageSettingsProvider - .getLanguageVersionSettings(this, this@KotlinCacheServiceImpl.project) - .supportsFeature(LanguageFeature.ReleaseCoroutines) - } - private fun facadeForModules(settings: PlatformAnalysisSettings) = getOrBuildGlobalFacade(settings).facadeForModules diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt index 2e036fa2654..14c2100ab61 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/ProjectResolutionFacade.kt @@ -122,7 +122,6 @@ internal class ProjectResolutionFacade( syntheticFilesByModule, delegateResolverForProject, if (invalidateOnOOCB) KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker else null, - settings.isReleaseCoroutines, constantSdkDependencyIfAny = if (settings is PlatformAnalysisSettingsImpl) settings.sdk?.let { SdkInfo(project, it) } else null ) diff --git a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleUpdateConfigurationQuickFixTest.kt b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleUpdateConfigurationQuickFixTest.kt index 688f37da309..6509b3272c6 100644 --- a/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleUpdateConfigurationQuickFixTest.kt +++ b/idea/idea-gradle/tests/org/jetbrains/kotlin/idea/codeInsight/gradle/GradleUpdateConfigurationQuickFixTest.kt @@ -66,12 +66,6 @@ class GradleUpdateConfigurationQuickFixTest : GradleImportingTestCase() { doTest("Set module language version to 1.1") } - @Test - @TargetVersions("4.7 <=> 6.0") - fun testEnableCoroutines() { - doTest("Enable coroutine support in the current module") - } - @Test @TargetVersions("4.7 <=> 6.0") fun testAddKotlinReflect() { diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index 6360f251c18..3d0094627a2 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -160,7 +160,7 @@ data class ExternalSystemNativeMainRunTask( class KotlinFacetSettings { companion object { // Increment this when making serialization-incompatible changes to configuration data - val CURRENT_VERSION = 3 + val CURRENT_VERSION = 4 val DEFAULT_VERSION = 0 } diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt index 40b90f2071a..7412c7a016f 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/facetSerialization.kt @@ -194,6 +194,10 @@ private fun readElementsList(element: Element, rootElementName: String, elementN return null } +private fun readV3Config(element: Element): KotlinFacetSettings { + return readV2AndLaterConfig(element) +} + private fun readV2Config(element: Element): KotlinFacetSettings { return readV2AndLaterConfig(element) } @@ -211,6 +215,7 @@ fun deserializeFacetSettings(element: Element): KotlinFacetSettings { return when (version) { 1 -> readV1Config(element) 2 -> readV2Config(element) + 3 -> readV3Config(element) KotlinFacetSettings.CURRENT_VERSION -> readLatestConfig(element) else -> return KotlinFacetSettings() // Reset facet configuration if versions don't match }.apply { this.version = version } @@ -397,7 +402,10 @@ fun Element.dropVersionsIfNecessary(settings: CommonCompilerArguments) { } fun KotlinFacetSettings.serializeFacetSettings(element: Element) { - val versionToWrite = if (version == 2) version else KotlinFacetSettings.CURRENT_VERSION + val versionToWrite = when (version) { + 2, 3 -> version + else -> KotlinFacetSettings.CURRENT_VERSION + } element.setAttribute("version", versionToWrite.toString()) writeLatestConfig(element) } diff --git a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenUpdateConfigurationQuickFixTest.kt b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenUpdateConfigurationQuickFixTest.kt index f458c94c61d..d3356715613 100644 --- a/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenUpdateConfigurationQuickFixTest.kt +++ b/idea/idea-maven/test/org/jetbrains/kotlin/idea/maven/MavenUpdateConfigurationQuickFixTest.kt @@ -72,11 +72,6 @@ class MavenUpdateConfigurationQuickFixTest : MavenImportingTestCase() { doTest("Set module language version to 1.1") } - @Test - fun testEnableCoroutines() { - doTest("Enable coroutine support in the current module") - } - @Test fun testEnableInlineClasses() { doTest("Enable inline classes support in the current module") diff --git a/idea/testData/configuration/jvmProjectWithV4FacetConfig/module.iml b/idea/testData/configuration/jvmProjectWithV4FacetConfig/module.iml new file mode 100644 index 00000000000..ca7f7a87b20 --- /dev/null +++ b/idea/testData/configuration/jvmProjectWithV4FacetConfig/module.iml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/idea/testData/configuration/jvmProjectWithV4FacetConfig/projectFile.ipr b/idea/testData/configuration/jvmProjectWithV4FacetConfig/projectFile.ipr new file mode 100644 index 00000000000..a1407e2c8cd --- /dev/null +++ b/idea/testData/configuration/jvmProjectWithV4FacetConfig/projectFile.ipr @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/idea/testData/configuration/jvmProjectWithV4FacetConfig/src/foo.kt b/idea/testData/configuration/jvmProjectWithV4FacetConfig/src/foo.kt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/idea/testData/configuration/loadAndSaveOldNativePlatformNewNativeFacet/module.iml b/idea/testData/configuration/loadAndSaveOldNativePlatformNewNativeFacet/module.iml index 1bb831be9cc..fdfb6b85db5 100644 --- a/idea/testData/configuration/loadAndSaveOldNativePlatformNewNativeFacet/module.iml +++ b/idea/testData/configuration/loadAndSaveOldNativePlatformNewNativeFacet/module.iml @@ -9,7 +9,6 @@ @@ -23,4 +22,4 @@ - \ No newline at end of file + diff --git a/idea/testData/configuration/loadAndSaveOldNativePlatformOldNativeFacet/module.iml b/idea/testData/configuration/loadAndSaveOldNativePlatformOldNativeFacet/module.iml index 13d086cf8b9..621852d3d56 100644 --- a/idea/testData/configuration/loadAndSaveOldNativePlatformOldNativeFacet/module.iml +++ b/idea/testData/configuration/loadAndSaveOldNativePlatformOldNativeFacet/module.iml @@ -9,7 +9,6 @@ @@ -23,4 +22,4 @@ - \ No newline at end of file + diff --git a/idea/testData/configuration/loadAndSaveProjectWithV2FacetConfig/module.iml b/idea/testData/configuration/loadAndSaveProjectWithV2FacetConfig/module.iml index 593634d6d64..0b4d94829af 100644 --- a/idea/testData/configuration/loadAndSaveProjectWithV2FacetConfig/module.iml +++ b/idea/testData/configuration/loadAndSaveProjectWithV2FacetConfig/module.iml @@ -10,7 +10,6 @@