JVM_IR: handle @JvmName on annotation getters
This commit is contained in:
+10
-9
@@ -32,10 +32,7 @@ import org.jetbrains.kotlin.ir.types.IrType
|
|||||||
import org.jetbrains.kotlin.ir.types.classifierOrNull
|
import org.jetbrains.kotlin.ir.types.classifierOrNull
|
||||||
import org.jetbrains.kotlin.ir.types.isMarkedNullable
|
import org.jetbrains.kotlin.ir.types.isMarkedNullable
|
||||||
import org.jetbrains.kotlin.ir.types.isNullable
|
import org.jetbrains.kotlin.ir.types.isNullable
|
||||||
import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.ir.util.getAnnotation
|
|
||||||
import org.jetbrains.kotlin.ir.util.isAnnotationClass
|
|
||||||
import org.jetbrains.kotlin.ir.util.parentAsClass
|
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.synthetic.isVisibleOutside
|
import org.jetbrains.kotlin.synthetic.isVisibleOutside
|
||||||
@@ -185,11 +182,15 @@ class AnnotationCodegen(
|
|||||||
private fun getAnnotationArgumentJvmName(annotationClass: IrClass?, parameterName: Name): String {
|
private fun getAnnotationArgumentJvmName(annotationClass: IrClass?, parameterName: Name): String {
|
||||||
if (annotationClass == null) return parameterName.asString()
|
if (annotationClass == null) return parameterName.asString()
|
||||||
|
|
||||||
val field =
|
val propertyOrGetter = annotationClass.declarations.singleOrNull {
|
||||||
annotationClass.declarations.filterIsInstance<IrField>().singleOrNull { it.name == parameterName }
|
// IrSimpleFunction if lowered, IrProperty with a getter if imported
|
||||||
?: return parameterName.asString()
|
(it is IrSimpleFunction && it.correspondingPropertySymbol?.owner?.name == parameterName) ||
|
||||||
|
(it is IrProperty && it.name == parameterName)
|
||||||
return methodSignatureMapper.mapAnnotationParameterName(field)
|
} ?: return parameterName.asString()
|
||||||
|
val getter = propertyOrGetter as? IrSimpleFunction
|
||||||
|
?: (propertyOrGetter as IrProperty).getter
|
||||||
|
?: error("No getter for annotation property: ${propertyOrGetter.render()}")
|
||||||
|
return methodSignatureMapper.mapFunctionName(getter)
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun genCompileTimeValue(
|
private fun genCompileTimeValue(
|
||||||
|
|||||||
-3
@@ -125,9 +125,6 @@ class MethodSignatureMapper(private val context: JvmBackendContext) {
|
|||||||
private fun IrFunction.isPublishedApi(): Boolean =
|
private fun IrFunction.isPublishedApi(): Boolean =
|
||||||
propertyIfAccessor.annotations.hasAnnotation(KotlinBuiltIns.FQ_NAMES.publishedApi)
|
propertyIfAccessor.annotations.hasAnnotation(KotlinBuiltIns.FQ_NAMES.publishedApi)
|
||||||
|
|
||||||
fun mapAnnotationParameterName(field: IrField): String =
|
|
||||||
mapFunctionName(field.correspondingPropertySymbol!!.owner.getter ?: error("No getter for annotation property: ${field.render()}"))
|
|
||||||
|
|
||||||
fun mapReturnType(declaration: IrDeclaration, sw: JvmSignatureWriter? = null): Type {
|
fun mapReturnType(declaration: IrDeclaration, sw: JvmSignatureWriter? = null): Type {
|
||||||
if (declaration !is IrFunction) {
|
if (declaration !is IrFunction) {
|
||||||
require(declaration is IrField) { "Unsupported declaration: $declaration" }
|
require(declaration is IrField) { "Unsupported declaration: $declaration" }
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
// IGNORE_BACKEND_FIR: JVM_IR
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// IGNORE_BACKEND: JVM_IR
|
|
||||||
// WITH_REFLECT
|
// WITH_REFLECT
|
||||||
package test
|
package test
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// IGNORE_BACKEND: JVM_IR
|
|
||||||
// FILE: A.kt
|
// FILE: A.kt
|
||||||
|
|
||||||
package lib
|
package lib
|
||||||
|
|||||||
Reference in New Issue
Block a user