diff --git a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt
index 0fb64c72cf0..713a5e2bf80 100644
--- a/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt
+++ b/build-common/src/org/jetbrains/kotlin/incremental/ProtoCompareGenerated.kt
@@ -418,6 +418,11 @@ open class ProtoCompareGenerated(val oldNameResolver: NameResolver, val newNameR
if (!checkEquals(old.getExtension(JvmProtoBuf.methodSignature), new.getExtension(JvmProtoBuf.methodSignature))) return false
}
+ if (old.hasExtension(JvmProtoBuf.lambdaClassOriginName) != new.hasExtension(JvmProtoBuf.lambdaClassOriginName)) return false
+ if (old.hasExtension(JvmProtoBuf.lambdaClassOriginName)) {
+ if (!checkStringEquals(old.getExtension(JvmProtoBuf.lambdaClassOriginName), new.getExtension(JvmProtoBuf.lambdaClassOriginName))) return false
+ }
+
if (old.getExtensionCount(JsProtoBuf.functionAnnotation) != new.getExtensionCount(JsProtoBuf.functionAnnotation)) {
return false
}
@@ -1638,6 +1643,10 @@ fun ProtoBuf.Function.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int)
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.methodSignature).hashCode(stringIndexes, fqNameIndexes)
}
+ if (hasExtension(JvmProtoBuf.lambdaClassOriginName)) {
+ hashCode = 31 * hashCode + stringIndexes(getExtension(JvmProtoBuf.lambdaClassOriginName))
+ }
+
for(i in 0..getExtensionCount(JsProtoBuf.functionAnnotation) - 1) {
hashCode = 31 * hashCode + getExtension(JsProtoBuf.functionAnnotation, i).hashCode(stringIndexes, fqNameIndexes)
}
diff --git a/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java b/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java
index 6cf872f3600..24c61b2f684 100644
--- a/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java
+++ b/build-common/test/org/jetbrains/kotlin/serialization/jvm/DebugJvmProtoBuf.java
@@ -9,6 +9,7 @@ public final class DebugJvmProtoBuf {
org.jetbrains.kotlin.protobuf.ExtensionRegistry registry) {
registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.constructorSignature);
registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.methodSignature);
+ registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.lambdaClassOriginName);
registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.propertySignature);
registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.typeAnnotation);
registry.add(org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.isRaw);
@@ -4530,6 +4531,22 @@ public final class DebugJvmProtoBuf {
.newFileScopedGeneratedExtension(
org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.JvmMethodSignature.class,
org.jetbrains.kotlin.serialization.jvm.DebugJvmProtoBuf.JvmMethodSignature.getDefaultInstance());
+ public static final int LAMBDA_CLASS_ORIGIN_NAME_FIELD_NUMBER = 101;
+ /**
+ * extend .org.jetbrains.kotlin.serialization.Function { ... }
+ *
+ *
+ * For lambdas from bodies of inline functions copied to the use site, the JVM internal name of the original + * lambda class this class is copied from + *+ */ + public static final + org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension< + org.jetbrains.kotlin.serialization.DebugProtoBuf.Function, + java.lang.Integer> lambdaClassOriginName = org.jetbrains.kotlin.protobuf.GeneratedMessage + .newFileScopedGeneratedExtension( + java.lang.Integer.class, + null); public static final int PROPERTY_SIGNATURE_FIELD_NUMBER = 100; /** *
extend .org.jetbrains.kotlin.serialization.Property { ... }
@@ -4705,31 +4722,33 @@ public final class DebugJvmProtoBuf {
"JvmMethodSignature:\202\001\n\020method_signature\022" +
",.org.jetbrains.kotlin.serialization.Fun" +
"ction\030d \001(\0132:.org.jetbrains.kotlin.seria" +
- "lization.jvm.JvmMethodSignature:\206\001\n\022prop" +
- "erty_signature\022,.org.jetbrains.kotlin.se" +
- "rialization.Property\030d \001(\0132<.org.jetbrai" +
- "ns.kotlin.serialization.jvm.JvmPropertyS" +
- "ignature:q\n\017type_annotation\022(.org.jetbra" +
- "ins.kotlin.serialization.Type\030d \003(\0132..or" +
- "g.jetbrains.kotlin.serialization.Annotat",
- "ion:8\n\006is_raw\022(.org.jetbrains.kotlin.ser" +
- "ialization.Type\030e \001(\010:\204\001\n\031type_parameter" +
- "_annotation\0221.org.jetbrains.kotlin.seria" +
- "lization.TypeParameter\030d \003(\0132..org.jetbr" +
- "ains.kotlin.serialization.Annotation:J\n\021" +
- "class_module_name\022).org.jetbrains.kotlin" +
- ".serialization.Class\030e \001(\005B\004\230\265\030\001:u\n\024clas" +
- "s_local_variable\022).org.jetbrains.kotlin." +
- "serialization.Class\030f \003(\0132,.org.jetbrain" +
- "s.kotlin.serialization.Property:U\n\034anony",
- "mous_object_origin_name\022).org.jetbrains." +
- "kotlin.serialization.Class\030g \001(\005B\004\230\265\030\001:N" +
- "\n\023package_module_name\022+.org.jetbrains.ko" +
- "tlin.serialization.Package\030e \001(\005B\004\230\265\030\001:y" +
- "\n\026package_local_variable\022+.org.jetbrains" +
- ".kotlin.serialization.Package\030f \003(\0132,.or" +
- "g.jetbrains.kotlin.serialization.Propert" +
- "yB\022B\020DebugJvmProtoBuf"
+ "lization.jvm.JvmMethodSignature:T\n\030lambd" +
+ "a_class_origin_name\022,.org.jetbrains.kotl" +
+ "in.serialization.Function\030e \001(\005B\004\230\265\030\001:\206\001" +
+ "\n\022property_signature\022,.org.jetbrains.kot" +
+ "lin.serialization.Property\030d \001(\0132<.org.j" +
+ "etbrains.kotlin.serialization.jvm.JvmPro" +
+ "pertySignature:q\n\017type_annotation\022(.org.",
+ "jetbrains.kotlin.serialization.Type\030d \003(" +
+ "\0132..org.jetbrains.kotlin.serialization.A" +
+ "nnotation:8\n\006is_raw\022(.org.jetbrains.kotl" +
+ "in.serialization.Type\030e \001(\010:\204\001\n\031type_par" +
+ "ameter_annotation\0221.org.jetbrains.kotlin" +
+ ".serialization.TypeParameter\030d \003(\0132..org" +
+ ".jetbrains.kotlin.serialization.Annotati" +
+ "on:J\n\021class_module_name\022).org.jetbrains." +
+ "kotlin.serialization.Class\030e \001(\005B\004\230\265\030\001:u" +
+ "\n\024class_local_variable\022).org.jetbrains.k",
+ "otlin.serialization.Class\030f \003(\0132,.org.je" +
+ "tbrains.kotlin.serialization.Property:U\n" +
+ "\034anonymous_object_origin_name\022).org.jetb" +
+ "rains.kotlin.serialization.Class\030g \001(\005B\004" +
+ "\230\265\030\001:N\n\023package_module_name\022+.org.jetbra" +
+ "ins.kotlin.serialization.Package\030e \001(\005B\004" +
+ "\230\265\030\001:y\n\026package_local_variable\022+.org.jet" +
+ "brains.kotlin.serialization.Package\030f \003(" +
+ "\0132,.org.jetbrains.kotlin.serialization.P" +
+ "ropertyB\022B\020DebugJvmProtoBuf"
};
org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
@@ -4777,15 +4796,16 @@ public final class DebugJvmProtoBuf {
new java.lang.String[] { "Field", "SyntheticMethod", "Getter", "Setter", });
constructorSignature.internalInit(descriptor.getExtensions().get(0));
methodSignature.internalInit(descriptor.getExtensions().get(1));
- propertySignature.internalInit(descriptor.getExtensions().get(2));
- typeAnnotation.internalInit(descriptor.getExtensions().get(3));
- isRaw.internalInit(descriptor.getExtensions().get(4));
- typeParameterAnnotation.internalInit(descriptor.getExtensions().get(5));
- classModuleName.internalInit(descriptor.getExtensions().get(6));
- classLocalVariable.internalInit(descriptor.getExtensions().get(7));
- anonymousObjectOriginName.internalInit(descriptor.getExtensions().get(8));
- packageModuleName.internalInit(descriptor.getExtensions().get(9));
- packageLocalVariable.internalInit(descriptor.getExtensions().get(10));
+ lambdaClassOriginName.internalInit(descriptor.getExtensions().get(2));
+ propertySignature.internalInit(descriptor.getExtensions().get(3));
+ typeAnnotation.internalInit(descriptor.getExtensions().get(4));
+ isRaw.internalInit(descriptor.getExtensions().get(5));
+ typeParameterAnnotation.internalInit(descriptor.getExtensions().get(6));
+ classModuleName.internalInit(descriptor.getExtensions().get(7));
+ classLocalVariable.internalInit(descriptor.getExtensions().get(8));
+ anonymousObjectOriginName.internalInit(descriptor.getExtensions().get(9));
+ packageModuleName.internalInit(descriptor.getExtensions().get(10));
+ packageLocalVariable.internalInit(descriptor.getExtensions().get(11));
org.jetbrains.kotlin.protobuf.ExtensionRegistry registry =
org.jetbrains.kotlin.protobuf.ExtensionRegistry.newInstance();
registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable);
@@ -4795,6 +4815,7 @@ public final class DebugJvmProtoBuf {
registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable);
registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable);
registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable);
+ registry.add(org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.stringIdInTable);
org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor
.internalUpdateFileDescriptor(descriptor, registry);
org.jetbrains.kotlin.serialization.DebugExtOptionsProtoBuf.getDescriptor();
diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java
index a5f9861f989..79ad7b1cc4f 100644
--- a/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java
+++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/AsmUtil.java
@@ -45,7 +45,10 @@ import org.jetbrains.org.objectweb.asm.*;
import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter;
import org.jetbrains.org.objectweb.asm.commons.Method;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isBoolean;
import static org.jetbrains.kotlin.builtins.KotlinBuiltIns.isPrimitiveClass;
@@ -878,7 +881,12 @@ public class AsmUtil {
public static void writeAnnotationData(
@NotNull AnnotationVisitor av, @NotNull MessageLite message, @NotNull JvmStringTable stringTable
) {
- String[] data = BitEncoding.encodeBytes(DescriptorSerializer.serialize(message, stringTable));
+ writeAnnotationData(av, BitEncoding.encodeBytes(DescriptorSerializer.serialize(message, stringTable)), stringTable.getStrings());
+ }
+
+ public static void writeAnnotationData(
+ @NotNull AnnotationVisitor av, @NotNull String[] data, @NotNull Listextend .org.jetbrains.kotlin.serialization.Function { ... }
+ *
+ * + * For lambdas from bodies of inline functions copied to the use site, the JVM internal name of the original + * lambda class this class is copied from + *+ */ + public static final + org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension< + org.jetbrains.kotlin.serialization.ProtoBuf.Function, + java.lang.Integer> lambdaClassOriginName = org.jetbrains.kotlin.protobuf.GeneratedMessageLite + .newSingularGeneratedExtension( + org.jetbrains.kotlin.serialization.ProtoBuf.Function.getDefaultInstance(), + 0, + null, + null, + 101, + org.jetbrains.kotlin.protobuf.WireFormat.FieldType.INT32, + java.lang.Integer.class); public static final int PROPERTY_SIGNATURE_FIELD_NUMBER = 100; /** *
extend .org.jetbrains.kotlin.serialization.Property { ... }
diff --git a/core/descriptors.jvm/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBufUtil.kt b/core/descriptors.jvm/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBufUtil.kt
index 81c95bce0ac..6811eba6bf4 100644
--- a/core/descriptors.jvm/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBufUtil.kt
+++ b/core/descriptors.jvm/src/org/jetbrains/kotlin/serialization/jvm/JvmProtoBufUtil.kt
@@ -23,34 +23,40 @@ import org.jetbrains.kotlin.serialization.PackageData
import org.jetbrains.kotlin.serialization.ProtoBuf
import org.jetbrains.kotlin.serialization.deserialization.*
import java.io.ByteArrayInputStream
+import java.io.InputStream
object JvmProtoBufUtil {
- val EXTENSION_REGISTRY: ExtensionRegistryLite = run {
- val registry = ExtensionRegistryLite.newInstance()
- JvmProtoBuf.registerAllExtensions(registry)
- registry
- }
+ val EXTENSION_REGISTRY: ExtensionRegistryLite = ExtensionRegistryLite.newInstance().apply(JvmProtoBuf::registerAllExtensions)
- @JvmStatic fun readClassDataFrom(data: Array