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(
|
||||
private val platformModule: ModuleSourceInfo,
|
||||
internal val platformModule: ModuleSourceInfo,
|
||||
private val commonModules: List<ModuleSourceInfo>
|
||||
) : IdeaModuleInfo, CombinedModuleInfo, TrackableModuleInfo {
|
||||
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.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()
|
||||
}
|
||||
|
||||
|
||||
+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/");
|
||||
}
|
||||
|
||||
@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/");
|
||||
|
||||
@@ -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()
|
||||
private object FullJdkDependency : Dependency()
|
||||
private object CoroutinesDependency : Dependency()
|
||||
@@ -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()
|
||||
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 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 ->
|
||||
|
||||
Reference in New Issue
Block a user