[psi2ir] Emit source info for annotation parameters

We need this in the JS IR backend for annotations like
@JsFun and @JsPolyfill
This commit is contained in:
Sergej Jaskiewicz
2022-08-01 22:55:04 +02:00
committed by Space
parent 5fc6097eb6
commit 9dc7fe24f6
5 changed files with 35 additions and 10 deletions
@@ -13,10 +13,10 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.expressions.IrConstructorCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.constants.*
import org.jetbrains.kotlin.types.KotlinType
@@ -31,6 +31,8 @@ abstract class ConstantValueGenerator(
) {
protected abstract fun extractAnnotationOffsets(annotationDescriptor: AnnotationDescriptor): Pair<Int, Int>
protected abstract fun extractAnnotationParameterOffsets(annotationDescriptor: AnnotationDescriptor, argumentName: Name): Pair<Int, Int>
private fun KotlinType.toIrType() = typeTranslator.translateType(this)
fun generateConstantValueAsExpression(
@@ -192,7 +194,8 @@ abstract class ConstantValueGenerator(
val argumentIndex = valueParameter.index
val argumentValue = annotationDescriptor.allValueArguments[valueParameter.name] ?: continue
val adjustedValue = adjustAnnotationArgumentValue(argumentValue, valueParameter)
val irArgument = generateAnnotationValueAsExpression(UNDEFINED_OFFSET, UNDEFINED_OFFSET, adjustedValue, valueParameter)
val (parameterStartOffset, parameterEndOffset) = extractAnnotationParameterOffsets(annotationDescriptor, valueParameter.name)
val irArgument = generateAnnotationValueAsExpression(parameterStartOffset, parameterEndOffset, adjustedValue, valueParameter)
irCall.putValueArgument(argumentIndex, irArgument)
}