Kotlin Facet: Use facet configuration to provide language version for IDE analyzer

This commit is contained in:
Alexey Sedunov
2016-10-27 18:35:02 +03:00
parent 6dd950cd5a
commit 30d08c989d
14 changed files with 119 additions and 16 deletions
+1
View File
@@ -32,5 +32,6 @@
<orderEntry type="module" module-name="ide-common" exported="" />
<orderEntry type="module" module-name="util" />
<orderEntry type="module" module-name="idea-core" />
<orderEntry type="module" module-name="idea-jps-common" />
</component>
</module>
@@ -20,7 +20,6 @@ import com.intellij.openapi.roots.OrderRootType
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.util.PathUtil
import org.jetbrains.kotlin.analyzer.*
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.ModuleContext
import org.jetbrains.kotlin.descriptors.PackagePartProvider
@@ -57,8 +56,12 @@ object JsAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
)
val container = createContainerForLazyResolve(
moduleContext, declarationProviderFactory, BindingTraceContext(), JsPlatform, targetEnvironment,
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
moduleContext,
declarationProviderFactory,
BindingTraceContext(),
JsPlatform,
targetEnvironment,
LanguageVersionSettingsProvider.getInstance(project).getLanguageVersionSettings(moduleInfo)
)
var packageFragmentProvider = container.get<ResolveSession>().packageFragmentProvider
@@ -23,7 +23,6 @@ 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.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.ComponentProvider
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.GlobalContext
@@ -33,6 +32,7 @@ import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
import org.jetbrains.kotlin.idea.project.languageVersionSettings
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.resolve.*
@@ -173,7 +173,7 @@ private object KotlinResolveDataProvider {
trace,
targetPlatform,
componentProvider.get<BodyResolveCache>(),
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
analyzableElement.languageVersionSettings
).get<LazyTopDownAnalyzer>()
lazyTopDownAnalyzer.analyzeDeclarations(TopDownAnalysisMode.TopLevelDeclarations, listOf(analyzableElement))
@@ -251,7 +251,7 @@ public class SourceNavigationHelper {
providerFactory,
new BindingTraceContext(),
TargetPlatform.Default.INSTANCE,
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
LanguageVersionSettingsImpl.DEFAULT
);
newModuleContext.initializeModuleContents(resolveSession.getPackageFragmentProvider());
@@ -16,7 +16,10 @@
package org.jetbrains.kotlin.idea.project
import com.intellij.openapi.module.Module
import com.intellij.openapi.module.ModuleUtilCore
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.psi.KtElement
import org.jetbrains.kotlin.resolve.TargetPlatform
@@ -26,3 +29,14 @@ val KtElement.platform: TargetPlatform
val KtElement.builtIns: KotlinBuiltIns
get() = getResolutionFacade().moduleDescriptor.builtIns
val Module.languageVersionSettings: LanguageVersionSettings
get() {
val versionInfo = KotlinFacetSettingsProvider.getInstance(project).getSettings(this).versionInfo
val languageVersion = versionInfo.languageLevel ?: LanguageVersion.LATEST
val apiVersion = versionInfo.apiLevel ?: languageVersion
return LanguageVersionSettingsImpl(languageVersion, ApiVersion.createByLanguageVersion(apiVersion))
}
val KtElement.languageVersionSettings: LanguageVersionSettings
get() = ModuleUtilCore.findModuleForPsiElement(this)?.languageVersionSettings ?: LanguageVersionSettingsImpl.DEFAULT
@@ -23,7 +23,6 @@ import com.intellij.psi.util.CachedValuesManager
import com.intellij.psi.util.PsiModificationTracker
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.kotlin.cfg.ControlFlowInformationProvider
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.container.get
import org.jetbrains.kotlin.context.SimpleGlobalContext
import org.jetbrains.kotlin.context.withModule
@@ -588,7 +587,7 @@ class ResolveElementCache(
trace,
targetPlatform,
statementFilter,
LanguageVersionSettingsImpl.DEFAULT // TODO: see KT-12410
file.languageVersionSettings
).get<BodyResolver>()
}