Provide language version settings correctly for platform modules
So #KT-24546 Fixed
This commit is contained in:
@@ -424,7 +424,7 @@ interface SourceForBinaryModuleInfo : IdeaModuleInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class PlatformModuleInfo(
|
class PlatformModuleInfo(
|
||||||
private val platformModule: ModuleSourceInfo,
|
internal val platformModule: ModuleSourceInfo,
|
||||||
private val commonModules: List<ModuleSourceInfo>
|
private val commonModules: List<ModuleSourceInfo>
|
||||||
) : IdeaModuleInfo, CombinedModuleInfo, TrackableModuleInfo {
|
) : IdeaModuleInfo, CombinedModuleInfo, TrackableModuleInfo {
|
||||||
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
|
override val capabilities: Map<ModuleDescriptor.Capability<*>, Any?>
|
||||||
|
|||||||
+7
-10
@@ -33,10 +33,7 @@ import org.jetbrains.kotlin.config.AnalysisFlag
|
|||||||
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.idea.caches.project.LibraryInfo
|
import org.jetbrains.kotlin.idea.caches.project.*
|
||||||
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.project.getLanguageVersionSettings
|
import org.jetbrains.kotlin.idea.project.getLanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
import org.jetbrains.kotlin.idea.project.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.idea.project.targetPlatform
|
import org.jetbrains.kotlin.idea.project.targetPlatform
|
||||||
@@ -44,12 +41,12 @@ import org.jetbrains.kotlin.script.KotlinScriptDefinition
|
|||||||
|
|
||||||
object IDELanguageSettingsProvider : LanguageSettingsProvider {
|
object IDELanguageSettingsProvider : LanguageSettingsProvider {
|
||||||
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project): LanguageVersionSettings =
|
override fun getLanguageVersionSettings(moduleInfo: ModuleInfo, project: Project): LanguageVersionSettings =
|
||||||
when {
|
when (moduleInfo) {
|
||||||
moduleInfo is ModuleSourceInfo -> moduleInfo.module.languageVersionSettings
|
is ModuleSourceInfo -> moduleInfo.module.languageVersionSettings
|
||||||
moduleInfo is LibraryInfo -> project.getLanguageVersionSettings(extraAnalysisFlags = getExtraAnalysisFlags(project))
|
is LibraryInfo -> project.getLanguageVersionSettings(extraAnalysisFlags = getExtraAnalysisFlags(project))
|
||||||
moduleInfo is ScriptModuleInfo -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition)
|
is ScriptModuleInfo -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition)
|
||||||
moduleInfo is ScriptDependenciesInfo.ForFile ->
|
is ScriptDependenciesInfo.ForFile -> getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition)
|
||||||
getVersionLanguageSettingsForScripts(project, moduleInfo.scriptDefinition)
|
is PlatformModuleInfo -> moduleInfo.platformModule.module.languageVersionSettings
|
||||||
else -> project.getLanguageVersionSettings()
|
else -> project.getLanguageVersionSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -0,0 +1,2 @@
|
|||||||
|
// !CHECK_HIGHLIGHTING
|
||||||
|
fun some() {}
|
||||||
Vendored
+5
@@ -0,0 +1,5 @@
|
|||||||
|
suspend fun foo(
|
||||||
|
block: suspend () -> Unit
|
||||||
|
) {
|
||||||
|
block()
|
||||||
|
}
|
||||||
Generated
+5
@@ -99,6 +99,11 @@ public class MultiModuleHighlightingTestGenerated extends AbstractMultiModuleHig
|
|||||||
runTest("idea/testData/multiModuleHighlighting/multiplatform/suppressHeaderWithoutImpl/");
|
runTest("idea/testData/multiModuleHighlighting/multiplatform/suppressHeaderWithoutImpl/");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("suspend")
|
||||||
|
public void testSuspend() throws Exception {
|
||||||
|
runTest("idea/testData/multiModuleHighlighting/multiplatform/suspend/");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("transitive")
|
@TestMetadata("transitive")
|
||||||
public void testTransitive() throws Exception {
|
public void testTransitive() throws Exception {
|
||||||
runTest("idea/testData/multiModuleHighlighting/multiplatform/transitive/");
|
runTest("idea/testData/multiModuleHighlighting/multiplatform/transitive/");
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) {
|
|||||||
PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK)
|
PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
is CoroutinesDependency -> module.enableCoroutines()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,6 +141,7 @@ private fun parseDependency(it: String): Dependency {
|
|||||||
return when {
|
return when {
|
||||||
dependencyString.equals("stdlib", ignoreCase = true) -> StdlibDependency
|
dependencyString.equals("stdlib", ignoreCase = true) -> StdlibDependency
|
||||||
dependencyString.equals("fulljdk", ignoreCase = true) -> FullJdkDependency
|
dependencyString.equals("fulljdk", ignoreCase = true) -> FullJdkDependency
|
||||||
|
dependencyString.equals("coroutines", ignoreCase = true) -> CoroutinesDependency
|
||||||
else -> ModuleDependency(parseModuleId(dependencyString.split("-")))
|
else -> ModuleDependency(parseModuleId(dependencyString.split("-")))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -187,4 +189,5 @@ private data class RootInfo(
|
|||||||
private sealed class Dependency
|
private sealed class Dependency
|
||||||
private class ModuleDependency(val moduleId: ModuleId) : Dependency()
|
private class ModuleDependency(val moduleId: ModuleId) : Dependency()
|
||||||
private object StdlibDependency : Dependency()
|
private object StdlibDependency : Dependency()
|
||||||
private object FullJdkDependency : Dependency()
|
private object FullJdkDependency : Dependency()
|
||||||
|
private object CoroutinesDependency : Dependency()
|
||||||
@@ -54,6 +54,7 @@ fun AbstractMultiModuleTest.setupMppProjectFromDirStructure(testRoot: File) {
|
|||||||
PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK)
|
PluginTestCaseBase.jdk(TestJdkKind.FULL_JDK)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
is CoroutinesDependency -> module.enableCoroutines()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,6 +141,7 @@ private fun parseDependency(it: String): Dependency {
|
|||||||
return when {
|
return when {
|
||||||
dependencyString.equals("stdlib", ignoreCase = true) -> StdlibDependency
|
dependencyString.equals("stdlib", ignoreCase = true) -> StdlibDependency
|
||||||
dependencyString.equals("fulljdk", ignoreCase = true) -> FullJdkDependency
|
dependencyString.equals("fulljdk", ignoreCase = true) -> FullJdkDependency
|
||||||
|
dependencyString.equals("coroutines", ignoreCase = true) -> CoroutinesDependency
|
||||||
else -> ModuleDependency(parseModuleId(dependencyString.split("-")))
|
else -> ModuleDependency(parseModuleId(dependencyString.split("-")))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -187,4 +189,5 @@ private data class RootInfo(
|
|||||||
private sealed class Dependency
|
private sealed class Dependency
|
||||||
private class ModuleDependency(val moduleId: ModuleId) : Dependency()
|
private class ModuleDependency(val moduleId: ModuleId) : Dependency()
|
||||||
private object StdlibDependency : Dependency()
|
private object StdlibDependency : Dependency()
|
||||||
private object FullJdkDependency : Dependency()
|
private object FullJdkDependency : Dependency()
|
||||||
|
private object CoroutinesDependency : Dependency()
|
||||||
@@ -24,6 +24,7 @@ import com.intellij.openapi.vfs.newvfs.impl.VfsRootAccess
|
|||||||
import com.intellij.testFramework.PsiTestUtil
|
import com.intellij.testFramework.PsiTestUtil
|
||||||
import org.jetbrains.kotlin.config.CompilerSettings
|
import org.jetbrains.kotlin.config.CompilerSettings
|
||||||
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
import org.jetbrains.kotlin.config.KotlinFacetSettingsProvider
|
||||||
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.TargetPlatformKind
|
import org.jetbrains.kotlin.config.TargetPlatformKind
|
||||||
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
|
import org.jetbrains.kotlin.idea.facet.getOrCreateFacet
|
||||||
import org.jetbrains.kotlin.idea.facet.initializeIfNeeded
|
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) {
|
protected fun checkFiles(shouldCheckFile: () -> Boolean = { true }, check: () -> Unit) {
|
||||||
var atLeastOneFile = false
|
var atLeastOneFile = false
|
||||||
myProject.allKotlinFiles().forEach { file ->
|
myProject.allKotlinFiles().forEach { file ->
|
||||||
|
|||||||
Reference in New Issue
Block a user