New flag in proto

This commit is contained in:
Mikhael Bogdanov
2020-02-05 15:34:37 +01:00
committed by Mikhail Bogdanov
parent 0c0bd67a6b
commit ff8eac29a0
8 changed files with 86 additions and 11 deletions
@@ -206,6 +206,11 @@ open class ProtoCompareGenerated(
if (!checkStringEquals(old.getExtension(JvmProtoBuf.anonymousObjectOriginName), new.getExtension(JvmProtoBuf.anonymousObjectOriginName))) return false if (!checkStringEquals(old.getExtension(JvmProtoBuf.anonymousObjectOriginName), new.getExtension(JvmProtoBuf.anonymousObjectOriginName))) return false
} }
if (old.hasExtension(JvmProtoBuf.generationOptions) != new.hasExtension(JvmProtoBuf.generationOptions)) return false
if (old.hasExtension(JvmProtoBuf.generationOptions)) {
if (old.getExtension(JvmProtoBuf.generationOptions) != new.getExtension(JvmProtoBuf.generationOptions)) return false
}
if (old.getExtensionCount(JsProtoBuf.classAnnotation) != new.getExtensionCount(JsProtoBuf.classAnnotation)) { if (old.getExtensionCount(JsProtoBuf.classAnnotation) != new.getExtensionCount(JsProtoBuf.classAnnotation)) {
return false return false
} }
@@ -264,6 +269,7 @@ open class ProtoCompareGenerated(
JVM_EXT_CLASS_MODULE_NAME, JVM_EXT_CLASS_MODULE_NAME,
JVM_EXT_CLASS_LOCAL_VARIABLE_LIST, JVM_EXT_CLASS_LOCAL_VARIABLE_LIST,
JVM_EXT_ANONYMOUS_OBJECT_ORIGIN_NAME, JVM_EXT_ANONYMOUS_OBJECT_ORIGIN_NAME,
JVM_EXT_GENERATION_OPTIONS,
JS_EXT_CLASS_ANNOTATION_LIST, JS_EXT_CLASS_ANNOTATION_LIST,
JS_EXT_CLASS_CONTAINING_FILE_ID, JS_EXT_CLASS_CONTAINING_FILE_ID,
JAVA_EXT_IS_PACKAGE_PRIVATE_CLASS, JAVA_EXT_IS_PACKAGE_PRIVATE_CLASS,
@@ -332,6 +338,11 @@ open class ProtoCompareGenerated(
if (!checkStringEquals(old.getExtension(JvmProtoBuf.anonymousObjectOriginName), new.getExtension(JvmProtoBuf.anonymousObjectOriginName))) result.add(ProtoBufClassKind.JVM_EXT_ANONYMOUS_OBJECT_ORIGIN_NAME) if (!checkStringEquals(old.getExtension(JvmProtoBuf.anonymousObjectOriginName), new.getExtension(JvmProtoBuf.anonymousObjectOriginName))) result.add(ProtoBufClassKind.JVM_EXT_ANONYMOUS_OBJECT_ORIGIN_NAME)
} }
if (old.hasExtension(JvmProtoBuf.generationOptions) != new.hasExtension(JvmProtoBuf.generationOptions)) result.add(ProtoBufClassKind.JVM_EXT_GENERATION_OPTIONS)
if (old.hasExtension(JvmProtoBuf.generationOptions)) {
if (old.getExtension(JvmProtoBuf.generationOptions) != new.getExtension(JvmProtoBuf.generationOptions)) result.add(ProtoBufClassKind.JVM_EXT_GENERATION_OPTIONS)
}
if (old.getExtensionCount(JsProtoBuf.classAnnotation) != new.getExtensionCount(JsProtoBuf.classAnnotation)) { if (old.getExtensionCount(JsProtoBuf.classAnnotation) != new.getExtensionCount(JsProtoBuf.classAnnotation)) {
result.add(ProtoBufClassKind.JS_EXT_CLASS_ANNOTATION_LIST) result.add(ProtoBufClassKind.JS_EXT_CLASS_ANNOTATION_LIST)
} }
@@ -1735,6 +1746,10 @@ fun ProtoBuf.Class.hashCode(stringIndexes: (Int) -> Int, fqNameIndexes: (Int) ->
hashCode = 31 * hashCode + stringIndexes(getExtension(JvmProtoBuf.anonymousObjectOriginName)) hashCode = 31 * hashCode + stringIndexes(getExtension(JvmProtoBuf.anonymousObjectOriginName))
} }
if (hasExtension(JvmProtoBuf.generationOptions)) {
hashCode = 31 * hashCode + getExtension(JvmProtoBuf.generationOptions)
}
for(i in 0..getExtensionCount(JsProtoBuf.classAnnotation) - 1) { for(i in 0..getExtensionCount(JsProtoBuf.classAnnotation) - 1) {
hashCode = 31 * hashCode + getExtension(JsProtoBuf.classAnnotation, i).hashCode(stringIndexes, fqNameIndexes, typeById) hashCode = 31 * hashCode + getExtension(JsProtoBuf.classAnnotation, i).hashCode(stringIndexes, fqNameIndexes, typeById)
} }
@@ -273,6 +273,10 @@ class DifferenceCalculatorForClass(
isClassAffected = true isClassAffected = true
areSubclassesAffected = true areSubclassesAffected = true
} }
ProtoBufClassKind.JVM_EXT_GENERATION_OPTIONS -> {
isClassAffected = true
areSubclassesAffected = true
}
} }
} }
@@ -18,6 +18,7 @@ public final class DebugJvmProtoBuf {
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.classModuleName); registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.classModuleName);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.classLocalVariable); registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.classLocalVariable);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.anonymousObjectOriginName); registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.anonymousObjectOriginName);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.generationOptions);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.packageModuleName); registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.packageModuleName);
registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.packageLocalVariable); registry.add(org.jetbrains.kotlin.metadata.jvm.DebugJvmProtoBuf.packageLocalVariable);
} }
@@ -4650,6 +4651,21 @@ public final class DebugJvmProtoBuf {
.newFileScopedGeneratedExtension( .newFileScopedGeneratedExtension(
java.lang.Integer.class, java.lang.Integer.class,
null); null);
public static final int GENERATION_OPTIONS_FIELD_NUMBER = 104;
/**
* <code>extend .org.jetbrains.kotlin.metadata.Class { ... }</code>
*
* <pre>
* isFunctionBodyInInterface: 0 if actual body generated in DefaultImpl, 1 - otherwise (in interface default method)
* </pre>
*/
public static final
org.jetbrains.kotlin.protobuf.GeneratedMessage.GeneratedExtension<
org.jetbrains.kotlin.metadata.DebugProtoBuf.Class,
java.lang.Integer> generationOptions = org.jetbrains.kotlin.protobuf.GeneratedMessage
.newFileScopedGeneratedExtension(
java.lang.Integer.class,
null);
public static final int PACKAGE_MODULE_NAME_FIELD_NUMBER = 101; public static final int PACKAGE_MODULE_NAME_FIELD_NUMBER = 101;
/** /**
* <code>extend .org.jetbrains.kotlin.metadata.Package { ... }</code> * <code>extend .org.jetbrains.kotlin.metadata.Package { ... }</code>
@@ -4758,12 +4774,13 @@ public final class DebugJvmProtoBuf {
"\'.org.jetbrains.kotlin.metadata.Property", "\'.org.jetbrains.kotlin.metadata.Property",
":P\n\034anonymous_object_origin_name\022$.org.j" + ":P\n\034anonymous_object_origin_name\022$.org.j" +
"etbrains.kotlin.metadata.Class\030g \001(\005B\004\230\265" + "etbrains.kotlin.metadata.Class\030g \001(\005B\004\230\265" +
"\030\001:I\n\023package_module_name\022&.org.jetbrain" + "\030\001:C\n\022generation_options\022$.org.jetbrains" +
"s.kotlin.metadata.Package\030e \001(\005B\004\230\265\030\001:o\n" + ".kotlin.metadata.Class\030h \001(\005:\0010:I\n\023packa" +
"\026package_local_variable\022&.org.jetbrains." + "ge_module_name\022&.org.jetbrains.kotlin.me" +
"kotlin.metadata.Package\030f \003(\0132\'.org.jetb" + "tadata.Package\030e \001(\005B\004\230\265\030\001:o\n\026package_lo" +
"rains.kotlin.metadata.PropertyB\022B\020DebugJ" + "cal_variable\022&.org.jetbrains.kotlin.meta" +
"vmProtoBuf" "data.Package\030f \003(\0132\'.org.jetbrains.kotli" +
"n.metadata.PropertyB\022B\020DebugJvmProtoBuf"
}; };
org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner =
new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() { new org.jetbrains.kotlin.protobuf.Descriptors.FileDescriptor. InternalDescriptorAssigner() {
@@ -4820,8 +4837,9 @@ public final class DebugJvmProtoBuf {
classModuleName.internalInit(descriptor.getExtensions().get(8)); classModuleName.internalInit(descriptor.getExtensions().get(8));
classLocalVariable.internalInit(descriptor.getExtensions().get(9)); classLocalVariable.internalInit(descriptor.getExtensions().get(9));
anonymousObjectOriginName.internalInit(descriptor.getExtensions().get(10)); anonymousObjectOriginName.internalInit(descriptor.getExtensions().get(10));
packageModuleName.internalInit(descriptor.getExtensions().get(11)); generationOptions.internalInit(descriptor.getExtensions().get(11));
packageLocalVariable.internalInit(descriptor.getExtensions().get(12)); packageModuleName.internalInit(descriptor.getExtensions().get(12));
packageLocalVariable.internalInit(descriptor.getExtensions().get(13));
org.jetbrains.kotlin.protobuf.ExtensionRegistry registry = org.jetbrains.kotlin.protobuf.ExtensionRegistry registry =
org.jetbrains.kotlin.protobuf.ExtensionRegistry.newInstance(); org.jetbrains.kotlin.protobuf.ExtensionRegistry.newInstance();
registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable); registry.add(org.jetbrains.kotlin.metadata.DebugExtOptionsProtoBuf.stringIdInTable);
@@ -82,11 +82,17 @@ class JvmSerializerExtension @JvmOverloads constructor(
if (moduleName != JvmProtoBufUtil.DEFAULT_MODULE_NAME) { if (moduleName != JvmProtoBufUtil.DEFAULT_MODULE_NAME) {
proto.setExtension(JvmProtoBuf.classModuleName, stringTable.getStringIndex(moduleName)) proto.setExtension(JvmProtoBuf.classModuleName, stringTable.getStringIndex(moduleName))
} }
//TODO: local delegated properties
val containerAsmType = val containerAsmType =
if (DescriptorUtils.isInterface(descriptor)) typeMapper.mapDefaultImpls(descriptor) else typeMapper.mapClass(descriptor) if (DescriptorUtils.isInterface(descriptor)) typeMapper.mapDefaultImpls(descriptor) else typeMapper.mapClass(descriptor)
writeLocalProperties(proto, containerAsmType, JvmProtoBuf.classLocalVariable) writeLocalProperties(proto, containerAsmType, JvmProtoBuf.classLocalVariable)
writeVersionRequirementForJvmDefaultIfNeeded(descriptor, proto, versionRequirementTable) writeVersionRequirementForJvmDefaultIfNeeded(descriptor, proto, versionRequirementTable)
if ((jvmDefaultMode == JvmDefaultMode.ALL_INCOMPATIBLE || jvmDefaultMode == JvmDefaultMode.ALL_COMPATIBILITY) &&
isInterface(descriptor)
) {
proto.setExtension(JvmProtoBuf.generationOptions, JvmFlags.getPropertyFlags(true))
}
} }
// Interfaces which have @JvmDefault members somewhere in the hierarchy need the compiler 1.2.40+ // Interfaces which have @JvmDefault members somewhere in the hierarchy need the compiler 1.2.40+
+4
View File
@@ -127,6 +127,10 @@ extend Class {
// For anonymous objects from bodies of inline functions copied to the use site, the JVM internal name of the original // For anonymous objects from bodies of inline functions copied to the use site, the JVM internal name of the original
// anonymous object this class is copied from // anonymous object this class is copied from
optional int32 anonymous_object_origin_name = 103 [(string_id_in_table) = true]; optional int32 anonymous_object_origin_name = 103 [(string_id_in_table) = true];
// isFunctionBodyInInterface: 0 if actual body generated in DefaultImpl, 1 - otherwise (in interface default method)
optional int32 generation_options = 104 [default = 0];
} }
extend Package { extend Package {
@@ -18,6 +18,7 @@ public final class JvmProtoBuf {
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.classModuleName); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.classModuleName);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.classLocalVariable); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.classLocalVariable);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.anonymousObjectOriginName); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.anonymousObjectOriginName);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.generationOptions);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.packageModuleName); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.packageModuleName);
registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.packageLocalVariable); registry.add(org.jetbrains.kotlin.metadata.jvm.JvmProtoBuf.packageLocalVariable);
} }
@@ -3985,6 +3986,26 @@ public final class JvmProtoBuf {
103, 103,
org.jetbrains.kotlin.protobuf.WireFormat.FieldType.INT32, org.jetbrains.kotlin.protobuf.WireFormat.FieldType.INT32,
java.lang.Integer.class); java.lang.Integer.class);
public static final int GENERATION_OPTIONS_FIELD_NUMBER = 104;
/**
* <code>extend .org.jetbrains.kotlin.metadata.Class { ... }</code>
*
* <pre>
* isFunctionBodyInInterface: 0 if actual body generated in DefaultImpl, 1 - otherwise (in interface default method)
* </pre>
*/
public static final
org.jetbrains.kotlin.protobuf.GeneratedMessageLite.GeneratedExtension<
org.jetbrains.kotlin.metadata.ProtoBuf.Class,
java.lang.Integer> generationOptions = org.jetbrains.kotlin.protobuf.GeneratedMessageLite
.newSingularGeneratedExtension(
org.jetbrains.kotlin.metadata.ProtoBuf.Class.getDefaultInstance(),
0,
null,
null,
104,
org.jetbrains.kotlin.protobuf.WireFormat.FieldType.INT32,
java.lang.Integer.class);
public static final int PACKAGE_MODULE_NAME_FIELD_NUMBER = 101; public static final int PACKAGE_MODULE_NAME_FIELD_NUMBER = 101;
/** /**
* <code>extend .org.jetbrains.kotlin.metadata.Package { ... }</code> * <code>extend .org.jetbrains.kotlin.metadata.Package { ... }</code>
@@ -15,6 +15,9 @@ object JvmFlags {
val IS_MOVED_FROM_INTERFACE_COMPANION = Flags.FlagField.booleanFirst() val IS_MOVED_FROM_INTERFACE_COMPANION = Flags.FlagField.booleanFirst()
fun getPropertyFlags(isMovedFromInterfaceCompanion: Boolean): Int = fun getPropertyFlags(booleanToIntFlag: Boolean): Int =
IS_MOVED_FROM_INTERFACE_COMPANION.toFlags(isMovedFromInterfaceCompanion) IS_MOVED_FROM_INTERFACE_COMPANION.toFlags(booleanToIntFlag)
//Class
val IS_NEW_PLACE_FOR_BODY_GENERATION = Flags.FlagField.booleanFirst()
} }
@@ -129,4 +129,8 @@ object JvmProtoBufUtil {
@JvmStatic @JvmStatic
fun isMovedFromInterfaceCompanion(proto: ProtoBuf.Property): Boolean = fun isMovedFromInterfaceCompanion(proto: ProtoBuf.Property): Boolean =
JvmFlags.IS_MOVED_FROM_INTERFACE_COMPANION.get(proto.getExtension(JvmProtoBuf.flags)) JvmFlags.IS_MOVED_FROM_INTERFACE_COMPANION.get(proto.getExtension(JvmProtoBuf.flags))
@JvmStatic
fun isNewPlaceForBodyGeneration(proto: ProtoBuf.Class): Boolean =
JvmFlags.IS_NEW_PLACE_FOR_BODY_GENERATION.get(proto.getExtension(JvmProtoBuf.generationOptions))
} }