@Override Type retainAll(Schema schema, MarkSet markSet) { ImmutableList.Builder<Type> retainedNestedTypesBuilder = ImmutableList.builder(); for (Type nestedType : nestedTypes) { Type retainedNestedType = nestedType.retainAll(schema, markSet); if (retainedNestedType != null) { retainedNestedTypesBuilder.add(retainedNestedType); } } ImmutableList<Type> retainedNestedTypes = retainedNestedTypesBuilder.build(); if (!markSet.contains(protoType)) { // If this type is not retained, and none of its nested types are retained, prune it. if (retainedNestedTypes.isEmpty()) { return null; } // If this type is not retained but retained nested types, replace it with an enclosing type. return new EnclosingType(location, protoType, documentation, retainedNestedTypes); } ImmutableList.Builder<OneOf> retainedOneOfsBuilder = ImmutableList.builder(); for (OneOf oneOf : oneOfs) { OneOf retainedOneOf = oneOf.retainAll(schema, markSet, protoType); if (retainedOneOf != null) { retainedOneOfsBuilder.add(retainedOneOf); } } ImmutableList<OneOf> retainedOneOfs = retainedOneOfsBuilder.build(); return new MessageType(protoType, location, documentation, name, Field.retainAll(schema, markSet, protoType, declaredFields), Field.retainAll(schema, markSet, protoType, extensionFields), retainedOneOfs, retainedNestedTypes, extensionsList, reserveds, options.retainAll(schema, markSet)); }
static MessageType fromElement(String packageName, ProtoType protoType, MessageElement messageElement) { if (!messageElement.groups().isEmpty()) { GroupElement group = messageElement.groups().get(0); throw new IllegalStateException(group.location() + ": 'group' is not supported"); } ImmutableList<Field> declaredFields = Field.fromElements(packageName, messageElement.fields(), false); // Extension fields be populated during linking. List<Field> extensionFields = new ArrayList<>(); ImmutableList<OneOf> oneOfs = OneOf.fromElements(packageName, messageElement.oneOfs(), false); ImmutableList.Builder<Type> nestedTypes = ImmutableList.builder(); for (TypeElement nestedType : messageElement.nestedTypes()) { nestedTypes.add(Type.get(packageName, protoType.nestedType(nestedType.name()), nestedType)); } ImmutableList<Extensions> extensionsList = Extensions.fromElements(messageElement.extensions()); ImmutableList<Reserved> reserveds = Reserved.fromElements(messageElement.reserveds()); Options options = new Options(Options.MESSAGE_OPTIONS, messageElement.options()); return new MessageType(protoType, messageElement.location(), messageElement.documentation(), messageElement.name(), declaredFields, extensionFields, oneOfs, nestedTypes.build(), extensionsList, reserveds, options); }
@Override Type retainAll(Schema schema, MarkSet markSet) { ImmutableList.Builder<Type> retainedNestedTypesBuilder = ImmutableList.builder(); for (Type nestedType : nestedTypes) { Type retainedNestedType = nestedType.retainAll(schema, markSet); if (retainedNestedType != null) { retainedNestedTypesBuilder.add(retainedNestedType); } } ImmutableList<Type> retainedNestedTypes = retainedNestedTypesBuilder.build(); if (!markSet.contains(protoType)) { // If this type is not retained, and none of its nested types are retained, prune it. if (retainedNestedTypes.isEmpty()) { return null; } // If this type is not retained but retained nested types, replace it with an enclosing type. return new EnclosingType(location, protoType, documentation, retainedNestedTypes); } ImmutableList.Builder<OneOf> retainedOneOfsBuilder = ImmutableList.builder(); for (OneOf oneOf : oneOfs) { OneOf retainedOneOf = oneOf.retainAll(schema, markSet, protoType); if (retainedOneOf != null) { retainedOneOfsBuilder.add(retainedOneOf); } } ImmutableList<OneOf> retainedOneOfs = retainedOneOfsBuilder.build(); return new MessageType(protoType, location, documentation, name, Field.retainAll(schema, markSet, protoType, declaredFields), Field.retainAll(schema, markSet, protoType, extensionFields), retainedOneOfs, retainedNestedTypes, extensionsList, reserveds, options.retainAll(schema, markSet)); }
@Override Type retainAll(Schema schema, MarkSet markSet) { ImmutableList.Builder<Type> retainedNestedTypesBuilder = ImmutableList.builder(); for (Type nestedType : nestedTypes) { Type retainedNestedType = nestedType.retainAll(schema, markSet); if (retainedNestedType != null) { retainedNestedTypesBuilder.add(retainedNestedType); } } ImmutableList<Type> retainedNestedTypes = retainedNestedTypesBuilder.build(); if (!markSet.contains(protoType)) { // If this type is not retained, and none of its nested types are retained, prune it. if (retainedNestedTypes.isEmpty()) { return null; } // If this type is not retained but retained nested types, replace it with an enclosing type. return new EnclosingType(location, protoType, documentation, retainedNestedTypes); } ImmutableList.Builder<OneOf> retainedOneOfsBuilder = ImmutableList.builder(); for (OneOf oneOf : oneOfs) { OneOf retainedOneOf = oneOf.retainAll(schema, markSet, protoType); if (retainedOneOf != null) { retainedOneOfsBuilder.add(retainedOneOf); } } ImmutableList<OneOf> retainedOneOfs = retainedOneOfsBuilder.build(); return new MessageType(protoType, location, documentation, name, Field.retainAll(schema, markSet, protoType, declaredFields), Field.retainAll(schema, markSet, protoType, extensionFields), retainedOneOfs, retainedNestedTypes, extensionsList, reserveds, options.retainAll(schema, markSet)); }
static MessageType fromElement(String packageName, ProtoType protoType, MessageElement messageElement) { if (!messageElement.groups().isEmpty()) { throw new IllegalStateException("'group' is not supported"); } ImmutableList<Field> declaredFields = Field.fromElements(packageName, messageElement.fields(), false); // Extension fields be populated during linking. List<Field> extensionFields = new ArrayList<>(); ImmutableList<OneOf> oneOfs = OneOf.fromElements(packageName, messageElement.oneOfs(), false); ImmutableList.Builder<Type> nestedTypes = ImmutableList.builder(); for (TypeElement nestedType : messageElement.nestedTypes()) { nestedTypes.add(Type.get(packageName, protoType.nestedType(nestedType.name()), nestedType)); } ImmutableList<Extensions> extensionsList = Extensions.fromElements(messageElement.extensions()); ImmutableList<Reserved> reserveds = Reserved.fromElements(messageElement.reserveds()); Options options = new Options(Options.MESSAGE_OPTIONS, messageElement.options()); return new MessageType(protoType, messageElement.location(), messageElement.documentation(), messageElement.name(), declaredFields, extensionFields, oneOfs, nestedTypes.build(), extensionsList, reserveds, options); }
static MessageType fromElement(String packageName, ProtoType protoType, MessageElement messageElement) { if (!messageElement.groups().isEmpty()) { throw new IllegalStateException("'group' is not supported"); } ImmutableList<Field> declaredFields = Field.fromElements(packageName, messageElement.fields(), false); // Extension fields be populated during linking. List<Field> extensionFields = new ArrayList<>(); ImmutableList<OneOf> oneOfs = OneOf.fromElements(packageName, messageElement.oneOfs(), false); ImmutableList.Builder<Type> nestedTypes = ImmutableList.builder(); for (TypeElement nestedType : messageElement.nestedTypes()) { nestedTypes.add(Type.get(packageName, protoType.nestedType(nestedType.name()), nestedType)); } ImmutableList<Extensions> extensionsList = Extensions.fromElements(messageElement.extensions()); ImmutableList<Reserved> reserveds = Reserved.fromElements(messageElement.reserveds()); Options options = new Options(Options.MESSAGE_OPTIONS, messageElement.options()); return new MessageType(protoType, messageElement.location(), messageElement.documentation(), messageElement.name(), declaredFields, extensionFields, oneOfs, nestedTypes.build(), extensionsList, reserveds, options); }