Skip to content

Commit

Permalink
Use @AutoOneOf instead of @autovalue in places to simplify code
Browse files Browse the repository at this point in the history
RELNOTES=n/a
PiperOrigin-RevId: 369283330
  • Loading branch information
java-team-github-bot authored and Google Java Core Libraries committed Apr 19, 2021
1 parent 02a5d08 commit b11f237
Show file tree
Hide file tree
Showing 6 changed files with 58 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ static FieldDescriptor typeUrlFieldDescriptor() {
}

private static final FieldDescriptorOrUnknown TYPE_URL_FIELD_DESCRIPTOR_OR_UNKNOWN =
FieldDescriptorOrUnknown.fromFieldDescriptor(TYPE_URL_FIELD_DESCRIPTOR);
FieldDescriptorOrUnknown.of(TYPE_URL_FIELD_DESCRIPTOR);

static FieldDescriptorOrUnknown typeUrlFieldDescriptorOrUnknown() {
return TYPE_URL_FIELD_DESCRIPTOR_OR_UNKNOWN;
Expand All @@ -50,7 +50,7 @@ static FieldDescriptor valueFieldDescriptor() {
}

private static final FieldDescriptorOrUnknown VALUE_FIELD_DESCRIPTOR_OR_UNKNOWN =
FieldDescriptorOrUnknown.fromFieldDescriptor(VALUE_FIELD_DESCRIPTOR);
FieldDescriptorOrUnknown.of(VALUE_FIELD_DESCRIPTOR);

static FieldDescriptorOrUnknown valueFieldDescriptorOrUnknown() {
return VALUE_FIELD_DESCRIPTOR_OR_UNKNOWN;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -601,11 +601,13 @@ private static String newFieldPrefix(String rootFieldPrefix, String toAdd) {
}

private static String valueString(FieldDescriptorOrUnknown fieldDescriptorOrUnknown, Object o) {
if (fieldDescriptorOrUnknown.fieldDescriptor().isPresent()) {
return valueString(fieldDescriptorOrUnknown.fieldDescriptor().get(), o);
} else {
return valueString(fieldDescriptorOrUnknown.unknownFieldDescriptor().get(), o);
switch (fieldDescriptorOrUnknown.kind()) {
case FIELD_DESCRIPTOR:
return valueString(fieldDescriptorOrUnknown.fieldDescriptor(), o);
case UNKNOWN_FIELD_DESCRIPTOR:
return valueString(fieldDescriptorOrUnknown.unknownFieldDescriptor(), o);
}
throw new AssertionError(fieldDescriptorOrUnknown.kind());
}

private static String valueString(FieldDescriptor fieldDescriptor, Object o) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,35 +16,40 @@

package com.google.common.truth.extensions.proto;

import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
import com.google.auto.value.AutoOneOf;
import com.google.protobuf.Descriptors.FieldDescriptor;

/** An 'Either' of a {@link FieldDescriptor} or {@link UnknownFieldDescriptor}. */
@AutoValue
@AutoOneOf(FieldDescriptorOrUnknown.Kind.class)
abstract class FieldDescriptorOrUnknown {
static FieldDescriptorOrUnknown fromFieldDescriptor(FieldDescriptor fieldDescriptor) {
return new AutoValue_FieldDescriptorOrUnknown(
Optional.of(fieldDescriptor), Optional.<UnknownFieldDescriptor>absent());
enum Kind {
FIELD_DESCRIPTOR,
UNKNOWN_FIELD_DESCRIPTOR;
}

static FieldDescriptorOrUnknown fromUnknown(UnknownFieldDescriptor unknownFieldDescriptor) {
return new AutoValue_FieldDescriptorOrUnknown(
Optional.<FieldDescriptor>absent(), Optional.of(unknownFieldDescriptor));
}
abstract Kind kind();

abstract Optional<FieldDescriptor> fieldDescriptor();
abstract FieldDescriptor fieldDescriptor();

abstract Optional<UnknownFieldDescriptor> unknownFieldDescriptor();
abstract UnknownFieldDescriptor unknownFieldDescriptor();

/** Returns a short, human-readable version of this identifier. */
final String shortName() {
if (fieldDescriptor().isPresent()) {
return fieldDescriptor().get().isExtension()
? "[" + fieldDescriptor().get() + "]"
: fieldDescriptor().get().getName();
} else {
return String.valueOf(unknownFieldDescriptor().get().fieldNumber());
switch (kind()) {
case FIELD_DESCRIPTOR:
return fieldDescriptor().isExtension()
? "[" + fieldDescriptor() + "]"
: fieldDescriptor().getName();
case UNKNOWN_FIELD_DESCRIPTOR:
return String.valueOf(unknownFieldDescriptor().fieldNumber());
}
throw new AssertionError(kind());
}

static FieldDescriptorOrUnknown of(FieldDescriptor fieldDescriptor) {
return AutoOneOf_FieldDescriptorOrUnknown.fieldDescriptor(fieldDescriptor);
}

static FieldDescriptorOrUnknown of(UnknownFieldDescriptor unknownFieldDescriptor) {
return AutoOneOf_FieldDescriptorOrUnknown.unknownFieldDescriptor(unknownFieldDescriptor);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,6 @@

package com.google.common.truth.extensions.proto;

import com.google.auto.value.AutoValue;
import com.google.common.base.Optional;
import com.google.common.collect.Maps;
import com.google.protobuf.Descriptors.FieldDescriptor;
import com.google.protobuf.Message;
Expand All @@ -41,31 +39,8 @@ static FieldNumberTree empty() {
return EMPTY;
}

@AutoValue
abstract static class Key {
abstract Optional<Integer> knownFieldNumber();

abstract Optional<UnknownFieldDescriptor> unknownFieldDescriptor();

static Key fromFieldDescriptorOrUnknown(FieldDescriptorOrUnknown fieldDescriptorOrUnknown) {
return fieldDescriptorOrUnknown.fieldDescriptor().isPresent()
? known(fieldDescriptorOrUnknown.fieldDescriptor().get().getNumber())
: unknown(fieldDescriptorOrUnknown.unknownFieldDescriptor().get());
}

static Key known(int fieldNumber) {
return new AutoValue_FieldNumberTree_Key(
Optional.of(fieldNumber), Optional.<UnknownFieldDescriptor>absent());
}

static Key unknown(UnknownFieldDescriptor unknownFieldDescriptor) {
return new AutoValue_FieldNumberTree_Key(
Optional.<Integer>absent(), Optional.of(unknownFieldDescriptor));
}
}

// Modified only during [factory] construction, never changed afterwards.
private final Map<Key, FieldNumberTree> children = Maps.newHashMap();
private final Map<FieldDescriptorOrUnknown, FieldNumberTree> children = Maps.newHashMap();

/** Returns whether this {@code FieldNumberTree} has no children. */
boolean isEmpty() {
Expand All @@ -78,14 +53,13 @@ boolean isEmpty() {
* <p>{@code empty()} if there is none.
*/
FieldNumberTree child(FieldDescriptorOrUnknown fieldDescriptorOrUnknown) {
FieldNumberTree child =
children.get(Key.fromFieldDescriptorOrUnknown(fieldDescriptorOrUnknown));
FieldNumberTree child = children.get(fieldDescriptorOrUnknown);
return child == null ? EMPTY : child;
}

/** Returns whether this tree has a child for this node. */
boolean hasChild(FieldDescriptorOrUnknown fieldDescriptorOrUnknown) {
return children.containsKey(Key.fromFieldDescriptorOrUnknown(fieldDescriptorOrUnknown));
return children.containsKey(fieldDescriptorOrUnknown);
}

static FieldNumberTree fromMessage(Message message) {
Expand All @@ -94,9 +68,9 @@ static FieldNumberTree fromMessage(Message message) {
// Known fields.
Map<FieldDescriptor, Object> knownFieldValues = message.getAllFields();
for (FieldDescriptor field : knownFieldValues.keySet()) {
Key key = Key.known(field.getNumber());
FieldDescriptorOrUnknown fieldDescriptorOrUnknown = FieldDescriptorOrUnknown.of(field);
FieldNumberTree childTree = new FieldNumberTree();
tree.children.put(key, childTree);
tree.children.put(fieldDescriptorOrUnknown, childTree);

Object fieldValue = knownFieldValues.get(field);
if (field.getJavaType() == FieldDescriptor.JavaType.MESSAGE) {
Expand Down Expand Up @@ -133,9 +107,10 @@ private static FieldNumberTree fromUnknownFieldSet(UnknownFieldSet unknownFieldS
UnknownFieldSet.Field unknownField = unknownFieldSet.asMap().get(fieldNumber);
for (UnknownFieldDescriptor unknownFieldDescriptor :
UnknownFieldDescriptor.descriptors(fieldNumber, unknownField)) {
Key key = Key.unknown(unknownFieldDescriptor);
FieldDescriptorOrUnknown fieldDescriptorOrUnknown =
FieldDescriptorOrUnknown.of(unknownFieldDescriptor);
FieldNumberTree childTree = new FieldNumberTree();
tree.children.put(key, childTree);
tree.children.put(fieldDescriptorOrUnknown, childTree);

if (unknownFieldDescriptor.type() == UnknownFieldDescriptor.Type.GROUP) {
for (Object group : unknownFieldDescriptor.type().getValues(unknownField)) {
Expand All @@ -150,12 +125,12 @@ private static FieldNumberTree fromUnknownFieldSet(UnknownFieldSet unknownFieldS

/** Adds the other tree onto this one. May destroy {@code other} in the process. */
private void merge(FieldNumberTree other) {
for (Key key : other.children.keySet()) {
FieldNumberTree value = other.children.get(key);
if (!this.children.containsKey(key)) {
this.children.put(key, value);
for (FieldDescriptorOrUnknown fieldDescriptorOrUnknown : other.children.keySet()) {
FieldNumberTree value = other.children.get(fieldDescriptorOrUnknown);
if (!this.children.containsKey(fieldDescriptorOrUnknown)) {
this.children.put(fieldDescriptorOrUnknown, value);
} else {
this.children.get(key).merge(value);
this.children.get(fieldDescriptorOrUnknown).merge(value);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,11 +313,12 @@ protected FieldMatcherLogicBase(boolean isRecursive) {
@Override
final FieldScopeResult policyFor(
Descriptor rootDescriptor, FieldDescriptorOrUnknown fieldDescriptorOrUnknown) {
if (fieldDescriptorOrUnknown.unknownFieldDescriptor().isPresent()) {
if (fieldDescriptorOrUnknown.kind()
== FieldDescriptorOrUnknown.Kind.UNKNOWN_FIELD_DESCRIPTOR) {
return FieldScopeResult.EXCLUDED_RECURSIVELY;
}

FieldDescriptor fieldDescriptor = fieldDescriptorOrUnknown.fieldDescriptor().get();
FieldDescriptor fieldDescriptor = fieldDescriptorOrUnknown.fieldDescriptor();
if (matchesFieldDescriptor(rootDescriptor, fieldDescriptor)) {
return FieldScopeResult.of(/* included = */ true, isRecursive);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ private DiffResult diffMessages(Message actual, Message expected, FluentEquality
// (i.e., the sub-DiffResult winds up empty). This allows us support FieldScopeLogic
// disjunctions without repeating recursive work.
FieldDescriptorOrUnknown fieldDescriptorOrUnknown =
FieldDescriptorOrUnknown.fromFieldDescriptor(fieldDescriptor);
FieldDescriptorOrUnknown.of(fieldDescriptor);
FieldScopeResult shouldCompare =
config.compareFieldsScope().policyFor(rootDescriptor, fieldDescriptorOrUnknown);
if (shouldCompare == FieldScopeResult.EXCLUDED_RECURSIVELY) {
Expand Down Expand Up @@ -315,7 +315,7 @@ private List<SingularField> compareMapFieldsByKey(
FieldDescriptor keyFieldDescriptor = mapFieldDescriptor.getMessageType().findFieldByNumber(1);
FieldDescriptor valueFieldDescriptor = mapFieldDescriptor.getMessageType().findFieldByNumber(2);
FieldDescriptorOrUnknown valueFieldDescriptorOrUnknown =
FieldDescriptorOrUnknown.fromFieldDescriptor(valueFieldDescriptor);
FieldDescriptorOrUnknown.of(valueFieldDescriptor);

// We never ignore the key, no matter what the logic dictates.
FieldScopeResult compareValues =
Expand All @@ -327,8 +327,7 @@ private List<SingularField> compareMapFieldsByKey(
boolean ignoreExtraRepeatedFieldElements =
mapConfig
.ignoreExtraRepeatedFieldElementsScope()
.contains(
rootDescriptor, FieldDescriptorOrUnknown.fromFieldDescriptor(mapFieldDescriptor));
.contains(rootDescriptor, FieldDescriptorOrUnknown.of(mapFieldDescriptor));

FluentEqualityConfig valuesConfig =
mapConfig.subScope(rootDescriptor, valueFieldDescriptorOrUnknown);
Expand Down Expand Up @@ -673,8 +672,7 @@ private SingularField compareSingularMessage(
boolean ignoreFieldAbsence =
config
.ignoreFieldAbsenceScope()
.contains(
rootDescriptor, FieldDescriptorOrUnknown.fromFieldDescriptor(fieldDescriptor));
.contains(rootDescriptor, FieldDescriptorOrUnknown.of(fieldDescriptor));
actual = orIfIgnoringFieldAbsence(actual, defaultValue, ignoreFieldAbsence);
expected = orIfIgnoringFieldAbsence(expected, defaultValue, ignoreFieldAbsence);

Expand All @@ -700,8 +698,7 @@ private SingularField compareSingularMessage(
// Report the full breakdown.
SingularField.Builder singularFieldBuilder =
SingularField.newBuilder()
.setFieldDescriptorOrUnknown(
FieldDescriptorOrUnknown.fromFieldDescriptor(fieldDescriptor))
.setFieldDescriptorOrUnknown(FieldDescriptorOrUnknown.of(fieldDescriptor))
.setFieldName(fieldName)
.setResult(result.build());
if (actual != null) {
Expand All @@ -728,7 +725,7 @@ private SingularField compareSingularPrimitive(
// Use the default if it's set and we're ignoring field absence, or if it's a Proto3 primitive
// for which default is indistinguishable from unset.
FieldDescriptorOrUnknown fieldDescriptorOrUnknown =
FieldDescriptorOrUnknown.fromFieldDescriptor(fieldDescriptor);
FieldDescriptorOrUnknown.of(fieldDescriptor);
boolean isNonRepeatedProto3 =
!fieldDescriptor.isRepeated()
&& fieldDescriptor.getContainingOneof() == null
Expand Down Expand Up @@ -765,8 +762,7 @@ private SingularField compareSingularPrimitive(

SingularField.Builder singularFieldBuilder =
SingularField.newBuilder()
.setFieldDescriptorOrUnknown(
FieldDescriptorOrUnknown.fromFieldDescriptor(fieldDescriptor))
.setFieldDescriptorOrUnknown(FieldDescriptorOrUnknown.of(fieldDescriptor))
.setFieldName(fieldName)
.setResult(result.build());
if (actual != null) {
Expand Down Expand Up @@ -823,7 +819,7 @@ private UnknownFieldSetDiff diffUnknowns(
UnknownFieldDescriptor unknownFieldDescriptor =
UnknownFieldDescriptor.create(fieldNumber, type);
FieldDescriptorOrUnknown fieldDescriptorOrUnknown =
FieldDescriptorOrUnknown.fromUnknown(unknownFieldDescriptor);
FieldDescriptorOrUnknown.of(unknownFieldDescriptor);
FieldScopeResult compareFields =
config.compareFieldsScope().policyFor(rootDescriptor, fieldDescriptorOrUnknown);
if (compareFields == FieldScopeResult.EXCLUDED_RECURSIVELY) {
Expand Down Expand Up @@ -921,8 +917,7 @@ private SingularField compareUnknownFieldSet(
// Report the full breakdown.
SingularField.Builder singularFieldBuilder =
SingularField.newBuilder()
.setFieldDescriptorOrUnknown(
FieldDescriptorOrUnknown.fromUnknown(unknownFieldDescriptor))
.setFieldDescriptorOrUnknown(FieldDescriptorOrUnknown.of(unknownFieldDescriptor))
.setFieldName(fieldName)
.setResult(result.build());
if (actual != null) {
Expand Down Expand Up @@ -950,8 +945,7 @@ private SingularField compareUnknownPrimitive(

SingularField.Builder singularFieldBuilder =
SingularField.newBuilder()
.setFieldDescriptorOrUnknown(
FieldDescriptorOrUnknown.fromUnknown(unknownFieldDescriptor))
.setFieldDescriptorOrUnknown(FieldDescriptorOrUnknown.of(unknownFieldDescriptor))
.setFieldName(fieldName)
.setResult(result.build());
if (actual != null) {
Expand Down

0 comments on commit b11f237

Please sign in to comment.