IR: Introduce IrTypeAlias element
This commit is contained in:
+15
-1
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.descriptors.PropertyDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.TypeParameterDescriptor
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrErrorDeclarationImpl
|
||||
import org.jetbrains.kotlin.ir.declarations.impl.IrTypeAliasImpl
|
||||
import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
import org.jetbrains.kotlin.ir.util.withScope
|
||||
@@ -49,7 +50,7 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
||||
is KtClassOrObject ->
|
||||
generateClassOrObjectDeclaration(ktDeclaration)
|
||||
is KtTypeAlias ->
|
||||
null
|
||||
generateTypeAliasDeclaration(ktDeclaration)
|
||||
else ->
|
||||
IrErrorDeclarationImpl(
|
||||
ktDeclaration.startOffsetSkippingComments, ktDeclaration.endOffset,
|
||||
@@ -79,6 +80,19 @@ class DeclarationGenerator(override val context: GeneratorContext) : Generator {
|
||||
fun generateClassOrObjectDeclaration(ktClassOrObject: KtPureClassOrObject): IrClass =
|
||||
ClassGenerator(this).generateClass(ktClassOrObject)
|
||||
|
||||
private fun generateTypeAliasDeclaration(ktTypeAlias: KtTypeAlias): IrTypeAlias {
|
||||
val typeAliasDescriptor = getOrFail(BindingContext.TYPE_ALIAS, ktTypeAlias)
|
||||
val irTypeAlias = context.symbolTable.declareTypeAlias(typeAliasDescriptor) { symbol ->
|
||||
IrTypeAliasImpl.fromSymbolDescriptor(
|
||||
ktTypeAlias.startOffsetSkippingComments, ktTypeAlias.endOffset,
|
||||
symbol,
|
||||
typeAliasDescriptor.expandedType.toIrType(),
|
||||
IrDeclarationOrigin.DEFINED
|
||||
)
|
||||
}
|
||||
generateGlobalTypeParametersDeclarations(irTypeAlias, typeAliasDescriptor.declaredTypeParameters)
|
||||
return irTypeAlias
|
||||
}
|
||||
|
||||
fun generateGlobalTypeParametersDeclarations(
|
||||
irTypeParametersOwner: IrTypeParametersContainer,
|
||||
|
||||
Reference in New Issue
Block a user