JVM: support on-the-fly generation of property delegates in metadata
Optimizations may remove the `x$delegate` field, in which case there
should be a `getX$delegate` method to reconstruct the value if needed
due to a call to `KProperty{0,1,2}.getDelegate`. We need to know the
signature of this method somehow.
This commit is contained in:
@@ -86,6 +86,10 @@ message JvmPropertySignature {
|
||||
|
||||
optional JvmMethodSignature getter = 3;
|
||||
optional JvmMethodSignature setter = 4;
|
||||
|
||||
// The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
// then call this method instead
|
||||
optional JvmMethodSignature delegate_method = 5;
|
||||
}
|
||||
|
||||
extend Constructor {
|
||||
|
||||
@@ -3068,6 +3068,25 @@ public final class JvmProtoBuf {
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature setter = 4;</code>
|
||||
*/
|
||||
org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature getSetter();
|
||||
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
boolean hasDelegateMethod();
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature getDelegateMethod();
|
||||
}
|
||||
/**
|
||||
* Protobuf type {@code org.jetbrains.kotlin.metadata.jvm.JvmPropertySignature}
|
||||
@@ -3171,6 +3190,19 @@ public final class JvmProtoBuf {
|
||||
bitField0_ |= 0x00000008;
|
||||
break;
|
||||
}
|
||||
case 42: {
|
||||
org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.Builder subBuilder = null;
|
||||
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
subBuilder = delegateMethod_.toBuilder();
|
||||
}
|
||||
delegateMethod_ = input.readMessage(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.PARSER, extensionRegistry);
|
||||
if (subBuilder != null) {
|
||||
subBuilder.mergeFrom(delegateMethod_);
|
||||
delegateMethod_ = subBuilder.buildPartial();
|
||||
}
|
||||
bitField0_ |= 0x00000010;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (org.jetbrains.kotlin.protobuf.InvalidProtocolBufferException e) {
|
||||
@@ -3273,11 +3305,37 @@ public final class JvmProtoBuf {
|
||||
return setter_;
|
||||
}
|
||||
|
||||
public static final int DELEGATE_METHOD_FIELD_NUMBER = 5;
|
||||
private org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature delegateMethod_;
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public boolean hasDelegateMethod() {
|
||||
return ((bitField0_ & 0x00000010) == 0x00000010);
|
||||
}
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature getDelegateMethod() {
|
||||
return delegateMethod_;
|
||||
}
|
||||
|
||||
private void initFields() {
|
||||
field_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmFieldSignature.getDefaultInstance();
|
||||
syntheticMethod_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
getter_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
setter_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
delegateMethod_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
}
|
||||
private byte memoizedIsInitialized = -1;
|
||||
public final boolean isInitialized() {
|
||||
@@ -3304,6 +3362,9 @@ public final class JvmProtoBuf {
|
||||
if (((bitField0_ & 0x00000008) == 0x00000008)) {
|
||||
output.writeMessage(4, setter_);
|
||||
}
|
||||
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
output.writeMessage(5, delegateMethod_);
|
||||
}
|
||||
output.writeRawBytes(unknownFields);
|
||||
}
|
||||
|
||||
@@ -3329,6 +3390,10 @@ public final class JvmProtoBuf {
|
||||
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
.computeMessageSize(4, setter_);
|
||||
}
|
||||
if (((bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
size += org.jetbrains.kotlin.protobuf.CodedOutputStream
|
||||
.computeMessageSize(5, delegateMethod_);
|
||||
}
|
||||
size += unknownFields.size();
|
||||
memoizedSerializedSize = size;
|
||||
return size;
|
||||
@@ -3431,6 +3496,8 @@ public final class JvmProtoBuf {
|
||||
bitField0_ = (bitField0_ & ~0x00000004);
|
||||
setter_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
bitField0_ = (bitField0_ & ~0x00000008);
|
||||
delegateMethod_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
bitField0_ = (bitField0_ & ~0x00000010);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -3470,6 +3537,10 @@ public final class JvmProtoBuf {
|
||||
to_bitField0_ |= 0x00000008;
|
||||
}
|
||||
result.setter_ = setter_;
|
||||
if (((from_bitField0_ & 0x00000010) == 0x00000010)) {
|
||||
to_bitField0_ |= 0x00000010;
|
||||
}
|
||||
result.delegateMethod_ = delegateMethod_;
|
||||
result.bitField0_ = to_bitField0_;
|
||||
return result;
|
||||
}
|
||||
@@ -3488,6 +3559,9 @@ public final class JvmProtoBuf {
|
||||
if (other.hasSetter()) {
|
||||
mergeSetter(other.getSetter());
|
||||
}
|
||||
if (other.hasDelegateMethod()) {
|
||||
mergeDelegateMethod(other.getDelegateMethod());
|
||||
}
|
||||
setUnknownFields(
|
||||
getUnknownFields().concat(other.unknownFields));
|
||||
return this;
|
||||
@@ -3780,6 +3854,96 @@ public final class JvmProtoBuf {
|
||||
return this;
|
||||
}
|
||||
|
||||
private org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature delegateMethod_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public boolean hasDelegateMethod() {
|
||||
return ((bitField0_ & 0x00000010) == 0x00000010);
|
||||
}
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature getDelegateMethod() {
|
||||
return delegateMethod_;
|
||||
}
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public Builder setDelegateMethod(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature value) {
|
||||
if (value == null) {
|
||||
throw new NullPointerException();
|
||||
}
|
||||
delegateMethod_ = value;
|
||||
|
||||
bitField0_ |= 0x00000010;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public Builder setDelegateMethod(
|
||||
org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.Builder builderForValue) {
|
||||
delegateMethod_ = builderForValue.build();
|
||||
|
||||
bitField0_ |= 0x00000010;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public Builder mergeDelegateMethod(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature value) {
|
||||
if (((bitField0_ & 0x00000010) == 0x00000010) &&
|
||||
delegateMethod_ != org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance()) {
|
||||
delegateMethod_ =
|
||||
org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.newBuilder(delegateMethod_).mergeFrom(value).buildPartial();
|
||||
} else {
|
||||
delegateMethod_ = value;
|
||||
}
|
||||
|
||||
bitField0_ |= 0x00000010;
|
||||
return this;
|
||||
}
|
||||
/**
|
||||
* <code>optional .org.jetbrains.kotlin.metadata.jvm.JvmMethodSignature delegate_method = 5;</code>
|
||||
*
|
||||
* <pre>
|
||||
* The delegate field of delegated properties may be optimized out; `getDelegate` should
|
||||
* then call this method instead
|
||||
* </pre>
|
||||
*/
|
||||
public Builder clearDelegateMethod() {
|
||||
delegateMethod_ = org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.JvmMethodSignature.getDefaultInstance();
|
||||
|
||||
bitField0_ = (bitField0_ & ~0x00000010);
|
||||
return this;
|
||||
}
|
||||
|
||||
// @@protoc_insertion_point(builder_scope:org.jetbrains.kotlin.metadata.jvm.JvmPropertySignature)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user