diff --git a/java/core/src/main/java/com/google/protobuf/DescriptorMessageInfoFactory.java b/java/core/src/main/java/com/google/protobuf/DescriptorMessageInfoFactory.java index b503e55dbe..63a98e6f66 100644 --- a/java/core/src/main/java/com/google/protobuf/DescriptorMessageInfoFactory.java +++ b/java/core/src/main/java/com/google/protobuf/DescriptorMessageInfoFactory.java @@ -129,6 +129,8 @@ final class DescriptorMessageInfoFactory implements MessageInfoFactory { return ProtoSyntax.PROTO2; case PROTO3: return ProtoSyntax.PROTO3; + case EDITIONS: + return ProtoSyntax.EDITIONS; default: throw new IllegalArgumentException("Unsupported syntax: " + syntax); } diff --git a/java/core/src/main/java/com/google/protobuf/Descriptors.java b/java/core/src/main/java/com/google/protobuf/Descriptors.java index f3365e24cc..3eddc77722 100644 --- a/java/core/src/main/java/com/google/protobuf/Descriptors.java +++ b/java/core/src/main/java/com/google/protobuf/Descriptors.java @@ -167,7 +167,8 @@ public final class Descriptors { enum Syntax { UNKNOWN("unknown"), PROTO2("proto2"), - PROTO3("proto3"); + PROTO3("proto3"), + EDITIONS("editions"); Syntax(String name) { this.name = name; @@ -182,16 +183,27 @@ public final class Descriptors { Syntax getSyntax() { if (Syntax.PROTO3.name.equals(proto.getSyntax())) { return Syntax.PROTO3; + } else if (Syntax.EDITIONS.name.equals(proto.getSyntax())) { + return Syntax.EDITIONS; } return Syntax.PROTO2; } + /** Get the edition of the .proto file. */ + public String getEdition() { + return proto.getEdition(); + } + public void copyHeadingTo(FileDescriptorProto.Builder protoBuilder) { protoBuilder.setName(getName()).setSyntax(getSyntax().name); if (!getPackage().isEmpty()) { protoBuilder.setPackage(getPackage()); } + if (getSyntax().equals(Syntax.EDITIONS)) { + protoBuilder.setEdition(getEdition()); + } + if (!getOptions().equals(FileOptions.getDefaultInstance())) { protoBuilder.setOptions(getOptions()); } diff --git a/java/core/src/main/java/com/google/protobuf/ProtoSyntax.java b/java/core/src/main/java/com/google/protobuf/ProtoSyntax.java index 851b839f6f..0717593052 100644 --- a/java/core/src/main/java/com/google/protobuf/ProtoSyntax.java +++ b/java/core/src/main/java/com/google/protobuf/ProtoSyntax.java @@ -34,5 +34,6 @@ package com.google.protobuf; @ExperimentalApi public enum ProtoSyntax { PROTO2, - PROTO3; + PROTO3, + EDITIONS; } diff --git a/java/core/src/main/java/com/google/protobuf/RawMessageInfo.java b/java/core/src/main/java/com/google/protobuf/RawMessageInfo.java index 59efeb7f46..e16bd16e8f 100644 --- a/java/core/src/main/java/com/google/protobuf/RawMessageInfo.java +++ b/java/core/src/main/java/com/google/protobuf/RawMessageInfo.java @@ -37,6 +37,7 @@ package com.google.protobuf; @CheckReturnValue final class RawMessageInfo implements MessageInfo { private static final int IS_PROTO2_BIT = 0x1; + private static final int IS_EDITION_BIT = 0x4; private final MessageLite defaultInstance; @@ -61,7 +62,8 @@ final class RawMessageInfo implements MessageInfo { *
The integer sequence encoded in the String object has the following layout: * *