diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt index d39efae47ac..7163fc0c674 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/project/IdeaModuleInfos.kt @@ -424,7 +424,7 @@ interface SourceForBinaryModuleInfo : IdeaModuleInfo { } class PlatformModuleInfo( - private val platformModule: ModuleSourceInfo, + internal val platformModule: ModuleSourceInfo, private val commonModules: List ) : IdeaModuleInfo, CombinedModuleInfo, TrackableModuleInfo { override val capabilities: Map, Any?> diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt index 3c7b8e2533f..e382cfcd7d6 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/compiler/IDELanguageSettingsProvider.kt @@ -33,10 +33,7 @@ import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.config.TargetPlatformVersion -import org.jetbrains.kotlin.idea.caches.project.LibraryInfo -import org.jetbrains.kotlin.idea.caches.project.ModuleSourceInfo -import org.jetbrains.kotlin.idea.caches.project.ScriptDependenciesInfo -import org.jetbrains.kotlin.idea.caches.project.ScriptModuleInfo +import org.jetbrains.kotlin.idea.caches.project.* import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings import org.jetbrains.kotlin.idea.project.languageVersionSettings import org.jetbrains.kotlin.idea.project.targetPlatform @@ -44,12 +41,12 @@ import org.jetbrains.kotlin.script.KotlinScriptDefinition object IDELanguageSettingsProvider : LanguageSettingsProvider { override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project): LanguageVersionSettings = - when { - moduleInfo is ModuleSourceInfo -> moduleInfo.module.languageVersionSettings - moduleInfo is LibraryInfo -> project.getLanguageVersionSettings(extraAnalysisFlags = getExtraAnalysisFlags(project)) - moduleInfo is ScriptModuleInfo -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition) - moduleInfo is ScriptDependenciesInfo.ForFile -> - getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition) + when (moduleInfo) { + is ModuleSourceInfo -> moduleInfo.module.languageVersionSettings + is LibraryInfo -> project.getLanguageVersionSettings(extraAnalysisFlags = getExtraAnalysisFlags(project)) + is ScriptModuleInfo -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition) + is ScriptDependenciesInfo.ForFile -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition) + is PlatformModuleInfo -> moduleInfo.platformModule.module.languageVersionSettings else -> project.getLanguageVersionSettings() } diff --git a/idea/testData/multiModuleHighlighting/multiplatform/suspend/base_common/common.kt b/idea/testData/multiModuleHighlighting/multiplatform/suspend/base_common/common.kt new file mode 100644 index 00000000000..4f6c3a20ca3 --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/suspend/base_common/common.kt @@ -0,0 +1,2 @@ +// !CHECK_HIGHLIGHTING +fun some() {} \ No newline at end of file diff --git a/idea/testData/multiModuleHighlighting/multiplatform/suspend/base_jvm_dep(coroutines)/jvm.kt b/idea/testData/multiModuleHighlighting/multiplatform/suspend/base_jvm_dep(coroutines)/jvm.kt new file mode 100644 index 00000000000..e1b0fdb75bc --- /dev/null +++ b/idea/testData/multiModuleHighlighting/multiplatform/suspend/base_jvm_dep(coroutines)/jvm.kt @@ -0,0 +1,5 @@ +suspend fun foo( + block: suspend () -> Unit +) { + block() +} diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTestGenerated.java index a8bf51984e6..916b9133f5a 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiModuleHighlightingTestGenerated.java @@ -99,6 +99,11 @@ public class MultiModuleHighlightingTestGenerated extends AbstractMultiModuleHig runTest("idea/testData/multiModuleHighlighting/multiplatform/suppressHeaderWithoutImpl/"); } + @TestMetadata("suspend") + public void testSuspend() throws Exception { + runTest("idea/testData/multiModuleHighlighting/multiplatform/suspend/"); + } + @TestMetadata("transitive") public void testTransitive() throws Exception { runTest("idea/testData/multiModuleHighlighting/multiplatform/transitive/"); diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt index 4f8dc2f6a8b..2363e49c8ed 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt @@ -54,6 +54,7 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) { PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK) }) } + is CoroutinesDependency -> module.enableCoroutines() } } } @@ -140,6 +141,7 @@ private fun parseDependency(it: String): Dependency { return when { dependencyString.equals("stdlib", ignoreCase = true) -> StdlibDependency dependencyString.equals("fulljdk", ignoreCase = true) -> FullJdkDependency + dependencyString.equals("coroutines", ignoreCase = true) -> CoroutinesDependency else -> ModuleDependency(parseModuleId(dependencyString.split("-"))) } } @@ -187,4 +189,5 @@ private data class RootInfo( private sealed class Dependency private class ModuleDependency(val moduleId: ModuleId) : Dependency() private object StdlibDependency : Dependency() -private object FullJdkDependency : Dependency() \ No newline at end of file +private object FullJdkDependency : Dependency() +private object CoroutinesDependency : Dependency() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 index 32c6d0ce05e..2614c46574c 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 +++ b/idea/tests/org/jetbrains/kotlin/idea/multiplatform/multiPlatformSetup.kt.182 @@ -54,6 +54,7 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) { PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK) }) } + is CoroutinesDependency -> module.enableCoroutines() } } } @@ -140,6 +141,7 @@ private fun parseDependency(it: String): Dependency { return when { dependencyString.equals("stdlib", ignoreCase = true) -> StdlibDependency dependencyString.equals("fulljdk", ignoreCase = true) -> FullJdkDependency + dependencyString.equals("coroutines", ignoreCase = true) -> CoroutinesDependency else -> ModuleDependency(parseModuleId(dependencyString.split("-"))) } } @@ -187,4 +189,5 @@ private data class RootInfo( private sealed class Dependency private class ModuleDependency(val moduleId: ModuleId) : Dependency() private object StdlibDependency : Dependency() -private object FullJdkDependency : Dependency() \ No newline at end of file +private object FullJdkDependency : Dependency() +private object CoroutinesDependency : Dependency() \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt index 1d8f49de1d3..09a96b7ec54 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/stubs/AbstractMultiModuleTest.kt @@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess import com.intellij.testFramework.PsiTestUtil import org.jetbrains.kotlin.config.CompilerSettings import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.TargetPlatformKind import org.jetbrains.kotlin.idea.facet.getOrCreateFacet import org.jetbrains.kotlin.idea.facet.initializeIfNeeded @@ -103,6 +104,13 @@ abstract class AbstractMultiModuleTest : DaemonAnalyzerTestCase() { } } + fun Module.enableCoroutines() { + createFacet() + val facetSettings = KotlinFacetSettingsProvider.getInstance(project).getInitializedSettings(this) + facetSettings.useProjectSettings = false + facetSettings.coroutineSupport = LanguageFeature.State.ENABLED + } + protected fun checkFiles(shouldCheckFile: () -> Boolean = { true }, check: () -> Unit) { var atLeastOneFile = false myProject.allKotlinFiles().forEach { file ->