IR: IrTypeAlias: isActual

This commit is contained in:
Dmitry Petrov
2019-07-24 16:13:14 +03:00
parent 2b43b09444
commit b3525b077c
6 changed files with 19 additions and 9 deletions
@@ -16,5 +16,6 @@ interface IrTypeAlias :
IrTypeParametersContainer { IrTypeParametersContainer {
override val descriptor: TypeAliasDescriptor override val descriptor: TypeAliasDescriptor
val isActual: Boolean
val expandedType: IrType val expandedType: IrType
} }
@@ -26,6 +26,7 @@ class IrTypeAliasImpl(
override val name: Name, override val name: Name,
override val visibility: Visibility, override val visibility: Visibility,
override val expandedType: IrType, override val expandedType: IrType,
override val isActual: Boolean,
origin: IrDeclarationOrigin origin: IrDeclarationOrigin
) : ) :
IrDeclarationBase(startOffset, endOffset, origin), IrDeclarationBase(startOffset, endOffset, origin),
@@ -65,6 +66,7 @@ class IrTypeAliasImpl(
symbol.descriptor.name, symbol.descriptor.name,
symbol.descriptor.visibility, symbol.descriptor.visibility,
expandedType, expandedType,
symbol.descriptor.isActual,
origin origin
) )
} }
@@ -5,7 +5,6 @@
package org.jetbrains.kotlin.ir.declarations.lazy package org.jetbrains.kotlin.ir.declarations.lazy
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor import org.jetbrains.kotlin.descriptors.TypeAliasDescriptor
import org.jetbrains.kotlin.descriptors.Visibility import org.jetbrains.kotlin.descriptors.Visibility
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
@@ -25,6 +24,9 @@ class IrLazyTypeAlias(
endOffset: Int, endOffset: Int,
origin: IrDeclarationOrigin, origin: IrDeclarationOrigin,
override val symbol: IrTypeAliasSymbol, override val symbol: IrTypeAliasSymbol,
override val name: Name,
override val visibility: Visibility,
override val isActual: Boolean,
stubGenerator: DeclarationStubGenerator, stubGenerator: DeclarationStubGenerator,
typeTranslator: TypeTranslator typeTranslator: TypeTranslator
) : ) :
@@ -38,12 +40,6 @@ class IrLazyTypeAlias(
override val descriptor: TypeAliasDescriptor override val descriptor: TypeAliasDescriptor
get() = symbol.descriptor get() = symbol.descriptor
override val name: Name
get() = descriptor.name
override val visibility: Visibility
get() = descriptor.visibility
override val typeParameters: MutableList<IrTypeParameter> by lazy { override val typeParameters: MutableList<IrTypeParameter> by lazy {
descriptor.declaredTypeParameters.mapTo(arrayListOf()) { descriptor.declaredTypeParameters.mapTo(arrayListOf()) {
stubGenerator.generateOrGetTypeParameterStub(it) stubGenerator.generateOrGetTypeParameterStub(it)
@@ -251,7 +251,11 @@ class DeclarationStubGenerator(
} }
val origin = computeOrigin(descriptor) val origin = computeOrigin(descriptor)
return symbolTable.declareTypeAlias(descriptor) { return symbolTable.declareTypeAlias(descriptor) {
IrLazyTypeAlias(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, it, this, typeTranslator) IrLazyTypeAlias(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin,
it, it.descriptor.name, it.descriptor.visibility, it.descriptor.isActual,
this, typeTranslator
)
} }
} }
} }
@@ -341,6 +341,7 @@ open class DeepCopyIrTreeWithSymbols(
symbolRenamer.getTypeAliasName(declaration.symbol), symbolRenamer.getTypeAliasName(declaration.symbol),
declaration.visibility, declaration.visibility,
declaration.expandedType.remapType(), declaration.expandedType.remapType(),
declaration.isActual,
mapDeclarationOrigin(declaration.origin) mapDeclarationOrigin(declaration.origin)
).apply { ).apply {
transformAnnotations(declaration) transformAnnotations(declaration)
@@ -498,9 +498,15 @@ class RenderIrElementVisitor : IrElementVisitor<String, Nothing?> {
override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?): String = override fun visitTypeAlias(declaration: IrTypeAlias, data: Nothing?): String =
declaration.run { declaration.run {
"TYPEALIAS ${declaration.renderOriginIfNonTrivial()}" + "TYPEALIAS ${declaration.renderOriginIfNonTrivial()}" +
"name:$name visibility:$visibility expandedType:${expandedType.render()}" "name:$name visibility:$visibility expandedType:${expandedType.render()}" +
renderTypeAliasFlags()
} }
private fun IrTypeAlias.renderTypeAliasFlags(): String =
renderFlagsList(
"actual".takeIf { isActual }
)
private fun IrLocalDelegatedProperty.renderLocalDelegatedPropertyFlags() = private fun IrLocalDelegatedProperty.renderLocalDelegatedPropertyFlags() =
if (isVar) "var" else "val" if (isVar) "var" else "val"