IR: Introduce IrTypeAlias element

This commit is contained in:
Dmitry Petrov
2019-07-22 16:48:05 +03:00
parent 499f9330d2
commit 48ae76ac28
30 changed files with 440 additions and 31 deletions
@@ -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,