Provide language version settings correctly for platform modules

So #KT-24546 Fixed
This commit is contained in:
Mikhail Glukhikh
2018-05-24 12:59:32 +03:00
parent 6c3d69f74c
commit f8f3b1c6f1
8 changed files with 36 additions and 13 deletions
@@ -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?>
@@ -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()
}
@@ -0,0 +1,2 @@
// !CHECK_HIGHLIGHTING
fun some() {}
@@ -0,0 +1,5 @@
suspend fun foo(
block: suspend () -> Unit
) {
block()
}
@@ -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 ->