From 82c2f0c6fdb2e6b84ee7ad9290746d66e7a7e807 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Thu, 9 Dec 2021 22:20:56 -0800 Subject: [PATCH] FIR LC: use unified annotations' ClassId or FqName --- .../symbol/annotations/annotationsUtils.kt | 34 +++++++++++++------ .../fields/FirLightFieldForPropertySymbol.kt | 7 ++-- .../methods/FirLightSimpleMethodForSymbol.kt | 6 ++-- .../src/org/jetbrains/kotlin/name/JvmNames.kt | 3 ++ 4 files changed, 35 insertions(+), 15 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/annotationsUtils.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/annotationsUtils.kt index 3f02fea3799..b57ae93bd21 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/annotationsUtils.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/annotations/annotationsUtils.kt @@ -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( diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt index 704b8c136fb..a40c7c5efcd 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/fields/FirLightFieldForPropertySymbol.kt @@ -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) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightSimpleMethodForSymbol.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightSimpleMethodForSymbol.kt index 000e4777c31..a2f5a4579d2 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightSimpleMethodForSymbol.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/methods/FirLightSimpleMethodForSymbol.kt @@ -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) } diff --git a/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt b/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt index 987a789b48a..26c5348e075 100644 --- a/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt +++ b/core/compiler.common.jvm/src/org/jetbrains/kotlin/name/JvmNames.kt @@ -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 = "__" }