
io.protostuff.compiler.model.Message Maven / Gradle / Ivy
package io.protostuff.compiler.model;
import com.google.common.base.MoreObjects;
import com.google.common.base.Preconditions;
import io.protostuff.compiler.parser.MessageParseListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* @author Kostiantyn Shchepanovskyi
*/
public class Message extends AbstractUserTypeContainer
implements UserType, UserTypeContainer, FieldContainer, GroupContainer {
protected List fields;
protected List groups;
protected List oneofs;
protected Proto proto;
protected String fullyQualifiedName;
protected List extensionRanges;
protected List reservedFieldRanges;
protected List reservedFieldNames;
public Message(UserTypeContainer parent) {
super(parent);
}
@Override
public DescriptorType getDescriptorType() {
return DescriptorType.MESSAGE;
}
/**
* Returns all fields in this message, including group fields and oneof fields.
*/
public List getFields() {
if (fields == null) {
return Collections.emptyList();
}
return fields;
}
public void setFields(List fields) {
this.fields = fields;
}
public void addField(Field field) {
if (fields == null) {
fields = new ArrayList<>();
}
fields.add(field);
}
public Field getField(String name) {
for (Field field : getFields()) {
if (name.equals(field.getName())) {
return field;
}
}
return null;
}
@Override
public Field getField(int tag) {
for (Field field : getFields()) {
if (tag == field.getTag()) {
return field;
}
}
return null;
}
public List getOneofs() {
if (oneofs == null) {
return Collections.emptyList();
}
return oneofs;
}
public void setOneofs(List oneofs) {
this.oneofs = oneofs;
}
public void addOneof(Oneof oneof) {
if (oneofs == null) {
oneofs = new ArrayList<>();
}
oneofs.add(oneof);
}
public Oneof getOneof(String name) {
for (Oneof oneof : getOneofs()) {
if (name.equals(oneof.getName())) {
return oneof;
}
}
return null;
}
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.omitNullValues()
.add("name", name)
.add("fullyQualifiedName", getFullyQualifiedName())
.add("fields", fields)
.add("messages", messages)
.add("enums", enums)
.add("options", options)
.toString();
}
@Override
public Proto getProto() {
return proto;
}
@Override
public void setProto(Proto proto) {
this.proto = proto;
}
@Override
public String getFullyQualifiedName() {
return fullyQualifiedName;
}
@Override
public void setFullyQualifiedName(String fullyQualifiedName) {
this.fullyQualifiedName = fullyQualifiedName;
}
@Override
public boolean isScalar() {
return false;
}
@Override
public boolean isEnum() {
return false;
}
@Override
public boolean isMessage() {
return true;
}
@Override
public boolean isMap() {
return false;
}
@Override
public String getNamespace() {
Preconditions.checkNotNull(fullyQualifiedName, "message is not initialized");
return fullyQualifiedName + ".";
}
@Override
public List getGroups() {
if (groups == null) {
return Collections.emptyList();
}
return groups;
}
@Override
public void setGroups(List groups) {
this.groups = groups;
}
@Override
public void addGroup(Group group) {
if (groups == null) {
groups = new ArrayList<>();
}
groups.add(group);
}
public List getExtensionRanges() {
if (extensionRanges == null) {
return Collections.emptyList();
}
return extensionRanges;
}
public void setExtensionRanges(List extensionRanges) {
this.extensionRanges = extensionRanges;
}
public void addExtensionRange(Range range) {
if (extensionRanges == null) {
extensionRanges = new ArrayList<>();
}
extensionRanges.add(range);
}
public List getReservedFieldRanges() {
if (reservedFieldRanges == null) {
return Collections.emptyList();
}
return reservedFieldRanges;
}
public void setReservedFieldRanges(List reservedFieldRanges) {
this.reservedFieldRanges = reservedFieldRanges;
}
public void addReservedFieldRange(Range range) {
if (reservedFieldRanges == null) {
reservedFieldRanges = new ArrayList<>();
}
reservedFieldRanges.add(range);
}
public List getReservedFieldNames() {
if (reservedFieldNames == null) {
return Collections.emptyList();
}
return reservedFieldNames;
}
public void setReservedFieldNames(List reservedFieldNames) {
this.reservedFieldNames = reservedFieldNames;
}
public void addReservedFieldName(String name) {
if (reservedFieldNames == null) {
reservedFieldNames = new ArrayList<>();
}
reservedFieldNames.add(name);
}
@Override
public int getFieldCount() {
if (fields == null) {
return 0;
}
return fields.size();
}
public boolean isMapEntry() {
DynamicMessage.Value value = this.getOptions().get(MessageParseListener.OPTION_MAP_ENTRY);
return value != null && value.isBooleanType() && value.getBoolean();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy