Editions: Migrate edition strings to enum in Java code.

The edition specification in proto files will remain unchanged, but it will be immediately converted to an enum by the parser.  This gives us more control over the valid set of editions and simplifies ordering (just an integer comparison now).  We plan to release exactly one edition per year.

PiperOrigin-RevId: 563261375
pull/13861/head
Mike Kruskal 1 year ago committed by Copybara-Service
parent 4019e25432
commit c23ae49776
  1. 15
      java/core/src/main/java/com/google/protobuf/Descriptors.java
  2. 1
      java/core/src/test/java/com/google/protobuf/DescriptorsTest.java

@ -33,6 +33,7 @@ package com.google.protobuf;
import static com.google.protobuf.Internal.checkNotNull;
import com.google.protobuf.DescriptorProtos.DescriptorProto;
import com.google.protobuf.DescriptorProtos.Edition;
import com.google.protobuf.DescriptorProtos.EnumDescriptorProto;
import com.google.protobuf.DescriptorProtos.EnumOptions;
import com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto;
@ -190,8 +191,16 @@ public final class Descriptors {
}
/** Get the edition of the .proto file. */
public String getEdition() {
return proto.getEdition();
public Edition getEdition() {
return proto.getEditionEnum();
}
/** Gets the name of the edition as specified in the .proto file. */
public String getEditionName() {
if (proto.getEditionEnum().equals(Edition.EDITION_UNKNOWN)) {
return "";
}
return proto.getEditionEnum().name().substring("EDITION_".length());
}
public void copyHeadingTo(FileDescriptorProto.Builder protoBuilder) {
@ -201,7 +210,7 @@ public final class Descriptors {
}
if (getSyntax().equals(Syntax.EDITIONS)) {
protoBuilder.setEdition(getEdition());
protoBuilder.setEditionEnum(getEdition());
}
if (!getOptions().equals(FileOptions.getDefaultInstance())) {

@ -34,6 +34,7 @@ import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import com.google.protobuf.DescriptorProtos.DescriptorProto;
import com.google.protobuf.DescriptorProtos.Edition;
import com.google.protobuf.DescriptorProtos.EnumDescriptorProto;
import com.google.protobuf.DescriptorProtos.EnumValueDescriptorProto;
import com.google.protobuf.DescriptorProtos.FieldDescriptorProto;

Loading…
Cancel
Save