From 4a99cb274bcced778398dd69df8d9d7596485b24 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Tue, 16 Oct 2018 21:38:09 +0300 Subject: [PATCH] CLion/AppCode: Provide proper TargetPlatform & TargetPlatformVersion to FE --- .../kotlin/idea/caches/project/IdeaModuleInfos.kt | 3 +++ .../idea/caches/resolve/KotlinCacheServiceImpl.kt | 2 +- .../kotlin/idea/caches/resolve/PerFileAnalysisCache.kt | 10 ++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) 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 4c2d57ec892..0e26e2b9fd1 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 @@ -309,6 +309,9 @@ data class LibrarySourceInfo(val project: Project, val library: Library, overrid return createLibraryInfo(project, library) } + override val platform: TargetPlatform? + get() = binariesModuleInfo.platform + override fun toString() = "LibrarySourceInfo(libraryName=${library.name})" } 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 d4e017dbe88..9ebcfb69f47 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 @@ -209,7 +209,7 @@ class KotlinCacheServiceImpl(val project: Project) : KotlinCacheService { // we assume that all files come from the same module val targetPlatform = files.map { TargetPlatformDetector.getPlatform(it) }.toSet().single() val specialModuleInfo = files.map(KtFile::getModuleInfo).toSet().single() - val settings = specialModuleInfo.platformSettings(targetPlatform) + val settings = specialModuleInfo.platformSettings(specialModuleInfo.platform ?: targetPlatform) // File copies are created during completion and receive correct modification events through POM. // Dummy files created e.g. by J2K do not receive events. diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt index 5428735e350..4af97b0c88f 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/caches/resolve/PerFileAnalysisCache.kt @@ -23,6 +23,7 @@ import com.intellij.openapi.project.Project import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.analyzer.AnalysisResult +import org.jetbrains.kotlin.analyzer.ModuleInfo import org.jetbrains.kotlin.container.ComponentProvider import org.jetbrains.kotlin.container.get import org.jetbrains.kotlin.context.GlobalContext @@ -31,6 +32,8 @@ import org.jetbrains.kotlin.context.withProject import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve +import org.jetbrains.kotlin.idea.caches.project.getModuleInfo +import org.jetbrains.kotlin.idea.compiler.IDELanguageSettingsProvider import org.jetbrains.kotlin.idea.project.TargetPlatformDetector import org.jetbrains.kotlin.idea.project.jvmTarget import org.jetbrains.kotlin.idea.project.languageVersionSettings @@ -182,8 +185,11 @@ private object KotlinResolveDataProvider { allowSliceRewrite = true ) - val targetPlatform = TargetPlatformDetector.getPlatform(analyzableElement.containingKtFile) + val moduleInfo = analyzableElement.containingKtFile.getModuleInfo() + val targetPlatform = moduleInfo.platform ?: TargetPlatformDetector.getPlatform(analyzableElement.containingKtFile) + + val targetPlatformVersion = IDELanguageSettingsProvider.getTargetPlatform(moduleInfo, project) val lazyTopDownAnalyzer = createContainerForLazyBodyResolve( //TODO: should get ModuleContext globalContext.withProject(project).withModule(moduleDescriptor), @@ -191,7 +197,7 @@ private object KotlinResolveDataProvider { trace, targetPlatform, bodyResolveCache, - analyzableElement.jvmTarget, + targetPlatformVersion, analyzableElement.languageVersionSettings ).get()