From fdfe3fd73b768a8832c32dcb0251710b164feb4d Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 13 Feb 2015 22:59:03 +0300 Subject: [PATCH] Minor, serialize/deserialize local visibility Also support non-subsequent enum values in Flags --- .../kotlin/serialization/DebugProtoBuf.java | 15 ++++++++++++--- core/serialization/src/descriptors.proto | 1 + .../org/jetbrains/kotlin/serialization/Flags.java | 10 +++++++++- .../jetbrains/kotlin/serialization/ProtoBuf.java | 9 +++++++++ .../deserialization/protoEnumMapping.kt | 1 + 5 files changed, 32 insertions(+), 4 deletions(-) diff --git a/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java b/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java index af49ee1c238..55da37a725a 100644 --- a/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java +++ b/compiler/tests/org/jetbrains/kotlin/serialization/DebugProtoBuf.java @@ -136,6 +136,10 @@ public final class DebugProtoBuf { * PRIVATE_TO_THIS = 4; */ PRIVATE_TO_THIS(4, 4), + /** + * LOCAL = 5; + */ + LOCAL(5, 5), ; /** @@ -162,6 +166,10 @@ public final class DebugProtoBuf { * PRIVATE_TO_THIS = 4; */ public static final int PRIVATE_TO_THIS_VALUE = 4; + /** + * LOCAL = 5; + */ + public static final int LOCAL_VALUE = 5; public final int getNumber() { return value; } @@ -173,6 +181,7 @@ public final class DebugProtoBuf { case 2: return PROTECTED; case 3: return PUBLIC; case 4: return PRIVATE_TO_THIS; + case 5: return LOCAL; default: return null; } } @@ -16612,10 +16621,10 @@ public final class DebugProtoBuf { "E\020\001\022\016\n\nDELEGATION\020\002\022\017\n\013SYNTHESIZED\020\003\":\n\014" + "CallableKind\022\007\n\003FUN\020\000\022\007\n\003VAL\020\001\022\007\n\003VAR\020\002\022" + "\017\n\013CONSTRUCTOR\020\003*\005\010d\020\310\001*-\n\010Modality\022\t\n\005F" + - "INAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRACT\020\002*W\n\nVisibi" + + "INAL\020\000\022\010\n\004OPEN\020\001\022\014\n\010ABSTRACT\020\002*b\n\nVisibi" + "lity\022\014\n\010INTERNAL\020\000\022\013\n\007PRIVATE\020\001\022\r\n\tPROTE" + - "CTED\020\002\022\n\n\006PUBLIC\020\003\022\023\n\017PRIVATE_TO_THIS\020\004B", - "\022B\rDebugProtoBuf\210\001\000" + "CTED\020\002\022\n\n\006PUBLIC\020\003\022\023\n\017PRIVATE_TO_THIS\020\004\022", + "\t\n\005LOCAL\020\005B\022B\rDebugProtoBuf\210\001\000" }; com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner assigner = new com.google.protobuf.Descriptors.FileDescriptor.InternalDescriptorAssigner() { diff --git a/core/serialization/src/descriptors.proto b/core/serialization/src/descriptors.proto index 232e73f1ca0..5a387deb413 100644 --- a/core/serialization/src/descriptors.proto +++ b/core/serialization/src/descriptors.proto @@ -293,4 +293,5 @@ enum Visibility { PROTECTED = 0x02; PUBLIC = 0x03; PRIVATE_TO_THIS = 0x04; + LOCAL = 0x05; } diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/Flags.java b/core/serialization/src/org/jetbrains/kotlin/serialization/Flags.java index 3cc618a474a..4022d612549 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/Flags.java +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/Flags.java @@ -154,6 +154,9 @@ public class Flags { else if (visibility == Visibilities.PROTECTED) { return ProtoBuf.Visibility.PROTECTED; } + else if (visibility == Visibilities.LOCAL) { + return ProtoBuf.Visibility.LOCAL; + } throw new IllegalArgumentException("Unknown visibility: " + visibility); } @@ -226,7 +229,12 @@ public class Flags { int maskUnshifted = (1 << bitWidth) - 1; int mask = maskUnshifted << offset; int value = (flags & mask) >> offset; - return values[value]; + for (E e : values) { + if (getIntValue(e) == value) { + return e; + } + } + throw new IllegalStateException("Flag not found: " + value); } public int toFlags(E value) { diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java b/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java index f9f698b0128..9f6944052b4 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/ProtoBuf.java @@ -110,6 +110,10 @@ public final class ProtoBuf { * PRIVATE_TO_THIS = 4; */ PRIVATE_TO_THIS(4, 4), + /** + * LOCAL = 5; + */ + LOCAL(5, 5), ; /** @@ -136,6 +140,10 @@ public final class ProtoBuf { * PRIVATE_TO_THIS = 4; */ public static final int PRIVATE_TO_THIS_VALUE = 4; + /** + * LOCAL = 5; + */ + public static final int LOCAL_VALUE = 5; public final int getNumber() { return value; } @@ -147,6 +155,7 @@ public final class ProtoBuf { case 2: return PROTECTED; case 3: return PUBLIC; case 4: return PRIVATE_TO_THIS; + case 5: return LOCAL; default: return null; } } diff --git a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt index a29fd7fab0a..49be22a6a10 100644 --- a/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt +++ b/core/serialization/src/org/jetbrains/kotlin/serialization/deserialization/protoEnumMapping.kt @@ -43,6 +43,7 @@ fun visibility(visibility: ProtoBuf.Visibility) = when (visibility) { ProtoBuf.Visibility.PRIVATE_TO_THIS -> Visibilities.PRIVATE_TO_THIS ProtoBuf.Visibility.PROTECTED -> Visibilities.PROTECTED ProtoBuf.Visibility.PUBLIC -> Visibilities.PUBLIC + ProtoBuf.Visibility.LOCAL -> Visibilities.LOCAL } public fun classKind(kind: ProtoBuf.Class.Kind): ClassKind = when (kind) {