Force resolution of file annotations before element analysis
^KT-37219 In Progress
This commit is contained in:
@@ -238,11 +238,14 @@ class ResolveElementCache(
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun resolveToElements(elements: Collection<KtElement>, bodyResolveMode: BodyResolveMode = BodyResolveMode.FULL): BindingContext {
|
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 bindingContexts = ArrayList<BindingContext>()
|
||||||
val declarationsToResolve = ArrayList<KtDeclaration>()
|
val declarationsToResolve = ArrayList<KtDeclaration>()
|
||||||
var addResolveSessionBindingContext = false
|
var addResolveSessionBindingContext = false
|
||||||
|
|
||||||
|
ensureFileAnnotationsResolved(elements)
|
||||||
for ((elementOfAdditionalResolve, contextElements) in elementsByAdditionalResolveElement) {
|
for ((elementOfAdditionalResolve, contextElements) in elementsByAdditionalResolveElement) {
|
||||||
if (elementOfAdditionalResolve != null) {
|
if (elementOfAdditionalResolve != null) {
|
||||||
if (elementOfAdditionalResolve is KtParameter) {
|
if (elementOfAdditionalResolve is KtParameter) {
|
||||||
@@ -272,6 +275,14 @@ class ResolveElementCache(
|
|||||||
return CompositeBindingContext.create(bindingContexts)
|
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? {
|
private fun findElementOfAdditionalResolve(element: KtElement, bodyResolveMode: BodyResolveMode): KtElement? {
|
||||||
if (element is KtAnnotationEntry && bodyResolveMode == BodyResolveMode.PARTIAL_NO_ADDITIONAL)
|
if (element is KtAnnotationEntry && bodyResolveMode == BodyResolveMode.PARTIAL_NO_ADDITIONAL)
|
||||||
return element
|
return element
|
||||||
|
|||||||
Reference in New Issue
Block a user