FIR2IR: provide IR_EXTERNAL_DECLARATION_STUB origin also for members

This commit is contained in:
Mikhail Glukhikh
2020-03-10 12:00:30 +03:00
parent e9699e7173
commit 9c3dfed2d7
@@ -626,10 +626,10 @@ class Fir2IrDeclarationStorage(
private fun createIrConstructor( private fun createIrConstructor(
constructor: FirConstructor, constructor: FirConstructor,
irParent: IrDeclarationParent, irParent: IrDeclarationParent,
shouldLeaveScope: Boolean = true shouldLeaveScope: Boolean = true,
origin: IrDeclarationOrigin = IrDeclarationOrigin.DEFINED
): IrConstructor { ): IrConstructor {
val descriptor = WrappedClassConstructorDescriptor() val descriptor = WrappedClassConstructorDescriptor()
val origin = IrDeclarationOrigin.DEFINED
val isPrimary = constructor.isPrimary val isPrimary = constructor.isPrimary
val visibility = when { val visibility = when {
irParent is IrClass && irParent.modality == Modality.SEALED -> Visibilities.PRIVATE irParent is IrClass && irParent.modality == Modality.SEALED -> Visibilities.PRIVATE
@@ -797,6 +797,7 @@ class Fir2IrDeclarationStorage(
getter = createIrPropertyAccessor( getter = createIrPropertyAccessor(
property.getter, property, this, type, irParent, false, property.getter, property, this, type, irParent, false,
when { when {
origin == IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB -> origin
property.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR property.delegate != null -> IrDeclarationOrigin.DELEGATED_PROPERTY_ACCESSOR
property.getter is FirDefaultPropertyGetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR property.getter is FirDefaultPropertyGetter -> IrDeclarationOrigin.DEFAULT_PROPERTY_ACCESSOR
else -> origin else -> origin
@@ -989,7 +990,8 @@ class Fir2IrDeclarationStorage(
is FirSimpleFunction, is FirAnonymousFunction -> { is FirSimpleFunction, is FirAnonymousFunction -> {
getCachedIrFunction(firDeclaration)?.let { return irSymbolTable.referenceSimpleFunction(it.descriptor) } getCachedIrFunction(firDeclaration)?.let { return irSymbolTable.referenceSimpleFunction(it.descriptor) }
val irParent = findIrParent(firDeclaration) val irParent = findIrParent(firDeclaration)
val irDeclaration = createIrFunction(firDeclaration, irParent).apply { val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED
val irDeclaration = createIrFunction(firDeclaration, irParent, origin = parentOrigin).apply {
setAndModifyParent(irParent) setAndModifyParent(irParent)
} }
irSymbolTable.referenceSimpleFunction(irDeclaration.descriptor) irSymbolTable.referenceSimpleFunction(irDeclaration.descriptor)
@@ -997,7 +999,8 @@ class Fir2IrDeclarationStorage(
is FirConstructor -> { is FirConstructor -> {
getCachedIrConstructor(firDeclaration)?.let { return irSymbolTable.referenceConstructor(it.descriptor) } getCachedIrConstructor(firDeclaration)?.let { return irSymbolTable.referenceConstructor(it.descriptor) }
val irParent = findIrParent(firDeclaration)!! val irParent = findIrParent(firDeclaration)!!
val irDeclaration = createIrConstructor(firDeclaration, irParent).apply { val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED
val irDeclaration = createIrConstructor(firDeclaration, irParent, origin = parentOrigin).apply {
setAndModifyParent(irParent) setAndModifyParent(irParent)
} }
irSymbolTable.referenceConstructor(irDeclaration.descriptor) irSymbolTable.referenceConstructor(irDeclaration.descriptor)
@@ -1011,7 +1014,8 @@ class Fir2IrDeclarationStorage(
is FirProperty -> { is FirProperty -> {
propertyCache[fir]?.let { return irSymbolTable.referenceProperty(it.descriptor) } propertyCache[fir]?.let { return irSymbolTable.referenceProperty(it.descriptor) }
val irParent = findIrParent(fir) val irParent = findIrParent(fir)
val irProperty = createIrProperty(fir, irParent).apply { val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED
val irProperty = createIrProperty(fir, irParent, origin = parentOrigin).apply {
setAndModifyParent(irParent) setAndModifyParent(irParent)
} }
irSymbolTable.referenceProperty(irProperty.descriptor) irSymbolTable.referenceProperty(irProperty.descriptor)
@@ -1032,7 +1036,8 @@ class Fir2IrDeclarationStorage(
is FirProperty -> { is FirProperty -> {
propertyCache[fir]?.let { return irSymbolTable.referenceField(it.backingField!!.descriptor) } propertyCache[fir]?.let { return irSymbolTable.referenceField(it.backingField!!.descriptor) }
val irParent = findIrParent(fir) val irParent = findIrParent(fir)
val irProperty = createIrProperty(fir, irParent).apply { val parentOrigin = (irParent as? IrDeclaration)?.origin ?: IrDeclarationOrigin.DEFINED
val irProperty = createIrProperty(fir, irParent, origin = parentOrigin).apply {
setAndModifyParent(irParent) setAndModifyParent(irParent)
} }
irSymbolTable.referenceField(irProperty.backingField!!.descriptor) irSymbolTable.referenceField(irProperty.backingField!!.descriptor)