(LightClasses) resolve of annotations fast-path

This commit is contained in:
Vladimir Ilmov
2020-06-05 01:35:41 +02:00
parent 991f12bd73
commit 3634cbe3cb
3 changed files with 8 additions and 1 deletions
@@ -86,5 +86,7 @@ class CliLightClassGenerationSupport(private val traceHolder: CliTraceHolder) :
override fun analyze(element: KtElement) = traceHolder.bindingContext override fun analyze(element: KtElement) = traceHolder.bindingContext
override fun analyzeAnnotation(element: KtAnnotationEntry) = traceHolder.bindingContext.get(BindingContext.ANNOTATION, element)
override fun analyzeWithContent(element: KtClassOrObject) = traceHolder.bindingContext override fun analyzeWithContent(element: KtClassOrObject) = traceHolder.bindingContext
} }
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.asJava.builder.LightClassConstructionContext
import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder import org.jetbrains.kotlin.asJava.builder.LightClassDataHolder
import org.jetbrains.kotlin.asJava.classes.* import org.jetbrains.kotlin.asJava.classes.*
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
@@ -42,6 +43,8 @@ abstract class LightClassGenerationSupport {
abstract fun analyze(element: KtElement): BindingContext abstract fun analyze(element: KtElement): BindingContext
abstract fun analyzeAnnotation(element: KtAnnotationEntry): AnnotationDescriptor?
abstract fun analyzeWithContent(element: KtClassOrObject): BindingContext abstract fun analyzeWithContent(element: KtClassOrObject): BindingContext
abstract fun createUltraLightClass(element: KtClassOrObject): KtUltraLightClass? abstract fun createUltraLightClass(element: KtClassOrObject): KtUltraLightClass?
@@ -66,7 +66,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
it.shortName == fqName.shortName() || owner.containingKtFile.hasAlias(it.shortName) it.shortName == fqName.shortName() || owner.containingKtFile.hasAlias(it.shortName)
} }
for (entry in candidates) { for (entry in candidates) {
val descriptor = analyze(entry).get(BindingContext.ANNOTATION, entry) val descriptor = analyzeAnnotation(entry)
if (descriptor?.fqName == fqName) { if (descriptor?.fqName == fqName) {
return Pair(entry, descriptor) return Pair(entry, descriptor)
} }
@@ -218,5 +218,7 @@ class IDELightClassGenerationSupport(private val project: Project) : LightClassG
override fun analyze(element: KtElement) = element.analyze(BodyResolveMode.PARTIAL) override fun analyze(element: KtElement) = element.analyze(BodyResolveMode.PARTIAL)
override fun analyzeAnnotation(element: KtAnnotationEntry): AnnotationDescriptor? = element.resolveToDescriptorIfAny()
override fun analyzeWithContent(element: KtClassOrObject) = element.analyzeWithContent() override fun analyzeWithContent(element: KtClassOrObject) = element.analyzeWithContent()
} }