FIR: refactor annotation-related utils
This commit is contained in:
committed by
Mikhail Glukhikh
parent
c8170702c6
commit
b59832c5fd
-5
@@ -9,9 +9,7 @@ import org.jetbrains.kotlin.codegen.ClassBuilderMode
|
|||||||
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
|
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
|
||||||
import org.jetbrains.kotlin.codegen.state.GenerationState
|
import org.jetbrains.kotlin.codegen.state.GenerationState
|
||||||
import org.jetbrains.kotlin.config.JvmDefaultMode
|
import org.jetbrains.kotlin.config.JvmDefaultMode
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||||
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
import org.jetbrains.kotlin.fir.backend.FirMetadataSource
|
||||||
@@ -20,10 +18,8 @@ import org.jetbrains.kotlin.fir.resolve.firProvider
|
|||||||
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
import org.jetbrains.kotlin.fir.resolve.inference.isBuiltinFunctionalType
|
||||||
import org.jetbrains.kotlin.fir.serialization.FirElementSerializer
|
import org.jetbrains.kotlin.fir.serialization.FirElementSerializer
|
||||||
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
|
import org.jetbrains.kotlin.fir.serialization.FirSerializerExtension
|
||||||
import org.jetbrains.kotlin.fir.serialization.nonSourceAnnotations
|
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||||
import org.jetbrains.kotlin.load.java.DescriptorsJvmAbiUtil
|
|
||||||
import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
|
import org.jetbrains.kotlin.load.kotlin.NON_EXISTENT_CLASS_NAME
|
||||||
import org.jetbrains.kotlin.metadata.ProtoBuf
|
import org.jetbrains.kotlin.metadata.ProtoBuf
|
||||||
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
import org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf
|
||||||
@@ -33,7 +29,6 @@ import org.jetbrains.kotlin.metadata.jvm.deserialization.JvmProtoBufUtil
|
|||||||
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
|
import org.jetbrains.kotlin.metadata.serialization.MutableVersionRequirementTable
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.protobuf.GeneratedMessageLite
|
import org.jetbrains.kotlin.protobuf.GeneratedMessageLite
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
|
||||||
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_DEFAULT_FQ_NAME
|
import org.jetbrains.kotlin.resolve.jvm.annotations.JVM_DEFAULT_FQ_NAME
|
||||||
import org.jetbrains.kotlin.serialization.DescriptorSerializer
|
import org.jetbrains.kotlin.serialization.DescriptorSerializer
|
||||||
import org.jetbrains.kotlin.types.AbstractTypeApproximator
|
import org.jetbrains.kotlin.types.AbstractTypeApproximator
|
||||||
|
|||||||
+15
-4
@@ -3,11 +3,10 @@
|
|||||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package org.jetbrains.kotlin.fir.serialization
|
package org.jetbrains.kotlin.fir.declarations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirRegularClass
|
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression
|
||||||
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
||||||
@@ -22,10 +21,10 @@ import org.jetbrains.kotlin.name.Name
|
|||||||
private fun FirAnnotationCall.toAnnotationLookupTag(): ConeClassLikeLookupTag =
|
private fun FirAnnotationCall.toAnnotationLookupTag(): ConeClassLikeLookupTag =
|
||||||
(annotationTypeRef.coneType as ConeClassLikeType).lookupTag
|
(annotationTypeRef.coneType as ConeClassLikeType).lookupTag
|
||||||
|
|
||||||
internal fun FirAnnotationCall.toAnnotationClassId(): ClassId =
|
fun FirAnnotationCall.toAnnotationClassId(): ClassId =
|
||||||
toAnnotationLookupTag().classId
|
toAnnotationLookupTag().classId
|
||||||
|
|
||||||
internal fun FirAnnotationCall.toAnnotationClass(session: FirSession): FirRegularClass? =
|
private fun FirAnnotationCall.toAnnotationClass(session: FirSession): FirRegularClass? =
|
||||||
toAnnotationLookupTag().toSymbol(session)?.fir as? FirRegularClass
|
toAnnotationLookupTag().toSymbol(session)?.fir as? FirRegularClass
|
||||||
|
|
||||||
fun FirAnnotationContainer.nonSourceAnnotations(session: FirSession): List<FirAnnotationCall> =
|
fun FirAnnotationContainer.nonSourceAnnotations(session: FirSession): List<FirAnnotationCall> =
|
||||||
@@ -42,3 +41,15 @@ fun FirAnnotationContainer.nonSourceAnnotations(session: FirSession): List<FirAn
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline val FirProperty.hasJvmFieldAnnotation: Boolean
|
||||||
|
get() = annotations.any { it.isJvmFieldAnnotation }
|
||||||
|
|
||||||
|
inline val FirAnnotationCall.isJvmFieldAnnotation: Boolean
|
||||||
|
get() {
|
||||||
|
val classId = toAnnotationClassId()
|
||||||
|
return classId.packageFqName.asString() == "kotlin.jvm" && classId.relativeClassName.asString() == "JvmField"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun FirAnnotatedDeclaration.hasAnnotation(classId: ClassId): Boolean {
|
||||||
|
return annotations.any { it.toAnnotationClassId() == classId }
|
||||||
|
}
|
||||||
@@ -13,16 +13,13 @@ import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyGetter
|
|||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertySetter
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirFileImpl
|
||||||
import org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl
|
import org.jetbrains.kotlin.fir.declarations.impl.FirRegularClassImpl
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirAnonymousObjectSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||||
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
|
import org.jetbrains.kotlin.fir.types.ConeFlexibleType
|
||||||
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef
|
||||||
import org.jetbrains.kotlin.fir.types.classId
|
|
||||||
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
import org.jetbrains.kotlin.fir.types.coneTypeSafe
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
|
||||||
|
|
||||||
fun FirTypeParameterBuilder.addDefaultBoundIfNecessary(isFlexible: Boolean = false) {
|
fun FirTypeParameterBuilder.addDefaultBoundIfNecessary(isFlexible: Boolean = false) {
|
||||||
if (bounds.isEmpty()) {
|
if (bounds.isEmpty()) {
|
||||||
@@ -129,19 +126,6 @@ val FirProperty.hasBackingField: Boolean
|
|||||||
delegate != null ||
|
delegate != null ||
|
||||||
isReferredViaField == true
|
isReferredViaField == true
|
||||||
|
|
||||||
inline val FirProperty.hasJvmFieldAnnotation: Boolean
|
|
||||||
get() = annotations.any { it.isJvmFieldAnnotation }
|
|
||||||
|
|
||||||
inline val FirAnnotationCall.isJvmFieldAnnotation: Boolean
|
|
||||||
get() {
|
|
||||||
val classId = annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.classId
|
|
||||||
return classId?.packageFqName?.asString() == "kotlin.jvm" && classId.relativeClassName.asString() == "JvmField"
|
|
||||||
}
|
|
||||||
|
|
||||||
fun FirAnnotatedDeclaration.hasAnnotation(classId: ClassId): Boolean {
|
|
||||||
return annotations.any { it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.classId == classId }
|
|
||||||
}
|
|
||||||
|
|
||||||
inline val FirDeclaration.isFromLibrary: Boolean
|
inline val FirDeclaration.isFromLibrary: Boolean
|
||||||
get() = origin == FirDeclarationOrigin.Library
|
get() = origin == FirDeclarationOrigin.Library
|
||||||
inline val FirDeclaration.isSynthetic: Boolean
|
inline val FirDeclaration.isSynthetic: Boolean
|
||||||
|
|||||||
Reference in New Issue
Block a user