From 5c70f973a57528925652cbbe931e5a29886580a9 Mon Sep 17 00:00:00 2001 From: Pavel Kirpichenkov Date: Tue, 23 Jun 2020 11:16:48 +0300 Subject: [PATCH] Force resolution of file annotations before element analysis ^KT-37219 In Progress --- .../kotlin/idea/project/ResolveElementCache.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt index 7027606b6ef..d7f221f8627 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/ResolveElementCache.kt @@ -238,11 +238,14 @@ class ResolveElementCache( } fun resolveToElements(elements: Collection, bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): BindingContext { - val elementsByAdditionalResolveElement: Map> = elements.groupBy { findElementOfAdditionalResolve(it, bodyResolveMode) } + val elementsByAdditionalResolveElement: Map> = + elements.groupBy { findElementOfAdditionalResolve(it, bodyResolveMode) } val bindingContexts = ArrayList() val declarationsToResolve = ArrayList() 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) { + 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