[FE, IR] Don't check SOURCE annotations if actual declaration has no source

^KT-58551
This commit is contained in:
Roman Efremov
2023-06-23 14:43:29 +02:00
committed by Space Team
parent 59f1a0dd8e
commit 234f453173
13 changed files with 135 additions and 10 deletions
@@ -6,19 +6,22 @@
package org.jetbrains.kotlin.fir.analysis
import org.jetbrains.kotlin.fir.FirSession
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
import org.jetbrains.kotlin.fir.declarations.findArgumentByName
import org.jetbrains.kotlin.fir.declarations.getAnnotationByClassId
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
import org.jetbrains.kotlin.fir.references.toResolvedEnumEntrySymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.StandardClassIds
fun FirRegularClass.getRetention(session: FirSession): AnnotationRetention {
return getRetentionAnnotation(session)?.getRetention() ?: AnnotationRetention.RUNTIME
}
fun FirRegularClassSymbol.getRetention(session: FirSession): AnnotationRetention {
return getRetentionAnnotation(session)?.getRetention() ?: AnnotationRetention.RUNTIME
}
fun FirAnnotation.getRetention(): AnnotationRetention? {
val propertyAccess = findArgumentByName(StandardClassIds.Annotations.ParameterNames.retentionValue) as? FirQualifiedAccessExpression
val callableId = propertyAccess?.calleeReference?.toResolvedEnumEntrySymbol()?.callableId ?: return null
@@ -33,3 +36,11 @@ fun FirAnnotation.getRetention(): AnnotationRetention? {
fun FirDeclaration.getRetentionAnnotation(session: FirSession): FirAnnotation? {
return getAnnotationByClassId(StandardClassIds.Annotations.Retention, session)
}
private fun FirRegularClassSymbol.getRetentionAnnotation(session: FirSession): FirAnnotation? {
return getAnnotationByClassId(StandardClassIds.Annotations.Retention, session)
}
private fun FirRegularClassSymbol.getAnnotationByClassId(classId: ClassId, session: FirSession): FirAnnotation? {
return resolvedAnnotationsWithArguments.firstOrNull { it.toAnnotationClassId(session) == classId }
}