Move property serialization to symbols

Make sure private field's wrapped descriptor is bound
This commit is contained in:
Alexander Gorshenev
2019-04-26 02:33:15 +03:00
committed by alexander-gorshenev
parent 2c026114ae
commit bd78e7e0aa
7 changed files with 185 additions and 259 deletions
@@ -95,7 +95,7 @@ class DeclarationStubGenerator(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, descriptor.original,
isDelegated = @Suppress("DEPRECATION") descriptor.isDelegated
) {
deserializer?.findDeserializedDeclaration(descriptor)
deserializer?.findDeserializedDeclaration(referenced) as? IrProperty
?: IrLazyProperty(UNDEFINED_OFFSET, UNDEFINED_OFFSET, origin, it, this, typeTranslator, bindingContext)
}
}
@@ -29,15 +29,6 @@ import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
interface IrDeserializer {
fun findDeserializedDeclaration(symbol: IrSymbol): IrDeclaration?
// We need a separate method for properties, because properties
// are treated differently in the SymbolTable.
// See SymbolTable.propertyTable and SymbolTable.referenceProperty.
// There was an attempt to solve this asymmetry in the symbol table
// using property symbols, but it was not successful.
// For now we have to live with a special treatment of properties.
// TODO: eventually get rid of this asymmetry.
fun findDeserializedDeclaration(propertyDescriptor: PropertyDescriptor): IrProperty?
fun declareForwardDeclarations()
}
@@ -127,6 +127,7 @@ enum IrSymbolKind {
ANONYMOUS_INIT_SYMBOL = 10;
STANDALONE_FIELD_SYMBOL = 11; // For fields without properties. WrappedFieldDescriptor, rather than WrappedPropertyDescriptor.
RECEIVER_PARAMETER_SYMBOL = 12; // ReceiverParameterDescriptor rather than ValueParameterDescriptor.
PROPERTY_SYMBOL = 13;
}
message IrSymbolData {
@@ -266,7 +267,7 @@ message IrPropertyReference {
optional IrSymbol setter = 3;
optional IrStatementOrigin origin = 4;
required MemberAccessCommon member_access = 5;
optional DescriptorReference descriptor_reference = 6; // IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
required IrSymbol symbol = 6;
}
message IrComposite {
@@ -584,7 +585,7 @@ message IrLocalDelegatedProperty {
}
message IrProperty {
optional DescriptorReference descriptor_reference = 1; // IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
required IrSymbol symbol = 1;
required String name = 2;
required Visibility visibility = 3;
required ModalityKind modality = 4;
@@ -439,28 +439,21 @@ abstract class IrModuleDeserializer(
)
}
private val getterToPropertyDescriptorMap = mutableMapOf<IrSimpleFunctionSymbol, WrappedPropertyDescriptor>()
private fun deserializePropertyReference(
proto: KotlinIr.IrPropertyReference,
start: Int, end: Int, type: IrType
): IrPropertyReference {
val symbol = deserializeIrSymbol(proto.symbol) as IrPropertySymbol
val field = if (proto.hasField()) deserializeIrSymbol(proto.field) as IrFieldSymbol else null
val getter = if (proto.hasGetter()) deserializeIrSymbol(proto.getter) as IrSimpleFunctionSymbol else null
val setter = if (proto.hasSetter()) deserializeIrSymbol(proto.setter) as IrSimpleFunctionSymbol else null
val origin = if (proto.hasOrigin()) deserializeIrStatementOrigin(proto.origin) else null
val descriptor =
if (proto.hasDescriptorReference())
deserializeDescriptorReference(proto.descriptorReference) as PropertyDescriptor
else
field?.descriptor as? WrappedPropertyDescriptor // If field's descriptor coincides with property's.
?: getterToPropertyDescriptorMap.getOrPut(getter!!) { WrappedPropertyDescriptor() }
val callable = IrPropertyReferenceImpl(
start, end, type,
descriptor,
symbol,
proto.memberAccess.typeArguments.typeArgumentCount,
field,
getter,
@@ -1178,44 +1171,56 @@ abstract class IrModuleDeserializer(
origin: IrDeclarationOrigin
): IrProperty {
val symbol = deserializeIrSymbol(proto.symbol) as IrPropertySymbol
val backingField =
if (proto.hasBackingField()) deserializeIrField(proto.backingField, start, end, origin) else null
val getter = if (proto.hasGetter()) deserializeIrFunction(proto.getter, start, end, origin) else null
val setter = if (proto.hasSetter()) deserializeIrFunction(proto.setter, start, end, origin) else null
backingField?.let { (it.descriptor as? WrappedFieldDescriptor)?.bind(it) }
val property =
symbolTable.declareProperty(
UNDEFINED_OFFSET, UNDEFINED_OFFSET, irrelevantOrigin,
symbol.descriptor, proto.isDelegated
) {
IrPropertyImpl(
start, end, origin,
symbol,
deserializeName(proto.name),
deserializeVisibility(proto.visibility),
deserializeModality(proto.modality),
proto.isVar,
proto.isConst,
proto.isLateinit,
proto.isDelegated,
proto.isExternal
)
}
backingField?.let {
val descriptor = it.descriptor
when (descriptor) {
is WrappedFieldDescriptor ->
descriptor.bind(it)
is WrappedPropertyDescriptor ->
// A property symbol and its field symbol share the same descriptor.
// Unfortunately symbol deserialization doesn't know anything about that.
// So we can end up with two wrapped property descriptors for property and its field.
// In that case we need to bind the field's one here.
if (symbol.descriptor != descriptor) descriptor.bind(property)
}
}
getter?.let { (it.descriptor as? WrappedSimpleFunctionDescriptor)?.bind(it) }
setter?.let { (it.descriptor as? WrappedSimpleFunctionDescriptor)?.bind(it) }
val descriptor =
if (proto.hasDescriptorReference())
deserializeDescriptorReference(proto.descriptorReference) as PropertyDescriptor
else
backingField?.descriptor as? WrappedPropertyDescriptor // If field's descriptor coincides with property's.
?: getterToPropertyDescriptorMap.getOrPut(getter!!.symbol) { WrappedPropertyDescriptor() }
val property = IrPropertyImpl(
start, end, origin,
descriptor,
deserializeName(proto.name),
deserializeVisibility(proto.visibility),
deserializeModality(proto.modality),
proto.isVar,
proto.isConst,
proto.isLateinit,
proto.isDelegated,
proto.isExternal
)
symbolTable.referenceProperty(descriptor, { property })
property.backingField = backingField
property.getter = getter
property.setter = setter
backingField?.let { it.correspondingProperty = property }
getter?.let { it.correspondingProperty = property }
setter?.let { it.correspondingProperty = property }
backingField?.let { it.correspondingPropertySymbol = symbol }
getter?.let { it.correspondingPropertySymbol = symbol }
setter?.let { it.correspondingPropertySymbol = symbol }
return property
}
@@ -1231,18 +1236,15 @@ abstract class IrModuleDeserializer(
private val allKnownDeclarationOrigins =
IrDeclarationOrigin::class.nestedClasses.toList() + DeclarationFactory.FIELD_FOR_OUTER_THIS::class
<<<<<<< HEAD
val originIndex = allKnownOrigins.map { it.objectInstance as IrDeclarationOriginImpl }.associateBy { it.name }
fun deserializeIrDeclarationOrigin(proto: KotlinIr.IrDeclarationOrigin): IrDeclarationOriginImpl {
val originName = deserializeString(proto.custom)
return originIndex[originName] ?: object : IrDeclarationOriginImpl(originName) {}
=======
val declarationOriginIndex =
allKnownDeclarationOrigins.map { it.objectInstance as IrDeclarationOriginImpl }.associateBy { it.name }
fun deserializeIrDeclarationOrigin(proto: KotlinIr.IrDeclarationOrigin) =
declarationOriginIndex[deserializeString(proto.custom)]!!
fun deserializeIrDeclarationOrigin(proto: KotlinIr.IrDeclarationOrigin): IrDeclarationOriginImpl {
val originName = deserializeString(proto.custom)
return declarationOriginIndex[originName] ?: object : IrDeclarationOriginImpl(originName) {}
}
private val allKnownStatementOrigins =
IrStatementOrigin::class.nestedClasses.toList()
@@ -1259,7 +1261,6 @@ abstract class IrModuleDeserializer(
else -> statementOriginIndex[it] ?: error("Unexpected statement origin: $it")
}
}
>>>>>>> Introduced proper IrStatementOrigin serialization.
}
open fun deserializeDeclaration(proto: KotlinIr.IrDeclaration, parent: IrDeclarationParent?): IrDeclaration {
@@ -120,6 +120,8 @@ open class IrModuleSerializer(
KotlinIr.IrSymbolKind.STANDALONE_FIELD_SYMBOL
else
KotlinIr.IrSymbolKind.FIELD_SYMBOL
is IrPropertySymbol ->
KotlinIr.IrSymbolKind.PROPERTY_SYMBOL
else ->
TODO("Unexpected symbol kind: $symbol")
}
@@ -434,13 +436,12 @@ open class IrModuleSerializer(
private fun serializePropertyReference(callable: IrPropertyReference): KotlinIr.IrPropertyReference {
val proto = KotlinIr.IrPropertyReference.newBuilder()
.setMemberAccess(serializeMemberAccessCommon(callable))
.setSymbol(serializeIrSymbol(callable.symbol))
callable.origin?.let { proto.origin = serializeIrStatementOrigin(it) }
callable.field?.let { proto.field = serializeIrSymbol(it) }
callable.getter?.let { proto.getter = serializeIrSymbol(it) }
callable.setter?.let { proto.setter = serializeIrSymbol(it) }
val property = callable.getter!!.owner.correspondingProperty!!
descriptorReferenceSerializer.serializeDescriptorReference(property)?.let { proto.setDescriptorReference(it) }
return proto.build()
}
@@ -998,8 +999,7 @@ open class IrModuleSerializer(
.setIsLateinit(property.isLateinit)
.setIsDelegated(property.isDelegated)
.setIsExternal(property.isExternal)
descriptorReferenceSerializer.serializeDescriptorReference(property)?.let { proto.setDescriptorReference(it) }
.setSymbol(serializeIrSymbol(property.symbol))
val backingField = property.backingField
val getter = property.getter
@@ -359,6 +359,10 @@ public final class KotlinIr {
* </pre>
*/
RECEIVER_PARAMETER_SYMBOL(11, 12),
/**
* <code>PROPERTY_SYMBOL = 13;</code>
*/
PROPERTY_SYMBOL(12, 13),
;
/**
@@ -417,6 +421,10 @@ public final class KotlinIr {
* </pre>
*/
public static final int RECEIVER_PARAMETER_SYMBOL_VALUE = 12;
/**
* <code>PROPERTY_SYMBOL = 13;</code>
*/
public static final int PROPERTY_SYMBOL_VALUE = 13;
public final int getNumber() { return value; }
@@ -435,6 +443,7 @@ public final class KotlinIr {
case 10: return ANONYMOUS_INIT_SYMBOL;
case 11: return STANDALONE_FIELD_SYMBOL;
case 12: return RECEIVER_PARAMETER_SYMBOL;
case 13: return PROPERTY_SYMBOL;
default: return null;
}
}
@@ -21057,21 +21066,13 @@ public final class KotlinIr {
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.MemberAccessCommon getMemberAccess();
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
boolean hasDescriptorReference();
boolean hasSymbol();
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference getDescriptorReference();
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol getSymbol();
}
/**
* Protobuf type {@code org.jetbrains.kotlin.backend.common.serialization.IrPropertyReference}
@@ -21189,14 +21190,14 @@ public final class KotlinIr {
break;
}
case 50: {
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.Builder subBuilder = null;
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.Builder subBuilder = null;
if (((bitField0_ & 0x00000020) == 0x00000020)) {
subBuilder = descriptorReference_.toBuilder();
subBuilder = symbol_.toBuilder();
}
descriptorReference_ = input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.PARSER, extensionRegistry);
symbol_ = input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.PARSER, extensionRegistry);
if (subBuilder != null) {
subBuilder.mergeFrom(descriptorReference_);
descriptorReference_ = subBuilder.buildPartial();
subBuilder.mergeFrom(symbol_);
symbol_ = subBuilder.buildPartial();
}
bitField0_ |= 0x00000020;
break;
@@ -21310,27 +21311,19 @@ public final class KotlinIr {
return memberAccess_;
}
public static final int DESCRIPTOR_REFERENCE_FIELD_NUMBER = 6;
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference descriptorReference_;
public static final int SYMBOL_FIELD_NUMBER = 6;
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol symbol_;
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public boolean hasDescriptorReference() {
public boolean hasSymbol() {
return ((bitField0_ & 0x00000020) == 0x00000020);
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference getDescriptorReference() {
return descriptorReference_;
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol getSymbol() {
return symbol_;
}
private void initFields() {
@@ -21339,7 +21332,7 @@ public final class KotlinIr {
setter_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
origin_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrStatementOrigin.getDefaultInstance();
memberAccess_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.MemberAccessCommon.getDefaultInstance();
descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
}
private byte memoizedIsInitialized = -1;
public final boolean isInitialized() {
@@ -21351,6 +21344,10 @@ public final class KotlinIr {
memoizedIsInitialized = 0;
return false;
}
if (!hasSymbol()) {
memoizedIsInitialized = 0;
return false;
}
if (hasField()) {
if (!getField().isInitialized()) {
memoizedIsInitialized = 0;
@@ -21379,11 +21376,9 @@ public final class KotlinIr {
memoizedIsInitialized = 0;
return false;
}
if (hasDescriptorReference()) {
if (!getDescriptorReference().isInitialized()) {
memoizedIsInitialized = 0;
return false;
}
if (!getSymbol().isInitialized()) {
memoizedIsInitialized = 0;
return false;
}
memoizedIsInitialized = 1;
return true;
@@ -21408,7 +21403,7 @@ public final class KotlinIr {
output.writeMessage(5, memberAccess_);
}
if (((bitField0_ & 0x00000020) == 0x00000020)) {
output.writeMessage(6, descriptorReference_);
output.writeMessage(6, symbol_);
}
output.writeRawBytes(unknownFields);
}
@@ -21441,7 +21436,7 @@ public final class KotlinIr {
}
if (((bitField0_ & 0x00000020) == 0x00000020)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(6, descriptorReference_);
.computeMessageSize(6, symbol_);
}
size += unknownFields.size();
memoizedSerializedSize = size;
@@ -21547,7 +21542,7 @@ public final class KotlinIr {
bitField0_ = (bitField0_ & ~0x00000008);
memberAccess_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.MemberAccessCommon.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000010);
descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000020);
return this;
}
@@ -21595,7 +21590,7 @@ public final class KotlinIr {
if (((from_bitField0_ & 0x00000020) == 0x00000020)) {
to_bitField0_ |= 0x00000020;
}
result.descriptorReference_ = descriptorReference_;
result.symbol_ = symbol_;
result.bitField0_ = to_bitField0_;
return result;
}
@@ -21617,8 +21612,8 @@ public final class KotlinIr {
if (other.hasMemberAccess()) {
mergeMemberAccess(other.getMemberAccess());
}
if (other.hasDescriptorReference()) {
mergeDescriptorReference(other.getDescriptorReference());
if (other.hasSymbol()) {
mergeSymbol(other.getSymbol());
}
setUnknownFields(
getUnknownFields().concat(other.unknownFields));
@@ -21630,6 +21625,10 @@ public final class KotlinIr {
return false;
}
if (!hasSymbol()) {
return false;
}
if (hasField()) {
if (!getField().isInitialized()) {
@@ -21658,11 +21657,9 @@ public final class KotlinIr {
return false;
}
if (hasDescriptorReference()) {
if (!getDescriptorReference().isInitialized()) {
return false;
}
if (!getSymbol().isInitialized()) {
return false;
}
return true;
}
@@ -21986,85 +21983,61 @@ public final class KotlinIr {
return this;
}
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public boolean hasDescriptorReference() {
public boolean hasSymbol() {
return ((bitField0_ & 0x00000020) == 0x00000020);
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference getDescriptorReference() {
return descriptorReference_;
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol getSymbol() {
return symbol_;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public Builder setDescriptorReference(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference value) {
public Builder setSymbol(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol value) {
if (value == null) {
throw new NullPointerException();
}
descriptorReference_ = value;
symbol_ = value;
bitField0_ |= 0x00000020;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public Builder setDescriptorReference(
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.Builder builderForValue) {
descriptorReference_ = builderForValue.build();
public Builder setSymbol(
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.Builder builderForValue) {
symbol_ = builderForValue.build();
bitField0_ |= 0x00000020;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public Builder mergeDescriptorReference(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference value) {
public Builder mergeSymbol(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol value) {
if (((bitField0_ & 0x00000020) == 0x00000020) &&
descriptorReference_ != org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance()) {
descriptorReference_ =
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.newBuilder(descriptorReference_).mergeFrom(value).buildPartial();
symbol_ != org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance()) {
symbol_ =
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.newBuilder(symbol_).mergeFrom(value).buildPartial();
} else {
descriptorReference_ = value;
symbol_ = value;
}
bitField0_ |= 0x00000020;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 6;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 6;</code>
*/
public Builder clearDescriptorReference() {
descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
public Builder clearSymbol() {
symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000020);
return this;
@@ -50552,21 +50525,13 @@ public final class KotlinIr {
org.jetbrains.kotlin.protobuf.MessageLiteOrBuilder {
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
boolean hasDescriptorReference();
boolean hasSymbol();
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference getDescriptorReference();
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol getSymbol();
/**
* <code>required .org.jetbrains.kotlin.backend.common.serialization.String name = 2;</code>
@@ -50718,14 +50683,14 @@ public final class KotlinIr {
break;
}
case 10: {
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.Builder subBuilder = null;
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.Builder subBuilder = null;
if (((bitField0_ & 0x00000001) == 0x00000001)) {
subBuilder = descriptorReference_.toBuilder();
subBuilder = symbol_.toBuilder();
}
descriptorReference_ = input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.PARSER, extensionRegistry);
symbol_ = input.readMessage(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.PARSER, extensionRegistry);
if (subBuilder != null) {
subBuilder.mergeFrom(descriptorReference_);
descriptorReference_ = subBuilder.buildPartial();
subBuilder.mergeFrom(symbol_);
symbol_ = subBuilder.buildPartial();
}
bitField0_ |= 0x00000001;
break;
@@ -50866,27 +50831,19 @@ public final class KotlinIr {
}
private int bitField0_;
public static final int DESCRIPTOR_REFERENCE_FIELD_NUMBER = 1;
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference descriptorReference_;
public static final int SYMBOL_FIELD_NUMBER = 1;
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol symbol_;
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public boolean hasDescriptorReference() {
public boolean hasSymbol() {
return ((bitField0_ & 0x00000001) == 0x00000001);
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference getDescriptorReference() {
return descriptorReference_;
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol getSymbol() {
return symbol_;
}
public static final int NAME_FIELD_NUMBER = 2;
@@ -51055,7 +51012,7 @@ public final class KotlinIr {
}
private void initFields() {
descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
name_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.String.getDefaultInstance();
visibility_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.Visibility.getDefaultInstance();
modality_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.ModalityKind.FINAL_MODALITY;
@@ -51074,6 +51031,10 @@ public final class KotlinIr {
if (isInitialized == 1) return true;
if (isInitialized == 0) return false;
if (!hasSymbol()) {
memoizedIsInitialized = 0;
return false;
}
if (!hasName()) {
memoizedIsInitialized = 0;
return false;
@@ -51106,11 +51067,9 @@ public final class KotlinIr {
memoizedIsInitialized = 0;
return false;
}
if (hasDescriptorReference()) {
if (!getDescriptorReference().isInitialized()) {
memoizedIsInitialized = 0;
return false;
}
if (!getSymbol().isInitialized()) {
memoizedIsInitialized = 0;
return false;
}
if (!getName().isInitialized()) {
memoizedIsInitialized = 0;
@@ -51146,7 +51105,7 @@ public final class KotlinIr {
throws java.io.IOException {
getSerializedSize();
if (((bitField0_ & 0x00000001) == 0x00000001)) {
output.writeMessage(1, descriptorReference_);
output.writeMessage(1, symbol_);
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
output.writeMessage(2, name_);
@@ -51192,7 +51151,7 @@ public final class KotlinIr {
size = 0;
if (((bitField0_ & 0x00000001) == 0x00000001)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
.computeMessageSize(1, descriptorReference_);
.computeMessageSize(1, symbol_);
}
if (((bitField0_ & 0x00000002) == 0x00000002)) {
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
@@ -51332,7 +51291,7 @@ public final class KotlinIr {
public Builder clear() {
super.clear();
descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000001);
name_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.String.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000002);
@@ -51382,7 +51341,7 @@ public final class KotlinIr {
if (((from_bitField0_ & 0x00000001) == 0x00000001)) {
to_bitField0_ |= 0x00000001;
}
result.descriptorReference_ = descriptorReference_;
result.symbol_ = symbol_;
if (((from_bitField0_ & 0x00000002) == 0x00000002)) {
to_bitField0_ |= 0x00000002;
}
@@ -51433,8 +51392,8 @@ public final class KotlinIr {
public Builder mergeFrom(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrProperty other) {
if (other == org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrProperty.getDefaultInstance()) return this;
if (other.hasDescriptorReference()) {
mergeDescriptorReference(other.getDescriptorReference());
if (other.hasSymbol()) {
mergeSymbol(other.getSymbol());
}
if (other.hasName()) {
mergeName(other.getName());
@@ -51475,6 +51434,10 @@ public final class KotlinIr {
}
public final boolean isInitialized() {
if (!hasSymbol()) {
return false;
}
if (!hasName()) {
return false;
@@ -51507,11 +51470,9 @@ public final class KotlinIr {
return false;
}
if (hasDescriptorReference()) {
if (!getDescriptorReference().isInitialized()) {
return false;
}
if (!getSymbol().isInitialized()) {
return false;
}
if (!getName().isInitialized()) {
@@ -51561,85 +51522,61 @@ public final class KotlinIr {
}
private int bitField0_;
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
private org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public boolean hasDescriptorReference() {
public boolean hasSymbol() {
return ((bitField0_ & 0x00000001) == 0x00000001);
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference getDescriptorReference() {
return descriptorReference_;
public org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol getSymbol() {
return symbol_;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public Builder setDescriptorReference(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference value) {
public Builder setSymbol(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol value) {
if (value == null) {
throw new NullPointerException();
}
descriptorReference_ = value;
symbol_ = value;
bitField0_ |= 0x00000001;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public Builder setDescriptorReference(
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.Builder builderForValue) {
descriptorReference_ = builderForValue.build();
public Builder setSymbol(
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.Builder builderForValue) {
symbol_ = builderForValue.build();
bitField0_ |= 0x00000001;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public Builder mergeDescriptorReference(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference value) {
public Builder mergeSymbol(org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol value) {
if (((bitField0_ & 0x00000001) == 0x00000001) &&
descriptorReference_ != org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance()) {
descriptorReference_ =
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.newBuilder(descriptorReference_).mergeFrom(value).buildPartial();
symbol_ != org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance()) {
symbol_ =
org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.newBuilder(symbol_).mergeFrom(value).buildPartial();
} else {
descriptorReference_ = value;
symbol_ = value;
}
bitField0_ |= 0x00000001;
return this;
}
/**
* <code>optional .org.jetbrains.kotlin.backend.common.serialization.DescriptorReference descriptor_reference = 1;</code>
*
* <pre>
* IrProperty doesn't have a symbol at all. Preserve this rudiment for now.
* </pre>
* <code>required .org.jetbrains.kotlin.backend.common.serialization.IrSymbol symbol = 1;</code>
*/
public Builder clearDescriptorReference() {
descriptorReference_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.DescriptorReference.getDefaultInstance();
public Builder clearSymbol() {
symbol_ = org.jetbrains.kotlin.backend.common.serialization.KotlinIr.IrSymbol.getDefaultInstance();
bitField0_ = (bitField0_ & ~0x00000001);
return this;
@@ -125,6 +125,10 @@ abstract class KotlinIrLinker(
IrValueParameterSymbolImpl(
descriptor as ParameterDescriptor? ?: WrappedReceiverParameterDescriptor()
)
KotlinIr.IrSymbolKind.PROPERTY_SYMBOL ->
symbolTable.referenceProperty(
descriptor as PropertyDescriptor? ?: WrappedPropertyDescriptor()
)
else -> TODO("Unexpected classifier symbol kind: ${proto.kind}")
}
@@ -365,14 +369,6 @@ abstract class KotlinIrLinker(
return symbol.owner as IrDeclaration
}
override fun findDeserializedDeclaration(propertyDescriptor: PropertyDescriptor): IrProperty? {
val topLevelDesecriptor = findDeserializedDeclarationForDescriptor(propertyDescriptor)
if (topLevelDesecriptor == null) return null
return symbolTable.propertyTable[propertyDescriptor]
?: error("findDeserializedDeclaration: property descriptor $propertyDescriptor} is not present in propertyTable after deserialization}")
}
// TODO: This is Native specific. Eliminate me.
override fun declareForwardDeclarations() {
if (forwardModuleDescriptor == null) return