[IR] Unbind construction methods of IrPropertyImpl from symbol.descriptor
This commit is contained in:
+13
-1
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.psi.psiUtil.pureStartOffset
|
|||||||
import org.jetbrains.kotlin.psi2ir.endOffsetOrUndefined
|
import org.jetbrains.kotlin.psi2ir.endOffsetOrUndefined
|
||||||
import org.jetbrains.kotlin.psi2ir.startOffsetOrUndefined
|
import org.jetbrains.kotlin.psi2ir.startOffsetOrUndefined
|
||||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
|
|
||||||
class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
||||||
@@ -185,7 +186,18 @@ class StandaloneDeclarationGenerator(private val context: GeneratorContext) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun generateProperty(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, symbol: IrPropertySymbol): IrProperty {
|
fun generateProperty(startOffset: Int, endOffset: Int, origin: IrDeclarationOrigin, descriptor: PropertyDescriptor, symbol: IrPropertySymbol): IrProperty {
|
||||||
val irProperty = IrPropertyImpl(startOffset, endOffset, origin, symbol, isDelegated = false)
|
val irProperty = IrPropertyImpl(
|
||||||
|
startOffset, endOffset, origin, symbol,
|
||||||
|
name = descriptor.name,
|
||||||
|
visibility = descriptor.visibility,
|
||||||
|
modality = descriptor.modality,
|
||||||
|
isVar = descriptor.isVar,
|
||||||
|
isConst = descriptor.isConst,
|
||||||
|
isLateinit = descriptor.isLateInit,
|
||||||
|
isDelegated = false,
|
||||||
|
isExternal = descriptor.isEffectivelyExternal(),
|
||||||
|
isExpect = descriptor.isExpect
|
||||||
|
)
|
||||||
|
|
||||||
irProperty.metadata = MetadataSource.Property(descriptor)
|
irProperty.metadata = MetadataSource.Property(descriptor)
|
||||||
|
|
||||||
|
|||||||
+47
-21
@@ -28,49 +28,73 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
|||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||||
|
|
||||||
@Suppress("DEPRECATION_ERROR")
|
|
||||||
class IrPropertyImpl(
|
class IrPropertyImpl(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
override val symbol: IrPropertySymbol,
|
override val symbol: IrPropertySymbol,
|
||||||
override val name: Name = symbol.descriptor.name,
|
override val name: Name,
|
||||||
override val visibility: Visibility = symbol.descriptor.visibility,
|
override val visibility: Visibility,
|
||||||
override val modality: Modality = symbol.descriptor.modality,
|
override val modality: Modality,
|
||||||
override val isVar: Boolean = symbol.descriptor.isVar,
|
override val isVar: Boolean,
|
||||||
override val isConst: Boolean = symbol.descriptor.isConst,
|
override val isConst: Boolean,
|
||||||
override val isLateinit: Boolean = symbol.descriptor.isLateInit,
|
override val isLateinit: Boolean,
|
||||||
override val isDelegated: Boolean = @Suppress("DEPRECATION") symbol.descriptor.isDelegated,
|
override val isDelegated: Boolean,
|
||||||
override val isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
|
override val isExternal: Boolean,
|
||||||
override val isExpect: Boolean = symbol.descriptor.isExpect,
|
override val isExpect: Boolean = false,
|
||||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||||
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin),
|
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin),
|
||||||
IrProperty,
|
IrProperty,
|
||||||
PropertyCarrier {
|
PropertyCarrier {
|
||||||
|
|
||||||
|
@Deprecated(
|
||||||
|
"This constructor is left for native compilation purpose only. " +
|
||||||
|
"It takes property attributes from symbol.descriptor " +
|
||||||
|
"Please either provide property attributes or its descriptor explicitly"
|
||||||
|
)
|
||||||
|
constructor(
|
||||||
|
startOffset: Int,
|
||||||
|
endOffset: Int,
|
||||||
|
origin: IrDeclarationOrigin,
|
||||||
|
symbol: IrPropertySymbol,
|
||||||
|
name: Name
|
||||||
|
) : this(
|
||||||
|
startOffset, endOffset, origin, symbol, name,
|
||||||
|
visibility = symbol.descriptor.visibility,
|
||||||
|
modality = symbol.descriptor.modality,
|
||||||
|
isVar = symbol.descriptor.isVar,
|
||||||
|
isConst = symbol.descriptor.isConst,
|
||||||
|
isLateinit = symbol.descriptor.isLateInit,
|
||||||
|
isDelegated = symbol.descriptor.isDelegated,
|
||||||
|
isExternal = symbol.descriptor.isExternal,
|
||||||
|
isExpect = symbol.descriptor.isExpect
|
||||||
|
)
|
||||||
|
|
||||||
@Deprecated(message = "Don't use descriptor-based API for IrProperty", level = DeprecationLevel.WARNING)
|
@Deprecated(message = "Don't use descriptor-based API for IrProperty", level = DeprecationLevel.WARNING)
|
||||||
constructor(
|
constructor(
|
||||||
startOffset: Int,
|
startOffset: Int,
|
||||||
endOffset: Int,
|
endOffset: Int,
|
||||||
origin: IrDeclarationOrigin,
|
origin: IrDeclarationOrigin,
|
||||||
descriptor: PropertyDescriptor,
|
descriptor: PropertyDescriptor,
|
||||||
name: Name,
|
symbol: IrPropertySymbol = IrPropertySymbolImpl(descriptor),
|
||||||
visibility: Visibility,
|
name: Name = descriptor.name,
|
||||||
modality: Modality,
|
visibility: Visibility = descriptor.visibility,
|
||||||
isVar: Boolean,
|
modality: Modality = descriptor.modality,
|
||||||
isConst: Boolean,
|
isVar: Boolean = descriptor.isVar,
|
||||||
isLateinit: Boolean,
|
isConst: Boolean = descriptor.isConst,
|
||||||
isDelegated: Boolean,
|
isLateinit: Boolean = descriptor.isLateInit,
|
||||||
isExternal: Boolean
|
isDelegated: Boolean = descriptor.isDelegated,
|
||||||
|
isExternal: Boolean = descriptor.isExternal
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset, origin,
|
startOffset, endOffset, origin,
|
||||||
IrPropertySymbolImpl(descriptor),
|
symbol,
|
||||||
name, visibility, modality,
|
name, visibility, modality,
|
||||||
isVar = isVar,
|
isVar = isVar,
|
||||||
isConst = isConst,
|
isConst = isConst,
|
||||||
isLateinit = isLateinit,
|
isLateinit = isLateinit,
|
||||||
isDelegated = isDelegated,
|
isDelegated = isDelegated,
|
||||||
isExternal = isExternal
|
isExternal = isExternal,
|
||||||
|
isExpect = descriptor.isExpect
|
||||||
)
|
)
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
@@ -83,7 +107,9 @@ class IrPropertyImpl(
|
|||||||
descriptor: PropertyDescriptor
|
descriptor: PropertyDescriptor
|
||||||
) : this(
|
) : this(
|
||||||
startOffset, endOffset, origin, descriptor,
|
startOffset, endOffset, origin, descriptor,
|
||||||
descriptor.name, descriptor.visibility, descriptor.modality,
|
name = descriptor.name,
|
||||||
|
visibility = descriptor.visibility,
|
||||||
|
modality = descriptor.modality,
|
||||||
isVar = descriptor.isVar,
|
isVar = descriptor.isVar,
|
||||||
isConst = descriptor.isConst,
|
isConst = descriptor.isConst,
|
||||||
isLateinit = descriptor.isLateInit,
|
isLateinit = descriptor.isLateInit,
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.ir.types.impl.*
|
|||||||
import org.jetbrains.kotlin.ir.util.*
|
import org.jetbrains.kotlin.ir.util.*
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
import org.jetbrains.kotlin.name.Name
|
import org.jetbrains.kotlin.name.Name
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||||
import org.jetbrains.kotlin.types.KotlinType
|
import org.jetbrains.kotlin.types.KotlinType
|
||||||
import org.jetbrains.kotlin.types.Variance
|
import org.jetbrains.kotlin.types.Variance
|
||||||
@@ -391,7 +392,18 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
|||||||
|
|
||||||
fun createFakeOverrideProperty(descriptor: PropertyDescriptor): IrProperty {
|
fun createFakeOverrideProperty(descriptor: PropertyDescriptor): IrProperty {
|
||||||
return symbolTable.declareProperty(offset, offset, memberOrigin, descriptor) {
|
return symbolTable.declareProperty(offset, offset, memberOrigin, descriptor) {
|
||||||
IrPropertyImpl(offset, offset, memberOrigin, it, descriptor.name).apply {
|
IrPropertyImpl(
|
||||||
|
offset, offset, memberOrigin, it,
|
||||||
|
name = descriptor.name,
|
||||||
|
visibility = descriptor.visibility,
|
||||||
|
modality = descriptor.modality,
|
||||||
|
isVar = descriptor.isVar,
|
||||||
|
isConst = descriptor.isConst,
|
||||||
|
isLateinit = descriptor.isLateInit,
|
||||||
|
isDelegated = descriptor.isDelegated,
|
||||||
|
isExternal = descriptor.isEffectivelyExternal(),
|
||||||
|
isExpect = descriptor.isExpect
|
||||||
|
).apply {
|
||||||
parent = this@addFakeOverrides
|
parent = this@addFakeOverrides
|
||||||
getter = descriptor.getter?.let { g -> createFakeOverrideFunction(g, symbol) }
|
getter = descriptor.getter?.let { g -> createFakeOverrideFunction(g, symbol) }
|
||||||
setter = descriptor.setter?.let { s -> createFakeOverrideFunction(s, symbol) }
|
setter = descriptor.setter?.let { s -> createFakeOverrideFunction(s, symbol) }
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import org.jetbrains.kotlin.ir.expressions.IrExpressionBody
|
|||||||
import org.jetbrains.kotlin.ir.symbols.*
|
import org.jetbrains.kotlin.ir.symbols.*
|
||||||
import org.jetbrains.kotlin.ir.symbols.impl.*
|
import org.jetbrains.kotlin.ir.symbols.impl.*
|
||||||
import org.jetbrains.kotlin.ir.types.IrType
|
import org.jetbrains.kotlin.ir.types.IrType
|
||||||
|
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||||
|
|
||||||
interface IrProvider {
|
interface IrProvider {
|
||||||
@@ -601,7 +602,14 @@ open class SymbolTable(
|
|||||||
propertyFactory: (IrPropertySymbol) -> IrProperty = { symbol ->
|
propertyFactory: (IrPropertySymbol) -> IrProperty = { symbol ->
|
||||||
IrPropertyImpl(
|
IrPropertyImpl(
|
||||||
startOffset, endOffset, origin, symbol, isDelegated = isDelegated,
|
startOffset, endOffset, origin, symbol, isDelegated = isDelegated,
|
||||||
name = nameProvider.nameForDeclaration(descriptor)
|
name = nameProvider.nameForDeclaration(descriptor),
|
||||||
|
visibility = descriptor.visibility,
|
||||||
|
modality = descriptor.modality,
|
||||||
|
isVar = descriptor.isVar,
|
||||||
|
isConst = descriptor.isConst,
|
||||||
|
isLateinit = descriptor.isLateInit,
|
||||||
|
isExternal = descriptor.isEffectivelyExternal(),
|
||||||
|
isExpect = descriptor.isExpect
|
||||||
).apply {
|
).apply {
|
||||||
metadata = MetadataSource.Property(symbol.descriptor)
|
metadata = MetadataSource.Property(symbol.descriptor)
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -205,7 +205,7 @@ interface IrBuilderExtension {
|
|||||||
assert(irPropertySymbol.isBound || declare)
|
assert(irPropertySymbol.isBound || declare)
|
||||||
|
|
||||||
if (declare) {
|
if (declare) {
|
||||||
IrPropertyImpl(propertyParent.startOffset, propertyParent.endOffset, SERIALIZABLE_PLUGIN_ORIGIN, irPropertySymbol).also {
|
IrPropertyImpl(propertyParent.startOffset, propertyParent.endOffset, SERIALIZABLE_PLUGIN_ORIGIN, propertyDescriptor, irPropertySymbol).also {
|
||||||
it.parent = propertyParent
|
it.parent = propertyParent
|
||||||
propertyParent.addMember(it)
|
propertyParent.addMember(it)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user