FIR2IR: put @JvmField on field, not property

#KT-42118 fixed
This commit is contained in:
Jinseong Jeon
2020-09-23 18:12:22 -07:00
committed by Mikhail Glukhikh
parent ae23adb6f5
commit dc2226b42f
5 changed files with 12 additions and 8 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.fir.FirAnnotationContainer
import org.jetbrains.kotlin.fir.backend.Fir2IrComponents import org.jetbrains.kotlin.fir.backend.Fir2IrComponents
import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirProperty
import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter
import org.jetbrains.kotlin.fir.declarations.isJvmFieldAnnotation
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
@@ -48,7 +49,8 @@ internal class AnnotationGenerator(private val components: Fir2IrComponents) : F
irProperty.annotations += irProperty.annotations +=
property.annotations property.annotations
.filter { .filter {
it.useSiteTarget == null || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY !it.isJvmFieldAnnotation &&
(it.useSiteTarget == null || it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY)
} }
.toIrAnnotations() .toIrAnnotations()
} }
@@ -60,7 +62,8 @@ internal class AnnotationGenerator(private val components: Fir2IrComponents) : F
irField.annotations += irField.annotations +=
property.annotations property.annotations
.filter { .filter {
it.useSiteTarget == AnnotationUseSiteTarget.FIELD || it.isJvmFieldAnnotation ||
it.useSiteTarget == AnnotationUseSiteTarget.FIELD ||
it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD it.useSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD
} }
.toIrAnnotations() .toIrAnnotations()
@@ -13,6 +13,7 @@ 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
@@ -129,9 +130,12 @@ val FirProperty.hasBackingField: Boolean
isReferredViaField == true isReferredViaField == true
inline val FirProperty.hasJvmFieldAnnotation: Boolean inline val FirProperty.hasJvmFieldAnnotation: Boolean
get() = annotations.any { get() = annotations.any { it.isJvmFieldAnnotation }
val classId = it.annotationTypeRef.coneTypeSafe<ConeClassLikeType>()?.classId
classId?.packageFqName?.asString() == "kotlin.jvm" && classId.relativeClassName.asString() == "JvmField" 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 { fun FirAnnotatedDeclaration.hasAnnotation(classId: ClassId): Boolean {
@@ -1,5 +1,4 @@
// !LANGUAGE: +JvmFieldInInterface +NestedClassesInAnnotations // !LANGUAGE: +JvmFieldInInterface +NestedClassesInAnnotations
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// WITH_RUNTIME // WITH_RUNTIME
@@ -1,4 +1,3 @@
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// WITH_RUNTIME // WITH_RUNTIME
@@ -1,5 +1,4 @@
// !LANGUAGE: +JvmFieldInInterface // !LANGUAGE: +JvmFieldInInterface
// IGNORE_BACKEND_FIR: JVM_IR
// TARGET_BACKEND: JVM // TARGET_BACKEND: JVM
// WITH_RUNTIME // WITH_RUNTIME