FIR LC: use unified annotations' ClassId or FqName

This commit is contained in:
Jinseong Jeon
2021-12-09 22:20:56 -08:00
committed by Ilya Kirillov
parent 4e60a2dbe1
commit 82c2f0c6fd
4 changed files with 35 additions and 15 deletions
@@ -16,12 +16,21 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.analysis.api.symbols.KtFileSymbol
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
import org.jetbrains.kotlin.analysis.api.annotations.KtConstantAnnotationValue
import org.jetbrains.kotlin.load.java.JvmAbi.JVM_FIELD_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.JvmNames.JVM_MULTIFILE_CLASS_ID
import org.jetbrains.kotlin.name.JvmNames.JVM_OVERLOADS_CLASS_ID
import org.jetbrains.kotlin.name.JvmNames.JVM_SYNTHETIC_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.name.StandardClassIds
import org.jetbrains.kotlin.resolve.annotations.JVM_STATIC_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.resolve.inline.INLINE_ONLY_ANNOTATION_FQ_NAME
internal fun KtAnnotatedSymbol.hasJvmSyntheticAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
hasAnnotation("kotlin/jvm/JvmSynthetic", annotationUseSiteTarget)
hasAnnotation(JVM_SYNTHETIC_ANNOTATION_CLASS_ID, annotationUseSiteTarget)
internal fun KtFileSymbol.hasJvmMultifileClassAnnotation(): Boolean =
hasAnnotation("kotlin/jvm/JvmMultifileClass", AnnotationUseSiteTarget.FILE)
hasAnnotation(JVM_MULTIFILE_CLASS_ID, AnnotationUseSiteTarget.FILE)
internal fun KtAnnotatedSymbol.getJvmNameFromAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): String? {
val annotation = annotations.firstOrNull {
@@ -49,26 +58,31 @@ internal fun KtAnnotatedSymbol.isHiddenOrSynthetic(project: Project, annotationU
isHiddenByDeprecation(project, this, annotationUseSiteTarget) || hasJvmSyntheticAnnotation(annotationUseSiteTarget)
internal fun KtAnnotatedSymbol.hasJvmFieldAnnotation(): Boolean =
hasAnnotation("kotlin/jvm/JvmField", null)
hasAnnotation(JVM_FIELD_ANNOTATION_CLASS_ID, null)
internal fun KtAnnotatedSymbol.hasPublishedApiAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
hasAnnotation("kotlin/PublishedApi", annotationUseSiteTarget)
hasAnnotation(StandardClassIds.Annotations.PublishedApi, annotationUseSiteTarget)
internal fun KtAnnotatedSymbol.hasDeprecatedAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
hasAnnotation("kotlin/Deprecated", annotationUseSiteTarget)
hasAnnotation(StandardClassIds.Annotations.Deprecated, annotationUseSiteTarget)
internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean =
hasAnnotation("kotlin/jvm/JvmOverloads", null)
hasAnnotation(JVM_OVERLOADS_CLASS_ID, null)
internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
hasAnnotation("kotlin/jvm/JvmStatic", annotationUseSiteTarget)
hasAnnotation(JVM_STATIC_ANNOTATION_CLASS_ID, annotationUseSiteTarget)
internal fun KtAnnotatedSymbol.hasInlineOnlyAnnotation(): Boolean =
hasAnnotation("kotlin/internal/InlineOnly", null)
hasAnnotation(INLINE_ONLY_ANNOTATION_FQ_NAME, null)
internal fun KtAnnotatedSymbol.hasAnnotation(classIdString: String, annotationUseSiteTarget: AnnotationUseSiteTarget?): Boolean =
internal fun KtAnnotatedSymbol.hasAnnotation(classId: ClassId, annotationUseSiteTarget: AnnotationUseSiteTarget?): Boolean =
annotations.any {
it.useSiteTarget == annotationUseSiteTarget && it.classId?.asString() == classIdString
it.useSiteTarget == annotationUseSiteTarget && it.classId == classId
}
internal fun KtAnnotatedSymbol.hasAnnotation(fqName: FqName, annotationUseSiteTarget: AnnotationUseSiteTarget?): Boolean =
annotations.any {
it.useSiteTarget == annotationUseSiteTarget && it.classId?.asSingleFqName() == fqName
}
internal fun KtAnnotatedSymbol.computeAnnotations(
@@ -13,9 +13,10 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
import org.jetbrains.kotlin.analysis.api.isValid
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
import org.jetbrains.kotlin.analysis.api.annotations.KtConstantAnnotationValue
import org.jetbrains.kotlin.analysis.api.base.KtConstantValue
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.name.JvmNames.TRANSIENT_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.name.JvmNames.VOLATILE_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.psi.KtDeclaration
import org.jetbrains.kotlin.psi.KtProperty
@@ -85,10 +86,10 @@ internal class FirLightFieldForPropertySymbol(
if (!suppressFinal) {
modifiers.add(PsiModifier.FINAL)
}
if (propertySymbol.hasAnnotation("kotlin/jvm/Transient", null)) {
if (propertySymbol.hasAnnotation(TRANSIENT_ANNOTATION_CLASS_ID, null)) {
modifiers.add(PsiModifier.TRANSIENT)
}
if (propertySymbol.hasAnnotation("kotlin/jvm/Volatile", null)) {
if (propertySymbol.hasAnnotation(VOLATILE_ANNOTATION_CLASS_ID, null)) {
modifiers.add(PsiModifier.VOLATILE)
}
@@ -12,6 +12,8 @@ import org.jetbrains.kotlin.analysis.api.isValid
import org.jetbrains.kotlin.analysis.api.symbols.KtFunctionSymbol
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.lexer.KtTokens
import org.jetbrains.kotlin.name.JvmNames.STRICTFP_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.name.JvmNames.SYNCHRONIZED_ANNOTATION_CLASS_ID
import org.jetbrains.kotlin.utils.addToStdlib.ifTrue
import java.util.*
@@ -104,10 +106,10 @@ internal class FirLightSimpleMethodForSymbol(
if (!suppressStatic && functionSymbol.hasJvmStaticAnnotation()) {
modifiers.add(PsiModifier.STATIC)
}
if (functionSymbol.hasAnnotation("kotlin/jvm/Strictfp", null)) {
if (functionSymbol.hasAnnotation(STRICTFP_ANNOTATION_CLASS_ID, null)) {
modifiers.add(PsiModifier.STRICTFP)
}
if (functionSymbol.hasAnnotation("kotlin/jvm/Synchronized", null)) {
if (functionSymbol.hasAnnotation(SYNCHRONIZED_ANNOTATION_CLASS_ID, null)) {
modifiers.add(PsiModifier.SYNCHRONIZED)
}
@@ -58,5 +58,8 @@ object JvmNames {
@JvmField
val TRANSIENT_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.Transient")
@JvmField
val TRANSIENT_ANNOTATION_CLASS_ID = ClassId.topLevel(TRANSIENT_ANNOTATION_FQ_NAME)
const val MULTIFILE_PART_NAME_DELIMITER = "__"
}