OptIn: handle usages via type aliases properly

This commit is contained in:
Mikhail Glukhikh
2021-06-03 18:16:35 +03:00
committed by teamcityserver
parent b4ee116de7
commit eb9c658c1c
5 changed files with 38 additions and 8 deletions
@@ -46,6 +46,7 @@ import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
import org.jetbrains.kotlin.resolve.descriptorUtil.module
import org.jetbrains.kotlin.storage.LockBasedStorageManager
import org.jetbrains.kotlin.types.AbbreviatedType
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlin.types.isError
import org.jetbrains.kotlin.utils.SmartSet
@@ -237,12 +238,19 @@ class ExperimentalUsageChecker(project: Project) : CallChecker {
languageVersionSettings: LanguageVersionSettings,
visitedClassifiers: MutableSet<DeclarationDescriptor>
): Set<Experimentality> =
if (this?.isError != false) emptySet()
else constructor.declarationDescriptor?.loadExperimentalities(
moduleAnnotationsResolver, languageVersionSettings, visitedClassifiers
).orEmpty() + arguments.flatMap {
if (it.isStarProjection) emptySet()
else it.type.loadExperimentalities(moduleAnnotationsResolver, languageVersionSettings, visitedClassifiers)
when {
this?.isError != false -> emptySet()
this is AbbreviatedType -> abbreviation.constructor.declarationDescriptor?.loadExperimentalities(
moduleAnnotationsResolver, languageVersionSettings, visitedClassifiers
).orEmpty() + expandedType.loadExperimentalities(
moduleAnnotationsResolver, languageVersionSettings, visitedClassifiers
)
else -> constructor.declarationDescriptor?.loadExperimentalities(
moduleAnnotationsResolver, languageVersionSettings, visitedClassifiers
).orEmpty() + arguments.flatMap {
if (it.isStarProjection) emptySet()
else it.type.loadExperimentalities(moduleAnnotationsResolver, languageVersionSettings, visitedClassifiers)
}
}
internal fun ClassDescriptor.loadExperimentalityForMarkerAnnotation(): Experimentality? {