[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.startOffsetOrUndefined
|
||||
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
|
||||
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 {
|
||||
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)
|
||||
|
||||
|
||||
+47
-21
@@ -28,49 +28,73 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitor
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
|
||||
@Suppress("DEPRECATION_ERROR")
|
||||
class IrPropertyImpl(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
override val symbol: IrPropertySymbol,
|
||||
override val name: Name = symbol.descriptor.name,
|
||||
override val visibility: Visibility = symbol.descriptor.visibility,
|
||||
override val modality: Modality = symbol.descriptor.modality,
|
||||
override val isVar: Boolean = symbol.descriptor.isVar,
|
||||
override val isConst: Boolean = symbol.descriptor.isConst,
|
||||
override val isLateinit: Boolean = symbol.descriptor.isLateInit,
|
||||
override val isDelegated: Boolean = @Suppress("DEPRECATION") symbol.descriptor.isDelegated,
|
||||
override val isExternal: Boolean = symbol.descriptor.isEffectivelyExternal(),
|
||||
override val isExpect: Boolean = symbol.descriptor.isExpect,
|
||||
override val name: Name,
|
||||
override val visibility: Visibility,
|
||||
override val modality: Modality,
|
||||
override val isVar: Boolean,
|
||||
override val isConst: Boolean,
|
||||
override val isLateinit: Boolean,
|
||||
override val isDelegated: Boolean,
|
||||
override val isExternal: Boolean,
|
||||
override val isExpect: Boolean = false,
|
||||
override val isFakeOverride: Boolean = origin == IrDeclarationOrigin.FAKE_OVERRIDE
|
||||
) : IrDeclarationBase<PropertyCarrier>(startOffset, endOffset, origin),
|
||||
IrProperty,
|
||||
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)
|
||||
constructor(
|
||||
startOffset: Int,
|
||||
endOffset: Int,
|
||||
origin: IrDeclarationOrigin,
|
||||
descriptor: PropertyDescriptor,
|
||||
name: Name,
|
||||
visibility: Visibility,
|
||||
modality: Modality,
|
||||
isVar: Boolean,
|
||||
isConst: Boolean,
|
||||
isLateinit: Boolean,
|
||||
isDelegated: Boolean,
|
||||
isExternal: Boolean
|
||||
symbol: IrPropertySymbol = IrPropertySymbolImpl(descriptor),
|
||||
name: Name = descriptor.name,
|
||||
visibility: Visibility = descriptor.visibility,
|
||||
modality: Modality = descriptor.modality,
|
||||
isVar: Boolean = descriptor.isVar,
|
||||
isConst: Boolean = descriptor.isConst,
|
||||
isLateinit: Boolean = descriptor.isLateInit,
|
||||
isDelegated: Boolean = descriptor.isDelegated,
|
||||
isExternal: Boolean = descriptor.isExternal
|
||||
) : this(
|
||||
startOffset, endOffset, origin,
|
||||
IrPropertySymbolImpl(descriptor),
|
||||
symbol,
|
||||
name, visibility, modality,
|
||||
isVar = isVar,
|
||||
isConst = isConst,
|
||||
isLateinit = isLateinit,
|
||||
isDelegated = isDelegated,
|
||||
isExternal = isExternal
|
||||
isExternal = isExternal,
|
||||
isExpect = descriptor.isExpect
|
||||
)
|
||||
|
||||
@Suppress("DEPRECATION")
|
||||
@@ -83,7 +107,9 @@ class IrPropertyImpl(
|
||||
descriptor: PropertyDescriptor
|
||||
) : this(
|
||||
startOffset, endOffset, origin, descriptor,
|
||||
descriptor.name, descriptor.visibility, descriptor.modality,
|
||||
name = descriptor.name,
|
||||
visibility = descriptor.visibility,
|
||||
modality = descriptor.modality,
|
||||
isVar = descriptor.isVar,
|
||||
isConst = descriptor.isConst,
|
||||
isLateinit = descriptor.isLateInit,
|
||||
|
||||
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.ir.types.impl.*
|
||||
import org.jetbrains.kotlin.ir.util.*
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.resolve.scopes.DescriptorKindFilter
|
||||
import org.jetbrains.kotlin.types.KotlinType
|
||||
import org.jetbrains.kotlin.types.Variance
|
||||
@@ -391,7 +392,18 @@ class IrFunctionFactory(private val irBuiltIns: IrBuiltIns, private val symbolTa
|
||||
|
||||
fun createFakeOverrideProperty(descriptor: PropertyDescriptor): IrProperty {
|
||||
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
|
||||
getter = descriptor.getter?.let { g -> createFakeOverrideFunction(g, 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.impl.*
|
||||
import org.jetbrains.kotlin.ir.types.IrType
|
||||
import org.jetbrains.kotlin.resolve.descriptorUtil.isEffectivelyExternal
|
||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DescriptorWithContainerSource
|
||||
|
||||
interface IrProvider {
|
||||
@@ -601,7 +602,14 @@ open class SymbolTable(
|
||||
propertyFactory: (IrPropertySymbol) -> IrProperty = { symbol ->
|
||||
IrPropertyImpl(
|
||||
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 {
|
||||
metadata = MetadataSource.Property(symbol.descriptor)
|
||||
}
|
||||
|
||||
+1
-1
@@ -205,7 +205,7 @@ interface IrBuilderExtension {
|
||||
assert(irPropertySymbol.isBound || 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
|
||||
propertyParent.addMember(it)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user