Force resolution of file annotations before element analysis

^KT-37219 In Progress
This commit is contained in:
Pavel Kirpichenkov
2020-06-23 11:16:48 +03:00
parent e4c8c14e3e
commit 5c70f973a5
@@ -238,11 +238,14 @@ class ResolveElementCache(
}
fun resolveToElements(elements: Collection<KtElement>, bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): BindingContext {
val elementsByAdditionalResolveElement: Map<KtElement?, List<KtElement>> = elements.groupBy { findElementOfAdditionalResolve(it, bodyResolveMode) }
val elementsByAdditionalResolveElement: Map<KtElement?, List<KtElement>> =
elements.groupBy { findElementOfAdditionalResolve(it, bodyResolveMode) }
val bindingContexts = ArrayList<BindingContext>()
val declarationsToResolve = ArrayList<KtDeclaration>()
var addResolveSessionBindingContext = false
ensureFileAnnotationsResolved(elements)
for ((elementOfAdditionalResolve, contextElements) in elementsByAdditionalResolveElement) {
if (elementOfAdditionalResolve != null) {
if (elementOfAdditionalResolve is KtParameter) {
@@ -272,6 +275,14 @@ class ResolveElementCache(
return CompositeBindingContext.create(bindingContexts)
}
private fun ensureFileAnnotationsResolved(elements: Collection<KtElement>) {
val filesToBeAnalyzed = elements.map { it.containingKtFile }.toSet()
for (file in filesToBeAnalyzed) {
val fileLevelAnnotations = resolveSession.getFileAnnotations(file)
doResolveAnnotations(fileLevelAnnotations)
}
}
private fun findElementOfAdditionalResolve(element: KtElement, bodyResolveMode: BodyResolveMode): KtElement? {
if (element is KtAnnotationEntry && bodyResolveMode == BodyResolveMode.PARTIAL_NO_ADDITIONAL)
return element