FIR LC: use unified annotations' ClassId or FqName
This commit is contained in:
committed by
Ilya Kirillov
parent
4e60a2dbe1
commit
82c2f0c6fd
+24
-10
@@ -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.KtFileSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtConstantAnnotationValue
|
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 =
|
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 =
|
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? {
|
internal fun KtAnnotatedSymbol.getJvmNameFromAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): String? {
|
||||||
val annotation = annotations.firstOrNull {
|
val annotation = annotations.firstOrNull {
|
||||||
@@ -49,26 +58,31 @@ internal fun KtAnnotatedSymbol.isHiddenOrSynthetic(project: Project, annotationU
|
|||||||
isHiddenByDeprecation(project, this, annotationUseSiteTarget) || hasJvmSyntheticAnnotation(annotationUseSiteTarget)
|
isHiddenByDeprecation(project, this, annotationUseSiteTarget) || hasJvmSyntheticAnnotation(annotationUseSiteTarget)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmFieldAnnotation(): Boolean =
|
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 =
|
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 =
|
internal fun KtAnnotatedSymbol.hasDeprecatedAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
|
||||||
hasAnnotation("kotlin/Deprecated", annotationUseSiteTarget)
|
hasAnnotation(StandardClassIds.Annotations.Deprecated, annotationUseSiteTarget)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean =
|
internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean =
|
||||||
hasAnnotation("kotlin/jvm/JvmOverloads", null)
|
hasAnnotation(JVM_OVERLOADS_CLASS_ID, null)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
|
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 =
|
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 {
|
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(
|
internal fun KtAnnotatedSymbol.computeAnnotations(
|
||||||
|
|||||||
+4
-3
@@ -13,9 +13,10 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|||||||
import org.jetbrains.kotlin.analysis.api.isValid
|
import org.jetbrains.kotlin.analysis.api.isValid
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtKotlinPropertySymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
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.base.KtConstantValue
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
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.KtDeclaration
|
||||||
import org.jetbrains.kotlin.psi.KtProperty
|
import org.jetbrains.kotlin.psi.KtProperty
|
||||||
|
|
||||||
@@ -85,10 +86,10 @@ internal class FirLightFieldForPropertySymbol(
|
|||||||
if (!suppressFinal) {
|
if (!suppressFinal) {
|
||||||
modifiers.add(PsiModifier.FINAL)
|
modifiers.add(PsiModifier.FINAL)
|
||||||
}
|
}
|
||||||
if (propertySymbol.hasAnnotation("kotlin/jvm/Transient", null)) {
|
if (propertySymbol.hasAnnotation(TRANSIENT_ANNOTATION_CLASS_ID, null)) {
|
||||||
modifiers.add(PsiModifier.TRANSIENT)
|
modifiers.add(PsiModifier.TRANSIENT)
|
||||||
}
|
}
|
||||||
if (propertySymbol.hasAnnotation("kotlin/jvm/Volatile", null)) {
|
if (propertySymbol.hasAnnotation(VOLATILE_ANNOTATION_CLASS_ID, null)) {
|
||||||
modifiers.add(PsiModifier.VOLATILE)
|
modifiers.add(PsiModifier.VOLATILE)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+4
-2
@@ -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.symbols.KtFunctionSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens
|
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 org.jetbrains.kotlin.utils.addToStdlib.ifTrue
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
@@ -104,10 +106,10 @@ internal class FirLightSimpleMethodForSymbol(
|
|||||||
if (!suppressStatic && functionSymbol.hasJvmStaticAnnotation()) {
|
if (!suppressStatic && functionSymbol.hasJvmStaticAnnotation()) {
|
||||||
modifiers.add(PsiModifier.STATIC)
|
modifiers.add(PsiModifier.STATIC)
|
||||||
}
|
}
|
||||||
if (functionSymbol.hasAnnotation("kotlin/jvm/Strictfp", null)) {
|
if (functionSymbol.hasAnnotation(STRICTFP_ANNOTATION_CLASS_ID, null)) {
|
||||||
modifiers.add(PsiModifier.STRICTFP)
|
modifiers.add(PsiModifier.STRICTFP)
|
||||||
}
|
}
|
||||||
if (functionSymbol.hasAnnotation("kotlin/jvm/Synchronized", null)) {
|
if (functionSymbol.hasAnnotation(SYNCHRONIZED_ANNOTATION_CLASS_ID, null)) {
|
||||||
modifiers.add(PsiModifier.SYNCHRONIZED)
|
modifiers.add(PsiModifier.SYNCHRONIZED)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -58,5 +58,8 @@ object JvmNames {
|
|||||||
@JvmField
|
@JvmField
|
||||||
val TRANSIENT_ANNOTATION_FQ_NAME = FqName("kotlin.jvm.Transient")
|
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 = "__"
|
const val MULTIFILE_PART_NAME_DELIMITER = "__"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user