[Analysis API FE1.0] do not expose ExtensionFunctionType from functional types

it's a frontend implementation detail
This commit is contained in:
Ilya Kirillov
2022-10-30 16:38:22 +01:00
parent b47675916f
commit 7545ccad81
2 changed files with 19 additions and 5 deletions
@@ -7,22 +7,27 @@ package org.jetbrains.kotlin.analysis.api.descriptors.annotations
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationApplication
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.descriptors.annotations.Annotations
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
internal class KtFe10AnnotationsList private constructor(
private val fe10Annotations: Annotations,
private val annotationsToIgnore: Set<ClassId>,
override val token: KtLifetimeToken,
) : KtAnnotationsList() {
override val annotations: List<KtAnnotationApplication>
get() = withValidityAssertion {
fe10Annotations.map { it.toKtAnnotationApplication() }
fe10Annotations.mapNotNull { annotation ->
if (annotation.annotationClass.classId in annotationsToIgnore) null
else annotation.toKtAnnotationApplication()
}
}
override val annotationClassIds: Collection<ClassId>
@@ -31,7 +36,9 @@ internal class KtFe10AnnotationsList private constructor(
val result = mutableListOf<ClassId>()
for (annotation in fe10Annotations) {
val annotationClass = annotation.annotationClass ?: continue
result += annotationClass.maybeLocalClassId
val classId = annotationClass.maybeLocalClassId
if (classId in annotationsToIgnore) continue
result += classId
}
return result
}
@@ -42,6 +49,7 @@ internal class KtFe10AnnotationsList private constructor(
}
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplication> = withValidityAssertion {
if (classId in annotationsToIgnore) return@withValidityAssertion emptyList()
fe10Annotations.mapNotNull { annotation ->
if (annotation.annotationClass?.maybeLocalClassId != classId) return@mapNotNull null
annotation.toKtAnnotationApplication()
@@ -52,9 +60,10 @@ internal class KtFe10AnnotationsList private constructor(
fun create(
fe10Annotations: Annotations,
token: KtLifetimeToken,
ignoreAnnotations: Set<ClassId> = emptySet(),
): KtAnnotationsList {
return if (!fe10Annotations.isEmpty()) {
KtFe10AnnotationsList(fe10Annotations, token)
KtFe10AnnotationsList(fe10Annotations, ignoreAnnotations, token)
} else {
KtEmptyAnnotationsList(token)
}
@@ -14,6 +14,7 @@ import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
import org.jetbrains.kotlin.analysis.utils.printer.prettyPrint
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.UnwrappedType
@@ -24,7 +25,11 @@ interface KtFe10Type : KtLifetimeOwner, KtAnnotated {
override val annotationsList: KtAnnotationsList
get() = withValidityAssertion {
KtFe10AnnotationsList.create(type.annotations, token)
KtFe10AnnotationsList.create(
type.annotations,
token,
ignoreAnnotations = setOf(StandardClassIds.Annotations.ExtensionFunctionType)
)
}
override val token: KtLifetimeToken