Inject JvmTarget into some JVM-specific call checkers
This makes it possible to drop CompilerConfiguration from CallCheckerContext, which in turn helps to avoid passing the entire CompilerConfiguration instance through front-end
This commit is contained in:
@@ -20,6 +20,7 @@ import com.intellij.openapi.project.Project
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider
|
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.*
|
import org.jetbrains.kotlin.container.*
|
||||||
@@ -87,11 +88,12 @@ fun createContainerForLazyResolveWithJava(
|
|||||||
targetEnvironment: TargetEnvironment,
|
targetEnvironment: TargetEnvironment,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
packagePartProvider: PackagePartProvider,
|
packagePartProvider: PackagePartProvider,
|
||||||
|
jvmTarget: JvmTarget,
|
||||||
compilerConfiguration: CompilerConfiguration,
|
compilerConfiguration: CompilerConfiguration,
|
||||||
useBuiltInsProvider: Boolean,
|
useBuiltInsProvider: Boolean,
|
||||||
useLazyResolve: Boolean
|
useLazyResolve: Boolean
|
||||||
): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatform) {
|
): StorageComponentContainer = createContainer("LazyResolveWithJava", JvmPlatform) {
|
||||||
configureModule(moduleContext, JvmPlatform, bindingTrace)
|
configureModule(moduleContext, JvmPlatform, jvmTarget, bindingTrace)
|
||||||
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker)
|
configureJavaTopDownAnalysis(moduleContentScope, moduleContext.project, lookupTracker)
|
||||||
|
|
||||||
useInstance(packagePartProvider)
|
useInstance(packagePartProvider)
|
||||||
@@ -123,10 +125,11 @@ fun createContainerForTopDownAnalyzerForJvm(
|
|||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
packagePartProvider: PackagePartProvider,
|
packagePartProvider: PackagePartProvider,
|
||||||
moduleClassResolver: ModuleClassResolver,
|
moduleClassResolver: ModuleClassResolver,
|
||||||
|
jvmTarget: JvmTarget,
|
||||||
compilerConfiguration: CompilerConfiguration
|
compilerConfiguration: CompilerConfiguration
|
||||||
): ComponentProvider = createContainerForLazyResolveWithJava(
|
): ComponentProvider = createContainerForLazyResolveWithJava(
|
||||||
moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver,
|
moduleContext, bindingTrace, declarationProviderFactory, moduleContentScope, moduleClassResolver,
|
||||||
CompilerEnvironment, lookupTracker, packagePartProvider, compilerConfiguration,
|
CompilerEnvironment, lookupTracker, packagePartProvider, jvmTarget, compilerConfiguration,
|
||||||
useBuiltInsProvider = true, useLazyResolve = false
|
useBuiltInsProvider = true, useLazyResolve = false
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -82,15 +82,12 @@ object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
|
|||||||
resolverForModule.componentProvider.get<JavaDescriptorResolver>()
|
resolverForModule.componentProvider.get<JavaDescriptorResolver>()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val languageSettingsProvider = LanguageSettingsProvider.getInstance(project)
|
||||||
|
val jvmTarget = languageSettingsProvider.getTargetPlatform(moduleInfo) as? JvmTarget ?: JvmTarget.JVM_1_6
|
||||||
|
|
||||||
val configuration = CompilerConfiguration().apply {
|
val configuration = CompilerConfiguration().apply {
|
||||||
val languageSettingsProvider = LanguageSettingsProvider.getInstance(project)
|
|
||||||
languageVersionSettings = languageSettingsProvider.getLanguageVersionSettings(moduleInfo, project)
|
languageVersionSettings = languageSettingsProvider.getLanguageVersionSettings(moduleInfo, project)
|
||||||
|
put(JVMConfigurationKeys.JVM_TARGET, jvmTarget)
|
||||||
val platform = languageSettingsProvider.getTargetPlatform(moduleInfo)
|
|
||||||
if (platform is JvmTarget) {
|
|
||||||
put(JVMConfigurationKeys.JVM_TARGET, platform)
|
|
||||||
}
|
|
||||||
|
|
||||||
isReadOnly = true
|
isReadOnly = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,6 +102,7 @@ object JvmAnalyzerFacade : AnalyzerFacade<JvmPlatformParameters>() {
|
|||||||
targetEnvironment,
|
targetEnvironment,
|
||||||
LookupTracker.DO_NOTHING,
|
LookupTracker.DO_NOTHING,
|
||||||
packagePartProvider,
|
packagePartProvider,
|
||||||
|
jvmTarget,
|
||||||
configuration,
|
configuration,
|
||||||
useBuiltInsProvider = false, // TODO: load built-ins from module dependencies in IDE
|
useBuiltInsProvider = false, // TODO: load built-ins from module dependencies in IDE
|
||||||
useLazyResolve = true
|
useLazyResolve = true
|
||||||
|
|||||||
+5
-6
@@ -23,10 +23,7 @@ import com.intellij.psi.search.DelegatingGlobalSearchScope
|
|||||||
import com.intellij.psi.search.GlobalSearchScope
|
import com.intellij.psi.search.GlobalSearchScope
|
||||||
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
import org.jetbrains.kotlin.analyzer.AnalysisResult
|
||||||
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider
|
import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider
|
||||||
import org.jetbrains.kotlin.config.CommonConfigurationKeys
|
import org.jetbrains.kotlin.config.*
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
|
||||||
import org.jetbrains.kotlin.container.ComponentProvider
|
import org.jetbrains.kotlin.container.ComponentProvider
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.ContextForNewModule
|
import org.jetbrains.kotlin.context.ContextForNewModule
|
||||||
@@ -135,6 +132,8 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
val sourceScope = if (separateModules) sourceModuleSearchScope else GlobalSearchScope.allScope(project)
|
val sourceScope = if (separateModules) sourceModuleSearchScope else GlobalSearchScope.allScope(project)
|
||||||
val moduleClassResolver = SourceOrBinaryModuleClassResolver(sourceScope)
|
val moduleClassResolver = SourceOrBinaryModuleClassResolver(sourceScope)
|
||||||
|
|
||||||
|
val jvmTarget = configuration.get(JVMConfigurationKeys.JVM_TARGET) ?: JvmTarget.JVM_1_6
|
||||||
|
|
||||||
val optionalBuiltInsModule =
|
val optionalBuiltInsModule =
|
||||||
if (configuration.getBoolean(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES)) {
|
if (configuration.getBoolean(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES)) {
|
||||||
if (createBuiltInsFromModule)
|
if (createBuiltInsFromModule)
|
||||||
@@ -154,7 +153,7 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
|
|
||||||
val dependenciesContainer = createContainerForTopDownAnalyzerForJvm(
|
val dependenciesContainer = createContainerForTopDownAnalyzerForJvm(
|
||||||
dependenciesContext, trace, DeclarationProviderFactory.EMPTY, dependencyScope, lookupTracker,
|
dependenciesContext, trace, DeclarationProviderFactory.EMPTY, dependencyScope, lookupTracker,
|
||||||
packagePartProvider(dependencyScope), moduleClassResolver, configuration
|
packagePartProvider(dependencyScope), moduleClassResolver, jvmTarget, configuration
|
||||||
)
|
)
|
||||||
|
|
||||||
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(dependenciesContainer, null) }
|
StorageComponentContainerContributor.getInstances(project).forEach { it.onContainerComposed(dependenciesContainer, null) }
|
||||||
@@ -181,7 +180,7 @@ object TopDownAnalyzerFacadeForJVM {
|
|||||||
// TODO: get rid of duplicate invocation of CodeAnalyzerInitializer#initialize, or refactor CliLightClassGenerationSupport
|
// TODO: get rid of duplicate invocation of CodeAnalyzerInitializer#initialize, or refactor CliLightClassGenerationSupport
|
||||||
val container = createContainerForTopDownAnalyzerForJvm(
|
val container = createContainerForTopDownAnalyzerForJvm(
|
||||||
moduleContext, trace, declarationProviderFactory(storageManager, files), sourceScope, lookupTracker,
|
moduleContext, trace, declarationProviderFactory(storageManager, files), sourceScope, lookupTracker,
|
||||||
partProvider, moduleClassResolver, configuration
|
partProvider, moduleClassResolver, jvmTarget, configuration
|
||||||
).apply {
|
).apply {
|
||||||
initJvmBuiltInsForTopDownAnalysis()
|
initJvmBuiltInsForTopDownAnalysis()
|
||||||
(partProvider as? IncrementalPackagePartProvider)?.deserializationConfiguration = get<DeserializationConfiguration>()
|
(partProvider as? IncrementalPackagePartProvider)?.deserializationConfiguration = get<DeserializationConfiguration>()
|
||||||
|
|||||||
+7
-8
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.resolve.jvm.checkers
|
package org.jetbrains.kotlin.resolve.jvm.checkers
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.config.JvmTarget
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassOrPackageFragmentDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassOrPackageFragmentDescriptor
|
||||||
@@ -34,8 +33,7 @@ import org.jetbrains.kotlin.resolve.inline.InlineUtil
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedCallableMemberDescriptor
|
||||||
|
|
||||||
class InlinePlatformCompatibilityChecker: CallChecker {
|
class InlinePlatformCompatibilityChecker(val jvmTarget: JvmTarget) : CallChecker {
|
||||||
|
|
||||||
private val doCheck = doCheck()
|
private val doCheck = doCheck()
|
||||||
|
|
||||||
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
|
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
|
||||||
@@ -61,15 +59,17 @@ class InlinePlatformCompatibilityChecker: CallChecker {
|
|||||||
val propertyOrFun = DescriptorUtils.getDirectMember(resultingDescriptor)
|
val propertyOrFun = DescriptorUtils.getDirectMember(resultingDescriptor)
|
||||||
val inliningBytecodeVersion = getBytecodeVersionIfDeserializedDescriptor(propertyOrFun) ?: return
|
val inliningBytecodeVersion = getBytecodeVersionIfDeserializedDescriptor(propertyOrFun) ?: return
|
||||||
|
|
||||||
val compilingTarget = context.compilerConfiguration[JVMConfigurationKeys.JVM_TARGET] ?: JvmTarget.DEFAULT
|
val compilingBytecodeVersion = jvmTarget.bytecodeVersion
|
||||||
val compilingBytecodeVersion = compilingTarget.bytecodeVersion
|
|
||||||
if (compilingBytecodeVersion < inliningBytecodeVersion) {
|
if (compilingBytecodeVersion < inliningBytecodeVersion) {
|
||||||
context.trace.report(ErrorsJvm.INLINE_FROM_HIGHER_PLATFORM.on(reportOn, JvmTarget.getDescription(inliningBytecodeVersion), JvmTarget.getDescription(compilingBytecodeVersion)))
|
context.trace.report(ErrorsJvm.INLINE_FROM_HIGHER_PLATFORM.on(
|
||||||
|
reportOn,
|
||||||
|
JvmTarget.getDescription(inliningBytecodeVersion),
|
||||||
|
JvmTarget.getDescription(compilingBytecodeVersion)
|
||||||
|
))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
||||||
fun doCheck() = "true" != System.getProperty("kotlin.skip.bytecode.version.check")
|
fun doCheck() = "true" != System.getProperty("kotlin.skip.bytecode.version.check")
|
||||||
|
|
||||||
fun getBytecodeVersionIfDeserializedDescriptor(funOrProperty: DeclarationDescriptor): Int? {
|
fun getBytecodeVersionIfDeserializedDescriptor(funOrProperty: DeclarationDescriptor): Int? {
|
||||||
@@ -89,4 +89,3 @@ class InlinePlatformCompatibilityChecker: CallChecker {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
-3
@@ -17,7 +17,6 @@
|
|||||||
package org.jetbrains.kotlin.resolve.jvm.checkers
|
package org.jetbrains.kotlin.resolve.jvm.checkers
|
||||||
|
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
|
||||||
import org.jetbrains.kotlin.config.JvmTarget
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
|
||||||
@@ -31,10 +30,10 @@ import org.jetbrains.kotlin.resolve.calls.checkers.CallCheckerContext
|
|||||||
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
import org.jetbrains.kotlin.resolve.calls.model.ResolvedCall
|
||||||
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
import org.jetbrains.kotlin.resolve.jvm.diagnostics.ErrorsJvm
|
||||||
|
|
||||||
class InterfaceDefaultMethodCallChecker : CallChecker {
|
class InterfaceDefaultMethodCallChecker(val jvmTarget: JvmTarget) : CallChecker {
|
||||||
|
|
||||||
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
|
override fun check(resolvedCall: ResolvedCall<*>, reportOn: PsiElement, context: CallCheckerContext) {
|
||||||
val supportDefaults = context.compilerConfiguration.get(JVMConfigurationKeys.JVM_TARGET) == JvmTarget.JVM_1_8
|
val supportDefaults = jvmTarget == JvmTarget.JVM_1_8
|
||||||
|
|
||||||
val descriptor = resolvedCall.resultingDescriptor as? FunctionDescriptor ?: return
|
val descriptor = resolvedCall.resultingDescriptor as? FunctionDescriptor ?: return
|
||||||
|
|
||||||
|
|||||||
+3
-5
@@ -21,10 +21,8 @@ import org.jetbrains.kotlin.container.useImpl
|
|||||||
import org.jetbrains.kotlin.container.useInstance
|
import org.jetbrains.kotlin.container.useInstance
|
||||||
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
|
||||||
import org.jetbrains.kotlin.resolve.PlatformConfigurator
|
import org.jetbrains.kotlin.resolve.PlatformConfigurator
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.InlineCheckerWrapper
|
|
||||||
import org.jetbrains.kotlin.resolve.calls.checkers.ReifiedTypeParameterSubstitutionChecker
|
import org.jetbrains.kotlin.resolve.calls.checkers.ReifiedTypeParameterSubstitutionChecker
|
||||||
import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker
|
import org.jetbrains.kotlin.resolve.checkers.HeaderImplDeclarationChecker
|
||||||
import org.jetbrains.kotlin.resolve.checkers.MissingDependencyClassChecker
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.*
|
import org.jetbrains.kotlin.resolve.jvm.*
|
||||||
import org.jetbrains.kotlin.resolve.jvm.checkers.*
|
import org.jetbrains.kotlin.resolve.jvm.checkers.*
|
||||||
import org.jetbrains.kotlin.synthetic.JavaSyntheticConstructorsProvider
|
import org.jetbrains.kotlin.synthetic.JavaSyntheticConstructorsProvider
|
||||||
@@ -50,14 +48,12 @@ object JvmPlatformConfigurator : PlatformConfigurator(
|
|||||||
|
|
||||||
additionalCallCheckers = listOf(
|
additionalCallCheckers = listOf(
|
||||||
JavaAnnotationCallChecker(),
|
JavaAnnotationCallChecker(),
|
||||||
InterfaceDefaultMethodCallChecker(),
|
|
||||||
JavaClassOnCompanionChecker(),
|
JavaClassOnCompanionChecker(),
|
||||||
ProtectedInSuperClassCompanionCallChecker(),
|
ProtectedInSuperClassCompanionCallChecker(),
|
||||||
UnsupportedSyntheticCallableReferenceChecker(),
|
UnsupportedSyntheticCallableReferenceChecker(),
|
||||||
SuperCallWithDefaultArgumentsChecker(),
|
SuperCallWithDefaultArgumentsChecker(),
|
||||||
ProtectedSyntheticExtensionCallChecker,
|
ProtectedSyntheticExtensionCallChecker,
|
||||||
ReifiedTypeParameterSubstitutionChecker(),
|
ReifiedTypeParameterSubstitutionChecker()
|
||||||
InlinePlatformCompatibilityChecker()
|
|
||||||
),
|
),
|
||||||
|
|
||||||
additionalTypeCheckers = listOf(
|
additionalTypeCheckers = listOf(
|
||||||
@@ -88,6 +84,8 @@ object JvmPlatformConfigurator : PlatformConfigurator(
|
|||||||
override fun configureModuleComponents(container: StorageComponentContainer) {
|
override fun configureModuleComponents(container: StorageComponentContainer) {
|
||||||
container.useImpl<JvmReflectionAPICallChecker>()
|
container.useImpl<JvmReflectionAPICallChecker>()
|
||||||
container.useImpl<JavaSyntheticScopes>()
|
container.useImpl<JavaSyntheticScopes>()
|
||||||
|
container.useImpl<InterfaceDefaultMethodCallChecker>()
|
||||||
|
container.useImpl<InlinePlatformCompatibilityChecker>()
|
||||||
container.useInstance(JavaSyntheticConstructorsProvider)
|
container.useInstance(JavaSyntheticConstructorsProvider)
|
||||||
container.useInstance(JvmTypeSpecificityComparator)
|
container.useInstance(JvmTypeSpecificityComparator)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ import org.jetbrains.kotlin.serialization.deserialization.MetadataPackageFragmen
|
|||||||
object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
|
object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
|
||||||
private val compilerConfiguration = CompilerConfiguration().apply {
|
private val compilerConfiguration = CompilerConfiguration().apply {
|
||||||
languageVersionSettings = LanguageVersionSettingsImpl(
|
languageVersionSettings = LanguageVersionSettingsImpl(
|
||||||
LanguageVersion.LATEST, ApiVersion.LATEST, setOf(LanguageFeature.MultiPlatformProjects)
|
LanguageVersion.LATEST, ApiVersion.LATEST, additionalFeatures = setOf(LanguageFeature.MultiPlatformProjects)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -128,7 +128,7 @@ object DefaultAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
|
|||||||
targetEnvironment: TargetEnvironment,
|
targetEnvironment: TargetEnvironment,
|
||||||
packagePartProvider: PackagePartProvider
|
packagePartProvider: PackagePartProvider
|
||||||
): StorageComponentContainer = createContainer("ResolveCommonCode", targetPlatform) {
|
): StorageComponentContainer = createContainer("ResolveCommonCode", targetPlatform) {
|
||||||
configureModule(moduleContext, targetPlatform, bindingTrace)
|
configureModule(moduleContext, targetPlatform, TargetPlatformVersion.NoVersion, bindingTrace)
|
||||||
|
|
||||||
useInstance(moduleContentScope)
|
useInstance(moduleContentScope)
|
||||||
useInstance(LookupTracker.DO_NOTHING)
|
useInstance(LookupTracker.DO_NOTHING)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.frontend.di
|
package org.jetbrains.kotlin.frontend.di
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
@@ -36,7 +37,9 @@ import org.jetbrains.kotlin.types.expressions.LocalClassDescriptorHolder
|
|||||||
import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver
|
import org.jetbrains.kotlin.types.expressions.LocalLazyDeclarationResolver
|
||||||
|
|
||||||
fun StorageComponentContainer.configureModule(
|
fun StorageComponentContainer.configureModule(
|
||||||
moduleContext: ModuleContext, platform: TargetPlatform
|
moduleContext: ModuleContext,
|
||||||
|
platform: TargetPlatform,
|
||||||
|
platformVersion: TargetPlatformVersion
|
||||||
) {
|
) {
|
||||||
useInstance(moduleContext)
|
useInstance(moduleContext)
|
||||||
useInstance(moduleContext.module)
|
useInstance(moduleContext.module)
|
||||||
@@ -45,6 +48,7 @@ fun StorageComponentContainer.configureModule(
|
|||||||
useInstance(moduleContext.module.builtIns)
|
useInstance(moduleContext.module.builtIns)
|
||||||
|
|
||||||
useInstance(platform)
|
useInstance(platform)
|
||||||
|
useInstance(platformVersion)
|
||||||
|
|
||||||
platform.platformConfigurator.configureModuleComponents(this)
|
platform.platformConfigurator.configureModuleComponents(this)
|
||||||
|
|
||||||
@@ -60,9 +64,12 @@ private fun StorageComponentContainer.configurePlatformIndependentComponents() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun StorageComponentContainer.configureModule(
|
fun StorageComponentContainer.configureModule(
|
||||||
moduleContext: ModuleContext, platform: TargetPlatform, trace: BindingTrace
|
moduleContext: ModuleContext,
|
||||||
|
platform: TargetPlatform,
|
||||||
|
platformVersion: TargetPlatformVersion,
|
||||||
|
trace: BindingTrace
|
||||||
) {
|
) {
|
||||||
configureModule(moduleContext, platform)
|
configureModule(moduleContext, platform, platformVersion)
|
||||||
useInstance(trace)
|
useInstance(trace)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,9 +83,10 @@ fun createContainerForBodyResolve(
|
|||||||
bindingTrace: BindingTrace,
|
bindingTrace: BindingTrace,
|
||||||
platform: TargetPlatform,
|
platform: TargetPlatform,
|
||||||
statementFilter: StatementFilter,
|
statementFilter: StatementFilter,
|
||||||
|
targetPlatformVersion: TargetPlatformVersion,
|
||||||
compilerConfiguration: CompilerConfiguration
|
compilerConfiguration: CompilerConfiguration
|
||||||
): StorageComponentContainer = createContainer("BodyResolve", platform) {
|
): StorageComponentContainer = createContainer("BodyResolve", platform) {
|
||||||
configureModule(moduleContext, platform, bindingTrace)
|
configureModule(moduleContext, platform, targetPlatformVersion, bindingTrace)
|
||||||
|
|
||||||
useInstance(statementFilter)
|
useInstance(statementFilter)
|
||||||
|
|
||||||
@@ -95,9 +103,10 @@ fun createContainerForLazyBodyResolve(
|
|||||||
bindingTrace: BindingTrace,
|
bindingTrace: BindingTrace,
|
||||||
platform: TargetPlatform,
|
platform: TargetPlatform,
|
||||||
bodyResolveCache: BodyResolveCache,
|
bodyResolveCache: BodyResolveCache,
|
||||||
|
targetPlatformVersion: TargetPlatformVersion,
|
||||||
compilerConfiguration: CompilerConfiguration
|
compilerConfiguration: CompilerConfiguration
|
||||||
): StorageComponentContainer = createContainer("LazyBodyResolve", platform) {
|
): StorageComponentContainer = createContainer("LazyBodyResolve", platform) {
|
||||||
configureModule(moduleContext, platform, bindingTrace)
|
configureModule(moduleContext, platform, targetPlatformVersion, bindingTrace)
|
||||||
|
|
||||||
useInstance(LookupTracker.DO_NOTHING)
|
useInstance(LookupTracker.DO_NOTHING)
|
||||||
useInstance(kotlinCodeAnalyzer)
|
useInstance(kotlinCodeAnalyzer)
|
||||||
@@ -113,11 +122,12 @@ fun createContainerForLazyLocalClassifierAnalyzer(
|
|||||||
bindingTrace: BindingTrace,
|
bindingTrace: BindingTrace,
|
||||||
platform: TargetPlatform,
|
platform: TargetPlatform,
|
||||||
lookupTracker: LookupTracker,
|
lookupTracker: LookupTracker,
|
||||||
|
targetPlatformVersion: TargetPlatformVersion,
|
||||||
compilerConfiguration: CompilerConfiguration,
|
compilerConfiguration: CompilerConfiguration,
|
||||||
statementFilter: StatementFilter,
|
statementFilter: StatementFilter,
|
||||||
localClassDescriptorHolder: LocalClassDescriptorHolder
|
localClassDescriptorHolder: LocalClassDescriptorHolder
|
||||||
): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) {
|
): StorageComponentContainer = createContainer("LocalClassifierAnalyzer", platform) {
|
||||||
configureModule(moduleContext, platform, bindingTrace)
|
configureModule(moduleContext, platform, targetPlatformVersion, bindingTrace)
|
||||||
|
|
||||||
useInstance(localClassDescriptorHolder)
|
useInstance(localClassDescriptorHolder)
|
||||||
useInstance(lookupTracker)
|
useInstance(lookupTracker)
|
||||||
@@ -142,10 +152,11 @@ fun createContainerForLazyResolve(
|
|||||||
declarationProviderFactory: DeclarationProviderFactory,
|
declarationProviderFactory: DeclarationProviderFactory,
|
||||||
bindingTrace: BindingTrace,
|
bindingTrace: BindingTrace,
|
||||||
platform: TargetPlatform,
|
platform: TargetPlatform,
|
||||||
|
targetPlatformVersion: TargetPlatformVersion,
|
||||||
targetEnvironment: TargetEnvironment,
|
targetEnvironment: TargetEnvironment,
|
||||||
compilerConfiguration: CompilerConfiguration
|
compilerConfiguration: CompilerConfiguration
|
||||||
): StorageComponentContainer = createContainer("LazyResolve", platform) {
|
): StorageComponentContainer = createContainer("LazyResolve", platform) {
|
||||||
configureModule(moduleContext, platform, bindingTrace)
|
configureModule(moduleContext, platform, targetPlatformVersion, bindingTrace)
|
||||||
|
|
||||||
useInstance(declarationProviderFactory)
|
useInstance(declarationProviderFactory)
|
||||||
useInstance(LookupTracker.DO_NOTHING)
|
useInstance(LookupTracker.DO_NOTHING)
|
||||||
@@ -166,6 +177,7 @@ fun createLazyResolveSession(moduleContext: ModuleContext, files: Collection<KtF
|
|||||||
FileBasedDeclarationProviderFactory(moduleContext.storageManager, files),
|
FileBasedDeclarationProviderFactory(moduleContext.storageManager, files),
|
||||||
BindingTraceContext(),
|
BindingTraceContext(),
|
||||||
TargetPlatform.Default,
|
TargetPlatform.Default,
|
||||||
|
TargetPlatformVersion.NoVersion,
|
||||||
CompilerEnvironment,
|
CompilerEnvironment,
|
||||||
CompilerConfiguration.EMPTY
|
CompilerConfiguration.EMPTY
|
||||||
).get<ResolveSession>()
|
).get<ResolveSession>()
|
||||||
|
|||||||
+5
-3
@@ -20,6 +20,7 @@ import com.intellij.psi.PsiElement
|
|||||||
import com.intellij.psi.util.PsiTreeUtil
|
import com.intellij.psi.util.PsiTreeUtil
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
|
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.GlobalContext
|
import org.jetbrains.kotlin.context.GlobalContext
|
||||||
@@ -62,6 +63,7 @@ class LocalClassifierAnalyzer(
|
|||||||
private val platform: TargetPlatform,
|
private val platform: TargetPlatform,
|
||||||
private val lookupTracker: LookupTracker,
|
private val lookupTracker: LookupTracker,
|
||||||
private val supertypeLoopChecker: SupertypeLoopChecker,
|
private val supertypeLoopChecker: SupertypeLoopChecker,
|
||||||
|
private val targetPlatformVersion: TargetPlatformVersion,
|
||||||
private val compilerConfiguration: CompilerConfiguration,
|
private val compilerConfiguration: CompilerConfiguration,
|
||||||
private val delegationFilter: DelegationFilter
|
private val delegationFilter: DelegationFilter
|
||||||
) {
|
) {
|
||||||
@@ -79,6 +81,7 @@ class LocalClassifierAnalyzer(
|
|||||||
context.trace,
|
context.trace,
|
||||||
platform,
|
platform,
|
||||||
lookupTracker,
|
lookupTracker,
|
||||||
|
targetPlatformVersion,
|
||||||
compilerConfiguration,
|
compilerConfiguration,
|
||||||
context.statementFilter,
|
context.statementFilter,
|
||||||
LocalClassDescriptorHolder(
|
LocalClassDescriptorHolder(
|
||||||
@@ -160,10 +163,9 @@ class LocalClassDescriptorHolder(
|
|||||||
override val languageVersionSettings = this@LocalClassDescriptorHolder.languageVersionSettings
|
override val languageVersionSettings = this@LocalClassDescriptorHolder.languageVersionSettings
|
||||||
override val syntheticResolveExtension = this@LocalClassDescriptorHolder.syntheticResolveExtension
|
override val syntheticResolveExtension = this@LocalClassDescriptorHolder.syntheticResolveExtension
|
||||||
override val delegationFilter: DelegationFilter = this@LocalClassDescriptorHolder.delegationFilter
|
override val delegationFilter: DelegationFilter = this@LocalClassDescriptorHolder.delegationFilter
|
||||||
}
|
},
|
||||||
,
|
|
||||||
containingDeclaration,
|
containingDeclaration,
|
||||||
classOrObject.getNameAsSafeName(),
|
classOrObject.nameAsSafeName,
|
||||||
KtClassInfoUtil.createClassLikeInfo(classOrObject),
|
KtClassInfoUtil.createClassLikeInfo(classOrObject),
|
||||||
classOrObject.hasModifier(KtTokens.EXTERNAL_KEYWORD)
|
classOrObject.hasModifier(KtTokens.EXTERNAL_KEYWORD)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.analyzer.AnalysisResult
|
|||||||
import org.jetbrains.kotlin.analyzer.common.DefaultAnalyzerFacade
|
import org.jetbrains.kotlin.analyzer.common.DefaultAnalyzerFacade
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
|
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
import org.jetbrains.kotlin.cli.jvm.compiler.JvmPackagePartProvider
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||||
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
@@ -316,6 +317,7 @@ abstract class AbstractDiagnosticsTest : BaseDiagnosticsTest() {
|
|||||||
LookupTracker.DO_NOTHING,
|
LookupTracker.DO_NOTHING,
|
||||||
JvmPackagePartProvider(environment, moduleContentScope),
|
JvmPackagePartProvider(environment, moduleContentScope),
|
||||||
moduleClassResolver,
|
moduleClassResolver,
|
||||||
|
JvmTarget.JVM_1_6,
|
||||||
configuration
|
configuration
|
||||||
)
|
)
|
||||||
container.initJvmBuiltInsForTopDownAnalysis()
|
container.initJvmBuiltInsForTopDownAnalysis()
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import com.intellij.openapi.util.io.FileUtil
|
|||||||
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
|
import org.jetbrains.kotlin.cli.jvm.compiler.CliLightClassGenerationSupport
|
||||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.container.ComponentProvider
|
import org.jetbrains.kotlin.container.ComponentProvider
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
@@ -61,6 +62,7 @@ abstract class AbstractDescriptorRendererTest : KotlinTestWithEnvironment() {
|
|||||||
FileBasedDeclarationProviderFactory(context.storageManager, listOf(psiFile)),
|
FileBasedDeclarationProviderFactory(context.storageManager, listOf(psiFile)),
|
||||||
CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
|
CliLightClassGenerationSupport.NoScopeRecordCliBindingTrace(),
|
||||||
JvmPlatform,
|
JvmPlatform,
|
||||||
|
JvmTarget.JVM_1_6,
|
||||||
targetEnvironment,
|
targetEnvironment,
|
||||||
CompilerConfiguration.EMPTY
|
CompilerConfiguration.EMPTY
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.tests.di
|
|||||||
|
|
||||||
import com.intellij.openapi.project.Project
|
import com.intellij.openapi.project.Project
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.JvmTarget
|
||||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||||
import org.jetbrains.kotlin.container.getValue
|
import org.jetbrains.kotlin.container.getValue
|
||||||
import org.jetbrains.kotlin.container.useImpl
|
import org.jetbrains.kotlin.container.useImpl
|
||||||
@@ -37,7 +38,7 @@ import org.jetbrains.kotlin.types.expressions.FakeCallResolver
|
|||||||
|
|
||||||
fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests {
|
fun createContainerForTests(project: Project, module: ModuleDescriptor): ContainerForTests {
|
||||||
return ContainerForTests(createContainer("Tests", JvmPlatform) {
|
return ContainerForTests(createContainer("Tests", JvmPlatform) {
|
||||||
configureModule(ModuleContext(module, project), JvmPlatform)
|
configureModule(ModuleContext(module, project), JvmPlatform, JvmTarget.JVM_1_6)
|
||||||
useInstance(LookupTracker.DO_NOTHING)
|
useInstance(LookupTracker.DO_NOTHING)
|
||||||
configureCommon(CompilerConfiguration.EMPTY)
|
configureCommon(CompilerConfiguration.EMPTY)
|
||||||
useImpl<ExpressionTypingServices>()
|
useImpl<ExpressionTypingServices>()
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ import com.intellij.psi.search.GlobalSearchScope
|
|||||||
import org.jetbrains.kotlin.analyzer.*
|
import org.jetbrains.kotlin.analyzer.*
|
||||||
import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo
|
import org.jetbrains.kotlin.caches.resolve.LibraryModuleInfo
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.context.ModuleContext
|
import org.jetbrains.kotlin.context.ModuleContext
|
||||||
@@ -66,6 +67,7 @@ object JsAnalyzerFacade : AnalyzerFacade<PlatformAnalysisParameters>() {
|
|||||||
declarationProviderFactory,
|
declarationProviderFactory,
|
||||||
BindingTraceContext(),
|
BindingTraceContext(),
|
||||||
JsPlatform,
|
JsPlatform,
|
||||||
|
TargetPlatformVersion.NoVersion,
|
||||||
targetEnvironment,
|
targetEnvironment,
|
||||||
configuration
|
configuration
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
|
|||||||
import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve
|
import org.jetbrains.kotlin.frontend.di.createContainerForLazyBodyResolve
|
||||||
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
import org.jetbrains.kotlin.idea.project.TargetPlatformDetector
|
||||||
import org.jetbrains.kotlin.idea.project.createCompilerConfiguration
|
import org.jetbrains.kotlin.idea.project.createCompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.idea.project.jvmTarget
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
|
||||||
import org.jetbrains.kotlin.resolve.*
|
import org.jetbrains.kotlin.resolve.*
|
||||||
@@ -173,6 +174,7 @@ private object KotlinResolveDataProvider {
|
|||||||
trace,
|
trace,
|
||||||
targetPlatform,
|
targetPlatform,
|
||||||
componentProvider.get<BodyResolveCache>(),
|
componentProvider.get<BodyResolveCache>(),
|
||||||
|
analyzableElement.jvmTarget,
|
||||||
analyzableElement.createCompilerConfiguration()
|
analyzableElement.createCompilerConfiguration()
|
||||||
).get<LazyTopDownAnalyzer>()
|
).get<LazyTopDownAnalyzer>()
|
||||||
|
|
||||||
|
|||||||
@@ -144,13 +144,7 @@ private fun getExtraLanguageFeatures(
|
|||||||
|
|
||||||
fun KtElement.createCompilerConfiguration(): CompilerConfiguration = CompilerConfiguration().apply {
|
fun KtElement.createCompilerConfiguration(): CompilerConfiguration = CompilerConfiguration().apply {
|
||||||
languageVersionSettings = this@createCompilerConfiguration.languageVersionSettings
|
languageVersionSettings = this@createCompilerConfiguration.languageVersionSettings
|
||||||
|
put(JVMConfigurationKeys.JVM_TARGET, jvmTarget)
|
||||||
val module = ModuleUtilCore.findModuleForPsiElement(this@createCompilerConfiguration)
|
|
||||||
val platform = module?.targetPlatform?.version
|
|
||||||
if (platform is JvmTarget) {
|
|
||||||
put(JVMConfigurationKeys.JVM_TARGET, platform)
|
|
||||||
}
|
|
||||||
|
|
||||||
isReadOnly = true
|
isReadOnly = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -161,3 +155,6 @@ val KtElement.languageVersionSettings: LanguageVersionSettings
|
|||||||
}
|
}
|
||||||
return ModuleUtilCore.findModuleForPsiElement(this)?.languageVersionSettings ?: LanguageVersionSettingsImpl.DEFAULT
|
return ModuleUtilCore.findModuleForPsiElement(this)?.languageVersionSettings ?: LanguageVersionSettingsImpl.DEFAULT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val KtElement.jvmTarget: JvmTarget
|
||||||
|
get() = ModuleUtilCore.findModuleForPsiElement(this)?.targetPlatform?.version as? JvmTarget ?: JvmTarget.DEFAULT
|
||||||
|
|||||||
@@ -588,6 +588,7 @@ class ResolveElementCache(
|
|||||||
trace,
|
trace,
|
||||||
targetPlatform,
|
targetPlatform,
|
||||||
statementFilter,
|
statementFilter,
|
||||||
|
file.jvmTarget,
|
||||||
file.createCompilerConfiguration()
|
file.createCompilerConfiguration()
|
||||||
).get<BodyResolver>()
|
).get<BodyResolver>()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.frontend.js.di
|
package org.jetbrains.kotlin.frontend.js.di
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||||
|
import org.jetbrains.kotlin.config.TargetPlatformVersion
|
||||||
import org.jetbrains.kotlin.container.get
|
import org.jetbrains.kotlin.container.get
|
||||||
import org.jetbrains.kotlin.container.useImpl
|
import org.jetbrains.kotlin.container.useImpl
|
||||||
import org.jetbrains.kotlin.container.useInstance
|
import org.jetbrains.kotlin.container.useInstance
|
||||||
@@ -42,7 +43,7 @@ fun createTopDownAnalyzerForJs(
|
|||||||
compilerConfiguration: CompilerConfiguration
|
compilerConfiguration: CompilerConfiguration
|
||||||
): LazyTopDownAnalyzer {
|
): LazyTopDownAnalyzer {
|
||||||
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) {
|
val storageComponentContainer = createContainer("TopDownAnalyzerForJs", JsPlatform) {
|
||||||
configureModule(moduleContext, JsPlatform, bindingTrace)
|
configureModule(moduleContext, JsPlatform, TargetPlatformVersion.NoVersion, bindingTrace)
|
||||||
|
|
||||||
useInstance(declarationProviderFactory)
|
useInstance(declarationProviderFactory)
|
||||||
useImpl<FileScopeProviderImpl>()
|
useImpl<FileScopeProviderImpl>()
|
||||||
|
|||||||
Reference in New Issue
Block a user