Rewrite AnnotationCodegen for IR, removing descriptors
This commit is contained in:
@@ -66,8 +66,6 @@ class IrLazyClass(
|
||||
symbol.bind(this)
|
||||
}
|
||||
|
||||
override val annotations: MutableList<IrCall> = arrayListOf()
|
||||
|
||||
override val descriptor: ClassDescriptor get() = symbol.descriptor
|
||||
|
||||
override var thisReceiver: IrValueParameter? by lazyVar {
|
||||
|
||||
+5
-1
@@ -50,7 +50,11 @@ abstract class IrLazyDeclarationBase(
|
||||
createLazyParent()!!
|
||||
}
|
||||
|
||||
override val annotations: MutableList<IrCall> = arrayListOf()
|
||||
override val annotations: MutableList<IrCall> by lazy {
|
||||
descriptor.annotations.map {
|
||||
typeTranslator.constantValueGenerator.generateAnnotationConstructorCall(it)
|
||||
}.toMutableList()
|
||||
}
|
||||
|
||||
override var metadata: Nothing?
|
||||
get() = null
|
||||
|
||||
@@ -14,10 +14,12 @@ import org.jetbrains.kotlin.ir.expressions.IrCall
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpression
|
||||
import org.jetbrains.kotlin.ir.expressions.impl.*
|
||||
import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.DescriptorUtils
|
||||
import org.jetbrains.kotlin.resolve.constants.*
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceElement
|
||||
import org.jetbrains.kotlin.resolve.source.PsiSourceFile
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.typeUtil.builtIns
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
@@ -116,8 +118,8 @@ class ConstantValueGenerator(
|
||||
val primaryConstructorSymbol = symbolTable.referenceConstructor(primaryConstructorDescriptor)
|
||||
|
||||
val psi = annotationDescriptor.source.safeAs<PsiSourceElement>()?.psi
|
||||
val startOffset = psi?.startOffset ?: UNDEFINED_OFFSET
|
||||
val endOffset = psi?.startOffset ?: UNDEFINED_OFFSET
|
||||
val startOffset = psi?.takeUnless { it.containingFile.fileType.isBinary }?.startOffset ?: UNDEFINED_OFFSET
|
||||
val endOffset = psi?.takeUnless { it.containingFile.fileType.isBinary }?.endOffset ?: UNDEFINED_OFFSET
|
||||
|
||||
val irCall = IrCallImpl(
|
||||
startOffset, endOffset,
|
||||
|
||||
@@ -19,6 +19,8 @@ import org.jetbrains.kotlin.ir.types.classifierOrFail
|
||||
import org.jetbrains.kotlin.ir.types.isAny
|
||||
import org.jetbrains.kotlin.ir.types.toKotlinType
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.name.SpecialNames
|
||||
import org.jetbrains.kotlin.psi.psiUtil.endOffset
|
||||
import org.jetbrains.kotlin.psi.psiUtil.startOffset
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe
|
||||
@@ -278,6 +280,12 @@ val IrClass.isEnumEntry get() = kind == ClassKind.ENUM_ENTRY
|
||||
val IrClass.isInterface get() = kind == ClassKind.INTERFACE
|
||||
val IrClass.isClass get() = kind == ClassKind.CLASS
|
||||
val IrClass.isObject get() = kind == ClassKind.OBJECT
|
||||
val IrDeclarationWithName.fqNameWhenAvailable: FqName?
|
||||
get() = when (val parent = parent) {
|
||||
is IrDeclarationWithName -> parent.fqNameWhenAvailable?.child(name)
|
||||
is IrPackageFragment -> parent.fqName.child(name)
|
||||
else -> null
|
||||
}
|
||||
|
||||
val IrDeclaration.parentAsClass get() = parent as IrClass
|
||||
|
||||
|
||||
Reference in New Issue
Block a user