Drop 'index' JVM binary format extension
Compute the JVM parameer index manually instead
This commit is contained in:
@@ -109,11 +109,6 @@ extend TypeParameter {
|
||||
repeated Annotation type_parameter_annotation = 100;
|
||||
}
|
||||
|
||||
extend ValueParameter {
|
||||
// Index of the corresponding parameter of this method in JVM (counting receiver parameters, enum constructor synthetic parameters, etc.)
|
||||
optional int32 index = 100;
|
||||
}
|
||||
|
||||
extend Class {
|
||||
repeated Annotation class_annotation = 100;
|
||||
}
|
||||
|
||||
+18
-4
@@ -17,6 +17,7 @@
|
||||
package org.jetbrains.kotlin.load.kotlin
|
||||
|
||||
import com.google.protobuf.MessageLite
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.SourceElement
|
||||
import org.jetbrains.kotlin.load.java.JvmAbi
|
||||
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
|
||||
@@ -26,7 +27,6 @@ import org.jetbrains.kotlin.serialization.ProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.deserialization.*
|
||||
import org.jetbrains.kotlin.serialization.jvm.ClassMapperLite
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.index
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.propertySignature
|
||||
import org.jetbrains.kotlin.serialization.jvm.JvmProtoBufUtil
|
||||
import org.jetbrains.kotlin.storage.StorageManager
|
||||
@@ -139,7 +139,7 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C
|
||||
): List<A> {
|
||||
val methodSignature = getCallableSignature(message, container.nameResolver, container.typeTable, kind)
|
||||
if (methodSignature != null) {
|
||||
val index = if (proto.hasExtension(index)) proto.getExtension(index) else parameterIndex
|
||||
val index = parameterIndex + computeJvmParameterIndexShift(container, message)
|
||||
val paramSignature = MemberSignature.fromMethodSignatureAndParameterIndex(methodSignature, index)
|
||||
return findClassAndLoadMemberAnnotations(container, paramSignature)
|
||||
}
|
||||
@@ -147,6 +147,19 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C
|
||||
return listOf()
|
||||
}
|
||||
|
||||
private fun computeJvmParameterIndexShift(container: ProtoContainer, message: MessageLite): Int {
|
||||
return when (message) {
|
||||
is ProtoBuf.Function -> if (message.hasReceiver()) 1 else 0
|
||||
is ProtoBuf.Property -> if (message.hasReceiver()) 1 else 0
|
||||
is ProtoBuf.Constructor -> when {
|
||||
(container as ProtoContainer.Class).kind == ProtoBuf.Class.Kind.ENUM_CLASS -> 2
|
||||
container.isInner -> 1
|
||||
else -> 0
|
||||
}
|
||||
else -> throw UnsupportedOperationException("Unsupported message: ${message.javaClass}")
|
||||
}
|
||||
}
|
||||
|
||||
override fun loadExtensionReceiverParameterAnnotations(
|
||||
container: ProtoContainer,
|
||||
message: MessageLite,
|
||||
@@ -187,7 +200,8 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C
|
||||
}
|
||||
|
||||
if (container is ProtoContainer.Class) {
|
||||
if (field && container.isCompanionOfClass) {
|
||||
if (field && container.kind == ProtoBuf.Class.Kind.COMPANION_OBJECT &&
|
||||
(container.outerClassKind == ClassKind.CLASS || container.outerClassKind == ClassKind.ENUM_CLASS)) {
|
||||
// Backing fields of properties of a companion object in a class are generated in the outer class
|
||||
return kotlinClassFinder.findKotlinClass(container.classId.outerClassId)
|
||||
}
|
||||
@@ -199,7 +213,7 @@ public abstract class AbstractBinaryClassAnnotationAndConstantLoader<A : Any, C
|
||||
}
|
||||
|
||||
private fun getImplClassName(container: ProtoContainer, property: Boolean): ClassId? {
|
||||
if (property && container is ProtoContainer.Class && container.isInterface) {
|
||||
if (property && container is ProtoContainer.Class && container.kind == ProtoBuf.Class.Kind.INTERFACE) {
|
||||
return container.classId.createNestedClassId(Name.identifier(JvmAbi.DEFAULT_IMPLS_CLASS_NAME))
|
||||
}
|
||||
return ((container as? ProtoContainer.Package)?.packagePartSource as? JvmPackagePartSource)?.classId
|
||||
|
||||
-16
@@ -13,7 +13,6 @@ public final class JvmProtoBuf {
|
||||
registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.typeAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.isRaw);
|
||||
registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.typeParameterAnnotation);
|
||||
registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.index);
|
||||
registry.add(org.jetbrains.kotlin.serialization.jvm.JvmProtoBuf.classAnnotation);
|
||||
}
|
||||
public interface StringTableTypesOrBuilder
|
||||
@@ -3802,21 +3801,6 @@ public final class JvmProtoBuf {
|
||||
100,
|
||||
com.google.protobuf.WireFormat.FieldType.MESSAGE,
|
||||
false);
|
||||
public static final int INDEX_FIELD_NUMBER = 100;
|
||||
/**
|
||||
* <code>extend .org.jetbrains.kotlin.serialization.ValueParameter { ... }</code>
|
||||
*/
|
||||
public static final
|
||||
com.google.protobuf.GeneratedMessageLite.GeneratedExtension<
|
||||
org.jetbrains.kotlin.serialization.ProtoBuf.ValueParameter,
|
||||
java.lang.Integer> index = com.google.protobuf.GeneratedMessageLite
|
||||
.newSingularGeneratedExtension(
|
||||
org.jetbrains.kotlin.serialization.ProtoBuf.ValueParameter.getDefaultInstance(),
|
||||
0,
|
||||
null,
|
||||
null,
|
||||
100,
|
||||
com.google.protobuf.WireFormat.FieldType.INT32);
|
||||
public static final int CLASS_ANNOTATION_FIELD_NUMBER = 100;
|
||||
/**
|
||||
* <code>extend .org.jetbrains.kotlin.serialization.Class { ... }</code>
|
||||
|
||||
Reference in New Issue
Block a user