KT-40200: Fix main function detector in lazy resolve overload resolver
This commit is contained in:
committed by
TeamCityServer
parent
92adccde47
commit
9bf2dfaa02
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.context.ModuleContext
|
||||
import org.jetbrains.kotlin.contracts.ContractDeserializerImpl
|
||||
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
|
||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||
import org.jetbrains.kotlin.incremental.components.ExpectActualTracker
|
||||
import org.jetbrains.kotlin.incremental.components.LookupTracker
|
||||
import org.jetbrains.kotlin.platform.TargetPlatform
|
||||
@@ -154,10 +155,12 @@ fun createContainerForLazyBodyResolve(
|
||||
bodyResolveCache: BodyResolveCache,
|
||||
analyzerServices: PlatformDependentAnalyzerServices,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
moduleStructureOracle: ModuleStructureOracle
|
||||
moduleStructureOracle: ModuleStructureOracle,
|
||||
mainFunctionDetectorFactory: MainFunctionDetector.Factory
|
||||
): StorageComponentContainer = createContainer("LazyBodyResolve", analyzerServices) {
|
||||
configureModule(moduleContext, platform, analyzerServices, bindingTrace, languageVersionSettings)
|
||||
|
||||
useInstance(mainFunctionDetectorFactory)
|
||||
useInstance(kotlinCodeAnalyzer)
|
||||
useInstance(kotlinCodeAnalyzer.fileScopeProvider)
|
||||
useInstance(bodyResolveCache)
|
||||
@@ -201,6 +204,7 @@ fun createContainerForLazyLocalClassifierAnalyzer(
|
||||
useImpl<DeclarationScopeProviderForLocalClassifierAnalyzer>()
|
||||
useImpl<LocalLazyDeclarationResolver>()
|
||||
|
||||
|
||||
useInstance(statementFilter)
|
||||
}
|
||||
|
||||
@@ -219,6 +223,7 @@ fun createContainerForLazyResolve(
|
||||
|
||||
useInstance(declarationProviderFactory)
|
||||
|
||||
|
||||
targetEnvironment.configure(this)
|
||||
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.psi.KtDeclaration
|
||||
import org.jetbrains.kotlin.psi.KtNamedFunction
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
import org.jetbrains.kotlin.resolve.BindingTrace
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.annotations.hasJvmStaticAnnotation
|
||||
@@ -202,4 +203,18 @@ class MainFunctionDetector {
|
||||
private fun hasAnnotationWithExactNumberOfArguments(function: KtNamedFunction, number: Int) =
|
||||
function.annotationEntries.any { it.valueArguments.size == number }
|
||||
}
|
||||
|
||||
interface Factory {
|
||||
fun createMainFunctionDetector(trace: BindingTrace, languageVersionSettings: LanguageVersionSettings): MainFunctionDetector
|
||||
|
||||
class Ordinary : Factory {
|
||||
override fun createMainFunctionDetector(
|
||||
trace: BindingTrace,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
): MainFunctionDetector {
|
||||
return MainFunctionDetector(trace.bindingContext, languageVersionSettings)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.resolve
|
||||
import org.jetbrains.kotlin.container.StorageComponentContainer
|
||||
import org.jetbrains.kotlin.container.useImpl
|
||||
import org.jetbrains.kotlin.container.useInstance
|
||||
import org.jetbrains.kotlin.idea.MainFunctionDetector
|
||||
import org.jetbrains.kotlin.resolve.lazy.CompilerLocalDescriptorResolver
|
||||
import org.jetbrains.kotlin.resolve.lazy.BasicAbsentDescriptorHandler
|
||||
|
||||
@@ -28,5 +29,6 @@ object CompilerEnvironment : TargetEnvironment("Compiler") {
|
||||
container.useImpl<CompilerLocalDescriptorResolver>()
|
||||
container.useImpl<BasicAbsentDescriptorHandler>()
|
||||
container.useInstance(ModuleStructureOracle.SingleModule)
|
||||
container.useImpl<MainFunctionDetector.Factory.Ordinary>()
|
||||
}
|
||||
}
|
||||
@@ -34,10 +34,11 @@ class OverloadResolver(
|
||||
private val trace: BindingTrace,
|
||||
private val overloadFilter: OverloadFilter,
|
||||
private val overloadChecker: OverloadChecker,
|
||||
languageVersionSettings: LanguageVersionSettings
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
mainFunctionDetectorFactory: MainFunctionDetector.Factory
|
||||
) {
|
||||
|
||||
private val mainFunctionDetector = MainFunctionDetector(trace.bindingContext, languageVersionSettings)
|
||||
private val mainFunctionDetector = mainFunctionDetectorFactory.createMainFunctionDetector(trace, languageVersionSettings)
|
||||
|
||||
fun checkOverloads(c: BodiesResolveContext) {
|
||||
val inClasses = findConstructorsInNestedClassesAndTypeAliases(c)
|
||||
|
||||
Reference in New Issue
Block a user